Sidebar.js 81 KB

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