Commit 08144f4331477d08a2d814bef7f17f313e21032d

Authored by ww
1 parent a9a23dd3

feat: implement set variable image

Too many changes to show.

To preserve performance only 5 of 7 files are displayed.

@@ -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 }
@@ -12,24 +12,24 @@ @@ -12,24 +12,24 @@
12 * copy the output of searchFileData from the browser console to the variable below. 12 * copy the output of searchFileData from the browser console to the variable below.
13 */ 13 */
14 Sidebar.prototype.searchIndexData = '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'; 14 Sidebar.prototype.searchIndexData = '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';
15 - 15 +
16 /** 16 /**
17 * Overrides gear image URL. 17 * Overrides gear image URL.
18 */ 18 */
19 Sidebar.prototype.gearImage = GRAPH_IMAGE_PATH + '/clipart/Gear_128x128.png'; 19 Sidebar.prototype.gearImage = GRAPH_IMAGE_PATH + '/clipart/Gear_128x128.png';
20 - 20 +
21 /** 21 /**
22 * Aliases for IDs in the libs parameter. 22 * Aliases for IDs in the libs parameter.
23 */ 23 */
24 Sidebar.prototype.libAliases = {'aws2': 'aws3', 'gcp' : 'gcp2'}; 24 Sidebar.prototype.libAliases = {'aws2': 'aws3', 'gcp' : 'gcp2'};
25 - 25 +
26 /** 26 /**
27 - * 27 + *
28 */ 28 */
29 Sidebar.prototype.defaultEntries = 'component;fan;engine;valve;controller;light;button;conduit;instrument;sewage'; 29 Sidebar.prototype.defaultEntries = 'component;fan;engine;valve;controller;light;button;conduit;instrument;sewage';
30 - 30 +
31 /** 31 /**
32 - * Library definitions 32 + * Library definitions
33 */ 33 */
34 Sidebar.prototype.signs = ['Animals', 'Food', 'Healthcare', 'Nature', 'People', 'Safety', 'Science', 'Sports', 'Tech', 'Transportation', 'Travel']; 34 Sidebar.prototype.signs = ['Animals', 'Food', 'Healthcare', 'Nature', 'People', 'Safety', 'Science', 'Sports', 'Tech', 'Transportation', 'Travel'];
35 35
@@ -38,45 +38,45 @@ @@ -38,45 +38,45 @@
38 Sidebar.prototype.allied_telesis = ['Buildings', 'Computer and Terminals', 'Media Converters', 'Security', 'Storage', 'Switch', 'Wireless']; 38 Sidebar.prototype.allied_telesis = ['Buildings', 'Computer and Terminals', 'Media Converters', 'Security', 'Storage', 'Switch', 'Wireless'];
39 39
40 Sidebar.prototype.gcp = ['Cards', 'Big Data', 'Compute', 'Developer Tools', 'Extras', 'Identity and Security', 'Machine Learning', 'Management Tools', 'Networking', 'Storage Databases']; 40 Sidebar.prototype.gcp = ['Cards', 'Big Data', 'Compute', 'Developer Tools', 'Extras', 'Identity and Security', 'Machine Learning', 'Management Tools', 'Networking', 'Storage Databases'];
41 - 41 +
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']; 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'];
43 - 43 +
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']; 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'];
45 - 45 +
46 Sidebar.prototype.rack = ['General', 'APC', 'Cisco', 'Dell', 'F5', 'HP', 'HPE Aruba Gateways Controllers', 'HPE Aruba Security', 'HPE Aruba Switches', 'IBM', 'Oracle']; 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', 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', 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']; 50 'Mixers', 'Piping', 'Pumps', 'Pumps DIN', 'Pumps ISO', 'Separators', 'Shaping Machines', 'Valves', 'Vessels'];
51 51
52 Sidebar.prototype.cisco = ['Buildings', 'Computers and Peripherals', 'Controllers and Modules', 'Directors', 'Hubs and Gateways', 'Misc', 52 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']; 53 'Modems and Phones', 'People', 'Routers', 'Security', 'Servers', 'Storage', 'Switches', 'Wireless'];
54 - 54 +
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']; 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'];
56 56
57 Sidebar.prototype.cisco_safe = ['Architecture', 'Business Icons', 'Capability', 'Design', 'IoT Things Icons', 'People Places Things Icons', 'Security Icons', 'Technology Icons', 'Threat']; 57 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', 58 +
  59 + Sidebar.prototype.sysml = ['Model Elements', 'Blocks', 'Ports and Flows', 'Constraint Blocks', 'Activities', 'Interactions', 'State Machines',
60 'Use Cases', 'Allocations', 'Requirements', 'Profiles', 'Stereotypes']; 60 'Use Cases', 'Allocations', 'Requirements', 'Profiles', 'Stereotypes'];
61 61
62 - Sidebar.prototype.eip = ['Message Construction', 'Message Routing', 'Message Transformation', 'Messaging Channels', 'Messaging Endpoints', 62 + Sidebar.prototype.eip = ['Message Construction', 'Message Routing', 'Message Transformation', 'Messaging Channels', 'Messaging Endpoints',
63 'Messaging Systems', 'System Management']; 63 'Messaging Systems', 'System Management'];
64 64
65 - Sidebar.prototype.gmdl = ['Bottom Navigation', 'Bottom Sheets', 'Buttons', 'Cards', 'Chips', 'Dialogs', 'Dividers', 'Grid Lists', 'Icons', 'Lists', 'Menus', 'Misc', 'Pickers', 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']; 66 'Selection Controls', 'Sliders', 'Steppers', 'Tabs', 'Text Fields'];
67 67
68 - Sidebar.prototype.aws2 = ['Analytics', 'Application Services', 'Compute', 'Database', 'Developer Tools', 'Enterprise Applications', 'Game Development', 'General', 'Internet of Things', 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']; 69 'Management Tools', 'Mobile Services', 'Networking', 'On-Demand Workforce', 'SDKs', 'Security and Identity', 'Storage and Content Delivery', 'Groups'];
70 70
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', 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']; 73 'Management Tools', 'Messaging', 'Migration', 'Mobile Services', 'Networking and Content Delivery', 'On Demand Workforce', 'SDKs', 'Security Identity and Compliance', 'Storage'];
74 - 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', 75 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', 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']; 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', 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', 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', 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']; 82 'Media Services', 'Migration Transfer', 'Network Content Delivery', 'Quantum Technologies', 'Robotics', 'Satellite', 'Serverless', 'Security Identity Compliance', 'Storage'];
@@ -94,7 +94,7 @@ @@ -94,7 +94,7 @@
94 * Description of custom libraries, see https://www.diagrams.net/doc/faq/configure-diagram-editor 94 * Description of custom libraries, see https://www.diagrams.net/doc/faq/configure-diagram-editor
95 */ 95 */
96 Sidebar.prototype.customEntries = null; 96 Sidebar.prototype.customEntries = null;
97 - 97 +
98 /** 98 /**
99 * Array of strings for the built-in libraries to be enabled in the more shapes dialog. Null means all, 99 * 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 100 * empty array means none, possible keys are listed for the libs parameter at
@@ -105,13 +105,61 @@ @@ -105,13 +105,61 @@
105 * https://www.diagrams.net/doc/faq/supported-url-parameters 105 * https://www.diagrams.net/doc/faq/supported-url-parameters
106 */ 106 */
107 Sidebar.prototype.enabledLibraries = null; 107 Sidebar.prototype.enabledLibraries = null;
108 - 108 +
109 /** 109 /**
110 * Maximum number of custom libraries to preload into the search index. 110 * Maximum number of custom libraries to preload into the search index.
111 */ 111 */
112 Sidebar.prototype.maxPreloadCount = 20; 112 Sidebar.prototype.maxPreloadCount = 20;
113 113
114 /** 114 /**
  115 + * @description TODO thingsKit 在Sidebar 原型中新增图库信息
  116 + * @type {Map<any, any>}
  117 + */
  118 + Sidebar.prototype.variableImageLib = new Map()
  119 +
  120 + /**
  121 + * @description TODO thingsKit 设置图库信息
  122 + * @param key
  123 + * @param label
  124 + * @param lib
  125 + */
  126 + Sidebar.prototype.setVariableImageLib = function (key, label, lib) {
  127 + this.variableImageLib.set(key, { label, key, lib })
  128 + }
  129 +
  130 + /**
  131 + * @description TODO thingsKit 通过key获取图库中某个类别
  132 + * @param key
  133 + * @returns {{}|*}
  134 + */
  135 + Sidebar.prototype.getVariableImageLib = function (key) {
  136 + return this.variableImageLib.get(key)
  137 + }
  138 +
  139 + /**
  140 + * @description TODO thingsKit 取所有图库信息
  141 + * @returns {*[]}
  142 + */
  143 + Sidebar.prototype.getAllVariableImageLib = function () {
  144 + const arr = []
  145 + for (const value of this.variableImageLib.values()) {
  146 + arr.push(value)
  147 + }
  148 + return arr
  149 + }
  150 +
  151 + /**
  152 + * @description TODO thingsKit 设置cell attributes
  153 + */
  154 + Sidebar.prototype.setCellAttributes = function (cell, attribute) {
  155 + if (Object.prototype.toString.call(attribute) === '[object Object]') {
  156 + Object.keys(attribute).forEach(key => {
  157 + this.graph.setAttributeForCell(cell, key, attribute[key])
  158 + })
  159 + }
  160 + }
  161 +
  162 + /**
115 * 各图形库里面要加载的图形 163 * 各图形库里面要加载的图形
116 */ 164 */
117 Sidebar.prototype.configuration = [{id: 'general', libs: ['general', 'misc', 'advanced']}, 165 Sidebar.prototype.configuration = [{id: 'general', libs: ['general', 'misc', 'advanced']},
@@ -161,7 +209,7 @@ @@ -161,7 +209,7 @@
161 {id: 'archimate', libs: ['archimate']}, 209 {id: 'archimate', libs: ['archimate']},
162 {id: 'webicons', libs: ['webicons', 'weblogos']}, 210 {id: 'webicons', libs: ['webicons', 'weblogos']},
163 {id: 'sysml', prefix: 'sysml', libs: Sidebar.prototype.sysml}]; 211 {id: 'sysml', prefix: 'sysml', libs: Sidebar.prototype.sysml}];
164 - 212 +
165 /** 213 /**
166 * Removes disabled libraries from search results. 214 * Removes disabled libraries from search results.
167 */ 215 */
@@ -177,7 +225,7 @@ @@ -177,7 +225,7 @@
177 else 225 else
178 { 226 {
179 return sidebarAddEntry.apply(this, arguments); 227 return sidebarAddEntry.apply(this, arguments);
180 - } 228 + }
181 }; 229 };
182 230
183 /** 231 /**
@@ -201,13 +249,13 @@ @@ -201,13 +249,13 @@
201 * Adds hint for quick tutorial video for certain search terms. 249 * Adds hint for quick tutorial video for certain search terms.
202 */ 250 */
203 var siderbarInsertSearchHint = Sidebar.prototype.insertSearchHint; 251 var siderbarInsertSearchHint = Sidebar.prototype.insertSearchHint;
204 - 252 +
205 Sidebar.prototype.insertSearchHint = function(div, searchTerm, count, page, results, len, more, terms) 253 Sidebar.prototype.insertSearchHint = function(div, searchTerm, count, page, results, len, more, terms)
206 { 254 {
207 if (terms != null && page == 1) 255 if (terms != null && page == 1)
208 { 256 {
209 var hintText = null; 257 var hintText = null;
210 - 258 +
211 // Adds hint for text inserts 259 // Adds hint for text inserts
212 if (mxUtils.indexOf(terms, 'text') >= 0) 260 if (mxUtils.indexOf(terms, 'text') >= 0)
213 { 261 {
@@ -219,7 +267,7 @@ @@ -219,7 +267,7 @@
219 var words = ['line', 'lines', 'arrow', 'arrows', 'connect', 'connection', 'connections', 267 var words = ['line', 'lines', 'arrow', 'arrows', 'connect', 'connection', 'connections',
220 'connector', 'connectors', 'curve', 'curves', 'link', 'links', 'directed', 268 'connector', 'connectors', 'curve', 'curves', 'link', 'links', 'directed',
221 'directional', 'bidirectional']; 269 'directional', 'bidirectional'];
222 - 270 +
223 for (var i = 0; i < words.length; i++) 271 for (var i = 0; i < words.length; i++)
224 { 272 {
225 if (mxUtils.indexOf(terms, words[i]) >= 0) 273 if (mxUtils.indexOf(terms, words[i]) >= 0)
@@ -229,7 +277,7 @@ @@ -229,7 +277,7 @@
229 } 277 }
230 } 278 }
231 } 279 }
232 - 280 +
233 if (hintText != null && !this.hideSearchHint) 281 if (hintText != null && !this.hideSearchHint)
234 { 282 {
235 var link = document.createElement('a'); 283 var link = document.createElement('a');
@@ -240,7 +288,7 @@ @@ -240,7 +288,7 @@
240 'border:1px solid black !important;text-align:center;white-space:normal;' + 288 '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;'; 289 'padding:6px 0px 6px 0px !important;margin:4px 4px 8px 2px;font-size:12px;';
242 mxUtils.write(link, hintText); 290 mxUtils.write(link, hintText);
243 - 291 +
244 // Adds close button 292 // Adds close button
245 var img = document.createElement('img'); 293 var img = document.createElement('img');
246 img.setAttribute('src', Dialog.prototype.closeImage); 294 img.setAttribute('src', Dialog.prototype.closeImage);
@@ -250,22 +298,22 @@ @@ -250,22 +298,22 @@
250 img.style.cursor = 'default'; 298 img.style.cursor = 'default';
251 img.style.top = '1px'; 299 img.style.top = '1px';
252 img.style.right = '0px'; 300 img.style.right = '0px';
253 - 301 +
254 mxEvent.addListener(img, 'click', mxUtils.bind(this, function(evt) 302 mxEvent.addListener(img, 'click', mxUtils.bind(this, function(evt)
255 { 303 {
256 link.parentNode.removeChild(link); 304 link.parentNode.removeChild(link);
257 this.hideSearchHint = true; 305 this.hideSearchHint = true;
258 mxEvent.consume(evt); 306 mxEvent.consume(evt);
259 })); 307 }));
260 - 308 +
261 link.appendChild(img); 309 link.appendChild(img);
262 div.appendChild(link); 310 div.appendChild(link);
263 - 311 +
264 // Shows hint only once 312 // Shows hint only once
265 this.hideSearchHint = true; 313 this.hideSearchHint = true;
266 } 314 }
267 } 315 }
268 - 316 +
269 siderbarInsertSearchHint.apply(this, arguments); 317 siderbarInsertSearchHint.apply(this, arguments);
270 }; 318 };
271 319
@@ -284,7 +332,7 @@ @@ -284,7 +332,7 @@
284 { 332 {
285 this.showPalette(id); 333 this.showPalette(id);
286 }; 334 };
287 - 335 +
288 /** 336 /**
289 * Shows or hides palettes. 337 * Shows or hides palettes.
290 */ 338 */
@@ -302,22 +350,22 @@ @@ -302,22 +350,22 @@
302 Sidebar.prototype.showPalette = function(id, visible) 350 Sidebar.prototype.showPalette = function(id, visible)
303 { 351 {
304 var elts = this.palettes[id]; 352 var elts = this.palettes[id];
305 - 353 +
306 if (elts != null) 354 if (elts != null)
307 { 355 {
308 var vis = (visible != null) ? ((visible) ? 'block' : 'none') : (elts[0].style.display == 'none') ? 'block' : 'none'; 356 var vis = (visible != null) ? ((visible) ? 'block' : 'none') : (elts[0].style.display == 'none') ? 'block' : 'none';
309 - 357 +
310 for (var i = 0; i < elts.length; i++) 358 for (var i = 0; i < elts.length; i++)
311 { 359 {
312 elts[i].style.display = vis; 360 elts[i].style.display = vis;
313 } 361 }
314 } 362 }
315 - 363 +
316 return elts; 364 return elts;
317 }; 365 };
318 - 366 +
319 /** 367 /**
320 - * 368 + *
321 */ 369 */
322 Sidebar.prototype.getConfigurationById = function(id) 370 Sidebar.prototype.getConfigurationById = function(id)
323 { 371 {
@@ -328,17 +376,17 @@ @@ -328,17 +376,17 @@
328 return this.configuration[i]; 376 return this.configuration[i];
329 } 377 }
330 } 378 }
331 - 379 +
332 if (this.customEntries != null) 380 if (this.customEntries != null)
333 { 381 {
334 for (var i = 0; i < this.customEntries.length; i++) 382 for (var i = 0; i < this.customEntries.length; i++)
335 { 383 {
336 var section = this.customEntries[i]; 384 var section = this.customEntries[i];
337 - 385 +
338 for (var j = 0; j < section.entries.length; j++) 386 for (var j = 0; j < section.entries.length; j++)
339 { 387 {
340 var entry = section.entries[j]; 388 var entry = section.entries[j];
341 - 389 +
342 if (entry.id == id) 390 if (entry.id == id)
343 { 391 {
344 return {id: entry.id, libs: entry.libs}; 392 return {id: entry.id, libs: entry.libs};
@@ -346,12 +394,12 @@ @@ -346,12 +394,12 @@
346 } 394 }
347 } 395 }
348 } 396 }
349 - 397 +
350 return null; 398 return null;
351 }; 399 };
352 - 400 +
353 /** 401 /**
354 - * 402 + *
355 */ 403 */
356 Sidebar.prototype.isEntryVisible = function(key) 404 Sidebar.prototype.isEntryVisible = function(key)
357 { 405 {
@@ -362,7 +410,7 @@ @@ -362,7 +410,7 @@
362 else 410 else
363 { 411 {
364 var config = this.getConfigurationById(key); 412 var config = this.getConfigurationById(key);
365 - 413 +
366 if (config != null) 414 if (config != null)
367 { 415 {
368 var id = (config.libs != null) ? ((config.prefix || '') + config.libs[0]) : key; 416 var id = (config.libs != null) ? ((config.prefix || '') + config.libs[0]) : key;
@@ -373,92 +421,92 @@ @@ -373,92 +421,92 @@
373 return elts[0].style.display != 'none'; 421 return elts[0].style.display != 'none';
374 } 422 }
375 } 423 }
376 - 424 +
377 if (this.customEntries != null) 425 if (this.customEntries != null)
378 { 426 {
379 for (var i = 0; i < this.customEntries.length; i++) 427 for (var i = 0; i < this.customEntries.length; i++)
380 { 428 {
381 var section = this.customEntries[i]; 429 var section = this.customEntries[i];
382 - 430 +
383 for (var j = 0; j < section.entries.length; j++) 431 for (var j = 0; j < section.entries.length; j++)
384 { 432 {
385 var entry = section.entries[j]; 433 var entry = section.entries[j];
386 - 434 +
387 if (entry.id == key) 435 if (entry.id == key)
388 { 436 {
389 if (entry.libs != null && entry.libs.length > 0) 437 if (entry.libs != null && entry.libs.length > 0)
390 { 438 {
391 var elts = this.palettes[entry.id + '.0']; 439 var elts = this.palettes[entry.id + '.0'];
392 - 440 +
393 if (elts != null) 441 if (elts != null)
394 { 442 {
395 return elts[0].style.display != 'none'; 443 return elts[0].style.display != 'none';
396 } 444 }
397 } 445 }
398 - 446 +
399 break; 447 break;
400 } 448 }
401 } 449 }
402 } 450 }
403 } 451 }
404 - 452 +
405 return false; 453 return false;
406 } 454 }
407 }; 455 };
408 456
409 /** 457 /**
410 - * 458 + *
411 */ 459 */
412 Sidebar.prototype.showEntries = function(entries, remember, force) 460 Sidebar.prototype.showEntries = function(entries, remember, force)
413 { 461 {
414 var all = []; 462 var all = [];
415 - 463 +
416 if (remember) 464 if (remember)
417 { 465 {
418 mxSettings.setLibraries(entries); 466 mxSettings.setLibraries(entries);
419 mxSettings.save(); 467 mxSettings.save();
420 } 468 }
421 - 469 +
422 if (entries != null && (force || entries.length > 0)) 470 if (entries != null && (force || entries.length > 0))
423 { 471 {
424 all.push(entries); 472 all.push(entries);
425 } 473 }
426 - else 474 + else
427 { 475 {
428 var done = false; 476 var done = false;
429 -  
430 - if (urlParams['libs'] != null && urlParams['libs'].length > 0) 477 +
  478 + if (urlParams['libs'] != null && urlParams['libs'].length > 0)
431 { 479 {
432 all.push(decodeURIComponent(urlParams['libs'])); 480 all.push(decodeURIComponent(urlParams['libs']));
433 done = this.editorUi.getServiceName() == 'draw.io'; 481 done = this.editorUi.getServiceName() == 'draw.io';
434 } 482 }
435 - 483 +
436 // Libs parameter overrides configuration for online app so that 484 // Libs parameter overrides configuration for online app so that
437 // links can be created to show just the specifies libraries 485 // links can be created to show just the specifies libraries
438 if (!done) 486 if (!done)
439 { 487 {
440 - if (mxSettings != null && mxSettings.settings != null) 488 + if (mxSettings != null && mxSettings.settings != null)
441 { 489 {
442 all.push(mxSettings.getLibraries()); 490 all.push(mxSettings.getLibraries());
443 } 491 }
444 - else 492 + else
445 { 493 {
446 all.push(this.defaultEntries); 494 all.push(this.defaultEntries);
447 } 495 }
448 } 496 }
449 } 497 }
450 - 498 +
451 // Merges array of semicolon separated strings into a single array 499 // Merges array of semicolon separated strings into a single array
452 var temp = all.join(';').split(';'); 500 var temp = all.join(';').split(';');
453 501
454 // Resolves aliases and creates lookup 502 // Resolves aliases and creates lookup
455 var visible = {}; 503 var visible = {};
456 - 504 +
457 for (var i = 0; i < temp.length; i++) 505 for (var i = 0; i < temp.length; i++)
458 { 506 {
459 - visible[this.libAliases[temp[i]] || temp[i]] = true; 507 + visible[this.libAliases[temp[i]] || temp[i]] = true;
460 } 508 }
461 - 509 +
462 for (var i = 0; i < this.configuration.length; i++) 510 for (var i = 0; i < this.configuration.length; i++)
463 { 511 {
464 // Search has separate switch in Extras menu 512 // Search has separate switch in Extras menu
@@ -470,26 +518,26 @@ @@ -470,26 +518,26 @@
470 518
471 } 519 }
472 } 520 }
473 - 521 +
474 if (this.customEntries != null) 522 if (this.customEntries != null)
475 { 523 {
476 for (var i = 0; i < this.customEntries.length; i++) 524 for (var i = 0; i < this.customEntries.length; i++)
477 { 525 {
478 var section = this.customEntries[i]; 526 var section = this.customEntries[i];
479 - 527 +
480 for (var j = 0; j < section.entries.length; j++) 528 for (var j = 0; j < section.entries.length; j++)
481 { 529 {
482 var entry = section.entries[j]; 530 var entry = section.entries[j];
483 - 531 +
484 if (entry.libs != null && entry.libs.length > 0) 532 if (entry.libs != null && entry.libs.length > 0)
485 { 533 {
486 var libs = []; 534 var libs = [];
487 - 535 +
488 for (var k = 0; k < entry.libs.length; k++) 536 for (var k = 0; k < entry.libs.length; k++)
489 { 537 {
490 libs.push(entry.id + '.' + k); 538 libs.push(entry.id + '.' + k);
491 } 539 }
492 - 540 +
493 this.showPalettes('', libs, visible[entry.id]); 541 this.showPalettes('', libs, visible[entry.id]);
494 } 542 }
495 } 543 }
@@ -592,7 +640,7 @@ @@ -592,7 +640,7 @@
592 640
593 // Uses search.xml index file instead (faster load times) 641 // Uses search.xml index file instead (faster load times)
594 this.addStencilsToIndex = false; 642 this.addStencilsToIndex = false;
595 - 643 +
596 // Contains additional tags for shapes 644 // Contains additional tags for shapes
597 this.shapetags = {}; 645 this.shapetags = {};
598 646
@@ -600,12 +648,12 @@ @@ -600,12 +648,12 @@
600 if (this.tagIndex != null) 648 if (this.tagIndex != null)
601 { 649 {
602 this.addTagIndex(Graph.decompress(this.tagIndex)); 650 this.addTagIndex(Graph.decompress(this.tagIndex));
603 - this.tagIndex = null; 651 + this.tagIndex = null;
604 } 652 }
605 - 653 +
606 this.initPalettes(); 654 this.initPalettes();
607 } 655 }
608 - 656 +
609 /** 657 /**
610 * Overridden to add image export via servlet 658 * Overridden to add image export via servlet
611 */ 659 */
@@ -614,21 +662,21 @@ @@ -614,21 +662,21 @@
614 Sidebar.prototype.addFoldingHandler = function(title, content, funct) 662 Sidebar.prototype.addFoldingHandler = function(title, content, funct)
615 { 663 {
616 var initialized = false; 664 var initialized = false;
617 - 665 +
618 // Avoids mixed content warning in IE6-8 666 // Avoids mixed content warning in IE6-8
619 if (!mxClient.IS_IE || document.documentMode >= 8) 667 if (!mxClient.IS_IE || document.documentMode >= 8)
620 { 668 {
621 title.style.backgroundImage = (content.style.display == 'none') ? 669 title.style.backgroundImage = (content.style.display == 'none') ?
622 'url(\'' + this.collapsedImage + '\')' : 'url(\'' + this.expandedImage + '\')'; 670 'url(\'' + this.collapsedImage + '\')' : 'url(\'' + this.expandedImage + '\')';
623 } 671 }
624 - 672 +
625 title.style.backgroundRepeat = 'no-repeat'; 673 title.style.backgroundRepeat = 'no-repeat';
626 title.style.backgroundPosition = '0% 50%'; 674 title.style.backgroundPosition = '0% 50%';
627 - 675 +
628 var btn = document.createElement('button'); 676 var btn = document.createElement('button');
629 btn.style.marginLeft = '4px'; 677 btn.style.marginLeft = '4px';
630 mxUtils.write(btn, 'Save'); 678 mxUtils.write(btn, 'Save');
631 - 679 +
632 mxEvent.addListener(title, 'click', mxUtils.bind(this, function(evt) 680 mxEvent.addListener(title, 'click', mxUtils.bind(this, function(evt)
633 { 681 {
634 if (mxEvent.getSource(evt).nodeName == 'BUTTON') 682 if (mxEvent.getSource(evt).nodeName == 'BUTTON')
@@ -642,58 +690,58 @@ @@ -642,58 +690,58 @@
642 title2.style.width = '456px'; 690 title2.style.width = '456px';
643 title2.style.backgroundColor = '#ffffff'; 691 title2.style.backgroundColor = '#ffffff';
644 title2.style.paddingLeft = '6px'; 692 title2.style.paddingLeft = '6px';
645 - 693 +
646 var btn2 = title2.getElementsByTagName('button')[0]; 694 var btn2 = title2.getElementsByTagName('button')[0];
647 btn2.parentNode.removeChild(btn2); 695 btn2.parentNode.removeChild(btn2);
648 - 696 +
649 var clone = content.cloneNode(true); 697 var clone = content.cloneNode(true);
650 clone.style.backgroundColor = '#ffffff'; 698 clone.style.backgroundColor = '#ffffff';
651 clone.style.borderColor = 'transparent'; 699 clone.style.borderColor = 'transparent';
652 clone.style.width = '456px'; 700 clone.style.width = '456px';
653 - 701 +
654 var parser = new DOMParser(); 702 var parser = new DOMParser();
655 var doc = parser.parseFromString('<body style="background:#ffffff;font-family:Helvetica,Arial;">' + 703 var doc = parser.parseFromString('<body style="background:#ffffff;font-family:Helvetica,Arial;">' +
656 title2.outerHTML + clone.outerHTML + '</body>', 'text/html'); 704 title2.outerHTML + clone.outerHTML + '</body>', 'text/html');
657 - 705 +
658 this.editorUi.editor.convertImages(doc.documentElement, mxUtils.bind(this, function(body) 706 this.editorUi.editor.convertImages(doc.documentElement, mxUtils.bind(this, function(body)
659 { 707 {
660 var html = '<!DOCTYPE html><html><head><link rel="stylesheet" type="text/css" ' + 708 var html = '<!DOCTYPE html><html><head><link rel="stylesheet" type="text/css" ' +
661 'href="https://www.draw.io/styles/grapheditor.css"></head>' + 709 'href="https://www.draw.io/styles/grapheditor.css"></head>' +
662 mxUtils.getXml(body) + '</html>'; 710 mxUtils.getXml(body) + '</html>';
663 - 711 +
664 clone.style.position = 'absolute'; 712 clone.style.position = 'absolute';
665 window.document.body.appendChild(clone); 713 window.document.body.appendChild(clone);
666 var h = clone.clientHeight + 18; 714 var h = clone.clientHeight + 18;
667 clone.parentNode.removeChild(clone); 715 clone.parentNode.removeChild(clone);
668 - 716 +
669 this.editorUi.confirm('Image data created', mxUtils.bind(this, function() 717 this.editorUi.confirm('Image data created', mxUtils.bind(this, function()
670 { 718 {
671 new mxXmlRequest(EXPORT_URL, 'w=456&h=' + h + '&html=' + encodeURIComponent( 719 new mxXmlRequest(EXPORT_URL, 'w=456&h=' + h + '&html=' + encodeURIComponent(
672 Graph.compress(html))).simulate(document, '_blank'); 720 Graph.compress(html))).simulate(document, '_blank');
673 }), null, mxResources.get('save'), mxResources.get('cancel')); 721 }), null, mxResources.get('save'), mxResources.get('cancel'));
674 })); 722 }));
675 - 723 +
676 return; 724 return;
677 } 725 }
678 - 726 +
679 if (content.style.display == 'none') 727 if (content.style.display == 'none')
680 { 728 {
681 if (!initialized) 729 if (!initialized)
682 { 730 {
683 initialized = true; 731 initialized = true;
684 - 732 +
685 if (funct != null) 733 if (funct != null)
686 { 734 {
687 if (btn.parentNode != null) 735 if (btn.parentNode != null)
688 { 736 {
689 btn.parentNode.removeChild(btn); 737 btn.parentNode.removeChild(btn);
690 } 738 }
691 - 739 +
692 // Wait cursor does not show up on Mac 740 // Wait cursor does not show up on Mac
693 title.style.cursor = 'wait'; 741 title.style.cursor = 'wait';
694 var prev = title.innerHTML; 742 var prev = title.innerHTML;
695 title.innerHTML = mxResources.get('loading') + '...'; 743 title.innerHTML = mxResources.get('loading') + '...';
696 - 744 +
697 window.setTimeout(function() 745 window.setTimeout(function()
698 { 746 {
699 funct(content); 747 funct(content);
@@ -711,7 +759,7 @@ @@ -711,7 +759,7 @@
711 { 759 {
712 title.appendChild(btn); 760 title.appendChild(btn);
713 } 761 }
714 - 762 +
715 title.style.backgroundImage = 'url(\'' + this.expandedImage + '\')'; 763 title.style.backgroundImage = 'url(\'' + this.expandedImage + '\')';
716 content.style.display = 'block'; 764 content.style.display = 'block';
717 } 765 }
@@ -719,18 +767,18 @@ @@ -719,18 +767,18 @@
719 { 767 {
720 title.style.backgroundImage = 'url(\'' + this.collapsedImage + '\')'; 768 title.style.backgroundImage = 'url(\'' + this.collapsedImage + '\')';
721 content.style.display = 'none'; 769 content.style.display = 'none';
722 - 770 +
723 if (btn.parentNode != null) 771 if (btn.parentNode != null)
724 { 772 {
725 btn.parentNode.removeChild(btn); 773 btn.parentNode.removeChild(btn);
726 } 774 }
727 } 775 }
728 - 776 +
729 mxEvent.consume(evt); 777 mxEvent.consume(evt);
730 })); 778 }));
731 }; 779 };
732 }; 780 };
733 - 781 +
734 /** 782 /**
735 * Overridden to use shapetags to improve search results. 783 * Overridden to use shapetags to improve search results.
736 */ 784 */
@@ -739,40 +787,40 @@ @@ -739,40 +787,40 @@
739 if (style != null && style.substring(0, 6) == 'shape=') 787 if (style != null && style.substring(0, 6) == 'shape=')
740 { 788 {
741 var semi = style.indexOf(';'); 789 var semi = style.indexOf(';');
742 - 790 +
743 if (semi < 0) 791 if (semi < 0)
744 { 792 {
745 semi = style.length; 793 semi = style.length;
746 } 794 }
747 - 795 +
748 return style.substring(6, semi); 796 return style.substring(6, semi);
749 } 797 }
750 - 798 +
751 return null; 799 return null;
752 }; 800 };
753 - 801 +
754 /** 802 /**
755 * Overridden to use shapetags to improve search results. 803 * Overridden to use shapetags to improve search results.
756 */ 804 */
757 var sidebarGetTagsForStencil = Sidebar.prototype.getTagsForStencil; 805 var sidebarGetTagsForStencil = Sidebar.prototype.getTagsForStencil;
758 - 806 +
759 Sidebar.prototype.getTagsForStencil = function(pkg, stc, moreTags) 807 Sidebar.prototype.getTagsForStencil = function(pkg, stc, moreTags)
760 { 808 {
761 var tags = sidebarGetTagsForStencil.apply(this, arguments); 809 var tags = sidebarGetTagsForStencil.apply(this, arguments);
762 - 810 +
763 // Adds tags from tags file 811 // Adds tags from tags file
764 if (this.shapetags != null) 812 if (this.shapetags != null)
765 { 813 {
766 pkg = pkg.toLowerCase(); 814 pkg = pkg.toLowerCase();
767 stc = stc.toLowerCase(); 815 stc = stc.toLowerCase();
768 - 816 +
769 if (this.shapetags[pkg] != null) 817 if (this.shapetags[pkg] != null)
770 { 818 {
771 tags.push(this.shapetags[pkg]); 819 tags.push(this.shapetags[pkg]);
772 } 820 }
773 - 821 +
774 stc = pkg + '.' + stc; 822 stc = pkg + '.' + stc;
775 - 823 +
776 if (this.shapetags[stc] != null) 824 if (this.shapetags[stc] != null)
777 { 825 {
778 tags.push(this.shapetags[stc]); 826 tags.push(this.shapetags[stc]);
@@ -781,25 +829,25 @@ @@ -781,25 +829,25 @@
781 829
782 return tags; 830 return tags;
783 }; 831 };
784 - 832 +
785 /** 833 /**
786 * Overrides the sidebar init. 834 * Overrides the sidebar init.
787 */ 835 */
788 Sidebar.prototype.addTagIndex = function(text) 836 Sidebar.prototype.addTagIndex = function(text)
789 { 837 {
790 var lines = text.split('\n'); 838 var lines = text.split('\n');
791 - 839 +
792 for (var i = 0; i < lines.length; i++) 840 for (var i = 0; i < lines.length; i++)
793 { 841 {
794 if (lines[i] != null) 842 if (lines[i] != null)
795 { 843 {
796 var tags = lines[i].split('\t'); 844 var tags = lines[i].split('\t');
797 - 845 +
798 if (tags.length > 1) 846 if (tags.length > 1)
799 { 847 {
800 var key = tags[0].toLowerCase().replace(' ', '_'); 848 var key = tags[0].toLowerCase().replace(' ', '_');
801 var value = mxUtils.trim(tags.slice(1, tags.length).join(' ').toLowerCase()); 849 var value = mxUtils.trim(tags.slice(1, tags.length).join(' ').toLowerCase());
802 - 850 +
803 if (value.length > 0) 851 if (value.length > 0)
804 { 852 {
805 this.shapetags[key] = value; 853 this.shapetags[key] = value;
@@ -808,7 +856,7 @@ @@ -808,7 +856,7 @@
808 } 856 }
809 } 857 }
810 }; 858 };
811 - 859 +
812 /** 860 /**
813 * Adds shape search UI. 861 * Adds shape search UI.
814 */ 862 */
@@ -817,7 +865,7 @@ @@ -817,7 +865,7 @@
817 if (libs != null && libs.length > 0) 865 if (libs != null && libs.length > 0)
818 { 866 {
819 var offset = mxUtils.getOffset(elt); 867 var offset = mxUtils.getOffset(elt);
820 - 868 +
821 this.editorUi.showPopupMenu(mxUtils.bind(this, function(menu, parent) 869 this.editorUi.showPopupMenu(mxUtils.bind(this, function(menu, parent)
822 { 870 {
823 menu.addItem(mxResources.get('openLibrary'), null, mxUtils.bind(this, function() 871 menu.addItem(mxResources.get('openLibrary'), null, mxUtils.bind(this, function()
@@ -827,24 +875,24 @@ @@ -827,24 +875,24 @@
827 (mxUtils.bind(this, function(lib) 875 (mxUtils.bind(this, function(lib)
828 { 876 {
829 var config = this.getConfigurationById(lib.id); 877 var config = this.getConfigurationById(lib.id);
830 - 878 +
831 if (config != null) 879 if (config != null)
832 { 880 {
833 this.showPalettes(config.prefix || '', config.libs || [config.id], true); 881 this.showPalettes(config.prefix || '', config.libs || [config.id], true);
834 var elts = this.showPalette(libs[i].lib || libs[i].id, true); 882 var elts = this.showPalette(libs[i].lib || libs[i].id, true);
835 - 883 +
836 if (elts != null && elts.length > 1 && elts[1].firstChild != null && 884 if (elts != null && elts.length > 1 && elts[1].firstChild != null &&
837 (elts[1].firstChild.firstChild == null || 885 (elts[1].firstChild.firstChild == null ||
838 elts[1].firstChild.style.display == 'none')) 886 elts[1].firstChild.style.display == 'none'))
839 { 887 {
840 elts[0].click(); 888 elts[0].click();
841 } 889 }
842 - 890 +
843 window.setTimeout(function() 891 window.setTimeout(function()
844 { 892 {
845 elts[1].scrollIntoView(true); 893 elts[1].scrollIntoView(true);
846 }, 0); 894 }, 0);
847 - 895 +
848 mxEvent.consume(evt); 896 mxEvent.consume(evt);
849 } 897 }
850 }))(libs[i]); 898 }))(libs[i]);
@@ -867,17 +915,17 @@ @@ -867,17 +915,17 @@
867 { 915 {
868 var style = shapes[i].style; 916 var style = shapes[i].style;
869 var shapeStyle = this.extractShapeStyle(style); 917 var shapeStyle = this.extractShapeStyle(style);
870 - 918 +
871 if (shapeStyle != null) 919 if (shapeStyle != null)
872 { 920 {
873 var lastDot = shapeStyle.lastIndexOf('.'); 921 var lastDot = shapeStyle.lastIndexOf('.');
874 - 922 +
875 if (lastDot > 0) 923 if (lastDot > 0)
876 { 924 {
877 var pkg = shapeStyle.substring(0, lastDot); 925 var pkg = shapeStyle.substring(0, lastDot);
878 var stc = shapeStyle.substring(lastDot + 1, shapeStyle.length); 926 var stc = shapeStyle.substring(lastDot + 1, shapeStyle.length);
879 var tags = this.getTagsForStencil(pkg, stc, shapes[i].tags); 927 var tags = this.getTagsForStencil(pkg, stc, shapes[i].tags);
880 - 928 +
881 // TODO: Use shapetags for programmatic stencils 929 // TODO: Use shapetags for programmatic stencils
882 if (tags != null) 930 if (tags != null)
883 { 931 {
@@ -897,7 +945,7 @@ @@ -897,7 +945,7 @@
897 } 945 }
898 } 946 }
899 }; 947 };
900 - 948 +
901 /** 949 /**
902 * Overrides the sidebar init. 950 * Overrides the sidebar init.
903 */ 951 */
@@ -910,27 +958,27 @@ @@ -910,27 +958,27 @@
910 var pids = this.pids; 958 var pids = this.pids;
911 var cisco = this.cisco; 959 var cisco = this.cisco;
912 var sysml = this.sysml; 960 var sysml = this.sysml;
913 - 961 +
914 if (urlParams['createindex'] == '1') 962 if (urlParams['createindex'] == '1')
915 { 963 {
916 this.createdSearchIndex = []; 964 this.createdSearchIndex = [];
917 } 965 }
918 966
919 this.addSearchPalette(true); 967 this.addSearchPalette(true);
920 - 968 +
921 // Adds custom sections first 969 // Adds custom sections first
922 if (this.customEntries != null) 970 if (this.customEntries != null)
923 { 971 {
924 var preloadCount = 0; 972 var preloadCount = 0;
925 - 973 +
926 for (var i = 0; i < this.customEntries.length; i++) 974 for (var i = 0; i < this.customEntries.length; i++)
927 { 975 {
928 var section = this.customEntries[i]; 976 var section = this.customEntries[i];
929 - 977 +
930 for (var j = 0; j < section.entries.length; j++) 978 for (var j = 0; j < section.entries.length; j++)
931 { 979 {
932 var entry = section.entries[j]; 980 var entry = section.entries[j];
933 - 981 +
934 for (var k = 0; k < entry.libs.length; k++) 982 for (var k = 0; k < entry.libs.length; k++)
935 { 983 {
936 (mxUtils.bind(this, function(lib) 984 (mxUtils.bind(this, function(lib)
@@ -939,7 +987,7 @@ @@ -939,7 +987,7 @@
939 var error = null; 987 var error = null;
940 var content = null; 988 var content = null;
941 var title = null; 989 var title = null;
942 - 990 +
943 var showError = mxUtils.bind(this, function(err, c) 991 var showError = mxUtils.bind(this, function(err, c)
944 { 992 {
945 var div = document.createElement('span'); 993 var div = document.createElement('span');
@@ -950,7 +998,7 @@ @@ -950,7 +998,7 @@
950 c.innerHTML = '<img align="top" src="' + mxGraph.prototype.warningImage.src + '"/> '; 998 c.innerHTML = '<img align="top" src="' + mxGraph.prototype.warningImage.src + '"/> ';
951 c.appendChild(div); 999 c.appendChild(div);
952 }); 1000 });
953 - 1001 +
954 var barrier = mxUtils.bind(this, function() 1002 var barrier = mxUtils.bind(this, function()
955 { 1003 {
956 if (content != null && title != null) 1004 if (content != null && title != null)
@@ -977,7 +1025,7 @@ @@ -977,7 +1025,7 @@
977 } 1025 }
978 } 1026 }
979 }); 1027 });
980 - 1028 +
981 if (lib.data == null && lib.url != null && (!lib.preload && preloadCount >= this.maxPreloadCount)) 1029 if (lib.data == null && lib.url != null && (!lib.preload && preloadCount >= this.maxPreloadCount))
982 { 1030 {
983 this.addPalette(entry.id + '.' + k, this.editorUi.getResource(lib.title), 1031 this.addPalette(entry.id + '.' + k, this.editorUi.getResource(lib.title),
@@ -994,14 +1042,14 @@ @@ -994,14 +1042,14 @@
994 content.style.display = 'none'; 1042 content.style.display = 'none';
995 title.innerHTML = ''; 1043 title.innerHTML = '';
996 mxUtils.write(title, mxResources.get('loading') + '...'); 1044 mxUtils.write(title, mxResources.get('loading') + '...');
997 - 1045 +
998 var url = lib.url; 1046 var url = lib.url;
999 - 1047 +
1000 if (!this.editorUi.editor.isCorsEnabledForUrl(url)) 1048 if (!this.editorUi.editor.isCorsEnabledForUrl(url))
1001 { 1049 {
1002 url = PROXY_URL + '?url=' + encodeURIComponent(url); 1050 url = PROXY_URL + '?url=' + encodeURIComponent(url);
1003 } 1051 }
1004 - 1052 +
1005 this.editorUi.editor.loadUrl(url, mxUtils.bind(this, function(data) 1053 this.editorUi.editor.loadUrl(url, mxUtils.bind(this, function(data)
1006 { 1054 {
1007 content.style.display = 'block'; 1055 content.style.display = 'block';
@@ -1011,7 +1059,7 @@ @@ -1011,7 +1059,7 @@
1011 try 1059 try
1012 { 1060 {
1013 var doc = mxUtils.parseXml(data); 1061 var doc = mxUtils.parseXml(data);
1014 - 1062 +
1015 if (doc.documentElement.nodeName == 'mxlibrary') 1063 if (doc.documentElement.nodeName == 'mxlibrary')
1016 { 1064 {
1017 var images = JSON.parse(mxUtils.getTextContent(doc.documentElement)); 1065 var images = JSON.parse(mxUtils.getTextContent(doc.documentElement));
@@ -1030,7 +1078,7 @@ @@ -1030,7 +1078,7 @@
1030 })); 1078 }));
1031 } 1079 }
1032 else 1080 else
1033 - { 1081 + {
1034 this.addPalette(entry.id + '.' + k, this.editorUi.getResource(lib.title), 1082 this.addPalette(entry.id + '.' + k, this.editorUi.getResource(lib.title),
1035 false, mxUtils.bind(this, function(c, t) 1083 false, mxUtils.bind(this, function(c, t)
1036 { 1084 {
@@ -1038,7 +1086,7 @@ @@ -1038,7 +1086,7 @@
1038 title = t; 1086 title = t;
1039 barrier(); 1087 barrier();
1040 })); 1088 }));
1041 - 1089 +
1042 if (lib.data != null) 1090 if (lib.data != null)
1043 { 1091 {
1044 this.setCurrentSearchEntryLibrary(entry.id, entry.id + '.' + k); 1092 this.setCurrentSearchEntryLibrary(entry.id, entry.id + '.' + k);
@@ -1049,20 +1097,20 @@ @@ -1049,20 +1097,20 @@
1049 } 1097 }
1050 else if (lib.url != null) 1098 else if (lib.url != null)
1051 { 1099 {
1052 - preloadCount++; 1100 + preloadCount++;
1053 var url = lib.url; 1101 var url = lib.url;
1054 - 1102 +
1055 if (!this.editorUi.editor.isCorsEnabledForUrl(url)) 1103 if (!this.editorUi.editor.isCorsEnabledForUrl(url))
1056 { 1104 {
1057 url = PROXY_URL + '?url=' + encodeURIComponent(url); 1105 url = PROXY_URL + '?url=' + encodeURIComponent(url);
1058 } 1106 }
1059 - 1107 +
1060 this.editorUi.editor.loadUrl(url, mxUtils.bind(this, function(temp) 1108 this.editorUi.editor.loadUrl(url, mxUtils.bind(this, function(temp)
1061 { 1109 {
1062 try 1110 try
1063 { 1111 {
1064 var doc = mxUtils.parseXml(temp); 1112 var doc = mxUtils.parseXml(temp);
1065 - 1113 +
1066 if (doc.documentElement.nodeName == 'mxlibrary') 1114 if (doc.documentElement.nodeName == 'mxlibrary')
1067 { 1115 {
1068 data = JSON.parse(mxUtils.getTextContent(doc.documentElement)); 1116 data = JSON.parse(mxUtils.getTextContent(doc.documentElement));
@@ -1287,13 +1335,13 @@ @@ -1287,13 +1335,13 @@
1287 this.addSignsPalette(signs, dir); 1335 this.addSignsPalette(signs, dir);
1288 // LATER: Check if conflicts with restore libs after loading file 1336 // LATER: Check if conflicts with restore libs after loading file
1289 this.showEntries(); 1337 this.showEntries();
1290 - 1338 +
1291 if (this.createdSearchIndex != null) 1339 if (this.createdSearchIndex != null)
1292 { 1340 {
1293 console.log('searchFileData', Graph.compress(JSON.stringify(this.createdSearchIndex))); 1341 console.log('searchFileData', Graph.compress(JSON.stringify(this.createdSearchIndex)));
1294 } 1342 }
1295 }; 1343 };
1296 - 1344 +
1297 /** 1345 /**
1298 * Overridden to manually create search index for stencil files which are not pre-loaded 1346 * Overridden to manually create search index for stencil files which are not pre-loaded
1299 * and no entries are created programmatically. 1347 * and no entries are created programmatically.
@@ -1301,12 +1349,12 @@ @@ -1301,12 +1349,12 @@
1301 if (urlParams['createindex'] == '1') 1349 if (urlParams['createindex'] == '1')
1302 { 1350 {
1303 var sidebarAddStencilPalette = Sidebar.prototype.addStencilPalette; 1351 var sidebarAddStencilPalette = Sidebar.prototype.addStencilPalette;
1304 - 1352 +
1305 Sidebar.prototype.addStencilPalette = function(id, title, stencilFile, style, ignore, onInit, scale, tags, customFns, groupId) 1353 Sidebar.prototype.addStencilPalette = function(id, title, stencilFile, style, ignore, onInit, scale, tags, customFns, groupId)
1306 { 1354 {
1307 sidebarAddStencilPalette.apply(this, arguments); 1355 sidebarAddStencilPalette.apply(this, arguments);
1308 scale = (scale != null) ? scale : 1; 1356 scale = (scale != null) ? scale : 1;
1309 - 1357 +
1310 // Used for creating index 1358 // Used for creating index
1311 mxStencilRegistry.loadStencilSet(stencilFile, mxUtils.bind(this, function(packageName, stencilName, displayName, w, h) 1359 mxStencilRegistry.loadStencilSet(stencilFile, mxUtils.bind(this, function(packageName, stencilName, displayName, w, h)
1312 { 1360 {
@@ -1315,18 +1363,18 @@ @@ -1315,18 +1363,18 @@
1315 var entry = {style: 'shape=' + packageName + stencilName + style, 1363 var entry = {style: 'shape=' + packageName + stencilName + style,
1316 w: Math.round(w * scale), h: Math.round(h * scale)}; 1364 w: Math.round(w * scale), h: Math.round(h * scale)};
1317 var tmpTags = (tags != null) ? tags[stencilName] : null; 1365 var tmpTags = (tags != null) ? tags[stencilName] : null;
1318 - 1366 +
1319 if (tmpTags != null) 1367 if (tmpTags != null)
1320 { 1368 {
1321 entry.tags = tmpTags; 1369 entry.tags = tmpTags;
1322 } 1370 }
1323 - 1371 +
1324 if (groupId != null) 1372 if (groupId != null)
1325 { 1373 {
1326 entry.id = groupId; 1374 entry.id = groupId;
1327 entry.lib = id; 1375 entry.lib = id;
1328 } 1376 }
1329 - 1377 +
1330 this.createdSearchIndex.push(entry); 1378 this.createdSearchIndex.push(entry);
1331 } 1379 }
1332 }), true); 1380 }), true);
@@ -1342,7 +1390,7 @@ @@ -1342,7 +1390,7 @@
1342 { 1390 {
1343 var sizes = res.icons[i].raster_sizes; 1391 var sizes = res.icons[i].raster_sizes;
1344 var index = sizes.length - 1; 1392 var index = sizes.length - 1;
1345 - 1393 +
1346 while (index > 0 && sizes[index].size > 128) 1394 while (index > 0 && sizes[index].size > 128)
1347 { 1395 {
1348 index--; 1396 index--;
@@ -1365,23 +1413,23 @@ @@ -1365,23 +1413,23 @@
1365 } 1413 }
1366 } 1414 }
1367 }; 1415 };
1368 - 1416 +
1369 /** 1417 /**
1370 * Adds server icon results to local search results 1418 * Adds server icon results to local search results
1371 */ 1419 */
1372 var sidebarSearchEntries = Sidebar.prototype.searchEntries; 1420 var sidebarSearchEntries = Sidebar.prototype.searchEntries;
1373 - 1421 +
1374 Sidebar.prototype.searchEntries = function(searchTerms, count, page, success, error) 1422 Sidebar.prototype.searchEntries = function(searchTerms, count, page, success, error)
1375 { 1423 {
1376 var succ = success; 1424 var succ = success;
1377 - 1425 +
1378 // Lazy-load indices 1426 // Lazy-load indices
1379 if (this.searchIndexData != null) 1427 if (this.searchIndexData != null)
1380 { 1428 {
1381 this.addSearchIndex(JSON.parse(Graph.decompress(this.searchIndexData))); 1429 this.addSearchIndex(JSON.parse(Graph.decompress(this.searchIndexData)));
1382 this.searchIndexData = null; 1430 this.searchIndexData = null;
1383 } 1431 }
1384 - 1432 +
1385 if (ICONSEARCH_PATH != null) 1433 if (ICONSEARCH_PATH != null)
1386 { 1434 {
1387 success = mxUtils.bind(this, function(results, len, more, terms) 1435 success = mxUtils.bind(this, function(results, len, more, terms)
@@ -1389,7 +1437,7 @@ @@ -1389,7 +1437,7 @@
1389 if (!this.editorUi.isOffline() && results.length <= count / 4) 1437 if (!this.editorUi.isOffline() && results.length <= count / 4)
1390 { 1438 {
1391 var pg = page - Math.ceil((len - count / 4) / count); 1439 var pg = page - Math.ceil((len - count / 4) / count);
1392 - 1440 +
1393 mxUtils.get(ICONSEARCH_PATH + '?q=' + encodeURIComponent(searchTerms) + 1441 mxUtils.get(ICONSEARCH_PATH + '?q=' + encodeURIComponent(searchTerms) +
1394 '&p=' + pg + '&c=' + count, mxUtils.bind(this, function(req) 1442 '&p=' + pg + '&c=' + count, mxUtils.bind(this, function(req)
1395 { 1443 {
@@ -1402,7 +1450,7 @@ @@ -1402,7 +1450,7 @@
1402 try 1450 try
1403 { 1451 {
1404 var res = JSON.parse(req.getText()); 1452 var res = JSON.parse(req.getText());
1405 - 1453 +
1406 if (res == null || res.icons == null) 1454 if (res == null || res.icons == null)
1407 { 1455 {
1408 succ(results, len, false, terms); 1456 succ(results, len, false, terms);
@@ -1442,7 +1490,7 @@ @@ -1442,7 +1490,7 @@
1442 } 1490 }
1443 }); 1491 });
1444 } 1492 }
1445 - 1493 +
1446 sidebarSearchEntries.apply(this, arguments); 1494 sidebarSearchEntries.apply(this, arguments);
1447 }; 1495 };
1448 1496
@@ -1450,16 +1498,16 @@ @@ -1450,16 +1498,16 @@
1450 * Adds a click handler for inserting the cell as target for dangling edge. 1498 * Adds a click handler for inserting the cell as target for dangling edge.
1451 */ 1499 */
1452 var sidebarItemClicked = Sidebar.prototype.itemClicked; 1500 var sidebarItemClicked = Sidebar.prototype.itemClicked;
1453 - 1501 +
1454 Sidebar.prototype.itemClicked = function(cells, ds, evt) 1502 Sidebar.prototype.itemClicked = function(cells, ds, evt)
1455 { 1503 {
1456 var graph = this.editorUi.editor.graph; 1504 var graph = this.editorUi.editor.graph;
1457 var handled = false; 1505 var handled = false;
1458 - 1506 +
1459 if (cells != null && graph.getSelectionCount() == 1 && graph.getModel().isVertex(cells[0])) 1507 if (cells != null && graph.getSelectionCount() == 1 && graph.getModel().isVertex(cells[0]))
1460 { 1508 {
1461 var target = graph.cloneCell(cells[0]); 1509 var target = graph.cloneCell(cells[0]);
1462 - 1510 +
1463 // Inserts cell as target of selected edge if not connected 1511 // Inserts cell as target of selected edge if not connected
1464 if (graph.getModel().isEdge(graph.getSelectionCell()) && graph.getModel().getTerminal(graph.getSelectionCell(), false) == null && 1512 if (graph.getModel().isEdge(graph.getSelectionCell()) && graph.getModel().getTerminal(graph.getSelectionCell(), false) == null &&
1465 graph.getModel().isVertex(target)) 1513 graph.getModel().isVertex(target))
@@ -1468,7 +1516,7 @@ @@ -1468,7 +1516,7 @@
1468 try 1516 try
1469 { 1517 {
1470 var edgeState = graph.view.getState(graph.getSelectionCell()); 1518 var edgeState = graph.view.getState(graph.getSelectionCell());
1471 - 1519 +
1472 if (edgeState != null) 1520 if (edgeState != null)
1473 { 1521 {
1474 var tr = graph.view.translate; 1522 var tr = graph.view.translate;
@@ -1478,10 +1526,10 @@ @@ -1478,10 +1526,10 @@
1478 target.geometry.x = pt.x / s - tr.x - target.geometry.width / 2; 1526 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; 1527 target.geometry.y = pt.y / s - tr.y - target.geometry.height / 2;
1480 } 1528 }
1481 - 1529 +
1482 graph.addCell(target); 1530 graph.addCell(target);
1483 graph.getModel().setTerminal(graph.getSelectionCell(), target, false); 1531 graph.getModel().setTerminal(graph.getSelectionCell(), target, false);
1484 - 1532 +
1485 if (evt == null || !mxEvent.isShiftDown(evt)) 1533 if (evt == null || !mxEvent.isShiftDown(evt))
1486 { 1534 {
1487 graph.fireEvent(new mxEventObject('cellsInserted', 'cells', [target])); 1535 graph.fireEvent(new mxEventObject('cellsInserted', 'cells', [target]));
@@ -1495,13 +1543,13 @@ @@ -1495,13 +1543,13 @@
1495 { 1543 {
1496 graph.getModel().endUpdate(); 1544 graph.getModel().endUpdate();
1497 } 1545 }
1498 - 1546 +
1499 graph.scrollCellToVisible(target); 1547 graph.scrollCellToVisible(target);
1500 graph.setSelectionCell(target); 1548 graph.setSelectionCell(target);
1501 handled = true; 1549 handled = true;
1502 } 1550 }
1503 } 1551 }
1504 - 1552 +
1505 if (!handled) 1553 if (!handled)
1506 { 1554 {
1507 sidebarItemClicked.apply(this, arguments); 1555 sidebarItemClicked.apply(this, arguments);
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 };