1(function() 2{ 3 /** 4 * Download from following URL as TSV and convert using https://jgraph.github.io/drawio-tools/tools/convert.html: 5 * https://docs.google.com/spreadsheets/d/1sAL1zn-UtmJtKPH4cLApGjRX-TRSJa5dYdfZ9NKYfRs 6 * Maps package and stencil names to additional tags. 7 */ 8 Sidebar.prototype.tagIndex = '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'; 9 10 /** 11 * To update this, go to https://test.draw.io/?dev=1&test=1&drawdev=1&demo=1&createindex=1 and 12 * copy the output of searchFileData from the browser console to the variable below. 13 */ 14 Sidebar.prototype.searchIndexData = '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'; 15 16 /** 17 * Overrides gear image URL. 18 */ 19 Sidebar.prototype.gearImage = GRAPH_IMAGE_PATH + '/clipart/Gear_128x128.png'; 20 21 /** 22 * Aliases for IDs in the libs parameter. 23 */ 24 Sidebar.prototype.libAliases = {'aws2': 'aws3', 'gcp' : 'gcp2'}; 25 26 /** 27 * 28 */ 29 Sidebar.prototype.defaultEntries = 'general;uml;er;bpmn;flowchart;basic;arrows2'; 30 31 /** 32 * Library definitions 33 */ 34 Sidebar.prototype.signs = ['Animals', 'Food', 'Healthcare', 'Nature', 'People', 'Safety', 'Science', 'Sports', 'Tech', 'Transportation', 'Travel']; 35 36 Sidebar.prototype.ibm = ['Analytics', 'Applications', 'Blockchain', 'Data', 'DevOps', 'Infrastructure', 'Management', 'Miscellaneous', 'Security', 'Social', 'Users', 'VPC', 'Boxes', 'Connectors']; 37 38 Sidebar.prototype.allied_telesis = ['Buildings', 'Computer and Terminals', 'Media Converters', 'Security', 'Storage', 'Switch', 'Wireless']; 39 40 Sidebar.prototype.gcp = ['Cards', 'Big Data', 'Compute', 'Developer Tools', 'Extras', 'Identity and Security', 'Machine Learning', 'Management Tools', 'Networking', 'Storage Databases']; 41 42 Sidebar.prototype.gcp2 = ['Paths', 'Zones', 'Service Cards', 'Compute', 'API Management', 'Security', 'Data Analytics', 'Data Transfer', 'Cloud AI', 'Internet of Things', 'Databases', 'Storage', 'Management Tools', 'Networking', 'Developer Tools', 'Expanded Product Cards', 'User Device Cards', 'Product Cards', 'General Icons', 'Icons AI Machine Learning', 'Icons Compute', 'Icons Data Analytics', 'Icons Management Tools', 'Icons Networking', 'Icons Developer Tools', 'Icons API Management', 'Icons Internet of Things', 'Icons Databases', 'Icons Storage', 'Icons Security', 'Icons Migration', 'Icons Hybrid and Multi Cloud']; 43 44 Sidebar.prototype.gcp3 = ['API Platform Ecosystems', 'Big Data', 'Cloud AI', 'Compute', 'Data Transfer', 'Developer Tools', 'Expanded Product Card Icons', 'Generic', 'Identity and Security', 'Internet of Things', 'Management Tools', 'Networking', 'Open Source Icons', 'Storage Databases']; 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']; 51 52 Sidebar.prototype.cisco = ['Buildings', 'Computers and Peripherals', 'Controllers and Modules', 'Directors', 'Hubs and Gateways', 'Misc', 53 'Modems and Phones', 'People', 'Routers', 'Security', 'Servers', 'Storage', 'Switches', 'Wireless']; 54 55 Sidebar.prototype.cisco19 = ['LAN Switching', 'Routing WAN', 'Network Management', 'Data Center', 'Wireless LAN', 'Collaboration', 'Security Clouds Connectors', 'Endpoint Client Device Icons', 'DNA SD Access', 'SD WAN Viptela', 'ETA Stealthwatch', 'SAFE']; 56 57 Sidebar.prototype.cisco_safe = ['Architecture', 'Business Icons', 'Capability', 'Design', 'IoT Things Icons', 'People Places Things Icons', 'Security Icons', 'Technology Icons', 'Threat']; 58 59 Sidebar.prototype.sysml = ['Model Elements', 'Blocks', 'Ports and Flows', 'Constraint Blocks', 'Activities', 'Interactions', 'State Machines', 60 'Use Cases', 'Allocations', 'Requirements', 'Profiles', 'Stereotypes']; 61 62 Sidebar.prototype.eip = ['Message Construction', 'Message Routing', 'Message Transformation', 'Messaging Channels', 'Messaging Endpoints', 63 'Messaging Systems', 'System Management']; 64 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']; 67 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']; 70 71 Sidebar.prototype.aws3 = ['Analytics', 'Application Services', 'Artificial Intelligence', 'Business Productivity', 'Compute', 'Contact Center', 'Database', 'Desktop and App Streaming', 'Developer Tools', 72 'Game Development', 'General', 'Groups', 'Internet of Things', 73 'Management Tools', 'Messaging', 'Migration', 'Mobile Services', 'Networking and Content Delivery', 'On Demand Workforce', 'SDKs', 'Security Identity and Compliance', 'Storage']; 74 75 Sidebar.prototype.aws4b = ['Arrows', 'General Resources', 'Illustrations', 'Groups Light', 'Groups Dark', 'Analytics', 'Application Integration', 'AR VR', 'Cost Management', 'Business Productivity', 'Compute', 'Customer Engagement', 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']; 83 84 Sidebar.prototype.office = ['Clouds', 'Communications', 'Concepts', 'Databases', 'Devices', 'Security', 'Servers', 'Services', 'Sites', 'Users']; 85 86 Sidebar.prototype.veeam = ['Data Center', 'Misc', 'Software', 'Storage', 'UsersStatus', 'VASComponents', 'Backup Replication', 'Products', 'VMs and Tape', '2D', '3D']; 87 Sidebar.prototype.veeam2 = ['Auxiliary', 'Data Center', 'Features', 'General', 'Products and Components', 'Software', 'States', 'Storage', '3D']; 88 89 Sidebar.prototype.archimate3 = ['Application', 'Business', 'Composite', 'Implementation and Migration', 'Motivation', 'Physical', 'Relationships', 'Strategy', 'Technology']; 90 91 Sidebar.prototype.electrical = ['LogicGates', 'Resistors', 'Capacitors', 'Inductors', 'SwitchesRelays', 'Diodes', 'Sources', 'Transistors', 'Misc', 'Audio', 'PlcLadder', 'Abstract', 'Optical', 'VacuumTubes', 'Waveforms', 'Instruments', 'RotMech', 'Transmission']; 92 93 /** 94 * Description of custom libraries, see https://www.diagrams.net/doc/faq/configure-diagram-editor 95 */ 96 Sidebar.prototype.customEntries = null; 97 98 /** 99 * Array of strings for the built-in libraries to be enabled in the more shapes dialog. Null means all, 100 * empty array means none, possible keys are listed for the libs parameter at 101 * 102 * https://www.diagrams.net/doc/faq/supported-url-parameters 103 */ 104 Sidebar.prototype.enabledLibraries = null; 105 106 /** 107 * Maximum number of custom libraries to preload into the search index. 108 */ 109 Sidebar.prototype.maxPreloadCount = 20; 110 111 /** 112 * 113 */ 114 Sidebar.prototype.configuration = [{id: 'general', libs: ['general', 'misc', 'advanced']}, 115 {id: 'uml'}, {id: 'uml25'}, {id: 'search'}, {id: 'er'}, 116 {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']}, 117 {id: 'ios', prefix: 'ios', libs: [''/*prefix is library*/, '7icons', '7ui']}, 118 {id: 'android', prefix: 'android', libs: [''/*prefix is library*/]}, {id: 'aws3d'}, 119 {id: 'flowchart'}, {id: 'basic'}, {id: 'infographic'}, {id: 'arrows'}, {id: 'arrows2'}, {id: 'lean_mapping'}, {id: 'citrix'}, {id: 'azure'}, {id: 'network'}, {id: 'vvd'}, 120 {id: 'sitemap'}, {id:'c4'}, {id: 'dfd'}, {id: 'threatModeling'}, {id : 'kubernetes'}, {id : 'cisco19', prefix: 'cisco19', libs: Sidebar.prototype.cisco19}, 121 {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']}, 122 {id: 'active_directory'}, 123 {id: 'bpmn2', prefix: 'bpmn2', libs: ['General', 'Tasks', 'Choreographies', 'Events', 'Gateways']}, 124 {id: 'clipart', prefix: null, libs: ['computer', 'finance', 'clipart', 'networking', 'people', 'telco']}, 125 {id: 'ibm', prefix: 'ibm', libs: Sidebar.prototype.ibm}, 126 {id: 'allied_telesis', prefix: 'allied_telesis', libs: Sidebar.prototype.allied_telesis}, 127 {id: 'cumulus', libs: ['cumulus']}, 128 {id: 'eip', prefix: 'eip', libs: Sidebar.prototype.eip}, 129 {id: 'mockups', prefix: 'mockup', libs: ['Buttons', 'Containers', 'Forms', 'Graphics', 'Markup', 'Misc', 'Navigation', 'Text']}, 130 {id: 'pid2', prefix: 'pid2', libs: ['Agitators', 'Apparatus Elements', 'Centrifuges', 'Compressors', 'Compressors ISO', 'Crushers Grinding', 131 'Driers', 'Engines', 'Feeders', 'Filters', 'Fittings', 'Flow Sensors', 'Heat Exchangers', 'Instruments', 'Misc', 132 'Mixers', 'Piping', 'Pumps', 'Pumps DIN', 'Pumps ISO', 'Separators', 'Shaping Machines', 'Valves', 'Vessels']}, 133 {id: 'signs', prefix: 'signs', libs: Sidebar.prototype.signs}, 134 {id: 'gcp', prefix: 'gcp', libs: Sidebar.prototype.gcp}, 135 {id: 'gcp2', prefix: 'gcp2', libs: Sidebar.prototype.gcp2}, 136 {id: 'gcp3', prefix: 'gcp3', libs: Sidebar.prototype.gcp3}, 137 {id: 'rack', prefix: 'rack', libs: Sidebar.prototype.rack}, 138 {id: 'electrical', prefix: 'electrical', libs: Sidebar.prototype.electrical}, 139 {id: 'aws2', prefix: 'aws2', libs: Sidebar.prototype.aws2}, 140 {id: 'aws3', prefix: 'aws3', libs: Sidebar.prototype.aws3}, 141 {id: 'aws4b', prefix: 'aws4b', libs: Sidebar.prototype.aws4b}, 142 {id: 'aws4', prefix: 'aws4', libs: Sidebar.prototype.aws4}, 143 {id: 'pid', prefix: 'pid', libs: Sidebar.prototype.pids}, 144 {id: 'cisco', prefix: 'cisco', libs: Sidebar.prototype.cisco}, 145 {id: 'cisco_safe', prefix: 'cisco_safe', libs: Sidebar.prototype.cisco_safe}, 146 {id: 'office', prefix: 'office', libs: Sidebar.prototype.office}, 147 {id: 'veeam', prefix: 'veeam', libs: Sidebar.prototype.veeam}, 148 {id: 'veeam2', prefix: 'veeam2', libs: Sidebar.prototype.veeam2}, 149 {id: 'cabinets', libs: ['cabinets']}, 150 {id: 'floorplan', libs: ['floorplan']}, 151 {id: 'bootstrap', libs: ['bootstrap']}, 152 {id: 'atlassian', libs: ['atlassian']}, 153 {id: 'fluid_power', libs: ['fluid_power']}, 154 {id: 'gmdl', prefix: 'gmdl', libs: Sidebar.prototype.gmdl}, 155 {id: 'archimate3', prefix: 'archimate3', libs: Sidebar.prototype.archimate3}, 156 {id: 'archimate', libs: ['archimate']}, 157 {id: 'webicons', libs: ['webicons', 'weblogos']}, 158 {id: 'sysml', prefix: 'sysml', libs: Sidebar.prototype.sysml}]; 159 160 /** 161 * Adds hint for quick tutorial video for certain search terms. 162 */ 163 var siderbarInsertSearchHint = Sidebar.prototype.insertSearchHint; 164 165 Sidebar.prototype.insertSearchHint = function(div, searchTerm, count, page, results, len, more, terms) 166 { 167 if (terms != null && page == 1) 168 { 169 var hintText = null; 170 171 // Adds hint for text inserts 172 if (mxUtils.indexOf(terms, 'text') >= 0) 173 { 174 hintText = 'Double click anywhere in the diagram to insert text.'; 175 } 176 else 177 { 178 // Checks if any of the following keywords are in the search terms 179 var words = ['line', 'lines', 'arrow', 'arrows', 'connect', 'connection', 'connections', 180 'connector', 'connectors', 'curve', 'curves', 'link', 'links', 'directed', 181 'directional', 'bidirectional']; 182 183 for (var i = 0; i < words.length; i++) 184 { 185 if (mxUtils.indexOf(terms, words[i]) >= 0) 186 { 187 hintText = 'Need help with connections?'; 188 break; 189 } 190 } 191 } 192 193 if (hintText != null && !this.hideSearchHint) 194 { 195 var link = document.createElement('a'); 196 link.setAttribute('href', 'https://youtu.be/Z0D96ZikMkc'); 197 link.setAttribute('target', '_blank'); 198 link.className = 'geTitle'; 199 link.style.cssText = 'background-color:#ffd350;border-radius:6px;color:black;' + 200 'border:1px solid black !important;text-align:center;white-space:normal;' + 201 'padding:6px 0px 6px 0px !important;margin:4px 4px 8px 2px;font-size:12px;'; 202 mxUtils.write(link, hintText); 203 204 // Adds close button 205 var img = document.createElement('img'); 206 img.setAttribute('src', Dialog.prototype.closeImage); 207 img.setAttribute('title', mxResources.get('hide')); 208 img.className = 'geDialogClose'; 209 img.style.position = 'relative'; 210 img.style.cursor = 'default'; 211 img.style.top = '1px'; 212 img.style.right = '0px'; 213 214 mxEvent.addListener(img, 'click', mxUtils.bind(this, function(evt) 215 { 216 link.parentNode.removeChild(link); 217 this.hideSearchHint = true; 218 mxEvent.consume(evt); 219 })); 220 221 link.appendChild(img); 222 div.appendChild(link); 223 224 // Shows hint only once 225 this.hideSearchHint = true; 226 } 227 } 228 229 siderbarInsertSearchHint.apply(this, arguments); 230 }; 231 232 /** 233 * Toggle palette. 234 */ 235 Sidebar.prototype.togglePalettes = function(prefix, ids) 236 { 237 this.showPalettes(prefix, ids); 238 }; 239 240 /** 241 * Toggle palette. 242 */ 243 Sidebar.prototype.togglePalette = function(id) 244 { 245 this.showPalette(id); 246 }; 247 248 /** 249 * Shows or hides palettes. 250 */ 251 Sidebar.prototype.showPalettes = function(prefix, ids, visible) 252 { 253 for (var i = 0; i < ids.length; i++) 254 { 255 this.showPalette(prefix + ids[i], visible); 256 } 257 }; 258 259 /** 260 * Shows or hides a palette. 261 */ 262 Sidebar.prototype.showPalette = function(id, visible) 263 { 264 var elts = this.palettes[id]; 265 266 if (elts != null) 267 { 268 var vis = (visible != null) ? ((visible) ? 'block' : 'none') : (elts[0].style.display == 'none') ? 'block' : 'none'; 269 270 for (var i = 0; i < elts.length; i++) 271 { 272 elts[i].style.display = vis; 273 } 274 } 275 276 return elts; 277 }; 278 279 /** 280 * 281 */ 282 Sidebar.prototype.getConfigurationById = function(id) 283 { 284 for (var i = 0; i < this.configuration.length; i++) 285 { 286 if (this.configuration[i].id == id) 287 { 288 return this.configuration[i]; 289 } 290 } 291 292 if (this.customEntries != null) 293 { 294 for (var i = 0; i < this.customEntries.length; i++) 295 { 296 var section = this.customEntries[i]; 297 298 for (var j = 0; j < section.entries.length; j++) 299 { 300 var entry = section.entries[j]; 301 302 if (entry.id == id) 303 { 304 return {id: entry.id, libs: entry.libs}; 305 } 306 } 307 } 308 } 309 310 return null; 311 }; 312 313 /** 314 * 315 */ 316 Sidebar.prototype.isEntryVisible = function(key) 317 { 318 var config = this.getConfigurationById(key); 319 320 if (config != null) 321 { 322 var id = (config.libs != null) ? ((config.prefix || '') + config.libs[0]) : key; 323 var elts = this.palettes[id]; 324 325 if (elts != null) 326 { 327 return elts[0].style.display != 'none'; 328 } 329 } 330 331 if (this.customEntries != null) 332 { 333 for (var i = 0; i < this.customEntries.length; i++) 334 { 335 var section = this.customEntries[i]; 336 337 for (var j = 0; j < section.entries.length; j++) 338 { 339 var entry = section.entries[j]; 340 341 if (entry.id == key) 342 { 343 if (entry.libs != null && entry.libs.length > 0) 344 { 345 var elts = this.palettes[entry.id + '.0']; 346 347 if (elts != null) 348 { 349 return elts[0].style.display != 'none'; 350 } 351 } 352 353 break; 354 } 355 } 356 } 357 } 358 359 return false; 360 }; 361 362 /** 363 * 364 */ 365 Sidebar.prototype.showEntries = function(entries, remember, force) 366 { 367 var all = []; 368 369 if (remember) 370 { 371 mxSettings.setLibraries(entries); 372 mxSettings.save(); 373 } 374 375 if (entries != null && (force || entries.length > 0)) 376 { 377 all.push(entries); 378 } 379 else 380 { 381 var done = false; 382 383 if (urlParams['libs'] != null && urlParams['libs'].length > 0) 384 { 385 all.push(decodeURIComponent(urlParams['libs'])); 386 done = this.editorUi.getServiceName() == 'draw.io'; 387 } 388 389 // Libs parameter overrides configuration for online app so that 390 // links can be created to show just the specifies libraries 391 if (!done) 392 { 393 if (mxSettings != null && mxSettings.settings != null) 394 { 395 all.push(mxSettings.getLibraries()); 396 } 397 else 398 { 399 all.push(this.defaultEntries); 400 } 401 } 402 } 403 404 // Merges array of semicolon separated strings into a single array 405 var temp = all.join(';').split(';'); 406 407 // Resolves aliases and creates lookup 408 var visible = {}; 409 410 for (var i = 0; i < temp.length; i++) 411 { 412 visible[this.libAliases[temp[i]] || temp[i]] = true; 413 } 414 415 for (var i = 0; i < this.configuration.length; i++) 416 { 417 // Search has separate switch in Extras menu 418 if (this.configuration[i].id != 'search') 419 { 420 this.showPalettes(this.configuration[i].prefix || '', 421 this.configuration[i].libs || [this.configuration[i].id], 422 visible[this.configuration[i].id] == true); 423 } 424 } 425 426 if (this.customEntries != null) 427 { 428 for (var i = 0; i < this.customEntries.length; i++) 429 { 430 var section = this.customEntries[i]; 431 432 for (var j = 0; j < section.entries.length; j++) 433 { 434 var entry = section.entries[j]; 435 436 if (entry.libs != null && entry.libs.length > 0) 437 { 438 var libs = []; 439 440 for (var k = 0; k < entry.libs.length; k++) 441 { 442 libs.push(entry.id + '.' + k); 443 } 444 445 this.showPalettes('', libs, visible[entry.id]); 446 } 447 } 448 } 449 } 450 }; 451 452 /** 453 * Overrides the sidebar init. 454 */ 455 Sidebar.prototype.init = function() 456 { 457 // Defines all entries for the sidebar. This is used in the MoreShapes dialog. Create screenshots using the savesidebar URL parameter and 458 // http://www.alderg.com/merge.html for creating a vertical stack of PNG images if multiple sidebars are part of an entry. 459 this.entries = [{title: mxResources.get('standard'), 460 entries: [{title: mxResources.get('general'), id: 'general', image: IMAGE_PATH + '/sidebar-general.png'}, 461 {title: mxResources.get('basic'), id: 'basic', image: IMAGE_PATH + '/sidebar-basic.png'}, 462 {title: mxResources.get('arrows'), id: 'arrows2', image: IMAGE_PATH + '/sidebar-arrows2.png'}, 463 {title: mxResources.get('clipart'), id: 'clipart', image: IMAGE_PATH + '/sidebar-clipart.png'}, 464 {title: mxResources.get('flowchart'), id: 'flowchart', image: IMAGE_PATH + '/sidebar-flowchart.png'}]}, 465 {title: mxResources.get('software'), 466 entries: [{title: 'Active Directory', id: 'active_directory', image: IMAGE_PATH + '/sidebar-active_directory.png'}, 467 {title: mxResources.get('android'), id: 'android', image: IMAGE_PATH + '/sidebar-android.png'}, 468 {title: 'Atlassian', id: 'atlassian', image: IMAGE_PATH + '/sidebar-atlassian.png'}, 469 {title: mxResources.get('bootstrap'), id: 'bootstrap', image: IMAGE_PATH + '/sidebar-bootstrap.png'}, 470 {title: 'C4', id: 'c4', image: IMAGE_PATH + '/sidebar-c4.png'}, 471 {title: 'Data Flow Diagram', id: 'dfd', image: IMAGE_PATH + '/sidebar-dfd.png'}, 472 {title: mxResources.get('entityRelation'), id: 'er', image: IMAGE_PATH + '/sidebar-er.png'}, 473 {title: mxResources.get('ios'), id: 'ios', image: IMAGE_PATH + '/sidebar-ios.png'}, 474 {title: mxResources.get('mockups'), id: 'mockups', image: IMAGE_PATH + '/sidebar-mockups.png'}, 475 {title: 'Sitemap', id: 'sitemap', image: IMAGE_PATH + '/sidebar-sitemap.png'}, 476 {title: mxResources.get('uml') + ' 2.5', id: 'uml25', image: IMAGE_PATH + '/sidebar-uml25.png'}, 477 {title: mxResources.get('uml'), id: 'uml', image: IMAGE_PATH + '/sidebar-uml.png'}]}, 478 {title: mxResources.get('networking'), 479 entries: [{title: 'Allied Telesis', id: 'allied_telesis', image: IMAGE_PATH + '/sidebar-allied_telesis.png'}, 480 {title: 'AWS17', id: 'aws3', image: IMAGE_PATH + '/sidebar-aws3.png'}, 481 {title: 'AWS18', id: 'aws4b', image: IMAGE_PATH + '/sidebar-aws4b.png'}, 482 {title: 'AWS19', id: 'aws4', image: IMAGE_PATH + '/sidebar-aws4.png'}, 483 // TODO: Add isometric containers 484 {title: mxResources.get('aws3d'), id: 'aws3d', image: IMAGE_PATH + '/sidebar-aws3d.png'}, 485 {title: mxResources.get('azure'), id: 'azure2', image: IMAGE_PATH + '/sidebar-azure.png'}, 486 {title: 'Cloud & Enterprise', id: 'mscae', image: IMAGE_PATH + '/sidebar-mscae.png'}, 487 {title: mxResources.get('cisco'), id: 'cisco', image: IMAGE_PATH + '/sidebar-cisco.png'}, 488 {title: 'Cisco19', id: 'cisco19', image: IMAGE_PATH + '/sidebar-cisco19.png'}, 489 {title: 'Cisco Safe', id: 'cisco_safe', image: IMAGE_PATH + '/sidebar-cisco_safe.png'}, 490 {title: 'Cumulus', id: 'cumulus', image: IMAGE_PATH + '/sidebar-cumulus.png'}, 491 {title: 'Citrix', id: 'citrix', image: IMAGE_PATH + '/sidebar-citrix.png'}, 492 {title: 'Google Cloud Platform', id: 'gcp2', image: IMAGE_PATH + '/sidebar-gcp2.png'}, 493 {title: 'GCP Icons', id: 'gcp3', image: IMAGE_PATH + '/sidebar-gcp3.png'}, 494 {title: 'IBM', id: 'ibm', image: IMAGE_PATH + '/sidebar-ibm.png'}, 495 {title: 'Kubernetes', id: 'kubernetes', image: IMAGE_PATH + '/sidebar-kubernetes.png'}, 496 {title: 'Network', id: 'network', image: IMAGE_PATH + '/sidebar-network.png'}, 497 {title: 'Office', id: 'office', image: IMAGE_PATH + '/sidebar-office.png'}, 498 {title: mxResources.get('rack'), id: 'rack', image: IMAGE_PATH + '/sidebar-rack.png'}, 499 {title: 'Veeam', id: 'veeam2', image: IMAGE_PATH + '/sidebar-veeam.png'}, 500 {title: 'VMware', id: 'vvd', image: IMAGE_PATH + '/sidebar-vvd.png'}]}, 501 {title: mxResources.get('business'), 502 entries: [{title: 'ArchiMate 3.0', id: 'archimate3', image: IMAGE_PATH + '/sidebar-archimate3.png'}, 503 {title: mxResources.get('archiMate21'), id: 'archimate', image: IMAGE_PATH + '/sidebar-archimate.png'}, 504 {title: mxResources.get('bpmn') + ' 2.0', id: 'bpmn2', image: IMAGE_PATH + '/sidebar-bpmn.png'}, 505 {title: mxResources.get('sysml'), id: 'sysml', image: IMAGE_PATH + '/sidebar-sysml.png'}, 506 {title: 'Value Stream Mapping', id: 'lean_mapping', image: IMAGE_PATH + '/sidebar-leanmapping.png'}]}, 507 {title: mxResources.get('other'), 508 entries: [{title: mxResources.get('cabinets'), id: 'cabinets', image: IMAGE_PATH + '/sidebar-cabinets.png'}, 509 {title: 'Infographic', id: 'infographic', image: IMAGE_PATH + '/sidebar-infographic.png'}, 510 {title: mxResources.get('eip'), id: 'eip', image: IMAGE_PATH + '/sidebar-eip.png'}, 511 {title: mxResources.get('electrical'), id: 'electrical', image: IMAGE_PATH + '/sidebar-electrical.png'}, 512 {title: mxResources.get('floorplans'), id: 'floorplan', image: IMAGE_PATH + '/sidebar-floorplans.png'}, 513 {title: 'Fluid Power (ISO 1219)', id: 'fluid_power', image: IMAGE_PATH + '/sidebar-fluid_power.png'}, 514 {title: mxResources.get('gmdl'), id: 'gmdl', image: IMAGE_PATH + '/sidebar-gmdl.png'}, 515 {title: mxResources.get('procEng'), id: 'pid', image: IMAGE_PATH + '/sidebar-pid.png'}, 516 {title: 'Threat Modeling', id: 'threatModeling', image: IMAGE_PATH + '/sidebar-threatmodeling.png'}, 517 {title: 'Web Icons', id: 'webicons', image: IMAGE_PATH + '/sidebar-webIcons.png'}, 518 {title: mxResources.get('signs'), id: 'signs', image: IMAGE_PATH + '/sidebar-signs.png'}]}]; 519 520 // Uses search.xml index file instead (faster load times) 521 this.addStencilsToIndex = false; 522 523 // Contains additional tags for shapes 524 this.shapetags = {}; 525 526 // Adds tags from compressed text file for improved searches 527 if (this.tagIndex != null) 528 { 529 this.addTagIndex(Graph.decompress(this.tagIndex)); 530 this.tagIndex = null; 531 } 532 533 this.initPalettes(); 534 } 535 536 /** 537 * Overridden to add image export via servlet 538 */ 539 if (urlParams['savesidebar'] == '1') 540 { 541 Sidebar.prototype.addFoldingHandler = function(title, content, funct) 542 { 543 var initialized = false; 544 545 // Avoids mixed content warning in IE6-8 546 if (!mxClient.IS_IE || document.documentMode >= 8) 547 { 548 title.style.backgroundImage = (content.style.display == 'none') ? 549 'url(\'' + this.collapsedImage + '\')' : 'url(\'' + this.expandedImage + '\')'; 550 } 551 552 title.style.backgroundRepeat = 'no-repeat'; 553 title.style.backgroundPosition = '0% 50%'; 554 555 var btn = document.createElement('button'); 556 btn.style.marginLeft = '4px'; 557 mxUtils.write(btn, 'Save'); 558 559 mxEvent.addListener(title, 'click', mxUtils.bind(this, function(evt) 560 { 561 if (mxEvent.getSource(evt).nodeName == 'BUTTON') 562 { 563 var title2 = title.cloneNode(true); 564 title2.style.backgroundImage = ''; 565 title2.style.textDecoration = 'none'; 566 title2.style.fontWeight = 'bold'; 567 title2.style.fontSize = '14px'; 568 title2.style.color = 'rgb(80, 80, 80)'; 569 title2.style.width = '456px'; 570 title2.style.backgroundColor = '#ffffff'; 571 title2.style.paddingLeft = '6px'; 572 573 var btn2 = title2.getElementsByTagName('button')[0]; 574 btn2.parentNode.removeChild(btn2); 575 576 var clone = content.cloneNode(true); 577 clone.style.backgroundColor = '#ffffff'; 578 clone.style.borderColor = 'transparent'; 579 clone.style.width = '456px'; 580 581 var parser = new DOMParser(); 582 var doc = parser.parseFromString('<body style="background:#ffffff;font-family:Helvetica,Arial;">' + 583 title2.outerHTML + clone.outerHTML + '</body>', 'text/html'); 584 585 this.editorUi.editor.convertImages(doc.documentElement, mxUtils.bind(this, function(body) 586 { 587 var html = '<!DOCTYPE html><html><head><link rel="stylesheet" type="text/css" ' + 588 'href="https://www.draw.io/styles/grapheditor.css"></head>' + 589 mxUtils.getXml(body) + '</html>'; 590 591 clone.style.position = 'absolute'; 592 window.document.body.appendChild(clone); 593 var h = clone.clientHeight + 18; 594 clone.parentNode.removeChild(clone); 595 596 this.editorUi.confirm('Image data created', mxUtils.bind(this, function() 597 { 598 new mxXmlRequest(EXPORT_URL, 'w=456&h=' + h + '&html=' + encodeURIComponent( 599 Graph.compress(html))).simulate(document, '_blank'); 600 }), null, mxResources.get('save'), mxResources.get('cancel')); 601 })); 602 603 return; 604 } 605 606 if (content.style.display == 'none') 607 { 608 if (!initialized) 609 { 610 initialized = true; 611 612 if (funct != null) 613 { 614 if (btn.parentNode != null) 615 { 616 btn.parentNode.removeChild(btn); 617 } 618 619 // Wait cursor does not show up on Mac 620 title.style.cursor = 'wait'; 621 var prev = title.innerHTML; 622 title.innerHTML = mxResources.get('loading') + '...'; 623 624 window.setTimeout(function() 625 { 626 funct(content); 627 title.style.cursor = ''; 628 title.innerHTML = prev; 629 title.appendChild(btn); 630 }, 0); 631 } 632 else 633 { 634 title.appendChild(btn); 635 } 636 } 637 else 638 { 639 title.appendChild(btn); 640 } 641 642 title.style.backgroundImage = 'url(\'' + this.expandedImage + '\')'; 643 content.style.display = 'block'; 644 } 645 else 646 { 647 title.style.backgroundImage = 'url(\'' + this.collapsedImage + '\')'; 648 content.style.display = 'none'; 649 650 if (btn.parentNode != null) 651 { 652 btn.parentNode.removeChild(btn); 653 } 654 } 655 656 mxEvent.consume(evt); 657 })); 658 }; 659 }; 660 661 /** 662 * Overridden to use shapetags to improve search results. 663 */ 664 Sidebar.prototype.extractShapeStyle = function(style) 665 { 666 if (style != null && style.substring(0, 6) == 'shape=') 667 { 668 var semi = style.indexOf(';'); 669 670 if (semi < 0) 671 { 672 semi = style.length; 673 } 674 675 return style.substring(6, semi); 676 } 677 678 return null; 679 }; 680 681 /** 682 * Overridden to use shapetags to improve search results. 683 */ 684 var sidebarGetTagsForStencil = Sidebar.prototype.getTagsForStencil; 685 686 Sidebar.prototype.getTagsForStencil = function(pkg, stc, moreTags) 687 { 688 var tags = sidebarGetTagsForStencil.apply(this, arguments); 689 690 // Adds tags from tags file 691 if (this.shapetags != null) 692 { 693 pkg = pkg.toLowerCase(); 694 stc = stc.toLowerCase(); 695 696 if (this.shapetags[pkg] != null) 697 { 698 tags.push(this.shapetags[pkg]); 699 } 700 701 stc = pkg + '.' + stc; 702 703 if (this.shapetags[stc] != null) 704 { 705 tags.push(this.shapetags[stc]); 706 } 707 } 708 709 return tags; 710 }; 711 712 /** 713 * Overrides the sidebar init. 714 */ 715 Sidebar.prototype.addTagIndex = function(text) 716 { 717 var lines = text.split('\n'); 718 719 for (var i = 0; i < lines.length; i++) 720 { 721 if (lines[i] != null) 722 { 723 var tags = lines[i].split('\t'); 724 725 if (tags.length > 1) 726 { 727 var key = tags[0].toLowerCase().replace(' ', '_'); 728 var value = mxUtils.trim(tags.slice(1, tags.length).join(' ').toLowerCase()); 729 730 if (value.length > 0) 731 { 732 this.shapetags[key] = value; 733 } 734 } 735 } 736 } 737 }; 738 739 /** 740 * Adds shape search UI. 741 */ 742 Sidebar.prototype.showPopupMenuForEntry = function(elt, libs, evt) 743 { 744 if (libs != null && libs.length > 0) 745 { 746 var offset = mxUtils.getOffset(elt); 747 748 this.editorUi.showPopupMenu(mxUtils.bind(this, function(menu, parent) 749 { 750 menu.addItem(mxResources.get('openLibrary'), null, mxUtils.bind(this, function() 751 { 752 for (var i = 0; i < libs.length; i++) 753 { 754 (mxUtils.bind(this, function(lib) 755 { 756 var config = this.getConfigurationById(lib.id); 757 758 if (config != null) 759 { 760 this.showPalettes(config.prefix || '', config.libs || [config.id], true); 761 var elts = this.showPalette(libs[i].lib || libs[i].id, true); 762 763 if (elts != null && elts.length > 1 && elts[1].firstChild != null && 764 (elts[1].firstChild.firstChild == null || 765 elts[1].firstChild.style.display == 'none')) 766 { 767 elts[0].click(); 768 } 769 770 window.setTimeout(function() 771 { 772 elts[1].scrollIntoView(true); 773 }, 0); 774 775 mxEvent.consume(evt); 776 } 777 }))(libs[i]); 778 } 779 })); 780 }), offset.x, offset.y + elt.offsetHeight, evt); 781 } 782 }; 783 784 /** 785 * Overrides the sidebar init. 786 */ 787 Sidebar.prototype.addSearchIndex = function(shapes) 788 { 789 if (shapes != null) 790 { 791 for (var i = 0; i < shapes.length; i++) 792 { 793 if (shapes[i].style != null) 794 { 795 var style = shapes[i].style; 796 var shapeStyle = this.extractShapeStyle(style); 797 798 if (shapeStyle != null) 799 { 800 var lastDot = shapeStyle.lastIndexOf('.'); 801 802 if (lastDot > 0) 803 { 804 var pkg = shapeStyle.substring(0, lastDot); 805 var stc = shapeStyle.substring(lastDot + 1, shapeStyle.length); 806 var tags = this.getTagsForStencil(pkg, stc, shapes[i].tags); 807 808 // TODO: Use shapetags for programmatic stencils 809 if (tags != null) 810 { 811 // Converts stencil name to lowercase 812 var semi = style.indexOf(';'); 813 style = 'shape=' + pkg + '.' + stc.toLowerCase() + ';' + 814 ((semi < 0) ? '' : style.substring(semi + 1)); 815 this.setCurrentSearchEntryLibrary(shapes[i].id, shapes[i].lib); 816 this.createVertexTemplateEntry(style, parseInt(shapes[i].w), 817 parseInt(shapes[i].h), '', stc.replace(/_/g, ' '), 818 null, null, this.filterTags(tags.join(' '))); 819 this.setCurrentSearchEntryLibrary(); 820 } 821 } 822 } 823 } 824 } 825 } 826 }; 827 828 /** 829 * Overrides the sidebar init. 830 */ 831 Sidebar.prototype.initPalettes = function() 832 { 833 var imgDir = GRAPH_IMAGE_PATH; 834 var dir = STENCIL_PATH; 835 var signs = this.signs; 836 var rack = this.rack; 837 var pids = this.pids; 838 var cisco = this.cisco; 839 var sysml = this.sysml; 840 841 if (urlParams['createindex'] == '1') 842 { 843 this.createdSearchIndex = []; 844 } 845 846 this.addSearchPalette(true); 847 848 // Adds custom sections first 849 if (this.customEntries != null) 850 { 851 var preloadCount = 0; 852 853 for (var i = 0; i < this.customEntries.length; i++) 854 { 855 var section = this.customEntries[i]; 856 857 for (var j = 0; j < section.entries.length; j++) 858 { 859 var entry = section.entries[j]; 860 861 for (var k = 0; k < entry.libs.length; k++) 862 { 863 (mxUtils.bind(this, function(lib) 864 { 865 var data = null; 866 var error = null; 867 var content = null; 868 var title = null; 869 870 var showError = mxUtils.bind(this, function(err, c) 871 { 872 var div = document.createElement('span'); 873 div.style.paddingBottom = '6px'; 874 div.style.paddingTop = '6px'; 875 div.style.fontSize = '11px'; 876 mxUtils.write(div, err); 877 c.innerHTML = '<img align="top" src="' + mxGraph.prototype.warningImage.src + '"/> '; 878 c.appendChild(div); 879 }); 880 881 var barrier = mxUtils.bind(this, function() 882 { 883 if (content != null && title != null) 884 { 885 if (error != null) 886 { 887 content.style.display = 'block'; 888 title.innerHTML = ''; 889 mxUtils.write(title, this.editorUi.getResource(lib.title)); 890 showError(error, content); 891 } 892 else if (data != null) 893 { 894 this.editorUi.addLibraryEntries(data, content); 895 content.style.display = 'block'; 896 title.innerHTML = ''; 897 mxUtils.write(title, this.editorUi.getResource(lib.title)); 898 } 899 else 900 { 901 content.style.display = 'none'; 902 title.innerHTML = ''; 903 mxUtils.write(title, mxResources.get('loading') + '...'); 904 } 905 } 906 }); 907 908 if (lib.data == null && lib.url != null && (!lib.preload && preloadCount >= this.maxPreloadCount)) 909 { 910 this.addPalette(entry.id + '.' + k, this.editorUi.getResource(lib.title), 911 false, mxUtils.bind(this, function(content, title) 912 { 913 var dataLoaded = mxUtils.bind(this, function(images) 914 { 915 this.setCurrentSearchEntryLibrary(entry.id, entry.id + '.' + k); 916 this.addEntries(images); 917 this.setCurrentSearchEntryLibrary(); 918 this.editorUi.addLibraryEntries(images, content); 919 }); 920 921 content.style.display = 'none'; 922 title.innerHTML = ''; 923 mxUtils.write(title, mxResources.get('loading') + '...'); 924 925 var url = lib.url; 926 927 if (!this.editorUi.editor.isCorsEnabledForUrl(url)) 928 { 929 url = PROXY_URL + '?url=' + encodeURIComponent(url); 930 } 931 932 this.editorUi.editor.loadUrl(url, mxUtils.bind(this, function(data) 933 { 934 content.style.display = 'block'; 935 title.innerHTML = ''; 936 mxUtils.write(title, this.editorUi.getResource(lib.title)); 937 938 try 939 { 940 var doc = mxUtils.parseXml(data); 941 942 if (doc.documentElement.nodeName == 'mxlibrary') 943 { 944 var images = JSON.parse(mxUtils.getTextContent(doc.documentElement)); 945 dataLoaded(images); 946 } 947 else 948 { 949 showError(mxResources.get('notALibraryFile'), content); 950 } 951 } 952 catch (e) 953 { 954 showError(mxResources.get('error') + ': ' + e.message, content); 955 } 956 })); 957 })); 958 } 959 else 960 { 961 this.addPalette(entry.id + '.' + k, this.editorUi.getResource(lib.title), 962 false, mxUtils.bind(this, function(c, t) 963 { 964 content = c; 965 title = t; 966 barrier(); 967 })); 968 969 if (lib.data != null) 970 { 971 this.setCurrentSearchEntryLibrary(entry.id, entry.id + '.' + k); 972 this.addEntries(lib.data); 973 this.setCurrentSearchEntryLibrary(); 974 data = lib.data; 975 barrier(); 976 } 977 else if (lib.url != null) 978 { 979 preloadCount++; 980 var url = lib.url; 981 982 if (!this.editorUi.editor.isCorsEnabledForUrl(url)) 983 { 984 url = PROXY_URL + '?url=' + encodeURIComponent(url); 985 } 986 987 this.editorUi.editor.loadUrl(url, mxUtils.bind(this, function(temp) 988 { 989 try 990 { 991 var doc = mxUtils.parseXml(temp); 992 993 if (doc.documentElement.nodeName == 'mxlibrary') 994 { 995 data = JSON.parse(mxUtils.getTextContent(doc.documentElement)); 996 this.addEntries(data); 997 barrier(); 998 } 999 else 1000 { 1001 error = mxResources.get('notALibraryFile'); 1002 barrier(); 1003 } 1004 } 1005 catch (e) 1006 { 1007 error = mxResources.get('error') + ': ' + e.message; 1008 barrier(); 1009 } 1010 }), mxUtils.bind(this, function(e) 1011 { 1012 error = (e != null && e.message != null) ? e.message : e; 1013 barrier(); 1014 })); 1015 } 1016 else 1017 { 1018 error = mxResources.get('invalidInput'); 1019 barrier(); 1020 } 1021 } 1022 }))(entry.libs[k]); 1023 } 1024 } 1025 } 1026 } 1027 1028 this.addGeneralPalette(this.customEntries == null); 1029 this.addMiscPalette(false); 1030 this.addAdvancedPalette(false); 1031 this.addBasicPalette(); 1032 this.addStencilPalette('arrows', mxResources.get('arrows'), dir + '/arrows.xml', 1033 ';html=1;' + mxConstants.STYLE_VERTICAL_LABEL_POSITION + '=bottom;' + mxConstants.STYLE_VERTICAL_ALIGN + '=top;' + mxConstants.STYLE_STROKEWIDTH + '=2;strokeColor=#000000;', 1034 null, null, null, null, null, 'arrows'); 1035 this.addArrows2Palette(); 1036 1037 this.setCurrentSearchEntryLibrary('clipart', 'computer'); 1038 this.addImagePalette('computer', 'Clipart / Computer', imgDir 1039 + '/lib/clip_art/computers/', '_128x128.png', ['Antivirus', 1040 'Data_Filtering', 'Database', 'Database_Add', 'Database_Minus', 1041 'Database_Move_Stack', 'Database_Remove', 'Fujitsu_Tablet', 1042 'Harddrive', 'IBM_Tablet', 'iMac', 'iPad', 'Laptop', 'MacBook', 1043 'Mainframe', 'Monitor', 'Monitor_Tower', 1044 'Monitor_Tower_Behind', 'Netbook', 'Network', 'Network_2', 1045 'Printer', 'Printer_Commercial', 'Secure_System', 'Server', 1046 'Server_Rack', 'Server_Rack_Empty', 'Server_Rack_Partial', 1047 'Server_Tower', 'Software', 'Stylus', 'Touch', 'USB_Hub', 1048 'Virtual_Application', 'Virtual_Machine', 'Virus', 1049 'Workstation' ], [ 'Antivirus', 'Data Filtering', 'Database', 1050 'Database Add', 'Database Minus', 'Database Move Stack', 1051 'Database Remove', 'Fujitsu Tablet', 'Harddrive', 'IBMTablet', 1052 'iMac', 'iPad', 'Laptop', 'MacBook', 'Mainframe', 'Monitor', 1053 'Monitor Tower', 'Monitor Tower Behind', 'Netbook', 'Network', 1054 'Network 2', 'Printer', 'Printer Commercial', 'Secure System', 1055 'Server', 'Server Rack', 'Server Rack Empty', 'Server Rack Partial', 1056 'Server Tower', 'Software', 'Stylus', 'Touch', 'USB Hub', 1057 'Virtual Application', 'Virtual Machine', 'Virus', 'Workstation']); 1058 1059 this.setCurrentSearchEntryLibrary('clipart', 'finance'); 1060 this.addImagePalette('finance', 'Clipart / Finance', imgDir 1061 + '/lib/clip_art/finance/', '_128x128.png', [ 'Arrow_Down', 1062 'Arrow_Up', 'Coins', 'Credit_Card', 'Dollar', 'Graph', 1063 'Pie_Chart', 'Piggy_Bank', 'Safe', 'Shopping_Cart', 1064 'Stock_Down', 'Stock_Up'], ['Arrow_Down', 'Arrow Up', 1065 'Coins', 'Credit Card', 'Dollar', 'Graph', 'Pie Chart', 1066 'Piggy Bank', 'Safe', 'Shopping Basket', 'Stock Down', 'Stock Up']); 1067 1068 this.setCurrentSearchEntryLibrary('clipart', 'clipart'); 1069 this.addImagePalette('clipart', 'Clipart / Various', imgDir 1070 + '/lib/clip_art/general/', '_128x128.png', [ 'Battery_0', 1071 'Battery_100', 'Battery_50', 'Battery_75', 'Battery_allstates', 1072 'Bluetooth', 'Earth_globe', 'Empty_Folder', 'Full_Folder', 1073 'Gear', 'Keys', 'Lock', 'Mouse_Pointer', 'Plug', 'Ships_Wheel', 1074 'Star', 'Tire' ], [ 'Battery 0%', 'Battery 100%', 'Battery 50%', 1075 'Battery 75%', 'Battery', 'Bluetooth', 'Globe', 1076 'Empty Folder', 'Full Folder', 'Gear', 'Keys', 'Lock', 'Mousepointer', 1077 'Plug', 'Ships Wheel', 'Star', 'Tire']); 1078 1079 this.setCurrentSearchEntryLibrary('clipart', 'networking'); 1080 this.addImagePalette('networking', 'Clipart / Networking', imgDir 1081 + '/lib/clip_art/networking/', '_128x128.png', ['Bridge', 1082 'Certificate', 'Certificate_Off', 'Cloud', 'Cloud_Computer', 1083 'Cloud_Computer_Private', 'Cloud_Rack', 'Cloud_Rack_Private', 1084 'Cloud_Server', 'Cloud_Server_Private', 'Cloud_Storage', 1085 'Concentrator', 'Email', 'Firewall_02', 'Firewall', 1086 'Firewall-page1', 'Ip_Camera', 'Modem', 1087 'power_distribution_unit', 'Print_Server', 1088 'Print_Server_Wireless', 'Repeater', 'Router', 'Router_Icon', 1089 'Switch', 'UPS', 'Wireless_Router', 'Wireless_Router_N'], 1090 ['Bridge', 'Certificate', 'Certificate Off', 'Cloud', 'Cloud Computer', 1091 'Cloud Computer Private', 'Cloud Rack', 'Cloud Rack Private', 1092 'Cloud Server', 'Cloud Server Private', 'Cloud Storage', 1093 'Concentrator', 'Email', 'Firewall 1', 'Firewall 2', 1094 'Firewall', 'Camera', 'Modem', 1095 'Power Distribution Unit', 'Print Server', 1096 'Print Server Wireless', 'Repeater', 'Router', 'Router Icon', 1097 'Switch', 'UPS', 'Wireless Router', 'Wireless Router N'], 1098 {'Wireless_Router': 'wireless router switch wap wifi access point wlan', 1099 'Wireless_Router_N': 'wireless router switch wap wifi access point wlan', 1100 'Router': 'router switch', 1101 'Router_Icon': 'router switch'}); 1102 1103 this.setCurrentSearchEntryLibrary('clipart', 'people'); 1104 this.addImagePalette('people', 'Clipart / People', imgDir 1105 + '/lib/clip_art/people/', '_128x128.png', ['Suit_Man', 1106 'Suit_Man_Black', 'Suit_Man_Blue', 'Suit_Man_Green', 1107 'Suit_Man_Green_Black', 'Suit_Woman', 'Suit_Woman_Black', 1108 'Suit_Woman_Blue', 'Suit_Woman_Green', 1109 'Suit_Woman_Green_Black', 'Construction_Worker_Man', 1110 'Construction_Worker_Man_Black', 'Construction_Worker_Woman', 1111 'Construction_Worker_Woman_Black', 'Doctor_Man', 1112 'Doctor_Man_Black', 'Doctor_Woman', 'Doctor_Woman_Black', 1113 'Farmer_Man', 'Farmer_Man_Black', 'Farmer_Woman', 1114 'Farmer_Woman_Black', 'Nurse_Man', 'Nurse_Man_Black', 1115 'Nurse_Woman', 1116 'Nurse_Woman_Black', 1117 'Military_Officer', 'Military_Officer_Black', 1118 'Military_Officer_Woman', 'Military_Officer_Woman_Black', 1119 'Pilot_Man', 'Pilot_Man_Black', 'Pilot_Woman', 1120 'Pilot_Woman_Black', 'Scientist_Man', 'Scientist_Man_Black', 1121 'Scientist_Woman', 'Scientist_Woman_Black', 'Security_Man', 1122 'Security_Man_Black', 'Security_Woman', 'Security_Woman_Black', 1123 'Tech_Man', 'Tech_Man_Black', 1124 'Telesales_Man', 'Telesales_Man_Black', 'Telesales_Woman', 1125 'Telesales_Woman_Black', 'Waiter', 'Waiter_Black', 1126 'Waiter_Woman', 'Waiter_Woman_Black', 'Worker_Black', 1127 'Worker_Man', 'Worker_Woman', 'Worker_Woman_Black']); 1128 1129 this.setCurrentSearchEntryLibrary('clipart', 'telco'); 1130 this.addImagePalette('telco', 'Clipart / Telecommunication', imgDir 1131 + '/lib/clip_art/telecommunication/', '_128x128.png', [ 1132 'BlackBerry', 'Cellphone', 'HTC_smartphone', 'iPhone', 1133 'Palm_Treo', 'Signal_tower_off', 'Signal_tower_on' ], 1134 ['BlackBerry', 'Cellphone', 'HTC smartphone', 'iPhone', 1135 'Palm Treo', 'Signaltower off', 'Signaltower on']); 1136 this.setCurrentSearchEntryLibrary(); 1137 1138 this.addFlowchartPalette(); 1139 this.addActiveDirectoryPalette(); 1140 this.addAndroidPalette(); 1141 this.addAtlassianPalette(); 1142 this.addBootstrapPalette(); 1143 this.addDFDPalette(); 1144 this.addErPalette(); 1145 this.addIos7Palette(); 1146 this.addIosPalette(); 1147 this.addKubernetesPalette(); 1148 this.addMockupPalette(); 1149 this.addSitemapPalette(); 1150 this.addUml25Palette(); 1151 this.addUmlPalette(false); 1152 this.addAlliedTelesisPalette(); 1153 this.addAWS3Palette(); 1154 this.addAWS4bPalette(); 1155 this.addAWS4Palette(); 1156 this.addAWS3DPalette(); 1157 this.addAzurePalette(); 1158 this.addAzure2Palette(); 1159 this.addMSCAEPalette(); 1160 this.addC4Palette(); 1161 this.addCiscoPalette(cisco, dir); 1162 this.addCisco19Palette(); 1163 this.addCiscoSafePalette(); 1164 this.addCumulusPalette(); 1165 this.addCitrixPalette(); 1166 this.addGCP2Palette(); 1167 this.addGCP3Palette(); 1168 this.addIBMPalette(); 1169 this.addNetworkPalette(); 1170 this.addOfficePalette(); 1171 this.addRackPalette(rack, dir); 1172 this.addVeeamPalette(); 1173 this.addVeeam2Palette(); 1174 this.addVVDPalette(); 1175 this.addArchimate3Palette(); 1176 this.addArchiMatePalette(); 1177 this.addBpmn2Palette(); 1178 this.addSysMLPalette(sysml, dir); 1179 this.addLeanMappingPalette(); 1180 this.addCabinetsPalette(); 1181 this.addInfographicPalette(); 1182 this.addEipPalette(); 1183 this.addElectricalPalette(); 1184 this.addFloorplanPalette(); 1185 this.addFluidPowerPalette(); 1186 this.addGMDLPalette(); 1187 this.addPidPalette(pids, dir); 1188 this.addThreatModelingPalette(); 1189 this.addWebIconsPalette(); 1190 this.addWebLogosPalette(); 1191 this.addSignsPalette(signs, dir); 1192 // LATER: Check if conflicts with restore libs after loading file 1193 this.showEntries(); 1194 1195 if (this.createdSearchIndex != null) 1196 { 1197 console.log('searchFileData', Graph.compress(JSON.stringify(this.createdSearchIndex))); 1198 } 1199 }; 1200 1201 /** 1202 * Overridden to manually create search index for stencil files which are not pre-loaded 1203 * and no entries are created programmatically. 1204 */ 1205 if (urlParams['createindex'] == '1') 1206 { 1207 var sidebarAddStencilPalette = Sidebar.prototype.addStencilPalette; 1208 1209 Sidebar.prototype.addStencilPalette = function(id, title, stencilFile, style, ignore, onInit, scale, tags, customFns, groupId) 1210 { 1211 sidebarAddStencilPalette.apply(this, arguments); 1212 scale = (scale != null) ? scale : 1; 1213 1214 // Used for creating index 1215 mxStencilRegistry.loadStencilSet(stencilFile, mxUtils.bind(this, function(packageName, stencilName, displayName, w, h) 1216 { 1217 if (this.createdSearchIndex != null && ignore == null || mxUtils.indexOf(ignore, stencilName) < 0) 1218 { 1219 var entry = {style: 'shape=' + packageName + stencilName + style, 1220 w: Math.round(w * scale), h: Math.round(h * scale)}; 1221 var tmpTags = (tags != null) ? tags[stencilName] : null; 1222 1223 if (tmpTags != null) 1224 { 1225 entry.tags = tmpTags; 1226 } 1227 1228 if (groupId != null) 1229 { 1230 entry.id = groupId; 1231 entry.lib = id; 1232 } 1233 1234 this.createdSearchIndex.push(entry); 1235 } 1236 }), true); 1237 }; 1238 } 1239 1240 /** 1241 * Extracs icons from the search result. 1242 */ 1243 Sidebar.prototype.extractIconsFromResponse = function(res, results) 1244 { 1245 for (var i = 0; i < res.icons.length; i++) 1246 { 1247 var sizes = res.icons[i].raster_sizes; 1248 var index = sizes.length - 1; 1249 1250 while (index > 0 && sizes[index].size > 128) 1251 { 1252 index--; 1253 } 1254 1255 var size = sizes[index].size; 1256 var url = sizes[index].formats[0].preview_url; 1257 1258 if (size != null && url != null) 1259 { 1260 (mxUtils.bind(this, function(s, u) 1261 { 1262 results.push(mxUtils.bind(this, function() 1263 { 1264 return this.createVertexTemplate('shape=image;html=1;verticalAlign=top;' + 1265 'verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;' + 1266 'aspect=fixed;image=' + u, s, s, ''); 1267 })); 1268 }))(size, url); 1269 } 1270 } 1271 }; 1272 1273 /** 1274 * Adds server icon results to local search results 1275 */ 1276 var sidebarSearchEntries = Sidebar.prototype.searchEntries; 1277 1278 Sidebar.prototype.searchEntries = function(searchTerms, count, page, success, error) 1279 { 1280 var succ = success; 1281 1282 // Lazy-load indices 1283 if (this.searchIndexData != null) 1284 { 1285 this.addSearchIndex(JSON.parse(Graph.decompress(this.searchIndexData))); 1286 this.searchIndexData = null; 1287 } 1288 1289 if (ICONSEARCH_PATH != null) 1290 { 1291 success = mxUtils.bind(this, function(results, len, more, terms) 1292 { 1293 if (!this.editorUi.isOffline() && results.length <= count / 4) 1294 { 1295 var pg = page - Math.ceil((len - count / 4) / count); 1296 1297 mxUtils.get(ICONSEARCH_PATH + '?q=' + encodeURIComponent(searchTerms) + 1298 '&p=' + pg + '&c=' + count, mxUtils.bind(this, function(req) 1299 { 1300 try 1301 { 1302 if (req.getStatus() >= 200 && req.getStatus() <= 299) 1303 { 1304 // Ignore without error if no response 1305 if (req.getText() != null && req.getText().length > 0) 1306 { 1307 try 1308 { 1309 var res = JSON.parse(req.getText()); 1310 1311 if (res == null || res.icons == null) 1312 { 1313 succ(results, len, false, terms); 1314 this.editorUi.handleError(res); 1315 } 1316 else 1317 { 1318 this.extractIconsFromResponse(res, results); 1319 succ(results, (page - 1) * count + results.length, res.icons.length == count, terms); 1320 } 1321 } 1322 catch (e) 1323 { 1324 succ(results, len, false, terms); 1325 this.editorUi.handleError(e); 1326 } 1327 } 1328 else 1329 { 1330 succ(results, len, false, terms); 1331 } 1332 } 1333 else 1334 { 1335 succ(results, len, false, terms); 1336 this.editorUi.handleError({message: mxResources.get('unknownError')}); 1337 } 1338 } 1339 catch (e) 1340 { 1341 succ(results, len, false, terms); 1342 this.editorUi.handleError(e); 1343 } 1344 }, 1345 function() 1346 { 1347 succ(results, len, false, terms); 1348 })); 1349 } 1350 else 1351 { 1352 succ(results, len, more || !this.editorUi.isOffline(), terms); 1353 } 1354 }); 1355 } 1356 1357 sidebarSearchEntries.apply(this, arguments); 1358 }; 1359 1360 /** 1361 * Adds a click handler for inserting the cell as target for dangling edge. 1362 */ 1363 var sidebarItemClicked = Sidebar.prototype.itemClicked; 1364 1365 Sidebar.prototype.itemClicked = function(cells, ds, evt) 1366 { 1367 var graph = this.editorUi.editor.graph; 1368 var handled = false; 1369 1370 if (cells != null && graph.getSelectionCount() == 1 && graph.getModel().isVertex(cells[0])) 1371 { 1372 var target = graph.cloneCell(cells[0]); 1373 1374 // Inserts cell as target of selected edge if not connected 1375 if (graph.getModel().isEdge(graph.getSelectionCell()) && graph.getModel().getTerminal(graph.getSelectionCell(), false) == null && 1376 graph.getModel().isVertex(target)) 1377 { 1378 graph.getModel().beginUpdate(); 1379 try 1380 { 1381 var edgeState = graph.view.getState(graph.getSelectionCell()); 1382 1383 if (edgeState != null) 1384 { 1385 var tr = graph.view.translate; 1386 var s = graph.view.scale; 1387 var pt = edgeState.absolutePoints[edgeState.absolutePoints.length - 1]; 1388 1389 target.geometry.x = pt.x / s - tr.x - target.geometry.width / 2; 1390 target.geometry.y = pt.y / s - tr.y - target.geometry.height / 2; 1391 } 1392 1393 graph.addCell(target); 1394 graph.getModel().setTerminal(graph.getSelectionCell(), target, false); 1395 1396 if (evt == null || !mxEvent.isShiftDown(evt)) 1397 { 1398 graph.fireEvent(new mxEventObject('cellsInserted', 'cells', [target])); 1399 } 1400 } 1401 catch (e) 1402 { 1403 this.editorUi.handleError(e); 1404 } 1405 finally 1406 { 1407 graph.getModel().endUpdate(); 1408 } 1409 1410 graph.scrollCellToVisible(target); 1411 graph.setSelectionCell(target); 1412 handled = true; 1413 } 1414 } 1415 1416 if (!handled) 1417 { 1418 sidebarItemClicked.apply(this, arguments); 1419 } 1420 }; 1421})(); 1422