Sidebar.js 53 KB

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