Showing 4,645 of 4,645 total issues
FIXME found Open
Open
//FIXME if (matchData != null) {
- Exclude checks
TODO found Open
Open
// TODO Auto-generated method stub
- Exclude checks
TODO found Open
Open
// TODO Auto-generated method stub
- Exclude checks
TODO found Open
Open
// TODO Auto-generated method stub
- Exclude checks
FIXME found Open
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('<', '<').replace('>', '>') + ') ' + 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 = '⋁';\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 = '⋀';\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 = '⇥ 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 = ' ';\r\n btn.className = 'vkbuttonSpace';\r\n } else if (keyTag === '{left}') {\r\n btn.innerHTML = '←';\r\n } else if (keyTag === '{right}') {\r\n btn.innerHTML = '→';\r\n } else if (keyTag === '{up}') {\r\n btn.innerHTML = '↑';\r\n } else if (keyTag === '{down}') {\r\n btn.innerHTML = '↓';\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('<', '<');\r\n text = text.replace('>', '>');\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":""}
- Exclude checks
TODO found Open
Open
// TODO Auto-generated method stub
- Exclude checks
TODO found Open
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('<', '<').replace('>', '>') + ') ' + 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 = '⋁';\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 = '⋀';\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 = '⇥ 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 = ' ';\r\n btn.className = 'vkbuttonSpace';\r\n } else if (keyTag === '{left}') {\r\n btn.innerHTML = '←';\r\n } else if (keyTag === '{right}') {\r\n btn.innerHTML = '→';\r\n } else if (keyTag === '{up}') {\r\n btn.innerHTML = '↑';\r\n } else if (keyTag === '{down}') {\r\n btn.innerHTML = '↓';\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('<', '<');\r\n text = text.replace('>', '>');\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":""}
- Exclude checks
FIXME found Open
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('<', '<').replace('>', '>') + ') ' + 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 = '⋁';\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 = '⋀';\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 = '⇥ 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 = ' ';\r\n btn.className = 'vkbuttonSpace';\r\n } else if (keyTag === '{left}') {\r\n btn.innerHTML = '←';\r\n } else if (keyTag === '{right}') {\r\n btn.innerHTML = '→';\r\n } else if (keyTag === '{up}') {\r\n btn.innerHTML = '↑';\r\n } else if (keyTag === '{down}') {\r\n btn.innerHTML = '↓';\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('<', '<');\r\n text = text.replace('>', '>');\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":""}
- Exclude checks
TODO found Open
Open
// TODO Auto-generated method stub
- Exclude checks
TODO found Open
Open
// TODO Auto-generated method stub
- Exclude checks
TODO found Open
Open
// TODO Auto-generated method stub
- Exclude checks
TODO found Open
Open
// TODO Auto-generated method stub
- Exclude checks
FIXME found Open
Open
!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/[&<>]/gm,function(e){return I[e]})}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function i(e){return k.test(e)}function a(e){var n,t,r,a,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=B.exec(o))return R(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(a=o[n],i(a)||R(a))return a}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,i){for(var a=e.firstChild;a;a=a.nextSibling)3===a.nodeType?i+=a.nodeValue.length:1===a.nodeType&&(n.push({event:"start",offset:i,node:a}),i=r(a,i),t(a).match(/br|hr|img|input/)||n.push({event:"stop",offset:i,node:a}));return i}(e,0),n}function c(e,r,i){function a(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset<r[0].offset?e:r:"start"===r[0].event?e:r:e.length?e:r}function o(e){function r(e){return" "+e.nodeName+'="'+n(e.value)+'"'}l+="<"+t(e)+w.map.call(e.attributes,r).join("")+">"}function u(e){l+="</"+t(e)+">"}function c(e){("start"===e.event?o:u)(e.node)}for(var s=0,l="",f=[];e.length||r.length;){var g=a();if(l+=n(i.substring(s,g[0].offset)),s=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=a();while(g===e&&g.length&&g[0].offset===s);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return l+n(i.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(i,a){if(!i.compiled){if(i.compiled=!0,i.k=i.k||i.bK,i.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof i.k?c("keyword",i.k):E(i.k).forEach(function(e){c(e,i.k[e])}),i.k=u}i.lR=t(i.l||/\w+/,!0),a&&(i.bK&&(i.b="\\b("+i.bK.split(" ").join("|")+")\\b"),i.b||(i.b=/\B|\b/),i.bR=t(i.b),i.e||i.eW||(i.e=/\B|\b/),i.e&&(i.eR=t(i.e)),i.tE=n(i.e)||"",i.eW&&a.tE&&(i.tE+=(i.e?"|":"")+a.tE)),i.i&&(i.iR=t(i.i)),null==i.r&&(i.r=1),i.c||(i.c=[]);var s=[];i.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"===e?i:e)}),i.c=s,i.c.forEach(function(e){r(e,i)}),i.starts&&r(i.starts,a);var l=i.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([i.tE,i.i]).map(n).filter(Boolean);i.t=l.length?t(l.join("|"),!0):{exec:function(){return null}}}}r(e)}function l(e,t,i,a){function o(e,n){var t,i;for(t=0,i=n.c.length;i>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!i&&r(n.iR,e)}function g(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function h(e,n,t,r){var i=r?"":y.classPrefix,a='<span class="'+i,o=t?"":C;return a+=e+'">',a+n+o}function p(){var e,t,r,i;if(!E.k)return n(B);for(i="",t=0,E.lR.lastIndex=0,r=E.lR.exec(B);r;)i+=n(B.substring(t,r.index)),e=g(E,r),e?(M+=e[1],i+=h(e[0],n(r[0]))):i+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(B);return i+n(B.substr(t))}function d(){var e="string"==typeof E.sL;if(e&&!x[E.sL])return n(B);var t=e?l(E.sL,B,!0,L[E.sL]):f(B,E.sL.length?E.sL:void 0);return E.r>0&&(M+=t.r),e&&(L[E.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){k+=null!=E.sL?d():p(),B=""}function v(e){k+=e.cN?h(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(B+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?B+=n:(t.eB&&(B+=n),b(),t.rB||t.eB||(B=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var i=E;i.skip?B+=n:(i.rE||i.eE||(B+=n),b(),i.eE&&(B=n));do E.cN&&(k+=C),E.skip||(M+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,""),i.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"<unnamed>")+'"');return B+=n,n.length||1}var N=R(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var w,E=a||N,L={},k="";for(w=E;w!==N;w=w.parent)w.cN&&(k=h(w.cN,"",!0)+k);var B="",M=0;try{for(var I,j,O=0;;){if(E.t.lastIndex=O,I=E.t.exec(t),!I)break;j=m(t.substring(O,I.index),I[0]),O=I.index+j}for(m(t.substr(O)),w=E;w.parent;w=w.parent)w.cN&&(k+=C);return{r:M,value:k,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf("Illegal"))return{r:0,value:n(t)};throw T}}function f(e,t){t=t||y.languages||E(x);var r={r:0,value:n(e)},i=r;return t.filter(R).forEach(function(n){var t=l(n,e,!1);t.language=n,t.r>i.r&&(i=t),t.r>r.r&&(i=r,r=t)}),i.language&&(r.second_best=i),r}function g(e){return y.tabReplace||y.useBR?e.replace(M,function(e,n){return y.useBR&&"\n"===e?"<br>":y.tabReplace?n.replace(/\t/g,y.tabReplace):void 0}):e}function h(e,n,t){var r=n?L[n]:t,i=[e.trim()];return e.match(/\bhljs\b/)||i.push("hljs"),-1===e.indexOf(r)&&i.push(r),i.join(" ").trim()}function p(e){var n,t,r,o,s,p=a(e);i(p)||(y.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n")):n=e,s=n.textContent,r=p?l(p,s,!0):f(s),t=u(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=c(t,u(o),s)),r.value=g(r.value),e.innerHTML=r.value,e.className=h(e.className,p,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function d(e){y=o(y,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("pre code");w.forEach.call(e,p)}}function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener("load",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function N(){return E(x)}function R(e){return e=(e||"").toLowerCase(),x[e]||x[L[e]]}var w=[],E=Object.keys,x={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,M=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C="</span>",y={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},I={"&":"&","<":"<",">":">"};return e.highlight=l,e.highlightAuto=f,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=R,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/},e.C=function(n,t,r){var i=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return i.c.push(e.PWM),i.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),i},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("java",function(e){var a="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",t=a+"(<"+a+"(\\s*,\\s*"+a+")*>)?",r="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",s="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",c={cN:"number",b:s,r:0};return{aliases:["jsp"],k:r,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},c,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:c,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage("xml",function(s){var e="[A-Za-z0-9\\._:-]+",t={eW:!0,i:/</,r:0,c:[{cN:"attr",b:e,r:0},{b:/=\s*/,r:0,c:[{cN:"string",endsParent:!0,v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("<!--","-->",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{name:"style"},c:[t],starts:{e:"</style>",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{name:"script"},c:[t],starts:{e:"</script>",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("javascript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},c={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:t,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:r+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:r,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+r+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:r},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b:/</,e:/(\/\w+|\w+\/)>/,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}});
- Exclude checks
FIXME found Open
Open
//FIXME if (matchData != null) {
- Exclude checks
TODO found Open
Open
// TODO Auto-generated method stub
- Exclude checks
BUG found Open
Open
!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/[&<>]/gm,function(e){return I[e]})}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function i(e){return k.test(e)}function a(e){var n,t,r,a,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=B.exec(o))return R(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(a=o[n],i(a)||R(a))return a}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,i){for(var a=e.firstChild;a;a=a.nextSibling)3===a.nodeType?i+=a.nodeValue.length:1===a.nodeType&&(n.push({event:"start",offset:i,node:a}),i=r(a,i),t(a).match(/br|hr|img|input/)||n.push({event:"stop",offset:i,node:a}));return i}(e,0),n}function c(e,r,i){function a(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset<r[0].offset?e:r:"start"===r[0].event?e:r:e.length?e:r}function o(e){function r(e){return" "+e.nodeName+'="'+n(e.value)+'"'}l+="<"+t(e)+w.map.call(e.attributes,r).join("")+">"}function u(e){l+="</"+t(e)+">"}function c(e){("start"===e.event?o:u)(e.node)}for(var s=0,l="",f=[];e.length||r.length;){var g=a();if(l+=n(i.substring(s,g[0].offset)),s=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=a();while(g===e&&g.length&&g[0].offset===s);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return l+n(i.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(i,a){if(!i.compiled){if(i.compiled=!0,i.k=i.k||i.bK,i.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof i.k?c("keyword",i.k):E(i.k).forEach(function(e){c(e,i.k[e])}),i.k=u}i.lR=t(i.l||/\w+/,!0),a&&(i.bK&&(i.b="\\b("+i.bK.split(" ").join("|")+")\\b"),i.b||(i.b=/\B|\b/),i.bR=t(i.b),i.e||i.eW||(i.e=/\B|\b/),i.e&&(i.eR=t(i.e)),i.tE=n(i.e)||"",i.eW&&a.tE&&(i.tE+=(i.e?"|":"")+a.tE)),i.i&&(i.iR=t(i.i)),null==i.r&&(i.r=1),i.c||(i.c=[]);var s=[];i.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"===e?i:e)}),i.c=s,i.c.forEach(function(e){r(e,i)}),i.starts&&r(i.starts,a);var l=i.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([i.tE,i.i]).map(n).filter(Boolean);i.t=l.length?t(l.join("|"),!0):{exec:function(){return null}}}}r(e)}function l(e,t,i,a){function o(e,n){var t,i;for(t=0,i=n.c.length;i>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!i&&r(n.iR,e)}function g(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function h(e,n,t,r){var i=r?"":y.classPrefix,a='<span class="'+i,o=t?"":C;return a+=e+'">',a+n+o}function p(){var e,t,r,i;if(!E.k)return n(B);for(i="",t=0,E.lR.lastIndex=0,r=E.lR.exec(B);r;)i+=n(B.substring(t,r.index)),e=g(E,r),e?(M+=e[1],i+=h(e[0],n(r[0]))):i+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(B);return i+n(B.substr(t))}function d(){var e="string"==typeof E.sL;if(e&&!x[E.sL])return n(B);var t=e?l(E.sL,B,!0,L[E.sL]):f(B,E.sL.length?E.sL:void 0);return E.r>0&&(M+=t.r),e&&(L[E.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){k+=null!=E.sL?d():p(),B=""}function v(e){k+=e.cN?h(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(B+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?B+=n:(t.eB&&(B+=n),b(),t.rB||t.eB||(B=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var i=E;i.skip?B+=n:(i.rE||i.eE||(B+=n),b(),i.eE&&(B=n));do E.cN&&(k+=C),E.skip||(M+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,""),i.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"<unnamed>")+'"');return B+=n,n.length||1}var N=R(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var w,E=a||N,L={},k="";for(w=E;w!==N;w=w.parent)w.cN&&(k=h(w.cN,"",!0)+k);var B="",M=0;try{for(var I,j,O=0;;){if(E.t.lastIndex=O,I=E.t.exec(t),!I)break;j=m(t.substring(O,I.index),I[0]),O=I.index+j}for(m(t.substr(O)),w=E;w.parent;w=w.parent)w.cN&&(k+=C);return{r:M,value:k,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf("Illegal"))return{r:0,value:n(t)};throw T}}function f(e,t){t=t||y.languages||E(x);var r={r:0,value:n(e)},i=r;return t.filter(R).forEach(function(n){var t=l(n,e,!1);t.language=n,t.r>i.r&&(i=t),t.r>r.r&&(i=r,r=t)}),i.language&&(r.second_best=i),r}function g(e){return y.tabReplace||y.useBR?e.replace(M,function(e,n){return y.useBR&&"\n"===e?"<br>":y.tabReplace?n.replace(/\t/g,y.tabReplace):void 0}):e}function h(e,n,t){var r=n?L[n]:t,i=[e.trim()];return e.match(/\bhljs\b/)||i.push("hljs"),-1===e.indexOf(r)&&i.push(r),i.join(" ").trim()}function p(e){var n,t,r,o,s,p=a(e);i(p)||(y.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n")):n=e,s=n.textContent,r=p?l(p,s,!0):f(s),t=u(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=c(t,u(o),s)),r.value=g(r.value),e.innerHTML=r.value,e.className=h(e.className,p,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function d(e){y=o(y,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("pre code");w.forEach.call(e,p)}}function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener("load",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function N(){return E(x)}function R(e){return e=(e||"").toLowerCase(),x[e]||x[L[e]]}var w=[],E=Object.keys,x={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,M=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C="</span>",y={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},I={"&":"&","<":"<",">":">"};return e.highlight=l,e.highlightAuto=f,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=R,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/},e.C=function(n,t,r){var i=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return i.c.push(e.PWM),i.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),i},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("java",function(e){var a="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",t=a+"(<"+a+"(\\s*,\\s*"+a+")*>)?",r="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",s="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",c={cN:"number",b:s,r:0};return{aliases:["jsp"],k:r,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},c,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:c,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage("xml",function(s){var e="[A-Za-z0-9\\._:-]+",t={eW:!0,i:/</,r:0,c:[{cN:"attr",b:e,r:0},{b:/=\s*/,r:0,c:[{cN:"string",endsParent:!0,v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("<!--","-->",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{name:"style"},c:[t],starts:{e:"</style>",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{name:"script"},c:[t],starts:{e:"</script>",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("javascript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},c={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:t,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:r+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:r,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+r+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:r},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b:/</,e:/(\/\w+|\w+\/)>/,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}});
- Exclude checks
FIXME found Open
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('<', '<').replace('>', '>') + ') ' + 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 = '⋁';\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 = '⋀';\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 = '⇥ 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 = ' ';\r\n btn.className = 'vkbuttonSpace';\r\n } else if (keyTag === '{left}') {\r\n btn.innerHTML = '←';\r\n } else if (keyTag === '{right}') {\r\n btn.innerHTML = '→';\r\n } else if (keyTag === '{up}') {\r\n btn.innerHTML = '↑';\r\n } else if (keyTag === '{down}') {\r\n btn.innerHTML = '↓';\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('<', '<');\r\n text = text.replace('>', '>');\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":""}
- Exclude checks
FIXME found Open
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('<', '<').replace('>', '>') + ') ' + 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 = '⋁';\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 = '⋀';\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 = '⇥ 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 = ' ';\r\n btn.className = 'vkbuttonSpace';\r\n } else if (keyTag === '{left}') {\r\n btn.innerHTML = '←';\r\n } else if (keyTag === '{right}') {\r\n btn.innerHTML = '→';\r\n } else if (keyTag === '{up}') {\r\n btn.innerHTML = '↑';\r\n } else if (keyTag === '{down}') {\r\n btn.innerHTML = '↓';\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('<', '<');\r\n text = text.replace('>', '>');\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":""}
- Exclude checks
FIXME found Open
Open
/* FIXME nextEntity.withPreComment(preCommentStartPos, preCommentEndPos); */
- Exclude checks
TODO found Open
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('<', '<').replace('>', '>') + ') ' + 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 = '⋁';\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 = '⋀';\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 = '⇥ 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 = ' ';\r\n btn.className = 'vkbuttonSpace';\r\n } else if (keyTag === '{left}') {\r\n btn.innerHTML = '←';\r\n } else if (keyTag === '{right}') {\r\n btn.innerHTML = '→';\r\n } else if (keyTag === '{up}') {\r\n btn.innerHTML = '↑';\r\n } else if (keyTag === '{down}') {\r\n btn.innerHTML = '↓';\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('<', '<');\r\n text = text.replace('>', '>');\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":""}
- Exclude checks