Commit f1f34de64402376f95d3478c582df428186aa139

Authored by xp.Huang
2 parents cc5bbe36 2618f8ee

Merge branch 'ww' into 'main'

feat: implement variable image

See merge request huang/thingskit-drawio!22

Too many changes to show.

To preserve performance only 8 of 10 files are displayed.

7.17 KB | W: | H:

36.2 KB | W: | H:

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