Commit f1f34de64402376f95d3478c582df428186aa139

Authored by xp.Huang
2 parents cc5bbe36 2618f8ee

Merge branch 'ww' into 'main'

feat: implement variable image

See merge request huang/thingskit-drawio!22

Too many changes to show.

To preserve performance only 8 of 10 files are displayed.

7.17 KB | W: | H:

36.2 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
@@ -126,4 +126,12 @@ class ConfigurationNodeApi { @@ -126,4 +126,12 @@ class ConfigurationNodeApi {
126 return defHttp.get(`/plugins/telemetry/DEVICE/${deviceId}/values/attributes?keys=active`) 126 return defHttp.get(`/plugins/telemetry/DEVICE/${deviceId}/values/attributes?keys=active`)
127 } 127 }
128 128
  129 + /**
  130 + * @description 上传图片
  131 + * @param data
  132 + * @returns {*}
  133 + */
  134 + static uploadImg(data){
  135 + return defHttp.post('/yt/oss/upload', data)
  136 + }
129 } 137 }
1 -(function()  
2 -{ 1 +(function () {
3 /** 2 /**
4 * Download from following URL as TSV and convert using https://jgraph.github.io/drawio-tools/tools/convert.html: 3 * Download from following URL as TSV and convert using https://jgraph.github.io/drawio-tools/tools/convert.html:
5 * https://docs.google.com/spreadsheets/d/1sAL1zn-UtmJtKPH4cLApGjRX-TRSJa5dYdfZ9NKYfRs 4 * https://docs.google.com/spreadsheets/d/1sAL1zn-UtmJtKPH4cLApGjRX-TRSJa5dYdfZ9NKYfRs
@@ -12,24 +11,24 @@ @@ -12,24 +11,24 @@
12 * copy the output of searchFileData from the browser console to the variable below. 11 * copy the output of searchFileData from the browser console to the variable below.
13 */ 12 */
14 Sidebar.prototype.searchIndexData = '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'; 13 Sidebar.prototype.searchIndexData = '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';
15 - 14 +
16 /** 15 /**
17 * Overrides gear image URL. 16 * Overrides gear image URL.
18 */ 17 */
19 Sidebar.prototype.gearImage = GRAPH_IMAGE_PATH + '/clipart/Gear_128x128.png'; 18 Sidebar.prototype.gearImage = GRAPH_IMAGE_PATH + '/clipart/Gear_128x128.png';
20 - 19 +
21 /** 20 /**
22 * Aliases for IDs in the libs parameter. 21 * Aliases for IDs in the libs parameter.
23 */ 22 */
24 - Sidebar.prototype.libAliases = {'aws2': 'aws3', 'gcp' : 'gcp2'};  
25 - 23 + Sidebar.prototype.libAliases = { 'aws2': 'aws3', 'gcp': 'gcp2' };
  24 +
26 /** 25 /**
27 - * 26 + *
28 */ 27 */
29 Sidebar.prototype.defaultEntries = 'component;fan;engine;valve;controller;light;button;conduit;instrument;sewage'; 28 Sidebar.prototype.defaultEntries = 'component;fan;engine;valve;controller;light;button;conduit;instrument;sewage';
30 - 29 +
31 /** 30 /**
32 - * Library definitions 31 + * Library definitions
33 */ 32 */
34 Sidebar.prototype.signs = ['Animals', 'Food', 'Healthcare', 'Nature', 'People', 'Safety', 'Science', 'Sports', 'Tech', 'Transportation', 'Travel']; 33 Sidebar.prototype.signs = ['Animals', 'Food', 'Healthcare', 'Nature', 'People', 'Safety', 'Science', 'Sports', 'Tech', 'Transportation', 'Travel'];
35 34
@@ -38,48 +37,48 @@ @@ -38,48 +37,48 @@
38 Sidebar.prototype.allied_telesis = ['Buildings', 'Computer and Terminals', 'Media Converters', 'Security', 'Storage', 'Switch', 'Wireless']; 37 Sidebar.prototype.allied_telesis = ['Buildings', 'Computer and Terminals', 'Media Converters', 'Security', 'Storage', 'Switch', 'Wireless'];
39 38
40 Sidebar.prototype.gcp = ['Cards', 'Big Data', 'Compute', 'Developer Tools', 'Extras', 'Identity and Security', 'Machine Learning', 'Management Tools', 'Networking', 'Storage Databases']; 39 Sidebar.prototype.gcp = ['Cards', 'Big Data', 'Compute', 'Developer Tools', 'Extras', 'Identity and Security', 'Machine Learning', 'Management Tools', 'Networking', 'Storage Databases'];
41 - 40 +
42 Sidebar.prototype.gcp2 = ['Paths', 'Zones', 'Service Cards', 'Compute', 'API Management', 'Security', 'Data Analytics', 'Data Transfer', 'Cloud AI', 'Internet of Things', 'Databases', 'Storage', 'Management Tools', 'Networking', 'Developer Tools', 'Expanded Product Cards', 'User Device Cards', 'Product Cards', 'General Icons', 'Icons AI Machine Learning', 'Icons Compute', 'Icons Data Analytics', 'Icons Management Tools', 'Icons Networking', 'Icons Developer Tools', 'Icons API Management', 'Icons Internet of Things', 'Icons Databases', 'Icons Storage', 'Icons Security', 'Icons Migration', 'Icons Hybrid and Multi Cloud']; 41 Sidebar.prototype.gcp2 = ['Paths', 'Zones', 'Service Cards', 'Compute', 'API Management', 'Security', 'Data Analytics', 'Data Transfer', 'Cloud AI', 'Internet of Things', 'Databases', 'Storage', 'Management Tools', 'Networking', 'Developer Tools', 'Expanded Product Cards', 'User Device Cards', 'Product Cards', 'General Icons', 'Icons AI Machine Learning', 'Icons Compute', 'Icons Data Analytics', 'Icons Management Tools', 'Icons Networking', 'Icons Developer Tools', 'Icons API Management', 'Icons Internet of Things', 'Icons Databases', 'Icons Storage', 'Icons Security', 'Icons Migration', 'Icons Hybrid and Multi Cloud'];
43 - 42 +
44 Sidebar.prototype.gcpicons = ['AI and Machine Learning', 'API Management', 'Compute', 'Data Analytics', 'Databases', 'Developer Tools', 'Expanded Product Card Icons', 'Generic', 'Hybrid and Multi Cloud', 'Security', 'Internet of Things', 'Management Tools', 'Migration', 'Networking', 'Open Source Icons', 'Storage']; 43 Sidebar.prototype.gcpicons = ['AI and Machine Learning', 'API Management', 'Compute', 'Data Analytics', 'Databases', 'Developer Tools', 'Expanded Product Card Icons', 'Generic', 'Hybrid and Multi Cloud', 'Security', 'Internet of Things', 'Management Tools', 'Migration', 'Networking', 'Open Source Icons', 'Storage'];
45 -  
46 - Sidebar.prototype.rack = ['General', 'APC', 'Cisco', 'Dell', 'F5', 'HP', 'HPE Aruba Gateways Controllers', 'HPE Aruba Security', 'HPE Aruba Switches', 'IBM', 'Oracle'];  
47 -  
48 - Sidebar.prototype.pids = ['Agitators', 'Apparatus Elements', 'Centrifuges', 'Compressors', 'Compressors ISO', 'Crushers Grinding',  
49 - 'Driers', 'Engines', 'Feeders', 'Filters', 'Fittings', 'Flow Sensors', 'Heat Exchangers', 'Instruments', 'Misc',  
50 - 'Mixers', 'Piping', 'Pumps', 'Pumps DIN', 'Pumps ISO', 'Separators', 'Shaping Machines', 'Valves', 'Vessels']; 44 +
  45 + Sidebar.prototype.rack = ['General', 'APC', 'Cisco', 'Dell', 'F5', 'HP', 'HPE Aruba Gateways Controllers', 'HPE Aruba Security', 'HPE Aruba Switches', 'IBM', 'Oracle'];
  46 +
  47 + Sidebar.prototype.pids = ['Agitators', 'Apparatus Elements', 'Centrifuges', 'Compressors', 'Compressors ISO', 'Crushers Grinding',
  48 + 'Driers', 'Engines', 'Feeders', 'Filters', 'Fittings', 'Flow Sensors', 'Heat Exchangers', 'Instruments', 'Misc',
  49 + 'Mixers', 'Piping', 'Pumps', 'Pumps DIN', 'Pumps ISO', 'Separators', 'Shaping Machines', 'Valves', 'Vessels'];
51 50
52 Sidebar.prototype.cisco = ['Buildings', 'Computers and Peripherals', 'Controllers and Modules', 'Directors', 'Hubs and Gateways', 'Misc', 51 Sidebar.prototype.cisco = ['Buildings', 'Computers and Peripherals', 'Controllers and Modules', 'Directors', 'Hubs and Gateways', 'Misc',
53 - 'Modems and Phones', 'People', 'Routers', 'Security', 'Servers', 'Storage', 'Switches', 'Wireless'];  
54 - 52 + 'Modems and Phones', 'People', 'Routers', 'Security', 'Servers', 'Storage', 'Switches', 'Wireless'];
  53 +
55 Sidebar.prototype.cisco19 = ['LAN Switching', 'Routing WAN', 'Network Management', 'Data Center', 'Wireless LAN', 'Collaboration', 'Security Clouds Connectors', 'Endpoint Client Device Icons', 'DNA SD Access', 'SD WAN Viptela', 'ETA Stealthwatch', 'SAFE']; 54 Sidebar.prototype.cisco19 = ['LAN Switching', 'Routing WAN', 'Network Management', 'Data Center', 'Wireless LAN', 'Collaboration', 'Security Clouds Connectors', 'Endpoint Client Device Icons', 'DNA SD Access', 'SD WAN Viptela', 'ETA Stealthwatch', 'SAFE'];
56 55
57 Sidebar.prototype.cisco_safe = ['Architecture', 'Business Icons', 'Capability', 'Design', 'IoT Things Icons', 'People Places Things Icons', 'Security Icons', 'Technology Icons', 'Threat']; 56 Sidebar.prototype.cisco_safe = ['Architecture', 'Business Icons', 'Capability', 'Design', 'IoT Things Icons', 'People Places Things Icons', 'Security Icons', 'Technology Icons', 'Threat'];
58 -  
59 - Sidebar.prototype.sysml = ['Model Elements', 'Blocks', 'Ports and Flows', 'Constraint Blocks', 'Activities', 'Interactions', 'State Machines',  
60 - 'Use Cases', 'Allocations', 'Requirements', 'Profiles', 'Stereotypes'];  
61 57
62 - Sidebar.prototype.eip = ['Message Construction', 'Message Routing', 'Message Transformation', 'Messaging Channels', 'Messaging Endpoints',  
63 - 'Messaging Systems', 'System Management']; 58 + Sidebar.prototype.sysml = ['Model Elements', 'Blocks', 'Ports and Flows', 'Constraint Blocks', 'Activities', 'Interactions', 'State Machines',
  59 + 'Use Cases', 'Allocations', 'Requirements', 'Profiles', 'Stereotypes'];
  60 +
  61 + Sidebar.prototype.eip = ['Message Construction', 'Message Routing', 'Message Transformation', 'Messaging Channels', 'Messaging Endpoints',
  62 + 'Messaging Systems', 'System Management'];
64 63
65 - Sidebar.prototype.gmdl = ['Bottom Navigation', 'Bottom Sheets', 'Buttons', 'Cards', 'Chips', 'Dialogs', 'Dividers', 'Grid Lists', 'Icons', 'Lists', 'Menus', 'Misc', 'Pickers',  
66 - 'Selection Controls', 'Sliders', 'Steppers', 'Tabs', 'Text Fields']; 64 + Sidebar.prototype.gmdl = ['Bottom Navigation', 'Bottom Sheets', 'Buttons', 'Cards', 'Chips', 'Dialogs', 'Dividers', 'Grid Lists', 'Icons', 'Lists', 'Menus', 'Misc', 'Pickers',
  65 + 'Selection Controls', 'Sliders', 'Steppers', 'Tabs', 'Text Fields'];
67 66
68 - Sidebar.prototype.aws2 = ['Analytics', 'Application Services', 'Compute', 'Database', 'Developer Tools', 'Enterprise Applications', 'Game Development', 'General', 'Internet of Things',  
69 - 'Management Tools', 'Mobile Services', 'Networking', 'On-Demand Workforce', 'SDKs', 'Security and Identity', 'Storage and Content Delivery', 'Groups']; 67 + Sidebar.prototype.aws2 = ['Analytics', 'Application Services', 'Compute', 'Database', 'Developer Tools', 'Enterprise Applications', 'Game Development', 'General', 'Internet of Things',
  68 + 'Management Tools', 'Mobile Services', 'Networking', 'On-Demand Workforce', 'SDKs', 'Security and Identity', 'Storage and Content Delivery', 'Groups'];
  69 +
  70 + Sidebar.prototype.aws3 = ['Analytics', 'Application Services', 'Artificial Intelligence', 'Business Productivity', 'Compute', 'Contact Center', 'Database', 'Desktop and App Streaming', 'Developer Tools',
  71 + 'Game Development', 'General', 'Groups', 'Internet of Things',
  72 + 'Management Tools', 'Messaging', 'Migration', 'Mobile Services', 'Networking and Content Delivery', 'On Demand Workforce', 'SDKs', 'Security Identity and Compliance', 'Storage'];
70 73
71 - Sidebar.prototype.aws3 = ['Analytics', 'Application Services', 'Artificial Intelligence', 'Business Productivity', 'Compute', 'Contact Center', 'Database', 'Desktop and App Streaming', 'Developer Tools',  
72 - 'Game Development', 'General', 'Groups', 'Internet of Things',  
73 - 'Management Tools', 'Messaging', 'Migration', 'Mobile Services', 'Networking and Content Delivery', 'On Demand Workforce', 'SDKs', 'Security Identity and Compliance', 'Storage'];  
74 -  
75 Sidebar.prototype.aws4b = ['Arrows', 'General Resources', 'Illustrations', 'Groups Light', 'Groups Dark', 'Analytics', 'Application Integration', 'AR VR', 'Cost Management', 'Business Productivity', 'Compute', 'Customer Engagement', 74 Sidebar.prototype.aws4b = ['Arrows', 'General Resources', 'Illustrations', 'Groups Light', 'Groups Dark', 'Analytics', 'Application Integration', 'AR VR', 'Cost Management', 'Business Productivity', 'Compute', 'Customer Engagement',
76 - 'Database', 'Desktop App Streaming', 'Developer Tools', 'Game Development', 'Internet of Things', 'IoT Things', 'IoT Resources', 'Machine Learning', 'Management Tools',  
77 - 'Media Services', 'Migration', 'Mobile Services', 'Network Content Delivery', 'Security Identity Compliance', 'Storage'];  
78 -  
79 - Sidebar.prototype.aws4 = ['Arrows', 'General Resources', 'Illustrations', 'Groups', 'Analytics', 'Application Integration', 'AR VR', 'Cost Management', 'Blockchain',  
80 - 'Business Applications', 'Compute', 'Containers', 'Customer Enablement', 'Customer Engagement',  
81 - 'Database', 'Developer Tools', 'End User Computing', 'Front End Web Mobile', 'Game Tech', 'Internet of Things', 'IoT Things', 'IoT Resources', 'Machine Learning', 'Management Governance',  
82 - 'Media Services', 'Migration Transfer', 'Network Content Delivery', 'Quantum Technologies', 'Robotics', 'Satellite', 'Serverless', 'Security Identity Compliance', 'Storage']; 75 + 'Database', 'Desktop App Streaming', 'Developer Tools', 'Game Development', 'Internet of Things', 'IoT Things', 'IoT Resources', 'Machine Learning', 'Management Tools',
  76 + 'Media Services', 'Migration', 'Mobile Services', 'Network Content Delivery', 'Security Identity Compliance', 'Storage'];
  77 +
  78 + Sidebar.prototype.aws4 = ['Arrows', 'General Resources', 'Illustrations', 'Groups', 'Analytics', 'Application Integration', 'AR VR', 'Cost Management', 'Blockchain',
  79 + 'Business Applications', 'Compute', 'Containers', 'Customer Enablement', 'Customer Engagement',
  80 + 'Database', 'Developer Tools', 'End User Computing', 'Front End Web Mobile', 'Game Tech', 'Internet of Things', 'IoT Things', 'IoT Resources', 'Machine Learning', 'Management Governance',
  81 + 'Media Services', 'Migration Transfer', 'Network Content Delivery', 'Quantum Technologies', 'Robotics', 'Satellite', 'Serverless', 'Security Identity Compliance', 'Storage'];
83 82
84 Sidebar.prototype.office = ['Clouds', 'Communications', 'Concepts', 'Databases', 'Devices', 'Security', 'Servers', 'Services', 'Sites', 'Users']; 83 Sidebar.prototype.office = ['Clouds', 'Communications', 'Concepts', 'Databases', 'Devices', 'Security', 'Servers', 'Services', 'Sites', 'Users'];
85 84
@@ -94,7 +93,7 @@ @@ -94,7 +93,7 @@
94 * Description of custom libraries, see https://www.diagrams.net/doc/faq/configure-diagram-editor 93 * Description of custom libraries, see https://www.diagrams.net/doc/faq/configure-diagram-editor
95 */ 94 */
96 Sidebar.prototype.customEntries = null; 95 Sidebar.prototype.customEntries = null;
97 - 96 +
98 /** 97 /**
99 * Array of strings for the built-in libraries to be enabled in the more shapes dialog. Null means all, 98 * Array of strings for the built-in libraries to be enabled in the more shapes dialog. Null means all,
100 * empty array means none, possible keys are listed for the libs parameter at 99 * empty array means none, possible keys are listed for the libs parameter at
@@ -105,92 +104,165 @@ @@ -105,92 +104,165 @@
105 * https://www.diagrams.net/doc/faq/supported-url-parameters 104 * https://www.diagrams.net/doc/faq/supported-url-parameters
106 */ 105 */
107 Sidebar.prototype.enabledLibraries = null; 106 Sidebar.prototype.enabledLibraries = null;
108 - 107 +
109 /** 108 /**
110 * Maximum number of custom libraries to preload into the search index. 109 * Maximum number of custom libraries to preload into the search index.
111 */ 110 */
112 Sidebar.prototype.maxPreloadCount = 20; 111 Sidebar.prototype.maxPreloadCount = 20;
113 112
114 /** 113 /**
  114 + * @description TODO thingsKit 在Sidebar 原型中新增图库信息
  115 + * @type {Map<any, any>}
  116 + */
  117 + Sidebar.prototype.variableImageLib = new Map()
  118 +
  119 + /**
  120 + * @description TODO thingsKit 设置图库信息
  121 + * @param key
  122 + * @param label
  123 + * @param lib
  124 + */
  125 + Sidebar.prototype.setVariableImageLib = function (key, label, lib) {
  126 + this.variableImageLib.set(key, { label, key, lib })
  127 + }
  128 +
  129 + /**
  130 + * @description TODO thingsKit 通过key获取图库中某个类别
  131 + * @param key
  132 + * @returns {{}|*}
  133 + */
  134 + Sidebar.prototype.getVariableImageLib = function (key) {
  135 + return this.variableImageLib.get(key)
  136 + }
  137 +
  138 + /**
  139 + * @description TODO thingsKit 取所有图库信息
  140 + * @returns {*[]}
  141 + */
  142 + Sidebar.prototype.getAllVariableImageLib = function () {
  143 + const arr = []
  144 + for (const value of this.variableImageLib.values()) {
  145 + arr.push(value)
  146 + }
  147 + return arr
  148 + }
  149 +
  150 + /**
  151 + * @description TODO thingsKit 设置cell attributes
  152 + */
  153 + Sidebar.prototype.setCellAttributes = function (cell, attribute) {
  154 + if (Object.prototype.toString.call(attribute) === '[object Object]') {
  155 + Object.keys(attribute).forEach(key => {
  156 + this.graph.setAttributeForCell(cell, key, attribute[key])
  157 + })
  158 + }
  159 + }
  160 +
  161 + /**
  162 + * @description 枚举cell的基本属性
  163 + */
  164 + Sidebar.prototype.enumCellBasicAttribute = {
  165 +
  166 + /**
  167 + * @description 组件类型
  168 + */
  169 + COMPONENT_TYPE: 'componentType'
  170 + }
  171 +
  172 + /**
  173 + * @description 枚举组件类型
  174 + */
  175 + Sidebar.prototype.enumComponentType = {
  176 + /**
  177 + * @description 变量图片类型
  178 + */
  179 + VAR_IMAGE: 'variableImage',
  180 +
  181 + /**
  182 + * @description 图表类型
  183 + */
  184 + CHARTS: 'charts'
  185 + }
  186 +
  187 +
  188 + /**
115 * 各图形库里面要加载的图形 189 * 各图形库里面要加载的图形
116 */ 190 */
117 - Sidebar.prototype.configuration = [{id: 'general', libs: ['general', 'misc', 'advanced']},  
118 - //加入自定义图形ID  
119 - {id:'fan'},{id:'engine'},{id:'valve'},{id:'component'},{id:'controller'},{id:'sewage'},{id:'conduit'},{id: 'light'},{id: 'instrument'},{id: 'button'},  
120 - {id: 'uml'}, {id: 'uml25'}, {id: 'search'}, {id: 'er'},  
121 - {id: 'azure2', prefix: 'azure2', libs: ['AI Machine Learning', 'Analytics', 'App Services', 'Azure Stack', 'Azure VMware Solution', 'Blockchain', 'Compute', 'Containers', 'CXP', 'Databases', 'DevOps', 'General', 'Identity', 'Integration', 'Internet of Things', 'Intune', 'IoT', 'Management Governance', 'Migrate', 'Mixed Reality', 'Monitor', 'Networking', 'Other', 'Preview', 'Security', 'Storage', 'Web']},  
122 - {id: 'ios', prefix: 'ios', libs: [''/*prefix is library*/, '7icons', '7ui']},  
123 - {id: 'android', prefix: 'android', libs: [''/*prefix is library*/]}, {id: 'aws3d'},  
124 - {id: 'flowchart'}, {id: 'basic'}, {id: 'infographic'}, {id: 'arrows'}, {id: 'arrows2'}, {id: 'lean_mapping'}, {id: 'citrix'}, {id: 'azure'}, {id: 'network'}, {id: 'vvd'},  
125 - {id: 'sitemap'}, {id:'c4'}, {id: 'dfd'}, {id: 'threatModeling'}, {id : 'kubernetes'}, {id : 'cisco19', prefix: 'cisco19', libs: Sidebar.prototype.cisco19},  
126 - {id: 'mscae', prefix: 'mscae', libs: ['Companies', 'EnterpriseFlat', 'IntuneFlat', 'OMSFlat', 'System CenterFlat', 'AI and ML Service', 'Analytics Service', 'Compute Service', 'Compute Service VM', 'Container Service', 'Databases Service', 'DevOps Service', 'General Service', 'Identity Service', 'Integration Service', 'Internet of Things Service', 'Intune Service', 'Management and Governance Service', 'Management and Governance Service Media', 'Migrate Service', 'Mixed Reality Service', 'Mobile Service', 'Networking Service', 'Other Category Service', 'Security Service', 'Storage Service', 'Web Service']},  
127 - {id: 'active_directory'},  
128 - {id: 'bpmn2', prefix: 'bpmn2', libs: ['General', 'Tasks', 'Choreographies', 'Events', 'Gateways']},  
129 - {id: 'clipart', prefix: null, libs: ['computer', 'finance', 'clipart', 'networking', 'people', 'telco']},  
130 - {id: 'ibm', prefix: 'ibm', libs: Sidebar.prototype.ibm},  
131 - {id: 'allied_telesis', prefix: 'allied_telesis', libs: Sidebar.prototype.allied_telesis},  
132 - {id: 'cumulus', libs: ['cumulus']},  
133 - {id: 'eip', prefix: 'eip', libs: Sidebar.prototype.eip},  
134 - {id: 'mockups', prefix: 'mockup', libs: ['Buttons', 'Containers', 'Forms', 'Graphics', 'Markup', 'Misc', 'Navigation', 'Text']},  
135 - {id: 'pid2', prefix: 'pid2', libs: ['Agitators', 'Apparatus Elements', 'Centrifuges', 'Compressors', 'Compressors ISO', 'Crushers Grinding',  
136 - 'Driers', 'Engines', 'Feeders', 'Filters', 'Fittings', 'Flow Sensors', 'Heat Exchangers', 'Instruments', 'Misc',  
137 - 'Mixers', 'Piping', 'Pumps', 'Pumps DIN', 'Pumps ISO', 'Separators', 'Shaping Machines', 'Valves', 'Vessels']},  
138 - {id: 'signs', prefix: 'signs', libs: Sidebar.prototype.signs},  
139 - {id: 'gcp', prefix: 'gcp', libs: Sidebar.prototype.gcp},  
140 - {id: 'gcp2', prefix: 'gcp2', libs: Sidebar.prototype.gcp2},  
141 - {id: 'gcpicons', prefix: 'gcpicons', libs: Sidebar.prototype.gcpicons},  
142 - {id: 'rack', prefix: 'rack', libs: Sidebar.prototype.rack},  
143 - {id: 'electrical', prefix: 'electrical', libs: Sidebar.prototype.electrical},  
144 - {id: 'aws2', prefix: 'aws2', libs: Sidebar.prototype.aws2},  
145 - {id: 'aws3', prefix: 'aws3', libs: Sidebar.prototype.aws3},  
146 - {id: 'aws4b', prefix: 'aws4b', libs: Sidebar.prototype.aws4b},  
147 - {id: 'aws4', prefix: 'aws4', libs: Sidebar.prototype.aws4},  
148 - {id: 'pid', prefix: 'pid', libs: Sidebar.prototype.pids},  
149 - {id: 'cisco', prefix: 'cisco', libs: Sidebar.prototype.cisco},  
150 - {id: 'cisco_safe', prefix: 'cisco_safe', libs: Sidebar.prototype.cisco_safe},  
151 - {id: 'office', prefix: 'office', libs: Sidebar.prototype.office},  
152 - {id: 'veeam', prefix: 'veeam', libs: Sidebar.prototype.veeam},  
153 - {id: 'veeam2', prefix: 'veeam2', libs: Sidebar.prototype.veeam2},  
154 - {id: 'cabinets', libs: ['cabinets']},  
155 - {id: 'floorplan', libs: ['floorplan']},  
156 - {id: 'bootstrap', libs: ['bootstrap']},  
157 - {id: 'atlassian', libs: ['atlassian']},  
158 - {id: 'fluid_power', libs: ['fluid_power']},  
159 - {id: 'gmdl', prefix: 'gmdl', libs: Sidebar.prototype.gmdl},  
160 - {id: 'archimate3', prefix: 'archimate3', libs: Sidebar.prototype.archimate3},  
161 - {id: 'archimate', libs: ['archimate']},  
162 - {id: 'webicons', libs: ['webicons', 'weblogos']},  
163 - {id: 'sysml', prefix: 'sysml', libs: Sidebar.prototype.sysml}];  
164 - 191 + Sidebar.prototype.configuration = [
  192 + { id: 'general', libs: ['general', 'misc', 'advanced'] },
  193 + //加入自定义图形ID
  194 + { id: 'fan' }, { id: 'engine' }, { id: 'valve' }, { id: 'component' }, { id: 'controller' }, { id: 'sewage' }, { id: 'conduit' }, { id: 'light' }, { id: 'instrument' }, { id: 'button' },
  195 + { id: 'uml' }, { id: 'uml25' }, { id: 'search' }, { id: 'er' },
  196 + { id: 'azure2', prefix: 'azure2', libs: ['AI Machine Learning', 'Analytics', 'App Services', 'Azure Stack', 'Azure VMware Solution', 'Blockchain', 'Compute', 'Containers', 'CXP', 'Databases', 'DevOps', 'General', 'Identity', 'Integration', 'Internet of Things', 'Intune', 'IoT', 'Management Governance', 'Migrate', 'Mixed Reality', 'Monitor', 'Networking', 'Other', 'Preview', 'Security', 'Storage', 'Web'] },
  197 + { id: 'ios', prefix: 'ios', libs: [''/*prefix is library*/, '7icons', '7ui'] },
  198 + { id: 'android', prefix: 'android', libs: [''/*prefix is library*/] }, { id: 'aws3d' },
  199 + { id: 'flowchart' }, { id: 'basic' }, { id: 'infographic' }, { id: 'arrows' }, { id: 'arrows2' }, { id: 'lean_mapping' }, { id: 'citrix' }, { id: 'azure' }, { id: 'network' }, { id: 'vvd' },
  200 + { id: 'sitemap' }, { id: 'c4' }, { id: 'dfd' }, { id: 'threatModeling' }, { id: 'kubernetes' }, { id: 'cisco19', prefix: 'cisco19', libs: Sidebar.prototype.cisco19 },
  201 + { id: 'mscae', prefix: 'mscae', libs: ['Companies', 'EnterpriseFlat', 'IntuneFlat', 'OMSFlat', 'System CenterFlat', 'AI and ML Service', 'Analytics Service', 'Compute Service', 'Compute Service VM', 'Container Service', 'Databases Service', 'DevOps Service', 'General Service', 'Identity Service', 'Integration Service', 'Internet of Things Service', 'Intune Service', 'Management and Governance Service', 'Management and Governance Service Media', 'Migrate Service', 'Mixed Reality Service', 'Mobile Service', 'Networking Service', 'Other Category Service', 'Security Service', 'Storage Service', 'Web Service'] },
  202 + { id: 'active_directory' },
  203 + { id: 'bpmn2', prefix: 'bpmn2', libs: ['General', 'Tasks', 'Choreographies', 'Events', 'Gateways'] },
  204 + { id: 'clipart', prefix: null, libs: ['computer', 'finance', 'clipart', 'networking', 'people', 'telco'] },
  205 + { id: 'ibm', prefix: 'ibm', libs: Sidebar.prototype.ibm },
  206 + { id: 'allied_telesis', prefix: 'allied_telesis', libs: Sidebar.prototype.allied_telesis },
  207 + { id: 'cumulus', libs: ['cumulus'] },
  208 + { id: 'eip', prefix: 'eip', libs: Sidebar.prototype.eip },
  209 + { id: 'mockups', prefix: 'mockup', libs: ['Buttons', 'Containers', 'Forms', 'Graphics', 'Markup', 'Misc', 'Navigation', 'Text'] },
  210 + {
  211 + id: 'pid2', prefix: 'pid2', libs: ['Agitators', 'Apparatus Elements', 'Centrifuges', 'Compressors', 'Compressors ISO', 'Crushers Grinding',
  212 + 'Driers', 'Engines', 'Feeders', 'Filters', 'Fittings', 'Flow Sensors', 'Heat Exchangers', 'Instruments', 'Misc',
  213 + 'Mixers', 'Piping', 'Pumps', 'Pumps DIN', 'Pumps ISO', 'Separators', 'Shaping Machines', 'Valves', 'Vessels']
  214 + },
  215 + { id: 'signs', prefix: 'signs', libs: Sidebar.prototype.signs },
  216 + { id: 'gcp', prefix: 'gcp', libs: Sidebar.prototype.gcp },
  217 + { id: 'gcp2', prefix: 'gcp2', libs: Sidebar.prototype.gcp2 },
  218 + { id: 'gcpicons', prefix: 'gcpicons', libs: Sidebar.prototype.gcpicons },
  219 + { id: 'rack', prefix: 'rack', libs: Sidebar.prototype.rack },
  220 + { id: 'electrical', prefix: 'electrical', libs: Sidebar.prototype.electrical },
  221 + { id: 'aws2', prefix: 'aws2', libs: Sidebar.prototype.aws2 },
  222 + { id: 'aws3', prefix: 'aws3', libs: Sidebar.prototype.aws3 },
  223 + { id: 'aws4b', prefix: 'aws4b', libs: Sidebar.prototype.aws4b },
  224 + { id: 'aws4', prefix: 'aws4', libs: Sidebar.prototype.aws4 },
  225 + { id: 'pid', prefix: 'pid', libs: Sidebar.prototype.pids },
  226 + { id: 'cisco', prefix: 'cisco', libs: Sidebar.prototype.cisco },
  227 + { id: 'cisco_safe', prefix: 'cisco_safe', libs: Sidebar.prototype.cisco_safe },
  228 + { id: 'office', prefix: 'office', libs: Sidebar.prototype.office },
  229 + { id: 'veeam', prefix: 'veeam', libs: Sidebar.prototype.veeam },
  230 + { id: 'veeam2', prefix: 'veeam2', libs: Sidebar.prototype.veeam2 },
  231 + { id: 'cabinets', libs: ['cabinets'] },
  232 + { id: 'floorplan', libs: ['floorplan'] },
  233 + { id: 'bootstrap', libs: ['bootstrap'] },
  234 + { id: 'atlassian', libs: ['atlassian'] },
  235 + { id: 'fluid_power', libs: ['fluid_power'] },
  236 + { id: 'gmdl', prefix: 'gmdl', libs: Sidebar.prototype.gmdl },
  237 + { id: 'archimate3', prefix: 'archimate3', libs: Sidebar.prototype.archimate3 },
  238 + { id: 'archimate', libs: ['archimate'] },
  239 + { id: 'webicons', libs: ['webicons', 'weblogos'] },
  240 + { id: 'sysml', prefix: 'sysml', libs: Sidebar.prototype.sysml }];
  241 +
165 /** 242 /**
166 * Removes disabled libraries from search results. 243 * Removes disabled libraries from search results.
167 */ 244 */
168 var sidebarAddEntry = Sidebar.prototype.addEntry; 245 var sidebarAddEntry = Sidebar.prototype.addEntry;
169 246
170 - Sidebar.prototype.addEntry = function(tags, fn)  
171 - { 247 + Sidebar.prototype.addEntry = function (tags, fn) {
172 if (this.currentSearchEntryLibrary != null && this.enabledLibraries != null && 248 if (this.currentSearchEntryLibrary != null && this.enabledLibraries != null &&
173 - mxUtils.indexOf(this.enabledLibraries, this.currentSearchEntryLibrary.id) < 0)  
174 - { 249 + mxUtils.indexOf(this.enabledLibraries, this.currentSearchEntryLibrary.id) < 0) {
175 return fn; 250 return fn;
176 } 251 }
177 - else  
178 - { 252 + else {
179 return sidebarAddEntry.apply(this, arguments); 253 return sidebarAddEntry.apply(this, arguments);
180 - } 254 + }
181 }; 255 };
182 256
183 /** 257 /**
184 * Refreshes scratchpad. 258 * Refreshes scratchpad.
185 */ 259 */
186 var sidebarRefresh = Sidebar.prototype.refresh; 260 var sidebarRefresh = Sidebar.prototype.refresh;
187 - Sidebar.prototype.refresh = function()  
188 - { 261 + Sidebar.prototype.refresh = function () {
189 var ui = this.editorUi; 262 var ui = this.editorUi;
190 sidebarRefresh.apply(this, arguments); 263 sidebarRefresh.apply(this, arguments);
191 264
192 - if (ui.scratchpad != null)  
193 - { 265 + if (ui.scratchpad != null) {
194 ui.loadLibrary(new StorageLibrary(ui, 266 ui.loadLibrary(new StorageLibrary(ui,
195 ui.scratchpad.getData(), 267 ui.scratchpad.getData(),
196 '.scratchpad')); 268 '.scratchpad'));
@@ -201,37 +273,30 @@ @@ -201,37 +273,30 @@
201 * Adds hint for quick tutorial video for certain search terms. 273 * Adds hint for quick tutorial video for certain search terms.
202 */ 274 */
203 var siderbarInsertSearchHint = Sidebar.prototype.insertSearchHint; 275 var siderbarInsertSearchHint = Sidebar.prototype.insertSearchHint;
204 -  
205 - Sidebar.prototype.insertSearchHint = function(div, searchTerm, count, page, results, len, more, terms)  
206 - {  
207 - if (terms != null && page == 1)  
208 - { 276 +
  277 + Sidebar.prototype.insertSearchHint = function (div, searchTerm, count, page, results, len, more, terms) {
  278 + if (terms != null && page == 1) {
209 var hintText = null; 279 var hintText = null;
210 - 280 +
211 // Adds hint for text inserts 281 // Adds hint for text inserts
212 - if (mxUtils.indexOf(terms, 'text') >= 0)  
213 - { 282 + if (mxUtils.indexOf(terms, 'text') >= 0) {
214 hintText = 'Double click anywhere in the diagram to insert text.'; 283 hintText = 'Double click anywhere in the diagram to insert text.';
215 } 284 }
216 - else  
217 - { 285 + else {
218 // Checks if any of the following keywords are in the search terms 286 // Checks if any of the following keywords are in the search terms
219 var words = ['line', 'lines', 'arrow', 'arrows', 'connect', 'connection', 'connections', 287 var words = ['line', 'lines', 'arrow', 'arrows', 'connect', 'connection', 'connections',
220 - 'connector', 'connectors', 'curve', 'curves', 'link', 'links', 'directed',  
221 - 'directional', 'bidirectional'];  
222 -  
223 - for (var i = 0; i < words.length; i++)  
224 - {  
225 - if (mxUtils.indexOf(terms, words[i]) >= 0)  
226 - { 288 + 'connector', 'connectors', 'curve', 'curves', 'link', 'links', 'directed',
  289 + 'directional', 'bidirectional'];
  290 +
  291 + for (var i = 0; i < words.length; i++) {
  292 + if (mxUtils.indexOf(terms, words[i]) >= 0) {
227 hintText = 'Need help with connections?'; 293 hintText = 'Need help with connections?';
228 break; 294 break;
229 } 295 }
230 } 296 }
231 } 297 }
232 -  
233 - if (hintText != null && !this.hideSearchHint)  
234 - { 298 +
  299 + if (hintText != null && !this.hideSearchHint) {
235 var link = document.createElement('a'); 300 var link = document.createElement('a');
236 link.setAttribute('href', 'https://youtu.be/Z0D96ZikMkc'); 301 link.setAttribute('href', 'https://youtu.be/Z0D96ZikMkc');
237 link.setAttribute('target', '_blank'); 302 link.setAttribute('target', '_blank');
@@ -240,7 +305,7 @@ @@ -240,7 +305,7 @@
240 'border:1px solid black !important;text-align:center;white-space:normal;' + 305 'border:1px solid black !important;text-align:center;white-space:normal;' +
241 'padding:6px 0px 6px 0px !important;margin:4px 4px 8px 2px;font-size:12px;'; 306 'padding:6px 0px 6px 0px !important;margin:4px 4px 8px 2px;font-size:12px;';
242 mxUtils.write(link, hintText); 307 mxUtils.write(link, hintText);
243 - 308 +
244 // Adds close button 309 // Adds close button
245 var img = document.createElement('img'); 310 var img = document.createElement('img');
246 img.setAttribute('src', Dialog.prototype.closeImage); 311 img.setAttribute('src', Dialog.prototype.closeImage);
@@ -250,48 +315,43 @@ @@ -250,48 +315,43 @@
250 img.style.cursor = 'default'; 315 img.style.cursor = 'default';
251 img.style.top = '1px'; 316 img.style.top = '1px';
252 img.style.right = '0px'; 317 img.style.right = '0px';
253 -  
254 - mxEvent.addListener(img, 'click', mxUtils.bind(this, function(evt)  
255 - { 318 +
  319 + mxEvent.addListener(img, 'click', mxUtils.bind(this, function (evt) {
256 link.parentNode.removeChild(link); 320 link.parentNode.removeChild(link);
257 this.hideSearchHint = true; 321 this.hideSearchHint = true;
258 mxEvent.consume(evt); 322 mxEvent.consume(evt);
259 })); 323 }));
260 - 324 +
261 link.appendChild(img); 325 link.appendChild(img);
262 div.appendChild(link); 326 div.appendChild(link);
263 - 327 +
264 // Shows hint only once 328 // Shows hint only once
265 this.hideSearchHint = true; 329 this.hideSearchHint = true;
266 } 330 }
267 } 331 }
268 - 332 +
269 siderbarInsertSearchHint.apply(this, arguments); 333 siderbarInsertSearchHint.apply(this, arguments);
270 }; 334 };
271 335
272 /** 336 /**
273 * Toggle palette. 337 * Toggle palette.
274 */ 338 */
275 - Sidebar.prototype.togglePalettes = function(prefix, ids)  
276 - { 339 + Sidebar.prototype.togglePalettes = function (prefix, ids) {
277 this.showPalettes(prefix, ids); 340 this.showPalettes(prefix, ids);
278 }; 341 };
279 342
280 /** 343 /**
281 * Toggle palette. 344 * Toggle palette.
282 */ 345 */
283 - Sidebar.prototype.togglePalette = function(id)  
284 - { 346 + Sidebar.prototype.togglePalette = function (id) {
285 this.showPalette(id); 347 this.showPalette(id);
286 }; 348 };
287 - 349 +
288 /** 350 /**
289 * Shows or hides palettes. 351 * Shows or hides palettes.
290 */ 352 */
291 - Sidebar.prototype.showPalettes = function(prefix, ids, visible)  
292 - {  
293 - for (var i = 0; i < ids.length; i++)  
294 - { 353 + Sidebar.prototype.showPalettes = function (prefix, ids, visible) {
  354 + for (var i = 0; i < ids.length; i++) {
295 this.showPalette(prefix + ids[i], visible); 355 this.showPalette(prefix + ids[i], visible);
296 } 356 }
297 }; 357 };
@@ -299,197 +359,160 @@ @@ -299,197 +359,160 @@
299 /** 359 /**
300 * Shows or hides a palette. 360 * Shows or hides a palette.
301 */ 361 */
302 - Sidebar.prototype.showPalette = function(id, visible)  
303 - { 362 + Sidebar.prototype.showPalette = function (id, visible) {
304 var elts = this.palettes[id]; 363 var elts = this.palettes[id];
305 -  
306 - if (elts != null)  
307 - { 364 +
  365 + if (elts != null) {
308 var vis = (visible != null) ? ((visible) ? 'block' : 'none') : (elts[0].style.display == 'none') ? 'block' : 'none'; 366 var vis = (visible != null) ? ((visible) ? 'block' : 'none') : (elts[0].style.display == 'none') ? 'block' : 'none';
309 -  
310 - for (var i = 0; i < elts.length; i++)  
311 - { 367 +
  368 + for (var i = 0; i < elts.length; i++) {
312 elts[i].style.display = vis; 369 elts[i].style.display = vis;
313 } 370 }
314 } 371 }
315 - 372 +
316 return elts; 373 return elts;
317 }; 374 };
318 - 375 +
319 /** 376 /**
320 - * 377 + *
321 */ 378 */
322 - Sidebar.prototype.getConfigurationById = function(id)  
323 - {  
324 - for (var i = 0; i < this.configuration.length; i++)  
325 - {  
326 - if (this.configuration[i].id == id)  
327 - { 379 + Sidebar.prototype.getConfigurationById = function (id) {
  380 + for (var i = 0; i < this.configuration.length; i++) {
  381 + if (this.configuration[i].id == id) {
328 return this.configuration[i]; 382 return this.configuration[i];
329 } 383 }
330 } 384 }
331 -  
332 - if (this.customEntries != null)  
333 - {  
334 - for (var i = 0; i < this.customEntries.length; i++)  
335 - { 385 +
  386 + if (this.customEntries != null) {
  387 + for (var i = 0; i < this.customEntries.length; i++) {
336 var section = this.customEntries[i]; 388 var section = this.customEntries[i];
337 -  
338 - for (var j = 0; j < section.entries.length; j++)  
339 - { 389 +
  390 + for (var j = 0; j < section.entries.length; j++) {
340 var entry = section.entries[j]; 391 var entry = section.entries[j];
341 -  
342 - if (entry.id == id)  
343 - {  
344 - return {id: entry.id, libs: entry.libs}; 392 +
  393 + if (entry.id == id) {
  394 + return { id: entry.id, libs: entry.libs };
345 } 395 }
346 } 396 }
347 } 397 }
348 } 398 }
349 - 399 +
350 return null; 400 return null;
351 }; 401 };
352 - 402 +
353 /** 403 /**
354 - * 404 + *
355 */ 405 */
356 - Sidebar.prototype.isEntryVisible = function(key)  
357 - {  
358 - if (key == '.scratchpad')  
359 - { 406 + Sidebar.prototype.isEntryVisible = function (key) {
  407 + if (key == '.scratchpad') {
360 return this.editorUi.scratchpad != null; 408 return this.editorUi.scratchpad != null;
361 } 409 }
362 - else  
363 - { 410 + else {
364 var config = this.getConfigurationById(key); 411 var config = this.getConfigurationById(key);
365 -  
366 - if (config != null)  
367 - { 412 +
  413 + if (config != null) {
368 var id = (config.libs != null) ? ((config.prefix || '') + config.libs[0]) : key; 414 var id = (config.libs != null) ? ((config.prefix || '') + config.libs[0]) : key;
369 var elts = this.palettes[id]; 415 var elts = this.palettes[id];
370 416
371 - if (elts != null)  
372 - { 417 + if (elts != null) {
373 return elts[0].style.display != 'none'; 418 return elts[0].style.display != 'none';
374 } 419 }
375 } 420 }
376 -  
377 - if (this.customEntries != null)  
378 - {  
379 - for (var i = 0; i < this.customEntries.length; i++)  
380 - { 421 +
  422 + if (this.customEntries != null) {
  423 + for (var i = 0; i < this.customEntries.length; i++) {
381 var section = this.customEntries[i]; 424 var section = this.customEntries[i];
382 -  
383 - for (var j = 0; j < section.entries.length; j++)  
384 - { 425 +
  426 + for (var j = 0; j < section.entries.length; j++) {
385 var entry = section.entries[j]; 427 var entry = section.entries[j];
386 -  
387 - if (entry.id == key)  
388 - {  
389 - if (entry.libs != null && entry.libs.length > 0)  
390 - { 428 +
  429 + if (entry.id == key) {
  430 + if (entry.libs != null && entry.libs.length > 0) {
391 var elts = this.palettes[entry.id + '.0']; 431 var elts = this.palettes[entry.id + '.0'];
392 -  
393 - if (elts != null)  
394 - { 432 +
  433 + if (elts != null) {
395 return elts[0].style.display != 'none'; 434 return elts[0].style.display != 'none';
396 } 435 }
397 } 436 }
398 - 437 +
399 break; 438 break;
400 } 439 }
401 } 440 }
402 } 441 }
403 } 442 }
404 - 443 +
405 return false; 444 return false;
406 } 445 }
407 }; 446 };
408 447
409 /** 448 /**
410 - * 449 + *
411 */ 450 */
412 - Sidebar.prototype.showEntries = function(entries, remember, force)  
413 - { 451 + Sidebar.prototype.showEntries = function (entries, remember, force) {
414 var all = []; 452 var all = [];
415 -  
416 - if (remember)  
417 - { 453 +
  454 + if (remember) {
418 mxSettings.setLibraries(entries); 455 mxSettings.setLibraries(entries);
419 mxSettings.save(); 456 mxSettings.save();
420 } 457 }
421 -  
422 - if (entries != null && (force || entries.length > 0))  
423 - { 458 +
  459 + if (entries != null && (force || entries.length > 0)) {
424 all.push(entries); 460 all.push(entries);
425 } 461 }
426 - else  
427 - { 462 + else {
428 var done = false; 463 var done = false;
429 -  
430 - if (urlParams['libs'] != null && urlParams['libs'].length > 0)  
431 - { 464 +
  465 + if (urlParams['libs'] != null && urlParams['libs'].length > 0) {
432 all.push(decodeURIComponent(urlParams['libs'])); 466 all.push(decodeURIComponent(urlParams['libs']));
433 done = this.editorUi.getServiceName() == 'draw.io'; 467 done = this.editorUi.getServiceName() == 'draw.io';
434 } 468 }
435 - 469 +
436 // Libs parameter overrides configuration for online app so that 470 // Libs parameter overrides configuration for online app so that
437 // links can be created to show just the specifies libraries 471 // links can be created to show just the specifies libraries
438 - if (!done)  
439 - {  
440 - if (mxSettings != null && mxSettings.settings != null)  
441 - { 472 + if (!done) {
  473 + if (mxSettings != null && mxSettings.settings != null) {
442 all.push(mxSettings.getLibraries()); 474 all.push(mxSettings.getLibraries());
443 } 475 }
444 - else  
445 - { 476 + else {
446 all.push(this.defaultEntries); 477 all.push(this.defaultEntries);
447 } 478 }
448 } 479 }
449 } 480 }
450 - 481 +
451 // Merges array of semicolon separated strings into a single array 482 // Merges array of semicolon separated strings into a single array
452 var temp = all.join(';').split(';'); 483 var temp = all.join(';').split(';');
453 484
454 // Resolves aliases and creates lookup 485 // Resolves aliases and creates lookup
455 var visible = {}; 486 var visible = {};
456 -  
457 - for (var i = 0; i < temp.length; i++)  
458 - {  
459 - visible[this.libAliases[temp[i]] || temp[i]] = true; 487 +
  488 + for (var i = 0; i < temp.length; i++) {
  489 + visible[this.libAliases[temp[i]] || temp[i]] = true;
460 } 490 }
461 -  
462 - for (var i = 0; i < this.configuration.length; i++)  
463 - { 491 +
  492 + for (var i = 0; i < this.configuration.length; i++) {
464 // Search has separate switch in Extras menu 493 // Search has separate switch in Extras menu
465 - if (this.configuration[i].id != 'search')  
466 - { 494 + if (this.configuration[i].id != 'search') {
467 this.showPalettes(this.configuration[i].prefix || '', 495 this.showPalettes(this.configuration[i].prefix || '',
468 this.configuration[i].libs || [this.configuration[i].id], 496 this.configuration[i].libs || [this.configuration[i].id],
469 visible[this.configuration[i].id] == true); 497 visible[this.configuration[i].id] == true);
470 498
471 } 499 }
472 } 500 }
473 -  
474 - if (this.customEntries != null)  
475 - {  
476 - for (var i = 0; i < this.customEntries.length; i++)  
477 - { 501 +
  502 + if (this.customEntries != null) {
  503 + for (var i = 0; i < this.customEntries.length; i++) {
478 var section = this.customEntries[i]; 504 var section = this.customEntries[i];
479 -  
480 - for (var j = 0; j < section.entries.length; j++)  
481 - { 505 +
  506 + for (var j = 0; j < section.entries.length; j++) {
482 var entry = section.entries[j]; 507 var entry = section.entries[j];
483 -  
484 - if (entry.libs != null && entry.libs.length > 0)  
485 - { 508 +
  509 + if (entry.libs != null && entry.libs.length > 0) {
486 var libs = []; 510 var libs = [];
487 -  
488 - for (var k = 0; k < entry.libs.length; k++)  
489 - { 511 +
  512 + for (var k = 0; k < entry.libs.length; k++) {
490 libs.push(entry.id + '.' + k); 513 libs.push(entry.id + '.' + k);
491 } 514 }
492 - 515 +
493 this.showPalettes('', libs, visible[entry.id]); 516 this.showPalettes('', libs, visible[entry.id]);
494 } 517 }
495 } 518 }
@@ -500,8 +523,7 @@ @@ -500,8 +523,7 @@
500 /** 523 /**
501 * Overrides the sidebar init. 524 * Overrides the sidebar init.
502 */ 525 */
503 - Sidebar.prototype.init = function()  
504 - { 526 + Sidebar.prototype.init = function () {
505 // Defines all entries for the sidebar. This is used in the MoreShapes dialog. Create screenshots using the savesidebar URL parameter and 527 // Defines all entries for the sidebar. This is used in the MoreShapes dialog. Create screenshots using the savesidebar URL parameter and
506 // http://www.alderg.com/merge.html for creating a vertical stack of PNG images if multiple sidebars are part of an entry. 528 // http://www.alderg.com/merge.html for creating a vertical stack of PNG images if multiple sidebars are part of an entry.
507 //更多图形里面的加载,可以加载自己定义的图形库,同时要提供对应的图片 529 //更多图形里面的加载,可以加载自己定义的图形库,同时要提供对应的图片
@@ -512,127 +534,122 @@ @@ -512,127 +534,122 @@
512 // {title: mxResources.get('flowchart'), id: 'flowchart', image: IMAGE_PATH + '/sidebar-flowchart.png'}]; 534 // {title: mxResources.get('flowchart'), id: 'flowchart', image: IMAGE_PATH + '/sidebar-flowchart.png'}];
513 //更多图形,显示出来的的标题跟id,同时包括图片 535 //更多图形,显示出来的的标题跟id,同时包括图片
514 var thingskitEntries = [ 536 var thingskitEntries = [
515 - {title:"风机",id:'fan',image:IMAGE_PATH + '/thingskit/风机.png'},  
516 - {title:"发动机",id:'engine',image:IMAGE_PATH + '/thingskit/发动机.png'},  
517 - {title:"阀门",id:'valve',image:IMAGE_PATH + '/thingskit/阀门.png'},  
518 - {title:"基础组件",id:'component',image:IMAGE_PATH + '/thingskit/基础元件.png'},  
519 - {title: "污水处理",id:'sewage',image: IMAGE_PATH + '/thingskit/污水处理.png'},  
520 - {title: "管道",id:'conduit',image: IMAGE_PATH + '/thingskit/管道.png'},  
521 - {title: "灯",id:'light',image: IMAGE_PATH + '/thingskit/灯.png'},  
522 - {title: "按钮",id:'button',image: IMAGE_PATH + '/thingskit/按钮.png'},  
523 - {title: "仪表",id:'instrument',image: IMAGE_PATH + '/thingskit/仪表.png'}, 537 + { title: "风机", id: 'fan', image: IMAGE_PATH + '/thingskit/风机.png' },
  538 + { title: "发动机", id: 'engine', image: IMAGE_PATH + '/thingskit/发动机.png' },
  539 + { title: "阀门", id: 'valve', image: IMAGE_PATH + '/thingskit/阀门.png' },
  540 + { title: "基础组件", id: 'component', image: IMAGE_PATH + '/thingskit/基础元件.png' },
  541 + { title: "污水处理", id: 'sewage', image: IMAGE_PATH + '/thingskit/污水处理.png' },
  542 + { title: "管道", id: 'conduit', image: IMAGE_PATH + '/thingskit/管道.png' },
  543 + { title: "灯", id: 'light', image: IMAGE_PATH + '/thingskit/灯.png' },
  544 + { title: "按钮", id: 'button', image: IMAGE_PATH + '/thingskit/按钮.png' },
  545 + { title: "仪表", id: 'instrument', image: IMAGE_PATH + '/thingskit/仪表.png' },
524 ]; 546 ];
525 - if (urlParams['sketch'] == '1')  
526 - {  
527 - stdEntries = [{title: mxResources.get('searchShapes'), id: 'search'},  
528 - {title: mxResources.get('scratchpad'), id: '.scratchpad'}]. 547 + if (urlParams['sketch'] == '1') {
  548 + stdEntries = [{ title: mxResources.get('searchShapes'), id: 'search' },
  549 + { title: mxResources.get('scratchpad'), id: '.scratchpad' }].
529 concat(stdEntries); 550 concat(stdEntries);
530 } 551 }
531 552
532 this.entries = [ 553 this.entries = [
533 - // {title: mxResources.get('standard'), entries: stdEntries},  
534 - {title: '通用', entries: thingskitEntries},  
535 - // 注释掉软件  
536 - // {title: mxResources.get('software'),  
537 - // entries: [{title: 'Active Directory', id: 'active_directory', image: IMAGE_PATH + '/sidebar-active_directory.png'},  
538 - // {title: mxResources.get('android'), id: 'android', image: IMAGE_PATH + '/sidebar-android.png'},  
539 - // {title: 'Atlassian', id: 'atlassian', image: IMAGE_PATH + '/sidebar-atlassian.png'},  
540 - // {title: mxResources.get('bootstrap'), id: 'bootstrap', image: IMAGE_PATH + '/sidebar-bootstrap.png'},  
541 - // {title: 'C4', id: 'c4', image: IMAGE_PATH + '/sidebar-c4.png'},  
542 - // {title: 'Data Flow Diagram', id: 'dfd', image: IMAGE_PATH + '/sidebar-dfd.png'},  
543 - // {title: mxResources.get('entityRelation'), id: 'er', image: IMAGE_PATH + '/sidebar-er.png'},  
544 - // {title: mxResources.get('ios'), id: 'ios', image: IMAGE_PATH + '/sidebar-ios.png'},  
545 - // {title: mxResources.get('mockups'), id: 'mockups', image: IMAGE_PATH + '/sidebar-mockups.png'},  
546 - // {title: 'Sitemap', id: 'sitemap', image: IMAGE_PATH + '/sidebar-sitemap.png'},  
547 - // {title: mxResources.get('uml') + ' 2.5', id: 'uml25', image: IMAGE_PATH + '/sidebar-uml25.png'},  
548 - // {title: mxResources.get('uml'), id: 'uml', image: IMAGE_PATH + '/sidebar-uml.png'}]},  
549 - // 注释掉网络  
550 - // {title: mxResources.get('networking'),  
551 - // entries: [{title: 'Allied Telesis', id: 'allied_telesis', image: IMAGE_PATH + '/sidebar-allied_telesis.png'},  
552 - // {title: 'AWS17', id: 'aws3', image: IMAGE_PATH + '/sidebar-aws3.png'},  
553 - // {title: 'AWS18', id: 'aws4b', image: IMAGE_PATH + '/sidebar-aws4b.png'},  
554 - // {title: 'AWS19', id: 'aws4', image: IMAGE_PATH + '/sidebar-aws4.png'},  
555 - // // TODO: Add isometric containers  
556 - // {title: mxResources.get('aws3d'), id: 'aws3d', image: IMAGE_PATH + '/sidebar-aws3d.png'},  
557 - // {title: mxResources.get('azure'), id: 'azure2', image: IMAGE_PATH + '/sidebar-azure.png'},  
558 - // {title: 'Cloud & Enterprise', id: 'mscae', image: IMAGE_PATH + '/sidebar-mscae.png'},  
559 - // {title: mxResources.get('cisco'), id: 'cisco', image: IMAGE_PATH + '/sidebar-cisco.png'},  
560 - // {title: 'Cisco19', id: 'cisco19', image: IMAGE_PATH + '/sidebar-cisco19.png'},  
561 - // {title: 'Cisco Safe', id: 'cisco_safe', image: IMAGE_PATH + '/sidebar-cisco_safe.png'},  
562 - // {title: 'Cumulus', id: 'cumulus', image: IMAGE_PATH + '/sidebar-cumulus.png'},  
563 - // {title: 'Citrix', id: 'citrix', image: IMAGE_PATH + '/sidebar-citrix.png'},  
564 - // {title: 'Google Cloud Platform', id: 'gcp2', image: IMAGE_PATH + '/sidebar-gcp2.png'},  
565 - // {title: 'GCP Icons', id: 'gcpicons', image: IMAGE_PATH + '/sidebar-gcpicons.png'},  
566 - // {title: 'IBM', id: 'ibm', image: IMAGE_PATH + '/sidebar-ibm.png'},  
567 - // {title: 'Kubernetes', id: 'kubernetes', image: IMAGE_PATH + '/sidebar-kubernetes.png'},  
568 - // {title: 'Network', id: 'network', image: IMAGE_PATH + '/sidebar-network.png'},  
569 - // {title: 'Office', id: 'office', image: IMAGE_PATH + '/sidebar-office.png'},  
570 - // {title: mxResources.get('rack'), id: 'rack', image: IMAGE_PATH + '/sidebar-rack.png'},  
571 - // {title: 'Veeam', id: 'veeam2', image: IMAGE_PATH + '/sidebar-veeam.png'},  
572 - // {title: 'VMware', id: 'vvd', image: IMAGE_PATH + '/sidebar-vvd.png'}]},  
573 - // 注释掉商务  
574 - // {title: mxResources.get('business'),  
575 - // entries: [{title: 'ArchiMate 3.0', id: 'archimate3', image: IMAGE_PATH + '/sidebar-archimate3.png'},  
576 - // {title: mxResources.get('archiMate21'), id: 'archimate', image: IMAGE_PATH + '/sidebar-archimate.png'},  
577 - // {title: mxResources.get('bpmn') + ' 2.0', id: 'bpmn2', image: IMAGE_PATH + '/sidebar-bpmn.png'},  
578 - // {title: mxResources.get('sysml'), id: 'sysml', image: IMAGE_PATH + '/sidebar-sysml.png'},  
579 - // {title: 'Value Stream Mapping', id: 'lean_mapping', image: IMAGE_PATH + '/sidebar-leanmapping.png'}]},  
580 - {title: mxResources.get('other'),  
581 - entries: [{title: mxResources.get('cabinets'), id: 'cabinets', image: IMAGE_PATH + '/sidebar-cabinets.png'},  
582 - {title: 'Infographic', id: 'infographic', image: IMAGE_PATH + '/sidebar-infographic.png'},  
583 - {title: mxResources.get('eip'), id: 'eip', image: IMAGE_PATH + '/sidebar-eip.png'},  
584 - {title: mxResources.get('electrical'), id: 'electrical', image: IMAGE_PATH + '/sidebar-electrical.png'},  
585 - {title: mxResources.get('floorplans'), id: 'floorplan', image: IMAGE_PATH + '/sidebar-floorplans.png'},  
586 - {title: 'Fluid Power (ISO 1219)', id: 'fluid_power', image: IMAGE_PATH + '/sidebar-fluid_power.png'},  
587 - {title: mxResources.get('gmdl'), id: 'gmdl', image: IMAGE_PATH + '/sidebar-gmdl.png'},  
588 - {title: mxResources.get('procEng'), id: 'pid', image: IMAGE_PATH + '/sidebar-pid.png'},  
589 - {title: 'Threat Modeling', id: 'threatModeling', image: IMAGE_PATH + '/sidebar-threatmodeling.png'},  
590 - {title: 'Web Icons', id: 'webicons', image: IMAGE_PATH + '/sidebar-webIcons.png'},  
591 - {title: mxResources.get('signs'), id: 'signs', image: IMAGE_PATH + '/sidebar-signs.png'}]}]; 554 + // {title: mxResources.get('standard'), entries: stdEntries},
  555 + { title: '通用', entries: thingskitEntries },
  556 + // 注释掉软件
  557 + // {title: mxResources.get('software'),
  558 + // entries: [{title: 'Active Directory', id: 'active_directory', image: IMAGE_PATH + '/sidebar-active_directory.png'},
  559 + // {title: mxResources.get('android'), id: 'android', image: IMAGE_PATH + '/sidebar-android.png'},
  560 + // {title: 'Atlassian', id: 'atlassian', image: IMAGE_PATH + '/sidebar-atlassian.png'},
  561 + // {title: mxResources.get('bootstrap'), id: 'bootstrap', image: IMAGE_PATH + '/sidebar-bootstrap.png'},
  562 + // {title: 'C4', id: 'c4', image: IMAGE_PATH + '/sidebar-c4.png'},
  563 + // {title: 'Data Flow Diagram', id: 'dfd', image: IMAGE_PATH + '/sidebar-dfd.png'},
  564 + // {title: mxResources.get('entityRelation'), id: 'er', image: IMAGE_PATH + '/sidebar-er.png'},
  565 + // {title: mxResources.get('ios'), id: 'ios', image: IMAGE_PATH + '/sidebar-ios.png'},
  566 + // {title: mxResources.get('mockups'), id: 'mockups', image: IMAGE_PATH + '/sidebar-mockups.png'},
  567 + // {title: 'Sitemap', id: 'sitemap', image: IMAGE_PATH + '/sidebar-sitemap.png'},
  568 + // {title: mxResources.get('uml') + ' 2.5', id: 'uml25', image: IMAGE_PATH + '/sidebar-uml25.png'},
  569 + // {title: mxResources.get('uml'), id: 'uml', image: IMAGE_PATH + '/sidebar-uml.png'}]},
  570 + // 注释掉网络
  571 + // {title: mxResources.get('networking'),
  572 + // entries: [{title: 'Allied Telesis', id: 'allied_telesis', image: IMAGE_PATH + '/sidebar-allied_telesis.png'},
  573 + // {title: 'AWS17', id: 'aws3', image: IMAGE_PATH + '/sidebar-aws3.png'},
  574 + // {title: 'AWS18', id: 'aws4b', image: IMAGE_PATH + '/sidebar-aws4b.png'},
  575 + // {title: 'AWS19', id: 'aws4', image: IMAGE_PATH + '/sidebar-aws4.png'},
  576 + // // TODO: Add isometric containers
  577 + // {title: mxResources.get('aws3d'), id: 'aws3d', image: IMAGE_PATH + '/sidebar-aws3d.png'},
  578 + // {title: mxResources.get('azure'), id: 'azure2', image: IMAGE_PATH + '/sidebar-azure.png'},
  579 + // {title: 'Cloud & Enterprise', id: 'mscae', image: IMAGE_PATH + '/sidebar-mscae.png'},
  580 + // {title: mxResources.get('cisco'), id: 'cisco', image: IMAGE_PATH + '/sidebar-cisco.png'},
  581 + // {title: 'Cisco19', id: 'cisco19', image: IMAGE_PATH + '/sidebar-cisco19.png'},
  582 + // {title: 'Cisco Safe', id: 'cisco_safe', image: IMAGE_PATH + '/sidebar-cisco_safe.png'},
  583 + // {title: 'Cumulus', id: 'cumulus', image: IMAGE_PATH + '/sidebar-cumulus.png'},
  584 + // {title: 'Citrix', id: 'citrix', image: IMAGE_PATH + '/sidebar-citrix.png'},
  585 + // {title: 'Google Cloud Platform', id: 'gcp2', image: IMAGE_PATH + '/sidebar-gcp2.png'},
  586 + // {title: 'GCP Icons', id: 'gcpicons', image: IMAGE_PATH + '/sidebar-gcpicons.png'},
  587 + // {title: 'IBM', id: 'ibm', image: IMAGE_PATH + '/sidebar-ibm.png'},
  588 + // {title: 'Kubernetes', id: 'kubernetes', image: IMAGE_PATH + '/sidebar-kubernetes.png'},
  589 + // {title: 'Network', id: 'network', image: IMAGE_PATH + '/sidebar-network.png'},
  590 + // {title: 'Office', id: 'office', image: IMAGE_PATH + '/sidebar-office.png'},
  591 + // {title: mxResources.get('rack'), id: 'rack', image: IMAGE_PATH + '/sidebar-rack.png'},
  592 + // {title: 'Veeam', id: 'veeam2', image: IMAGE_PATH + '/sidebar-veeam.png'},
  593 + // {title: 'VMware', id: 'vvd', image: IMAGE_PATH + '/sidebar-vvd.png'}]},
  594 + // 注释掉商务
  595 + // {title: mxResources.get('business'),
  596 + // entries: [{title: 'ArchiMate 3.0', id: 'archimate3', image: IMAGE_PATH + '/sidebar-archimate3.png'},
  597 + // {title: mxResources.get('archiMate21'), id: 'archimate', image: IMAGE_PATH + '/sidebar-archimate.png'},
  598 + // {title: mxResources.get('bpmn') + ' 2.0', id: 'bpmn2', image: IMAGE_PATH + '/sidebar-bpmn.png'},
  599 + // {title: mxResources.get('sysml'), id: 'sysml', image: IMAGE_PATH + '/sidebar-sysml.png'},
  600 + // {title: 'Value Stream Mapping', id: 'lean_mapping', image: IMAGE_PATH + '/sidebar-leanmapping.png'}]},
  601 + {
  602 + title: mxResources.get('other'),
  603 + entries: [{ title: mxResources.get('cabinets'), id: 'cabinets', image: IMAGE_PATH + '/sidebar-cabinets.png' },
  604 + { title: 'Infographic', id: 'infographic', image: IMAGE_PATH + '/sidebar-infographic.png' },
  605 + { title: mxResources.get('eip'), id: 'eip', image: IMAGE_PATH + '/sidebar-eip.png' },
  606 + { title: mxResources.get('electrical'), id: 'electrical', image: IMAGE_PATH + '/sidebar-electrical.png' },
  607 + { title: mxResources.get('floorplans'), id: 'floorplan', image: IMAGE_PATH + '/sidebar-floorplans.png' },
  608 + { title: 'Fluid Power (ISO 1219)', id: 'fluid_power', image: IMAGE_PATH + '/sidebar-fluid_power.png' },
  609 + { title: mxResources.get('gmdl'), id: 'gmdl', image: IMAGE_PATH + '/sidebar-gmdl.png' },
  610 + { title: mxResources.get('procEng'), id: 'pid', image: IMAGE_PATH + '/sidebar-pid.png' },
  611 + { title: 'Threat Modeling', id: 'threatModeling', image: IMAGE_PATH + '/sidebar-threatmodeling.png' },
  612 + { title: 'Web Icons', id: 'webicons', image: IMAGE_PATH + '/sidebar-webIcons.png' },
  613 + { title: mxResources.get('signs'), id: 'signs', image: IMAGE_PATH + '/sidebar-signs.png' }]
  614 + }];
592 615
593 // Uses search.xml index file instead (faster load times) 616 // Uses search.xml index file instead (faster load times)
594 this.addStencilsToIndex = false; 617 this.addStencilsToIndex = false;
595 - 618 +
596 // Contains additional tags for shapes 619 // Contains additional tags for shapes
597 this.shapetags = {}; 620 this.shapetags = {};
598 621
599 // Adds tags from compressed text file for improved searches 622 // Adds tags from compressed text file for improved searches
600 - if (this.tagIndex != null)  
601 - { 623 + if (this.tagIndex != null) {
602 this.addTagIndex(Graph.decompress(this.tagIndex)); 624 this.addTagIndex(Graph.decompress(this.tagIndex));
603 - this.tagIndex = null; 625 + this.tagIndex = null;
604 } 626 }
605 - 627 +
606 this.initPalettes(); 628 this.initPalettes();
607 } 629 }
608 - 630 +
609 /** 631 /**
610 * Overridden to add image export via servlet 632 * Overridden to add image export via servlet
611 */ 633 */
612 - if (urlParams['savesidebar'] == '1')  
613 - {  
614 - Sidebar.prototype.addFoldingHandler = function(title, content, funct)  
615 - { 634 + if (urlParams['savesidebar'] == '1') {
  635 + Sidebar.prototype.addFoldingHandler = function (title, content, funct) {
616 var initialized = false; 636 var initialized = false;
617 - 637 +
618 // Avoids mixed content warning in IE6-8 638 // Avoids mixed content warning in IE6-8
619 - if (!mxClient.IS_IE || document.documentMode >= 8)  
620 - { 639 + if (!mxClient.IS_IE || document.documentMode >= 8) {
621 title.style.backgroundImage = (content.style.display == 'none') ? 640 title.style.backgroundImage = (content.style.display == 'none') ?
622 'url(\'' + this.collapsedImage + '\')' : 'url(\'' + this.expandedImage + '\')'; 641 'url(\'' + this.collapsedImage + '\')' : 'url(\'' + this.expandedImage + '\')';
623 } 642 }
624 - 643 +
625 title.style.backgroundRepeat = 'no-repeat'; 644 title.style.backgroundRepeat = 'no-repeat';
626 title.style.backgroundPosition = '0% 50%'; 645 title.style.backgroundPosition = '0% 50%';
627 - 646 +
628 var btn = document.createElement('button'); 647 var btn = document.createElement('button');
629 btn.style.marginLeft = '4px'; 648 btn.style.marginLeft = '4px';
630 mxUtils.write(btn, 'Save'); 649 mxUtils.write(btn, 'Save');
631 -  
632 - mxEvent.addListener(title, 'click', mxUtils.bind(this, function(evt)  
633 - {  
634 - if (mxEvent.getSource(evt).nodeName == 'BUTTON')  
635 - { 650 +
  651 + mxEvent.addListener(title, 'click', mxUtils.bind(this, function (evt) {
  652 + if (mxEvent.getSource(evt).nodeName == 'BUTTON') {
636 var title2 = title.cloneNode(true); 653 var title2 = title.cloneNode(true);
637 title2.style.backgroundImage = ''; 654 title2.style.backgroundImage = '';
638 title2.style.textDecoration = 'none'; 655 title2.style.textDecoration = 'none';
@@ -642,209 +659,177 @@ @@ -642,209 +659,177 @@
642 title2.style.width = '456px'; 659 title2.style.width = '456px';
643 title2.style.backgroundColor = '#ffffff'; 660 title2.style.backgroundColor = '#ffffff';
644 title2.style.paddingLeft = '6px'; 661 title2.style.paddingLeft = '6px';
645 - 662 +
646 var btn2 = title2.getElementsByTagName('button')[0]; 663 var btn2 = title2.getElementsByTagName('button')[0];
647 btn2.parentNode.removeChild(btn2); 664 btn2.parentNode.removeChild(btn2);
648 - 665 +
649 var clone = content.cloneNode(true); 666 var clone = content.cloneNode(true);
650 clone.style.backgroundColor = '#ffffff'; 667 clone.style.backgroundColor = '#ffffff';
651 clone.style.borderColor = 'transparent'; 668 clone.style.borderColor = 'transparent';
652 clone.style.width = '456px'; 669 clone.style.width = '456px';
653 - 670 +
654 var parser = new DOMParser(); 671 var parser = new DOMParser();
655 var doc = parser.parseFromString('<body style="background:#ffffff;font-family:Helvetica,Arial;">' + 672 var doc = parser.parseFromString('<body style="background:#ffffff;font-family:Helvetica,Arial;">' +
656 - title2.outerHTML + clone.outerHTML + '</body>', 'text/html');  
657 -  
658 - this.editorUi.editor.convertImages(doc.documentElement, mxUtils.bind(this, function(body)  
659 - { 673 + title2.outerHTML + clone.outerHTML + '</body>', 'text/html');
  674 +
  675 + this.editorUi.editor.convertImages(doc.documentElement, mxUtils.bind(this, function (body) {
660 var html = '<!DOCTYPE html><html><head><link rel="stylesheet" type="text/css" ' + 676 var html = '<!DOCTYPE html><html><head><link rel="stylesheet" type="text/css" ' +
661 'href="https://www.draw.io/styles/grapheditor.css"></head>' + 677 'href="https://www.draw.io/styles/grapheditor.css"></head>' +
662 mxUtils.getXml(body) + '</html>'; 678 mxUtils.getXml(body) + '</html>';
663 - 679 +
664 clone.style.position = 'absolute'; 680 clone.style.position = 'absolute';
665 window.document.body.appendChild(clone); 681 window.document.body.appendChild(clone);
666 var h = clone.clientHeight + 18; 682 var h = clone.clientHeight + 18;
667 clone.parentNode.removeChild(clone); 683 clone.parentNode.removeChild(clone);
668 -  
669 - this.editorUi.confirm('Image data created', mxUtils.bind(this, function()  
670 - {  
671 - new mxXmlRequest(EXPORT_URL, 'w=456&h=' + h + '&html=' + encodeURIComponent(  
672 - Graph.compress(html))).simulate(document, '_blank'); 684 +
  685 + this.editorUi.confirm('Image data created', mxUtils.bind(this, function () {
  686 + new mxXmlRequest(EXPORT_URL, 'w=456&h=' + h + '&html=' + encodeURIComponent(
  687 + Graph.compress(html))).simulate(document, '_blank');
673 }), null, mxResources.get('save'), mxResources.get('cancel')); 688 }), null, mxResources.get('save'), mxResources.get('cancel'));
674 })); 689 }));
675 - 690 +
676 return; 691 return;
677 } 692 }
678 -  
679 - if (content.style.display == 'none')  
680 - {  
681 - if (!initialized)  
682 - { 693 +
  694 + if (content.style.display == 'none') {
  695 + if (!initialized) {
683 initialized = true; 696 initialized = true;
684 -  
685 - if (funct != null)  
686 - {  
687 - if (btn.parentNode != null)  
688 - { 697 +
  698 + if (funct != null) {
  699 + if (btn.parentNode != null) {
689 btn.parentNode.removeChild(btn); 700 btn.parentNode.removeChild(btn);
690 } 701 }
691 - 702 +
692 // Wait cursor does not show up on Mac 703 // Wait cursor does not show up on Mac
693 title.style.cursor = 'wait'; 704 title.style.cursor = 'wait';
694 var prev = title.innerHTML; 705 var prev = title.innerHTML;
695 title.innerHTML = mxResources.get('loading') + '...'; 706 title.innerHTML = mxResources.get('loading') + '...';
696 -  
697 - window.setTimeout(function()  
698 - { 707 +
  708 + window.setTimeout(function () {
699 funct(content); 709 funct(content);
700 title.style.cursor = ''; 710 title.style.cursor = '';
701 title.innerHTML = prev; 711 title.innerHTML = prev;
702 title.appendChild(btn); 712 title.appendChild(btn);
703 }, 0); 713 }, 0);
704 } 714 }
705 - else  
706 - { 715 + else {
707 title.appendChild(btn); 716 title.appendChild(btn);
708 } 717 }
709 } 718 }
710 - else  
711 - { 719 + else {
712 title.appendChild(btn); 720 title.appendChild(btn);
713 } 721 }
714 - 722 +
715 title.style.backgroundImage = 'url(\'' + this.expandedImage + '\')'; 723 title.style.backgroundImage = 'url(\'' + this.expandedImage + '\')';
716 content.style.display = 'block'; 724 content.style.display = 'block';
717 } 725 }
718 - else  
719 - { 726 + else {
720 title.style.backgroundImage = 'url(\'' + this.collapsedImage + '\')'; 727 title.style.backgroundImage = 'url(\'' + this.collapsedImage + '\')';
721 content.style.display = 'none'; 728 content.style.display = 'none';
722 -  
723 - if (btn.parentNode != null)  
724 - { 729 +
  730 + if (btn.parentNode != null) {
725 btn.parentNode.removeChild(btn); 731 btn.parentNode.removeChild(btn);
726 } 732 }
727 } 733 }
728 - 734 +
729 mxEvent.consume(evt); 735 mxEvent.consume(evt);
730 })); 736 }));
731 }; 737 };
732 }; 738 };
733 - 739 +
734 /** 740 /**
735 * Overridden to use shapetags to improve search results. 741 * Overridden to use shapetags to improve search results.
736 */ 742 */
737 - Sidebar.prototype.extractShapeStyle = function(style)  
738 - {  
739 - if (style != null && style.substring(0, 6) == 'shape=')  
740 - { 743 + Sidebar.prototype.extractShapeStyle = function (style) {
  744 + if (style != null && style.substring(0, 6) == 'shape=') {
741 var semi = style.indexOf(';'); 745 var semi = style.indexOf(';');
742 -  
743 - if (semi < 0)  
744 - { 746 +
  747 + if (semi < 0) {
745 semi = style.length; 748 semi = style.length;
746 } 749 }
747 - 750 +
748 return style.substring(6, semi); 751 return style.substring(6, semi);
749 } 752 }
750 - 753 +
751 return null; 754 return null;
752 }; 755 };
753 - 756 +
754 /** 757 /**
755 * Overridden to use shapetags to improve search results. 758 * Overridden to use shapetags to improve search results.
756 */ 759 */
757 var sidebarGetTagsForStencil = Sidebar.prototype.getTagsForStencil; 760 var sidebarGetTagsForStencil = Sidebar.prototype.getTagsForStencil;
758 -  
759 - Sidebar.prototype.getTagsForStencil = function(pkg, stc, moreTags)  
760 - { 761 +
  762 + Sidebar.prototype.getTagsForStencil = function (pkg, stc, moreTags) {
761 var tags = sidebarGetTagsForStencil.apply(this, arguments); 763 var tags = sidebarGetTagsForStencil.apply(this, arguments);
762 - 764 +
763 // Adds tags from tags file 765 // Adds tags from tags file
764 - if (this.shapetags != null)  
765 - { 766 + if (this.shapetags != null) {
766 pkg = pkg.toLowerCase(); 767 pkg = pkg.toLowerCase();
767 stc = stc.toLowerCase(); 768 stc = stc.toLowerCase();
768 -  
769 - if (this.shapetags[pkg] != null)  
770 - { 769 +
  770 + if (this.shapetags[pkg] != null) {
771 tags.push(this.shapetags[pkg]); 771 tags.push(this.shapetags[pkg]);
772 } 772 }
773 - 773 +
774 stc = pkg + '.' + stc; 774 stc = pkg + '.' + stc;
775 -  
776 - if (this.shapetags[stc] != null)  
777 - { 775 +
  776 + if (this.shapetags[stc] != null) {
778 tags.push(this.shapetags[stc]); 777 tags.push(this.shapetags[stc]);
779 } 778 }
780 } 779 }
781 780
782 return tags; 781 return tags;
783 }; 782 };
784 - 783 +
785 /** 784 /**
786 * Overrides the sidebar init. 785 * Overrides the sidebar init.
787 */ 786 */
788 - Sidebar.prototype.addTagIndex = function(text)  
789 - { 787 + Sidebar.prototype.addTagIndex = function (text) {
790 var lines = text.split('\n'); 788 var lines = text.split('\n');
791 -  
792 - for (var i = 0; i < lines.length; i++)  
793 - {  
794 - if (lines[i] != null)  
795 - { 789 +
  790 + for (var i = 0; i < lines.length; i++) {
  791 + if (lines[i] != null) {
796 var tags = lines[i].split('\t'); 792 var tags = lines[i].split('\t');
797 -  
798 - if (tags.length > 1)  
799 - { 793 +
  794 + if (tags.length > 1) {
800 var key = tags[0].toLowerCase().replace(' ', '_'); 795 var key = tags[0].toLowerCase().replace(' ', '_');
801 var value = mxUtils.trim(tags.slice(1, tags.length).join(' ').toLowerCase()); 796 var value = mxUtils.trim(tags.slice(1, tags.length).join(' ').toLowerCase());
802 -  
803 - if (value.length > 0)  
804 - { 797 +
  798 + if (value.length > 0) {
805 this.shapetags[key] = value; 799 this.shapetags[key] = value;
806 } 800 }
807 } 801 }
808 } 802 }
809 } 803 }
810 }; 804 };
811 - 805 +
812 /** 806 /**
813 * Adds shape search UI. 807 * Adds shape search UI.
814 */ 808 */
815 - Sidebar.prototype.showPopupMenuForEntry = function(elt, libs, evt)  
816 - {  
817 - if (libs != null && libs.length > 0)  
818 - { 809 + Sidebar.prototype.showPopupMenuForEntry = function (elt, libs, evt) {
  810 + if (libs != null && libs.length > 0) {
819 var offset = mxUtils.getOffset(elt); 811 var offset = mxUtils.getOffset(elt);
820 -  
821 - this.editorUi.showPopupMenu(mxUtils.bind(this, function(menu, parent)  
822 - {  
823 - menu.addItem(mxResources.get('openLibrary'), null, mxUtils.bind(this, function()  
824 - {  
825 - for (var i = 0; i < libs.length; i++)  
826 - {  
827 - (mxUtils.bind(this, function(lib)  
828 - { 812 +
  813 + this.editorUi.showPopupMenu(mxUtils.bind(this, function (menu, parent) {
  814 + menu.addItem(mxResources.get('openLibrary'), null, mxUtils.bind(this, function () {
  815 + for (var i = 0; i < libs.length; i++) {
  816 + (mxUtils.bind(this, function (lib) {
829 var config = this.getConfigurationById(lib.id); 817 var config = this.getConfigurationById(lib.id);
830 -  
831 - if (config != null)  
832 - { 818 +
  819 + if (config != null) {
833 this.showPalettes(config.prefix || '', config.libs || [config.id], true); 820 this.showPalettes(config.prefix || '', config.libs || [config.id], true);
834 var elts = this.showPalette(libs[i].lib || libs[i].id, true); 821 var elts = this.showPalette(libs[i].lib || libs[i].id, true);
835 - 822 +
836 if (elts != null && elts.length > 1 && elts[1].firstChild != null && 823 if (elts != null && elts.length > 1 && elts[1].firstChild != null &&
837 (elts[1].firstChild.firstChild == null || 824 (elts[1].firstChild.firstChild == null ||
838 - elts[1].firstChild.style.display == 'none'))  
839 - { 825 + elts[1].firstChild.style.display == 'none')) {
840 elts[0].click(); 826 elts[0].click();
841 } 827 }
842 -  
843 - window.setTimeout(function()  
844 - { 828 +
  829 + window.setTimeout(function () {
845 elts[1].scrollIntoView(true); 830 elts[1].scrollIntoView(true);
846 }, 0); 831 }, 0);
847 - 832 +
848 mxEvent.consume(evt); 833 mxEvent.consume(evt);
849 } 834 }
850 }))(libs[i]); 835 }))(libs[i]);
@@ -857,38 +842,31 @@ @@ -857,38 +842,31 @@
857 /** 842 /**
858 * Overrides the sidebar init. 843 * Overrides the sidebar init.
859 */ 844 */
860 - Sidebar.prototype.addSearchIndex = function(shapes)  
861 - {  
862 - if (shapes != null)  
863 - {  
864 - for (var i = 0; i < shapes.length; i++)  
865 - {  
866 - if (shapes[i].style != null)  
867 - { 845 + Sidebar.prototype.addSearchIndex = function (shapes) {
  846 + if (shapes != null) {
  847 + for (var i = 0; i < shapes.length; i++) {
  848 + if (shapes[i].style != null) {
868 var style = shapes[i].style; 849 var style = shapes[i].style;
869 var shapeStyle = this.extractShapeStyle(style); 850 var shapeStyle = this.extractShapeStyle(style);
870 -  
871 - if (shapeStyle != null)  
872 - { 851 +
  852 + if (shapeStyle != null) {
873 var lastDot = shapeStyle.lastIndexOf('.'); 853 var lastDot = shapeStyle.lastIndexOf('.');
874 -  
875 - if (lastDot > 0)  
876 - { 854 +
  855 + if (lastDot > 0) {
877 var pkg = shapeStyle.substring(0, lastDot); 856 var pkg = shapeStyle.substring(0, lastDot);
878 var stc = shapeStyle.substring(lastDot + 1, shapeStyle.length); 857 var stc = shapeStyle.substring(lastDot + 1, shapeStyle.length);
879 var tags = this.getTagsForStencil(pkg, stc, shapes[i].tags); 858 var tags = this.getTagsForStencil(pkg, stc, shapes[i].tags);
880 - 859 +
881 // TODO: Use shapetags for programmatic stencils 860 // TODO: Use shapetags for programmatic stencils
882 - if (tags != null)  
883 - { 861 + if (tags != null) {
884 // Converts stencil name to lowercase 862 // Converts stencil name to lowercase
885 var semi = style.indexOf(';'); 863 var semi = style.indexOf(';');
886 style = 'shape=' + pkg + '.' + stc.toLowerCase() + ';' + 864 style = 'shape=' + pkg + '.' + stc.toLowerCase() + ';' +
887 ((semi < 0) ? '' : style.substring(semi + 1)); 865 ((semi < 0) ? '' : style.substring(semi + 1));
888 this.setCurrentSearchEntryLibrary(shapes[i].id, shapes[i].lib); 866 this.setCurrentSearchEntryLibrary(shapes[i].id, shapes[i].lib);
889 this.createVertexTemplateEntry(style, parseInt(shapes[i].w), 867 this.createVertexTemplateEntry(style, parseInt(shapes[i].w),
890 - parseInt(shapes[i].h), '', stc.replace(/_/g, ' '),  
891 - null, null, this.filterTags(tags.join(' '))); 868 + parseInt(shapes[i].h), '', stc.replace(/_/g, ' '),
  869 + null, null, this.filterTags(tags.join(' ')));
892 this.setCurrentSearchEntryLibrary(); 870 this.setCurrentSearchEntryLibrary();
893 } 871 }
894 } 872 }
@@ -897,12 +875,11 @@ @@ -897,12 +875,11 @@
897 } 875 }
898 } 876 }
899 }; 877 };
900 - 878 +
901 /** 879 /**
902 * Overrides the sidebar init. 880 * Overrides the sidebar init.
903 */ 881 */
904 - Sidebar.prototype.initPalettes = function()  
905 - { 882 + Sidebar.prototype.initPalettes = function () {
906 var imgDir = GRAPH_IMAGE_PATH; 883 var imgDir = GRAPH_IMAGE_PATH;
907 var dir = STENCIL_PATH; 884 var dir = STENCIL_PATH;
908 var signs = this.signs; 885 var signs = this.signs;
@@ -910,38 +887,31 @@ @@ -910,38 +887,31 @@
910 var pids = this.pids; 887 var pids = this.pids;
911 var cisco = this.cisco; 888 var cisco = this.cisco;
912 var sysml = this.sysml; 889 var sysml = this.sysml;
913 -  
914 - if (urlParams['createindex'] == '1')  
915 - { 890 +
  891 + if (urlParams['createindex'] == '1') {
916 this.createdSearchIndex = []; 892 this.createdSearchIndex = [];
917 } 893 }
918 894
919 this.addSearchPalette(true); 895 this.addSearchPalette(true);
920 - 896 +
921 // Adds custom sections first 897 // Adds custom sections first
922 - if (this.customEntries != null)  
923 - { 898 + if (this.customEntries != null) {
924 var preloadCount = 0; 899 var preloadCount = 0;
925 -  
926 - for (var i = 0; i < this.customEntries.length; i++)  
927 - { 900 +
  901 + for (var i = 0; i < this.customEntries.length; i++) {
928 var section = this.customEntries[i]; 902 var section = this.customEntries[i];
929 -  
930 - for (var j = 0; j < section.entries.length; j++)  
931 - { 903 +
  904 + for (var j = 0; j < section.entries.length; j++) {
932 var entry = section.entries[j]; 905 var entry = section.entries[j];
933 -  
934 - for (var k = 0; k < entry.libs.length; k++)  
935 - {  
936 - (mxUtils.bind(this, function(lib)  
937 - { 906 +
  907 + for (var k = 0; k < entry.libs.length; k++) {
  908 + (mxUtils.bind(this, function (lib) {
938 var data = null; 909 var data = null;
939 var error = null; 910 var error = null;
940 var content = null; 911 var content = null;
941 var title = null; 912 var title = null;
942 -  
943 - var showError = mxUtils.bind(this, function(err, c)  
944 - { 913 +
  914 + var showError = mxUtils.bind(this, function (err, c) {
945 var div = document.createElement('span'); 915 var div = document.createElement('span');
946 div.style.paddingBottom = '6px'; 916 div.style.paddingBottom = '6px';
947 div.style.paddingTop = '6px'; 917 div.style.paddingTop = '6px';
@@ -950,144 +920,118 @@ @@ -950,144 +920,118 @@
950 c.innerHTML = '<img align="top" src="' + mxGraph.prototype.warningImage.src + '"/> '; 920 c.innerHTML = '<img align="top" src="' + mxGraph.prototype.warningImage.src + '"/> ';
951 c.appendChild(div); 921 c.appendChild(div);
952 }); 922 });
953 -  
954 - var barrier = mxUtils.bind(this, function()  
955 - {  
956 - if (content != null && title != null)  
957 - {  
958 - if (error != null)  
959 - { 923 +
  924 + var barrier = mxUtils.bind(this, function () {
  925 + if (content != null && title != null) {
  926 + if (error != null) {
960 content.style.display = 'block'; 927 content.style.display = 'block';
961 title.innerHTML = ''; 928 title.innerHTML = '';
962 mxUtils.write(title, this.editorUi.getResource(lib.title)); 929 mxUtils.write(title, this.editorUi.getResource(lib.title));
963 showError(error, content); 930 showError(error, content);
964 } 931 }
965 - else if (data != null)  
966 - { 932 + else if (data != null) {
967 this.editorUi.addLibraryEntries(data, content); 933 this.editorUi.addLibraryEntries(data, content);
968 content.style.display = 'block'; 934 content.style.display = 'block';
969 title.innerHTML = ''; 935 title.innerHTML = '';
970 mxUtils.write(title, this.editorUi.getResource(lib.title)); 936 mxUtils.write(title, this.editorUi.getResource(lib.title));
971 } 937 }
972 - else  
973 - { 938 + else {
974 content.style.display = 'none'; 939 content.style.display = 'none';
975 title.innerHTML = ''; 940 title.innerHTML = '';
976 mxUtils.write(title, mxResources.get('loading') + '...'); 941 mxUtils.write(title, mxResources.get('loading') + '...');
977 } 942 }
978 } 943 }
979 }); 944 });
980 -  
981 - if (lib.data == null && lib.url != null && (!lib.preload && preloadCount >= this.maxPreloadCount))  
982 - { 945 +
  946 + if (lib.data == null && lib.url != null && (!lib.preload && preloadCount >= this.maxPreloadCount)) {
983 this.addPalette(entry.id + '.' + k, this.editorUi.getResource(lib.title), 947 this.addPalette(entry.id + '.' + k, this.editorUi.getResource(lib.title),
984 - false, mxUtils.bind(this, function(content, title)  
985 - {  
986 - var dataLoaded = mxUtils.bind(this, function(images)  
987 - {  
988 - this.setCurrentSearchEntryLibrary(entry.id, entry.id + '.' + k);  
989 - this.addEntries(images);  
990 - this.setCurrentSearchEntryLibrary();  
991 - this.editorUi.addLibraryEntries(images, content);  
992 - });  
993 -  
994 - content.style.display = 'none';  
995 - title.innerHTML = '';  
996 - mxUtils.write(title, mxResources.get('loading') + '...');  
997 -  
998 - var url = lib.url;  
999 -  
1000 - if (!this.editorUi.editor.isCorsEnabledForUrl(url))  
1001 - {  
1002 - url = PROXY_URL + '?url=' + encodeURIComponent(url);  
1003 - }  
1004 -  
1005 - this.editorUi.editor.loadUrl(url, mxUtils.bind(this, function(data)  
1006 - {  
1007 - content.style.display = 'block'; 948 + false, mxUtils.bind(this, function (content, title) {
  949 + var dataLoaded = mxUtils.bind(this, function (images) {
  950 + this.setCurrentSearchEntryLibrary(entry.id, entry.id + '.' + k);
  951 + this.addEntries(images);
  952 + this.setCurrentSearchEntryLibrary();
  953 + this.editorUi.addLibraryEntries(images, content);
  954 + });
  955 +
  956 + content.style.display = 'none';
1008 title.innerHTML = ''; 957 title.innerHTML = '';
1009 - mxUtils.write(title, this.editorUi.getResource(lib.title)); 958 + mxUtils.write(title, mxResources.get('loading') + '...');
  959 +
  960 + var url = lib.url;
  961 +
  962 + if (!this.editorUi.editor.isCorsEnabledForUrl(url)) {
  963 + url = PROXY_URL + '?url=' + encodeURIComponent(url);
  964 + }
1010 965
1011 - try  
1012 - {  
1013 - var doc = mxUtils.parseXml(data);  
1014 -  
1015 - if (doc.documentElement.nodeName == 'mxlibrary')  
1016 - {  
1017 - var images = JSON.parse(mxUtils.getTextContent(doc.documentElement));  
1018 - dataLoaded(images); 966 + this.editorUi.editor.loadUrl(url, mxUtils.bind(this, function (data) {
  967 + content.style.display = 'block';
  968 + title.innerHTML = '';
  969 + mxUtils.write(title, this.editorUi.getResource(lib.title));
  970 +
  971 + try {
  972 + var doc = mxUtils.parseXml(data);
  973 +
  974 + if (doc.documentElement.nodeName == 'mxlibrary') {
  975 + var images = JSON.parse(mxUtils.getTextContent(doc.documentElement));
  976 + dataLoaded(images);
  977 + }
  978 + else {
  979 + showError(mxResources.get('notALibraryFile'), content);
  980 + }
1019 } 981 }
1020 - else  
1021 - {  
1022 - showError(mxResources.get('notALibraryFile'), content); 982 + catch (e) {
  983 + showError(mxResources.get('error') + ': ' + e.message, content);
1023 } 984 }
1024 - }  
1025 - catch (e)  
1026 - {  
1027 - showError(mxResources.get('error') + ': ' + e.message, content);  
1028 - } 985 + }));
1029 })); 986 }));
1030 - }));  
1031 } 987 }
1032 - else  
1033 - { 988 + else {
1034 this.addPalette(entry.id + '.' + k, this.editorUi.getResource(lib.title), 989 this.addPalette(entry.id + '.' + k, this.editorUi.getResource(lib.title),
1035 - false, mxUtils.bind(this, function(c, t)  
1036 - {  
1037 - content = c;  
1038 - title = t;  
1039 - barrier();  
1040 - }));  
1041 -  
1042 - if (lib.data != null)  
1043 - { 990 + false, mxUtils.bind(this, function (c, t) {
  991 + content = c;
  992 + title = t;
  993 + barrier();
  994 + }));
  995 +
  996 + if (lib.data != null) {
1044 this.setCurrentSearchEntryLibrary(entry.id, entry.id + '.' + k); 997 this.setCurrentSearchEntryLibrary(entry.id, entry.id + '.' + k);
1045 this.addEntries(lib.data); 998 this.addEntries(lib.data);
1046 this.setCurrentSearchEntryLibrary(); 999 this.setCurrentSearchEntryLibrary();
1047 data = lib.data; 1000 data = lib.data;
1048 barrier(); 1001 barrier();
1049 } 1002 }
1050 - else if (lib.url != null)  
1051 - {  
1052 - preloadCount++; 1003 + else if (lib.url != null) {
  1004 + preloadCount++;
1053 var url = lib.url; 1005 var url = lib.url;
1054 -  
1055 - if (!this.editorUi.editor.isCorsEnabledForUrl(url))  
1056 - { 1006 +
  1007 + if (!this.editorUi.editor.isCorsEnabledForUrl(url)) {
1057 url = PROXY_URL + '?url=' + encodeURIComponent(url); 1008 url = PROXY_URL + '?url=' + encodeURIComponent(url);
1058 } 1009 }
1059 -  
1060 - this.editorUi.editor.loadUrl(url, mxUtils.bind(this, function(temp)  
1061 - {  
1062 - try  
1063 - { 1010 +
  1011 + this.editorUi.editor.loadUrl(url, mxUtils.bind(this, function (temp) {
  1012 + try {
1064 var doc = mxUtils.parseXml(temp); 1013 var doc = mxUtils.parseXml(temp);
1065 -  
1066 - if (doc.documentElement.nodeName == 'mxlibrary')  
1067 - { 1014 +
  1015 + if (doc.documentElement.nodeName == 'mxlibrary') {
1068 data = JSON.parse(mxUtils.getTextContent(doc.documentElement)); 1016 data = JSON.parse(mxUtils.getTextContent(doc.documentElement));
1069 this.addEntries(data); 1017 this.addEntries(data);
1070 barrier(); 1018 barrier();
1071 } 1019 }
1072 - else  
1073 - { 1020 + else {
1074 error = mxResources.get('notALibraryFile'); 1021 error = mxResources.get('notALibraryFile');
1075 barrier(); 1022 barrier();
1076 } 1023 }
1077 } 1024 }
1078 - catch (e)  
1079 - { 1025 + catch (e) {
1080 error = mxResources.get('error') + ': ' + e.message; 1026 error = mxResources.get('error') + ': ' + e.message;
1081 barrier(); 1027 barrier();
1082 } 1028 }
1083 - }), mxUtils.bind(this, function(e)  
1084 - { 1029 + }), mxUtils.bind(this, function (e) {
1085 error = (e != null && e.message != null) ? e.message : e; 1030 error = (e != null && e.message != null) ? e.message : e;
1086 barrier(); 1031 barrier();
1087 })); 1032 }));
1088 } 1033 }
1089 - else  
1090 - { 1034 + else {
1091 error = mxResources.get('invalidInput'); 1035 error = mxResources.get('invalidInput');
1092 barrier(); 1036 barrier();
1093 } 1037 }
@@ -1143,7 +1087,7 @@ @@ -1143,7 +1087,7 @@
1143 'Server_Rack', 'Server_Rack_Empty', 'Server_Rack_Partial', 1087 'Server_Rack', 'Server_Rack_Empty', 'Server_Rack_Partial',
1144 'Server_Tower', 'Software', 'Stylus', 'Touch', 'USB_Hub', 1088 'Server_Tower', 'Software', 'Stylus', 'Touch', 'USB_Hub',
1145 'Virtual_Application', 'Virtual_Machine', 'Virus', 1089 'Virtual_Application', 'Virtual_Machine', 'Virus',
1146 - 'Workstation' ], [ 'Antivirus', 'Data Filtering', 'Database', 1090 + 'Workstation'], ['Antivirus', 'Data Filtering', 'Database',
1147 'Database Add', 'Database Minus', 'Database Move Stack', 1091 'Database Add', 'Database Minus', 'Database Move Stack',
1148 'Database Remove', 'Fujitsu Tablet', 'Harddrive', 'IBMTablet', 1092 'Database Remove', 'Fujitsu Tablet', 'Harddrive', 'IBMTablet',
1149 'iMac', 'iPad', 'Laptop', 'MacBook', 'Mainframe', 'Monitor', 1093 'iMac', 'iPad', 'Laptop', 'MacBook', 'Mainframe', 'Monitor',
@@ -1155,7 +1099,7 @@ @@ -1155,7 +1099,7 @@
1155 1099
1156 this.setCurrentSearchEntryLibrary('clipart', 'finance'); 1100 this.setCurrentSearchEntryLibrary('clipart', 'finance');
1157 this.addImagePalette('finance', 'Clipart / Finance', imgDir 1101 this.addImagePalette('finance', 'Clipart / Finance', imgDir
1158 - + '/lib/clip_art/finance/', '_128x128.png', [ 'Arrow_Down', 1102 + + '/lib/clip_art/finance/', '_128x128.png', ['Arrow_Down',
1159 'Arrow_Up', 'Coins', 'Credit_Card', 'Dollar', 'Graph', 1103 'Arrow_Up', 'Coins', 'Credit_Card', 'Dollar', 'Graph',
1160 'Pie_Chart', 'Piggy_Bank', 'Safe', 'Shopping_Cart', 1104 'Pie_Chart', 'Piggy_Bank', 'Safe', 'Shopping_Cart',
1161 'Stock_Down', 'Stock_Up'], ['Arrow_Down', 'Arrow Up', 1105 'Stock_Down', 'Stock_Up'], ['Arrow_Down', 'Arrow Up',
@@ -1164,11 +1108,11 @@ @@ -1164,11 +1108,11 @@
1164 1108
1165 this.setCurrentSearchEntryLibrary('clipart', 'clipart'); 1109 this.setCurrentSearchEntryLibrary('clipart', 'clipart');
1166 this.addImagePalette('clipart', 'Clipart / Various', imgDir 1110 this.addImagePalette('clipart', 'Clipart / Various', imgDir
1167 - + '/lib/clip_art/general/', '_128x128.png', [ 'Battery_0', 1111 + + '/lib/clip_art/general/', '_128x128.png', ['Battery_0',
1168 'Battery_100', 'Battery_50', 'Battery_75', 'Battery_allstates', 1112 'Battery_100', 'Battery_50', 'Battery_75', 'Battery_allstates',
1169 'Bluetooth', 'Earth_globe', 'Empty_Folder', 'Full_Folder', 1113 'Bluetooth', 'Earth_globe', 'Empty_Folder', 'Full_Folder',
1170 'Gear', 'Keys', 'Lock', 'Mouse_Pointer', 'Plug', 'Ships_Wheel', 1114 'Gear', 'Keys', 'Lock', 'Mouse_Pointer', 'Plug', 'Ships_Wheel',
1171 - 'Star', 'Tire' ], [ 'Battery 0%', 'Battery 100%', 'Battery 50%', 1115 + 'Star', 'Tire'], ['Battery 0%', 'Battery 100%', 'Battery 50%',
1172 'Battery 75%', 'Battery', 'Bluetooth', 'Globe', 1116 'Battery 75%', 'Battery', 'Bluetooth', 'Globe',
1173 'Empty Folder', 'Full Folder', 'Gear', 'Keys', 'Lock', 'Mousepointer', 1117 'Empty Folder', 'Full Folder', 'Gear', 'Keys', 'Lock', 'Mousepointer',
1174 'Plug', 'Ships Wheel', 'Star', 'Tire']); 1118 'Plug', 'Ships Wheel', 'Star', 'Tire']);
@@ -1176,14 +1120,14 @@ @@ -1176,14 +1120,14 @@
1176 this.setCurrentSearchEntryLibrary('clipart', 'networking'); 1120 this.setCurrentSearchEntryLibrary('clipart', 'networking');
1177 this.addImagePalette('networking', 'Clipart / Networking', imgDir 1121 this.addImagePalette('networking', 'Clipart / Networking', imgDir
1178 + '/lib/clip_art/networking/', '_128x128.png', ['Bridge', 1122 + '/lib/clip_art/networking/', '_128x128.png', ['Bridge',
1179 - 'Certificate', 'Certificate_Off', 'Cloud', 'Cloud_Computer',  
1180 - 'Cloud_Computer_Private', 'Cloud_Rack', 'Cloud_Rack_Private',  
1181 - 'Cloud_Server', 'Cloud_Server_Private', 'Cloud_Storage',  
1182 - 'Concentrator', 'Email', 'Firewall_02', 'Firewall',  
1183 - 'Firewall-page1', 'Ip_Camera', 'Modem',  
1184 - 'power_distribution_unit', 'Print_Server',  
1185 - 'Print_Server_Wireless', 'Repeater', 'Router', 'Router_Icon',  
1186 - 'Switch', 'UPS', 'Wireless_Router', 'Wireless_Router_N'], 1123 + 'Certificate', 'Certificate_Off', 'Cloud', 'Cloud_Computer',
  1124 + 'Cloud_Computer_Private', 'Cloud_Rack', 'Cloud_Rack_Private',
  1125 + 'Cloud_Server', 'Cloud_Server_Private', 'Cloud_Storage',
  1126 + 'Concentrator', 'Email', 'Firewall_02', 'Firewall',
  1127 + 'Firewall-page1', 'Ip_Camera', 'Modem',
  1128 + 'power_distribution_unit', 'Print_Server',
  1129 + 'Print_Server_Wireless', 'Repeater', 'Router', 'Router_Icon',
  1130 + 'Switch', 'UPS', 'Wireless_Router', 'Wireless_Router_N'],
1187 ['Bridge', 'Certificate', 'Certificate Off', 'Cloud', 'Cloud Computer', 1131 ['Bridge', 'Certificate', 'Certificate Off', 'Cloud', 'Cloud Computer',
1188 'Cloud Computer Private', 'Cloud Rack', 'Cloud Rack Private', 1132 'Cloud Computer Private', 'Cloud Rack', 'Cloud Rack Private',
1189 'Cloud Server', 'Cloud Server Private', 'Cloud Storage', 1133 'Cloud Server', 'Cloud Server Private', 'Cloud Storage',
@@ -1192,10 +1136,12 @@ @@ -1192,10 +1136,12 @@
1192 'Power Distribution Unit', 'Print Server', 1136 'Power Distribution Unit', 'Print Server',
1193 'Print Server Wireless', 'Repeater', 'Router', 'Router Icon', 1137 'Print Server Wireless', 'Repeater', 'Router', 'Router Icon',
1194 'Switch', 'UPS', 'Wireless Router', 'Wireless Router N'], 1138 'Switch', 'UPS', 'Wireless Router', 'Wireless Router N'],
1195 - {'Wireless_Router': 'wireless router switch wap wifi access point wlan', 1139 + {
  1140 + 'Wireless_Router': 'wireless router switch wap wifi access point wlan',
1196 'Wireless_Router_N': 'wireless router switch wap wifi access point wlan', 1141 'Wireless_Router_N': 'wireless router switch wap wifi access point wlan',
1197 'Router': 'router switch', 1142 'Router': 'router switch',
1198 - 'Router_Icon': 'router switch'}); 1143 + 'Router_Icon': 'router switch'
  1144 + });
1199 1145
1200 this.setCurrentSearchEntryLibrary('clipart', 'people'); 1146 this.setCurrentSearchEntryLibrary('clipart', 'people');
1201 this.addImagePalette('people', 'Clipart / People', imgDir 1147 this.addImagePalette('people', 'Clipart / People', imgDir
@@ -1226,8 +1172,8 @@ @@ -1226,8 +1172,8 @@
1226 this.setCurrentSearchEntryLibrary('clipart', 'telco'); 1172 this.setCurrentSearchEntryLibrary('clipart', 'telco');
1227 this.addImagePalette('telco', 'Clipart / Telecommunication', imgDir 1173 this.addImagePalette('telco', 'Clipart / Telecommunication', imgDir
1228 + '/lib/clip_art/telecommunication/', '_128x128.png', [ 1174 + '/lib/clip_art/telecommunication/', '_128x128.png', [
1229 - 'BlackBerry', 'Cellphone', 'HTC_smartphone', 'iPhone',  
1230 - 'Palm_Treo', 'Signal_tower_off', 'Signal_tower_on' ], 1175 + 'BlackBerry', 'Cellphone', 'HTC_smartphone', 'iPhone',
  1176 + 'Palm_Treo', 'Signal_tower_off', 'Signal_tower_on'],
1231 ['BlackBerry', 'Cellphone', 'HTC smartphone', 'iPhone', 1177 ['BlackBerry', 'Cellphone', 'HTC smartphone', 'iPhone',
1232 'Palm Treo', 'Signaltower off', 'Signaltower on']); 1178 'Palm Treo', 'Signaltower off', 'Signaltower on']);
1233 this.setCurrentSearchEntryLibrary(); 1179 this.setCurrentSearchEntryLibrary();
@@ -1287,46 +1233,41 @@ @@ -1287,46 +1233,41 @@
1287 this.addSignsPalette(signs, dir); 1233 this.addSignsPalette(signs, dir);
1288 // LATER: Check if conflicts with restore libs after loading file 1234 // LATER: Check if conflicts with restore libs after loading file
1289 this.showEntries(); 1235 this.showEntries();
1290 -  
1291 - if (this.createdSearchIndex != null)  
1292 - { 1236 +
  1237 + if (this.createdSearchIndex != null) {
1293 console.log('searchFileData', Graph.compress(JSON.stringify(this.createdSearchIndex))); 1238 console.log('searchFileData', Graph.compress(JSON.stringify(this.createdSearchIndex)));
1294 } 1239 }
1295 }; 1240 };
1296 - 1241 +
1297 /** 1242 /**
1298 * Overridden to manually create search index for stencil files which are not pre-loaded 1243 * Overridden to manually create search index for stencil files which are not pre-loaded
1299 * and no entries are created programmatically. 1244 * and no entries are created programmatically.
1300 */ 1245 */
1301 - if (urlParams['createindex'] == '1')  
1302 - { 1246 + if (urlParams['createindex'] == '1') {
1303 var sidebarAddStencilPalette = Sidebar.prototype.addStencilPalette; 1247 var sidebarAddStencilPalette = Sidebar.prototype.addStencilPalette;
1304 -  
1305 - Sidebar.prototype.addStencilPalette = function(id, title, stencilFile, style, ignore, onInit, scale, tags, customFns, groupId)  
1306 - { 1248 +
  1249 + Sidebar.prototype.addStencilPalette = function (id, title, stencilFile, style, ignore, onInit, scale, tags, customFns, groupId) {
1307 sidebarAddStencilPalette.apply(this, arguments); 1250 sidebarAddStencilPalette.apply(this, arguments);
1308 scale = (scale != null) ? scale : 1; 1251 scale = (scale != null) ? scale : 1;
1309 - 1252 +
1310 // Used for creating index 1253 // Used for creating index
1311 - mxStencilRegistry.loadStencilSet(stencilFile, mxUtils.bind(this, function(packageName, stencilName, displayName, w, h)  
1312 - {  
1313 - if (this.createdSearchIndex != null && ignore == null || mxUtils.indexOf(ignore, stencilName) < 0)  
1314 - {  
1315 - var entry = {style: 'shape=' + packageName + stencilName + style,  
1316 - w: Math.round(w * scale), h: Math.round(h * scale)}; 1254 + mxStencilRegistry.loadStencilSet(stencilFile, mxUtils.bind(this, function (packageName, stencilName, displayName, w, h) {
  1255 + if (this.createdSearchIndex != null && ignore == null || mxUtils.indexOf(ignore, stencilName) < 0) {
  1256 + var entry = {
  1257 + style: 'shape=' + packageName + stencilName + style,
  1258 + w: Math.round(w * scale), h: Math.round(h * scale)
  1259 + };
1317 var tmpTags = (tags != null) ? tags[stencilName] : null; 1260 var tmpTags = (tags != null) ? tags[stencilName] : null;
1318 -  
1319 - if (tmpTags != null)  
1320 - { 1261 +
  1262 + if (tmpTags != null) {
1321 entry.tags = tmpTags; 1263 entry.tags = tmpTags;
1322 } 1264 }
1323 -  
1324 - if (groupId != null)  
1325 - { 1265 +
  1266 + if (groupId != null) {
1326 entry.id = groupId; 1267 entry.id = groupId;
1327 entry.lib = id; 1268 entry.lib = id;
1328 } 1269 }
1329 - 1270 +
1330 this.createdSearchIndex.push(entry); 1271 this.createdSearchIndex.push(entry);
1331 } 1272 }
1332 }), true); 1273 }), true);
@@ -1336,27 +1277,21 @@ @@ -1336,27 +1277,21 @@
1336 /** 1277 /**
1337 * Extracs icons from the search result. 1278 * Extracs icons from the search result.
1338 */ 1279 */
1339 - Sidebar.prototype.extractIconsFromResponse = function(res, results)  
1340 - {  
1341 - for (var i = 0; i < res.icons.length; i++)  
1342 - { 1280 + Sidebar.prototype.extractIconsFromResponse = function (res, results) {
  1281 + for (var i = 0; i < res.icons.length; i++) {
1343 var sizes = res.icons[i].raster_sizes; 1282 var sizes = res.icons[i].raster_sizes;
1344 var index = sizes.length - 1; 1283 var index = sizes.length - 1;
1345 -  
1346 - while (index > 0 && sizes[index].size > 128)  
1347 - { 1284 +
  1285 + while (index > 0 && sizes[index].size > 128) {
1348 index--; 1286 index--;
1349 } 1287 }
1350 1288
1351 var size = sizes[index].size; 1289 var size = sizes[index].size;
1352 var url = sizes[index].formats[0].preview_url; 1290 var url = sizes[index].formats[0].preview_url;
1353 1291
1354 - if (size != null && url != null)  
1355 - {  
1356 - (mxUtils.bind(this, function(s, u)  
1357 - {  
1358 - results.push(mxUtils.bind(this, function()  
1359 - { 1292 + if (size != null && url != null) {
  1293 + (mxUtils.bind(this, function (s, u) {
  1294 + results.push(mxUtils.bind(this, function () {
1360 return this.createVertexTemplate('shape=image;html=1;verticalAlign=top;' + 1295 return this.createVertexTemplate('shape=image;html=1;verticalAlign=top;' +
1361 'verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;' + 1296 'verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;' +
1362 'aspect=fixed;image=' + u, s, s, ''); 1297 'aspect=fixed;image=' + u, s, s, '');
@@ -1365,84 +1300,68 @@ @@ -1365,84 +1300,68 @@
1365 } 1300 }
1366 } 1301 }
1367 }; 1302 };
1368 - 1303 +
1369 /** 1304 /**
1370 * Adds server icon results to local search results 1305 * Adds server icon results to local search results
1371 */ 1306 */
1372 var sidebarSearchEntries = Sidebar.prototype.searchEntries; 1307 var sidebarSearchEntries = Sidebar.prototype.searchEntries;
1373 -  
1374 - Sidebar.prototype.searchEntries = function(searchTerms, count, page, success, error)  
1375 - { 1308 +
  1309 + Sidebar.prototype.searchEntries = function (searchTerms, count, page, success, error) {
1376 var succ = success; 1310 var succ = success;
1377 - 1311 +
1378 // Lazy-load indices 1312 // Lazy-load indices
1379 - if (this.searchIndexData != null)  
1380 - { 1313 + if (this.searchIndexData != null) {
1381 this.addSearchIndex(JSON.parse(Graph.decompress(this.searchIndexData))); 1314 this.addSearchIndex(JSON.parse(Graph.decompress(this.searchIndexData)));
1382 this.searchIndexData = null; 1315 this.searchIndexData = null;
1383 } 1316 }
1384 -  
1385 - if (ICONSEARCH_PATH != null)  
1386 - {  
1387 - success = mxUtils.bind(this, function(results, len, more, terms)  
1388 - {  
1389 - if (!this.editorUi.isOffline() && results.length <= count / 4)  
1390 - { 1317 +
  1318 + if (ICONSEARCH_PATH != null) {
  1319 + success = mxUtils.bind(this, function (results, len, more, terms) {
  1320 + if (!this.editorUi.isOffline() && results.length <= count / 4) {
1391 var pg = page - Math.ceil((len - count / 4) / count); 1321 var pg = page - Math.ceil((len - count / 4) / count);
1392 - 1322 +
1393 mxUtils.get(ICONSEARCH_PATH + '?q=' + encodeURIComponent(searchTerms) + 1323 mxUtils.get(ICONSEARCH_PATH + '?q=' + encodeURIComponent(searchTerms) +
1394 - '&p=' + pg + '&c=' + count, mxUtils.bind(this, function(req)  
1395 - {  
1396 - try  
1397 - {  
1398 - // Ignore response if nothing or error returned  
1399 - if (req.getStatus() >= 200 && req.getStatus() <= 299 &&  
1400 - req.getText() != null && req.getText().length > 0)  
1401 - {  
1402 - try  
1403 - {  
1404 - var res = JSON.parse(req.getText());  
1405 -  
1406 - if (res == null || res.icons == null)  
1407 - {  
1408 - succ(results, len, false, terms);  
1409 - this.editorUi.handleError(res); 1324 + '&p=' + pg + '&c=' + count, mxUtils.bind(this, function (req) {
  1325 + try {
  1326 + // Ignore response if nothing or error returned
  1327 + if (req.getStatus() >= 200 && req.getStatus() <= 299 &&
  1328 + req.getText() != null && req.getText().length > 0) {
  1329 + try {
  1330 + var res = JSON.parse(req.getText());
  1331 +
  1332 + if (res == null || res.icons == null) {
  1333 + succ(results, len, false, terms);
  1334 + this.editorUi.handleError(res);
  1335 + }
  1336 + else {
  1337 + this.extractIconsFromResponse(res, results);
  1338 + succ(results, (page - 1) * count + results.length, res.icons.length == count, terms);
  1339 + }
1410 } 1340 }
1411 - else  
1412 - {  
1413 - this.extractIconsFromResponse(res, results);  
1414 - succ(results, (page - 1) * count + results.length, res.icons.length == count, terms); 1341 + catch (e) {
  1342 + succ(results, len, false, terms);
  1343 + this.editorUi.handleError(e);
1415 } 1344 }
1416 } 1345 }
1417 - catch (e)  
1418 - { 1346 + else {
1419 succ(results, len, false, terms); 1347 succ(results, len, false, terms);
1420 - this.editorUi.handleError(e);  
1421 } 1348 }
1422 } 1349 }
1423 - else  
1424 - { 1350 + catch (e) {
1425 succ(results, len, false, terms); 1351 succ(results, len, false, terms);
  1352 + this.editorUi.handleError(e);
1426 } 1353 }
1427 - }  
1428 - catch (e)  
1429 - {  
1430 - succ(results, len, false, terms);  
1431 - this.editorUi.handleError(e);  
1432 - }  
1433 - },  
1434 - function()  
1435 - {  
1436 - succ(results, len, false, terms);  
1437 - })); 1354 + },
  1355 + function () {
  1356 + succ(results, len, false, terms);
  1357 + }));
1438 } 1358 }
1439 - else  
1440 - { 1359 + else {
1441 succ(results, len, more || !this.editorUi.isOffline(), terms); 1360 succ(results, len, more || !this.editorUi.isOffline(), terms);
1442 } 1361 }
1443 }); 1362 });
1444 } 1363 }
1445 - 1364 +
1446 sidebarSearchEntries.apply(this, arguments); 1365 sidebarSearchEntries.apply(this, arguments);
1447 }; 1366 };
1448 1367
@@ -1450,27 +1369,22 @@ @@ -1450,27 +1369,22 @@
1450 * Adds a click handler for inserting the cell as target for dangling edge. 1369 * Adds a click handler for inserting the cell as target for dangling edge.
1451 */ 1370 */
1452 var sidebarItemClicked = Sidebar.prototype.itemClicked; 1371 var sidebarItemClicked = Sidebar.prototype.itemClicked;
1453 -  
1454 - Sidebar.prototype.itemClicked = function(cells, ds, evt)  
1455 - { 1372 +
  1373 + Sidebar.prototype.itemClicked = function (cells, ds, evt) {
1456 var graph = this.editorUi.editor.graph; 1374 var graph = this.editorUi.editor.graph;
1457 var handled = false; 1375 var handled = false;
1458 -  
1459 - if (cells != null && graph.getSelectionCount() == 1 && graph.getModel().isVertex(cells[0]))  
1460 - { 1376 +
  1377 + if (cells != null && graph.getSelectionCount() == 1 && graph.getModel().isVertex(cells[0])) {
1461 var target = graph.cloneCell(cells[0]); 1378 var target = graph.cloneCell(cells[0]);
1462 - 1379 +
1463 // Inserts cell as target of selected edge if not connected 1380 // Inserts cell as target of selected edge if not connected
1464 if (graph.getModel().isEdge(graph.getSelectionCell()) && graph.getModel().getTerminal(graph.getSelectionCell(), false) == null && 1381 if (graph.getModel().isEdge(graph.getSelectionCell()) && graph.getModel().getTerminal(graph.getSelectionCell(), false) == null &&
1465 - graph.getModel().isVertex(target))  
1466 - { 1382 + graph.getModel().isVertex(target)) {
1467 graph.getModel().beginUpdate(); 1383 graph.getModel().beginUpdate();
1468 - try  
1469 - { 1384 + try {
1470 var edgeState = graph.view.getState(graph.getSelectionCell()); 1385 var edgeState = graph.view.getState(graph.getSelectionCell());
1471 -  
1472 - if (edgeState != null)  
1473 - { 1386 +
  1387 + if (edgeState != null) {
1474 var tr = graph.view.translate; 1388 var tr = graph.view.translate;
1475 var s = graph.view.scale; 1389 var s = graph.view.scale;
1476 var pt = edgeState.absolutePoints[edgeState.absolutePoints.length - 1]; 1390 var pt = edgeState.absolutePoints[edgeState.absolutePoints.length - 1];
@@ -1478,32 +1392,28 @@ @@ -1478,32 +1392,28 @@
1478 target.geometry.x = pt.x / s - tr.x - target.geometry.width / 2; 1392 target.geometry.x = pt.x / s - tr.x - target.geometry.width / 2;
1479 target.geometry.y = pt.y / s - tr.y - target.geometry.height / 2; 1393 target.geometry.y = pt.y / s - tr.y - target.geometry.height / 2;
1480 } 1394 }
1481 - 1395 +
1482 graph.addCell(target); 1396 graph.addCell(target);
1483 graph.getModel().setTerminal(graph.getSelectionCell(), target, false); 1397 graph.getModel().setTerminal(graph.getSelectionCell(), target, false);
1484 -  
1485 - if (evt == null || !mxEvent.isShiftDown(evt))  
1486 - { 1398 +
  1399 + if (evt == null || !mxEvent.isShiftDown(evt)) {
1487 graph.fireEvent(new mxEventObject('cellsInserted', 'cells', [target])); 1400 graph.fireEvent(new mxEventObject('cellsInserted', 'cells', [target]));
1488 } 1401 }
1489 } 1402 }
1490 - catch (e)  
1491 - { 1403 + catch (e) {
1492 this.editorUi.handleError(e); 1404 this.editorUi.handleError(e);
1493 } 1405 }
1494 - finally  
1495 - { 1406 + finally {
1496 graph.getModel().endUpdate(); 1407 graph.getModel().endUpdate();
1497 } 1408 }
1498 - 1409 +
1499 graph.scrollCellToVisible(target); 1410 graph.scrollCellToVisible(target);
1500 graph.setSelectionCell(target); 1411 graph.setSelectionCell(target);
1501 handled = true; 1412 handled = true;
1502 } 1413 }
1503 } 1414 }
1504 -  
1505 - if (!handled)  
1506 - { 1415 +
  1416 + if (!handled) {
1507 sidebarItemClicked.apply(this, arguments); 1417 sidebarItemClicked.apply(this, arguments);
1508 } 1418 }
1509 }; 1419 };
@@ -8,13 +8,20 @@ @@ -8,13 +8,20 @@
8 this.createVertexTemplateEntry('text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;', 100, 40, '变量', '变量', null, null, '变量'), 8 this.createVertexTemplateEntry('text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;', 100, 40, '变量', '变量', null, null, '变量'),
9 this.createEdgeTemplateEntry('shape=filledEdge;rounded=1;fixDash=1;endArrow=none;strokeWidth=10;fillColor=none;edgeStyle=orthogonalEdgeStyle;flowAnimation=1;strokeColor=#6666FF;endFill=1;metaEdit=0;backgroundOutline=0;', 60, 40, '', '线条'), 9 this.createEdgeTemplateEntry('shape=filledEdge;rounded=1;fixDash=1;endArrow=none;strokeWidth=10;fillColor=none;edgeStyle=orthogonalEdgeStyle;flowAnimation=1;strokeColor=#6666FF;endFill=1;metaEdit=0;backgroundOutline=0;', 60, 40, '', '线条'),
10 this.addEntry('real time', mxUtils.bind(this, function () { 10 this.addEntry('real time', mxUtils.bind(this, function () {
11 - const template = `<div class="thingKit-component__real-time"><div class="real-time__date">%currentDate%</div> <div style="font-size:30px" class="real-time__now">%date{HH:MM:ss}%</div></div>` 11 + // const template = `<div class="thingKit-component__real-time"><div class="real-time__date">%currentDate%</div> <div style="font-size:30px" class="real-time__now">%date{HH:MM:ss}%</div></div>`
  12 + const template = `<div class="thingKit-component__real-time"><div class="real-time__date"></div> <div style="font-size:30px" class="real-time__now">时间</div></div>`
12 const cell = new mxCell(template, new mxGeometry(0, 0, 180, 60), 'text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;'); 13 const cell = new mxCell(template, new mxGeometry(0, 0, 180, 60), 'text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;');
13 cell.vertex = true; 14 cell.vertex = true;
14 this.graph.setAttributeForCell(cell, 'placeholders', '1'); 15 this.graph.setAttributeForCell(cell, 'placeholders', '1');
15 this.graph.setAttributeForCell(cell, 'currentDate', currentDate); 16 this.graph.setAttributeForCell(cell, 'currentDate', currentDate);
16 - return this.createVertexTemplateFromCells([cell], cell.geometry.width, cell.geometry.height, 'realTime'); 17 + return this.createVertexTemplateFromCells([cell], cell.geometry.width, cell.geometry.height, '实时时间');
17 })), 18 })),
  19 + this.addEntry(this.getTagsForStencil('mxgraph.basic', '变量图片', 'basic').join(' '), mxUtils.bind(this, function () {
  20 + const cell = new mxCell('', new mxGeometry(0, 0, 194, 95), 'image;image=images/thingskit/img-placeholder.png;imageAspect=0;');
  21 + cell.setVertex(true)
  22 + this.setCellAttributes(cell, { componentType: 'variableImage' })
  23 + return this.createVertexTemplateFromCells([cell], cell.geometry.width, cell.geometry.height, '变量图片');
  24 + }))
18 ]; 25 ];
19 26
20 this.addPaletteFunctions('component', '基础元件', true, fns); 27 this.addPaletteFunctions('component', '基础元件', true, fns);
@@ -31,4 +38,19 @@ @@ -31,4 +38,19 @@
31 var day = date.getDay(); 38 var day = date.getDay();
32 return year + '年' + month + '月' + dates + '日 ' + arr[day]; 39 return year + '年' + month + '月' + dates + '日 ' + arr[day];
33 } 40 }
  41 +
  42 + /**
  43 + * @description 初始化实时事件组件
  44 + */
  45 + function initRealTimeComponent() {
  46 + RAFSetInterval(() => {
  47 + const allTimeNode = document.querySelectorAll('.thingKit-component__real-time .real-time__now')
  48 + for (const time of allTimeNode) {
  49 + const date = new Date()
  50 + time.innerHTML = `${date.getHours() < 10 ? '0' : ''}${date.getHours()}:${date.getMinutes() < 10 ? '0' : ''}${date.getMinutes()}:${date.getSeconds() < 10 ? '0' : ''}${date.getSeconds()}`
  51 + }
  52 + }, 1000)
  53 + }
  54 +
  55 + initRealTimeComponent()
34 })(); 56 })();
@@ -21,12 +21,12 @@ @@ -21,12 +21,12 @@
21 this.addEntry('line chart', mxUtils.bind(this, function () { 21 this.addEntry('line chart', mxUtils.bind(this, function () {
22 const id = self.generatorChartsId() 22 const id = self.generatorChartsId()
23 const cell = self.generatorCell(id, enumConst.CHART_IMG_PLACEHOLDER_SIZE, enumConst.CHART_IMG_PLACEHOLDER_SIZE, enumChartType.LINE_CHART) 23 const cell = self.generatorCell(id, enumConst.CHART_IMG_PLACEHOLDER_SIZE, enumConst.CHART_IMG_PLACEHOLDER_SIZE, enumChartType.LINE_CHART)
24 - return this.createVertexTemplateFromCells([ cell ], cell.geometry.width, cell.geometry.height, '折线图'); 24 + return this.createVertexTemplateFromCells([cell], cell.geometry.width, cell.geometry.height, '折线图');
25 })), 25 })),
26 this.addEntry('bar chart', mxUtils.bind(this, function () { 26 this.addEntry('bar chart', mxUtils.bind(this, function () {
27 const id = self.generatorChartsId() 27 const id = self.generatorChartsId()
28 const cell = self.generatorCell(id, enumConst.CHART_IMG_PLACEHOLDER_SIZE, enumConst.CHART_IMG_PLACEHOLDER_SIZE, enumChartType.BAR_CHART, '/thingskit-drawio/images/thingskit/bar-chart.png') 28 const cell = self.generatorCell(id, enumConst.CHART_IMG_PLACEHOLDER_SIZE, enumConst.CHART_IMG_PLACEHOLDER_SIZE, enumChartType.BAR_CHART, '/thingskit-drawio/images/thingskit/bar-chart.png')
29 - return this.createVertexTemplateFromCells([ cell ], cell.geometry.width, cell.geometry.height, '柱状图'); 29 + return this.createVertexTemplateFromCells([cell], cell.geometry.width, cell.geometry.height, '柱状图');
30 })), 30 })),
31 ]; 31 ];
32 32
@@ -43,7 +43,7 @@ @@ -43,7 +43,7 @@
43 43
44 /** 44 /**
45 * @description Sidebar 类型枚举 45 * @description Sidebar 类型枚举
46 - * @type {{CHART_CELL_DEFAULT_WIDTH: number, CHART_CELL_HEIGHT: string, CHART_CELL_DEFAULT_HEIGHT: number, CHART_TYPE_KEY: string, CHART_CELL_WIDTH: string, CHART_COMP: string, CHART_CELL_ID: string, CHART_CONTAINER_ID_PREFIX: string, CHART_IMG_PLACEHOLDER_SIZE: number, COMPONENTS_TYPE_KEY: string, CHART_CONTAINER_CLS: string}} 46 + * @type {{CHART_CELL_DEFAULT_WIDTH: number, CHART_CELL_HEIGHT: string, CHART_CELL_DEFAULT_HEIGHT: number, CHART_TYPE_KEY: string, CHART_CELL_WIDTH: string, CHART_COMP: string, CHART_CELL_ID: string, CHART_CONTAINER_ID_PREFIX: string, CHART_IMG_PLACEHOLDER_SIZE: number, COMPONENT_TYPE_KEY: string, CHART_CONTAINER_CLS: string}}
47 */ 47 */
48 Sidebar.prototype.enumConst = { 48 Sidebar.prototype.enumConst = {
49 49
@@ -70,7 +70,7 @@ @@ -70,7 +70,7 @@
70 /** 70 /**
71 * @description cell 类型是否为 charts 71 * @description cell 类型是否为 charts
72 */ 72 */
73 - CHART_COMP: 'charts', 73 + CHART_COMP: Sidebar.prototype.enumComponentType.CHARTS,
74 74
75 /** 75 /**
76 * @description cell id key 76 * @description cell id key
@@ -80,7 +80,7 @@ @@ -80,7 +80,7 @@
80 /** 80 /**
81 * @description 组件类型 key 81 * @description 组件类型 key
82 */ 82 */
83 - COMPONENTS_TYPE_KEY: 'componentsType', 83 + COMPONENT_TYPE_KEY: Sidebar.prototype.enumCellBasicAttribute.COMPONENT_TYPE,
84 84
85 /** 85 /**
86 * @description 图表容器 class name 86 * @description 图表容器 class name
@@ -121,14 +121,14 @@ @@ -121,14 +121,14 @@
121 return { 121 return {
122 xAxis: { 122 xAxis: {
123 type: 'category', 123 type: 'category',
124 - data: [ 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun' ], 124 + data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
125 }, 125 },
126 yAxis: { 126 yAxis: {
127 type: 'value', 127 type: 'value',
128 }, 128 },
129 series: [ 129 series: [
130 { 130 {
131 - data: [ 150, 230, 224, 218, 135, 147, 260 ], 131 + data: [150, 230, 224, 218, 135, 147, 260],
132 type: 'line', 132 type: 'line',
133 }, 133 },
134 ], 134 ],
@@ -138,14 +138,14 @@ @@ -138,14 +138,14 @@
138 return { 138 return {
139 xAxis: { 139 xAxis: {
140 type: 'category', 140 type: 'category',
141 - data: [ 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun' ], 141 + data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
142 }, 142 },
143 yAxis: { 143 yAxis: {
144 type: 'value', 144 type: 'value',
145 }, 145 },
146 series: [ 146 series: [
147 { 147 {
148 - data: [ 120, 200, 150, 80, 70, 110, 130 ], 148 + data: [120, 200, 150, 80, 70, 110, 130],
149 type: 'bar', 149 type: 'bar',
150 showBackground: true, 150 showBackground: true,
151 backgroundStyle: { 151 backgroundStyle: {
@@ -170,7 +170,7 @@ @@ -170,7 +170,7 @@
170 const enumConst = this.enumConst 170 const enumConst = this.enumConst
171 const cell = new mxCell(this.createChartsNode(id, width, height, placeholderPath), new mxGeometry(0, 0, width, height), 'text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;'); 171 const cell = new mxCell(this.createChartsNode(id, width, height, placeholderPath), new mxGeometry(0, 0, width, height), 'text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;');
172 cell.setVertex(true) 172 cell.setVertex(true)
173 - this.graph.setAttributeForCell(cell, enumConst.COMPONENTS_TYPE_KEY, 'charts'); 173 + this.graph.setAttributeForCell(cell, enumConst.COMPONENT_TYPE_KEY, 'charts');
174 this.graph.setAttributeForCell(cell, enumConst.CHART_CELL_ID, id); 174 this.graph.setAttributeForCell(cell, enumConst.CHART_CELL_ID, id);
175 this.graph.setAttributeForCell(cell, enumConst.CHART_CELL_WIDTH, width) 175 this.graph.setAttributeForCell(cell, enumConst.CHART_CELL_WIDTH, width)
176 this.graph.setAttributeForCell(cell, enumConst.CHART_CELL_HEIGHT, height) 176 this.graph.setAttributeForCell(cell, enumConst.CHART_CELL_HEIGHT, height)
@@ -185,7 +185,7 @@ @@ -185,7 +185,7 @@
185 */ 185 */
186 Sidebar.prototype.generatorChartsId = function () { 186 Sidebar.prototype.generatorChartsId = function () {
187 const enumConst = Sidebar.prototype.enumConst 187 const enumConst = Sidebar.prototype.enumConst
188 - return `${ enumConst.CHART_CONTAINER_ID_PREFIX }${ Date.now() }` 188 + return `${enumConst.CHART_CONTAINER_ID_PREFIX}${Date.now()}`
189 } 189 }
190 190
191 /** 191 /**
@@ -197,7 +197,7 @@ @@ -197,7 +197,7 @@
197 * @returns {string} 197 * @returns {string}
198 */ 198 */
199 Sidebar.prototype.createChartsNode = function (id, width = 400, height = 400, placeholderPath = '/thingskit-drawio/images/thingskit/line-chart.png') { 199 Sidebar.prototype.createChartsNode = function (id, width = 400, height = 400, placeholderPath = '/thingskit-drawio/images/thingskit/line-chart.png') {
200 - return `<div class="echarts__instance" style="width: ${ width }px; height: ${ height }px" id="${ id }"><img src="${ placeholderPath }" alt=""></div>` 200 + return `<div class="echarts__instance" style="width: ${width}px; height: ${height}px" id="${id}"><img src="${placeholderPath}" alt=""></div>`
201 } 201 }
202 202
203 /** 203 /**
@@ -207,8 +207,8 @@ @@ -207,8 +207,8 @@
207 */ 207 */
208 Sidebar.prototype.isChartCell = function (cell) { 208 Sidebar.prototype.isChartCell = function (cell) {
209 const enumConst = Sidebar.prototype.enumConst 209 const enumConst = Sidebar.prototype.enumConst
210 - const componentsType = cell.getAttribute(enumConst.COMPONENTS_TYPE_KEY)  
211 - return !!(componentsType && componentsType === enumConst.CHART_COMP) 210 + const componentType = cell.getAttribute(enumConst.COMPONENT_TYPE_KEY)
  211 + return !!(componentType && componentType === enumConst.CHART_COMP)
212 } 212 }
213 213
214 /** 214 /**
@@ -222,8 +222,8 @@ @@ -222,8 +222,8 @@
222 const chartOptionMapping = this.chartOptionMapping 222 const chartOptionMapping = this.chartOptionMapping
223 const chartsInstanceMapping = this.chartsInstanceMapping 223 const chartsInstanceMapping = this.chartsInstanceMapping
224 const chartDom = document.getElementById(id); 224 const chartDom = document.getElementById(id);
225 - chartDom.style.width = `${ width }px`  
226 - chartDom.style.height = `${ height }px` 225 + chartDom.style.width = `${width}px`
  226 + chartDom.style.height = `${height}px`
227 const myChart = echarts.init(chartDom); 227 const myChart = echarts.init(chartDom);
228 const option = chartOptionMapping[chartType] ? chartOptionMapping[chartType]() : {} 228 const option = chartOptionMapping[chartType] ? chartOptionMapping[chartType]() : {}
229 option && myChart.setOption(option); 229 option && myChart.setOption(option);
@@ -304,8 +304,8 @@ @@ -304,8 +304,8 @@
304 const { width, height } = rect 304 const { width, height } = rect
305 const id = self.getCellId(cell) 305 const id = self.getCellId(cell)
306 const chartDom = document.getElementById(id) 306 const chartDom = document.getElementById(id)
307 - chartDom.style.width = `${ width }px`  
308 - chartDom.style.height = `${ height }px` 307 + chartDom.style.width = `${width}px`
  308 + chartDom.style.height = `${height}px`
309 self.graph.setAttributeForCell(cell, enumConst.CHART_CELL_WIDTH, width) 309 self.graph.setAttributeForCell(cell, enumConst.CHART_CELL_WIDTH, width)
310 self.graph.setAttributeForCell(cell, enumConst.CHART_CELL_HEIGHT, height) 310 self.graph.setAttributeForCell(cell, enumConst.CHART_CELL_HEIGHT, height)
311 const instance = chartsInstanceMapping.get(id) 311 const instance = chartsInstanceMapping.get(id)
@@ -338,7 +338,7 @@ @@ -338,7 +338,7 @@
338 if (validateFlag) { 338 if (validateFlag) {
339 const cell = self.generatorCell(id, enumConst.CHART_CELL_DEFAULT_WIDTH, enumConst.CHART_CELL_DEFAULT_HEIGHT, chartType) 339 const cell = self.generatorCell(id, enumConst.CHART_CELL_DEFAULT_WIDTH, enumConst.CHART_CELL_DEFAULT_HEIGHT, chartType)
340 const _arguments = Array.prototype.slice.call(arguments, 0) 340 const _arguments = Array.prototype.slice.call(arguments, 0)
341 - _arguments.splice(1, 1, [ cell ]) 341 + _arguments.splice(1, 1, [cell])
342 createTooltip.apply(this, _arguments) 342 createTooltip.apply(this, _arguments)
343 } else { 343 } else {
344 createTooltip.apply(this, arguments) 344 createTooltip.apply(this, arguments)
@@ -366,7 +366,7 @@ @@ -366,7 +366,7 @@
366 domIdMapping.set(chartInstanceId, { width, height, chartType }) 366 domIdMapping.set(chartInstanceId, { width, height, chartType })
367 } 367 }
368 } 368 }
369 - const chartsDomList = document.querySelectorAll(`.${ enumConst.CHART_CONTAINER_CLS }`) 369 + const chartsDomList = document.querySelectorAll(`.${enumConst.CHART_CONTAINER_CLS}`)
370 for (const chartDom of chartsDomList) { 370 for (const chartDom of chartsDomList) {
371 const id = chartDom.getAttribute('id') 371 const id = chartDom.getAttribute('id')
372 if (!domIdMapping.has(id)) { 372 if (!domIdMapping.has(id)) {
1 -(function()  
2 -{ 1 +(function () {
3 // Adds Atlassian shapes 2 // Adds Atlassian shapes
4 - // 发动机  
5 - Sidebar.prototype.addEnginePalette = function()  
6 - {  
7 - var gn = 'mxgraph.engine';  
8 - var dt = 'engine ';  
9 - this.setCurrentSearchEntryLibrary('engine'); 3 + // engine 发动机
  4 + Sidebar.prototype.addEnginePalette = function () {
  5 + const gn = 'mxgraph.engine';
  6 + const dt = 'engine';
  7 + const label = '发动机'
  8 + const width = 66;
  9 + const height = 74;
  10 + const staticPath = '/thingskit-drawio/img/lib/thingskit/'
  11 + const prefix = 'image;image=img/lib/thingskit/'
  12 + const defaultStyle = ';imageAspect=0;'
  13 + this.setCurrentSearchEntryLibrary(dt);
10 14
11 - var fns = [  
12 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/3-D 发动机.svg;imageAspect=0;',  
13 - 66, 66, '', '3-D 发动机', null, null, this.getTagsForStencil(gn, '3-D 发动机', dt).join(' ')),  
14 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/步进电机驱动器.svg;imageAspect=0;',  
15 - 64, 74, '', '步进电机驱动器', null, null, this.getTagsForStencil(gn, '步进电机驱动器', dt).join(' ')),  
16 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/伺服电机.svg;imageAspect=0;',  
17 - 64, 74, '', '伺服电机', null, null, this.getTagsForStencil(gn, '伺服电机', dt).join(' ')),  
18 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/伺服电机2.svg;imageAspect=0;',  
19 - 64, 74, '', '伺服电机2', null, null, this.getTagsForStencil(gn, '伺服电机2', dt).join(' ')),  
20 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/促动器.svg;imageAspect=0;',  
21 - 64, 74, '', '促动机', null, null, this.getTagsForStencil(gn, '促动器', dt).join(' ')),  
22 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/发动机 1.svg;imageAspect=0;',  
23 - 64, 74, '', '发动机 1', null, null, this.getTagsForStencil(gn, '发动机 1', dt).join(' ')),  
24 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/发动机 2.svg;imageAspect=0;',  
25 - 64, 74, '', '发动机 2', null, null, this.getTagsForStencil(gn, '发动机 2', dt).join(' ')),  
26 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/发动机 3.svg;imageAspect=0;',  
27 - 64, 74, '', '发动机 3', null, null, this.getTagsForStencil(gn, '发动机 3', dt).join(' ')),  
28 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/发动机 4.svg;imageAspect=0;',  
29 - 64, 74, '', '发动机 4', null, null, this.getTagsForStencil(gn, '发动机 4', dt).join(' ')),  
30 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/防爆电动机.svg;imageAspect=0;',  
31 - 64, 74, '', '防爆电动机', null, null, this.getTagsForStencil(gn, '防爆电动机', dt).join(' ')),  
32 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/工业标准发动机.svg;imageAspect=0;',  
33 - 64, 74, '', '工业标准发动机', null, null, this.getTagsForStencil(gn, '工业标准发动机', dt).join(' ')),  
34 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/减速器.svg;imageAspect=0;',  
35 - 64, 74, '', '减速器', null, null, this.getTagsForStencil(gn, '减速器', dt).join(' ')),  
36 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/简单马达.svg;imageAspect=0;',  
37 - 64, 74, '', '简单马达', null, null, this.getTagsForStencil(gn, '简单马达', dt).join(' ')),  
38 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/气压制动器.svg;imageAspect=0;',  
39 - 64, 74, '', '气压制动器', null, null, this.getTagsForStencil(gn, '气压制动器', dt).join(' ')),  
40 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/无刷电机.svg;imageAspect=0;',  
41 - 64, 74, '', '无刷电机', null, null, this.getTagsForStencil(gn, '无刷电机', dt).join(' ')),  
42 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/制动马达.svg;imageAspect=0;',  
43 - 64, 74, '', '制动马达', null, null, this.getTagsForStencil(gn, '制动马达', dt).join(' ')),  
44 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/智能马达.svg;imageAspect=0;',  
45 - 64, 74, '', '智能马达', null, null, this.getTagsForStencil(gn, '智能马达', dt).join(' ')),  
46 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/轴角编码器.svg;imageAspect=0;',  
47 - 64, 74, '', '轴角编码器', null, null, this.getTagsForStencil(gn, '轴角编码器', dt).join(' ')), 15 + // 自定义属性
  16 + const cellAttribute = {}
  17 +
  18 + const graphPathLib = [
  19 + { name: '3-D 发动机.svg', path: 'engine/3-D 发动机.svg' },
  20 + { name: '伺服电机.svg', path: 'engine/伺服电机.svg' },
  21 + { name: '伺服电机2.svg', path: 'engine/伺服电机2.svg' },
  22 + { name: '促动器.svg', path: 'engine/促动器.svg' },
  23 + { name: '减速器.svg', path: 'engine/减速器.svg' },
  24 + { name: '制动马达.svg', path: 'engine/制动马达.svg' },
  25 + { name: '发动机 1.svg', path: 'engine/发动机 1.svg' },
  26 + { name: '发动机 2.svg', path: 'engine/发动机 2.svg' },
  27 + { name: '发动机 3.svg', path: 'engine/发动机 3.svg' },
  28 + { name: '发动机 4.svg', path: 'engine/发动机 4.svg' },
  29 + { name: '工业标准发动机.svg', path: 'engine/工业标准发动机.svg' },
  30 + { name: '无刷电机.svg', path: 'engine/无刷电机.svg' },
  31 + { name: '智能马达.svg', path: 'engine/智能马达.svg' },
  32 + { name: '步进电机驱动器.svg', path: 'engine/步进电机驱动器.svg' },
  33 + { name: '气压制动器.svg', path: 'engine/气压制动器.svg' },
  34 + { name: '简单马达.svg', path: 'engine/简单马达.svg' },
  35 + { name: '轴角编码器.svg', path: 'engine/轴角编码器.svg' },
  36 + { name: '防爆电动机.svg', path: 'engine/防爆电动机.svg' },
  37 + ]
  38 +
  39 + const lib = graphPathLib.map(item => {
  40 + item.staticPath = staticPath + item.path
  41 + return item
  42 + })
  43 +
  44 + const fns = graphPathLib.map(item => {
  45 + return this.addEntry(this.getTagsForStencil(gn, item.name, dt).join(' '), mxUtils.bind(this, function () {
  46 + const cell = new mxCell('', new mxGeometry(0, 0, width, height), `${ prefix }${ item.path }${ defaultStyle }`);
  47 + cell.setVertex(true)
  48 + this.setCellAttributes(cell, cellAttribute)
  49 + return this.createVertexTemplateFromCells([ cell ], cell.geometry.width, cell.geometry.height, item.name);
  50 + }));
  51 + })
  52 +
  53 + this.setVariableImageLib(dt, label, lib)
  54 +
  55 + this.addPaletteFunctions(dt, label, false, fns);
48 56
49 - ];  
50 - this.addPaletteFunctions('engine', '发动机', false, fns);  
51 this.setCurrentSearchEntryLibrary(); 57 this.setCurrentSearchEntryLibrary();
52 }; 58 };
53 })(); 59 })();
1 -(function()  
2 -{ 1 +
  2 +(function () {
3 // Adds Atlassian shapes 3 // Adds Atlassian shapes
4 - // 风机  
5 - Sidebar.prototype.addFanPalette = function()  
6 - {  
7 - var gn = 'mxgraph.fan';  
8 - var dt = 'fan';  
9 - var width = 66;  
10 - var height = 74;  
11 - this.setCurrentSearchEntryLibrary('fan'); 4 + // fan
  5 + Sidebar.prototype.addFanPalette = function () {
  6 + const gn = 'mxgraph.fan';
  7 + const dt = 'fan';
  8 + const label = '风机'
  9 + const width = 66;
  10 + const height = 74;
  11 + const staticPath = '/thingskit-drawio/img/lib/thingskit/'
  12 + const prefix = 'image;image=img/lib/thingskit/'
  13 + const defaultStyle = ';imageAspect=0;'
  14 + this.setCurrentSearchEntryLibrary(dt);
  15 +
  16 + const graphPathLib = [
  17 + { name: '风机1.png', path: 'fan/风机1.png' },
  18 + { name: '风机2.png', path: 'fan/风机2.png' },
  19 + { name: '风机3.png', path: 'fan/风机3.png' },
  20 + { name: '风机4.png', path: 'fan/风机4.png' },
  21 + { name: '风机5.gif', path: 'fan/风机5.gif' },
  22 + { name: '风机6.gif', path: 'fan/风机6.gif' },
  23 + { name: '风机7.gif', path: 'fan/风机7.gif' },
  24 + { name: '风机8.png', path: 'fan/风机8.png' },
  25 + ]
  26 +
  27 + const lib = graphPathLib.map(item => {
  28 + item.staticPath = staticPath + item.path
  29 + return item
  30 + })
  31 +
  32 + const fns = graphPathLib.map(item => {
  33 + return this.createVertexTemplateEntry(`${ prefix }${ item.path }${ defaultStyle }`, width, height, '', item.name, null, null, this.getTagsForStencil(gn, item.name, dt).join(' '))
  34 + })
12 35
13 - var fns = [  
14 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机1.png;imageAspect=0;',  
15 - width, height, '', '风机1', null, null, this.getTagsForStencil(gn, '风机1', dt).join(' ')),  
16 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机2.png;imageAspect=0;',  
17 - width, height, '', '风机2', null, null, this.getTagsForStencil(gn, '风机2', dt).join(' ')),  
18 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机3.png;imageAspect=0;',  
19 - width, height, '', '风机3', null, null, this.getTagsForStencil(gn, '风机3', dt).join(' ')),  
20 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机4.png;imageAspect=0;',  
21 - width, height, '', '风机4', null, null, this.getTagsForStencil(gn, '风机4', dt).join(' ')),  
22 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机5.gif;imageAspect=0;',  
23 - width, height, '', '风机5', null, null, this.getTagsForStencil(gn, '风机5', dt).join(' ')),  
24 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机6.gif;imageAspect=0;',  
25 - width, height, '', '风机6', null, null, this.getTagsForStencil(gn, '风机6', dt).join(' ')),  
26 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机7.gif;imageAspect=0;',  
27 - width, height, '', '风机7', null, null, this.getTagsForStencil(gn, '风机7', dt).join(' ')),  
28 - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机8.png;imageAspect=0;',  
29 - width, height, '', '风机8', null, null, this.getTagsForStencil(gn, '风机8', dt).join(' ')),  
30 - ]; 36 + this.setVariableImageLib(dt, label, lib)
31 37
32 - this.addPalette('fan', '风机', false, mxUtils.bind(this, function(content)  
33 - {  
34 - for (var i = 0; i < fns.length; i++)  
35 - {  
36 - content.appendChild(fns[i](content));  
37 - }  
38 - })); 38 + this.addPaletteFunctions(dt, label, false, fns);
39 39
40 this.setCurrentSearchEntryLibrary(); 40 this.setCurrentSearchEntryLibrary();
41 }; 41 };