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