menu.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. const { shell, Menu } = require('electron')
  2. const setDefaultApplicationMenu = () => {
  3. if (Menu.getApplicationMenu()) return
  4. const template = [
  5. {
  6. label: 'Edit',
  7. submenu: [
  8. {
  9. role: 'undo'
  10. },
  11. {
  12. role: 'redo'
  13. },
  14. {
  15. type: 'separator'
  16. },
  17. {
  18. role: 'cut'
  19. },
  20. {
  21. role: 'copy'
  22. },
  23. {
  24. role: 'paste'
  25. },
  26. {
  27. role: 'pasteandmatchstyle'
  28. },
  29. {
  30. role: 'delete'
  31. },
  32. {
  33. role: 'selectall'
  34. }
  35. ]
  36. },
  37. {
  38. label: 'View',
  39. submenu: [
  40. {
  41. role: 'reload'
  42. },
  43. {
  44. role: 'forcereload'
  45. },
  46. {
  47. role: 'toggledevtools'
  48. },
  49. {
  50. type: 'separator'
  51. },
  52. {
  53. role: 'resetzoom'
  54. },
  55. {
  56. role: 'zoomin'
  57. },
  58. {
  59. role: 'zoomout'
  60. },
  61. {
  62. type: 'separator'
  63. },
  64. {
  65. role: 'togglefullscreen'
  66. }
  67. ]
  68. },
  69. {
  70. role: 'window',
  71. submenu: [
  72. {
  73. role: 'minimize'
  74. },
  75. {
  76. role: 'close'
  77. }
  78. ]
  79. },
  80. {
  81. role: 'help',
  82. submenu: [
  83. {
  84. label: 'Learn More',
  85. click () {
  86. shell.openExternal('https://electronjs.org')
  87. }
  88. },
  89. {
  90. label: 'Documentation',
  91. click () {
  92. shell.openExternal(
  93. `https://github.com/electron/electron/tree/v${process.versions.electron}/docs#readme`
  94. )
  95. }
  96. },
  97. {
  98. label: 'Community Discussions',
  99. click () {
  100. shell.openExternal('https://discuss.atom.io/c/electron')
  101. }
  102. },
  103. {
  104. label: 'Search Issues',
  105. click () {
  106. shell.openExternal('https://github.com/electron/electron/issues')
  107. }
  108. }
  109. ]
  110. }
  111. ]
  112. if (process.platform === 'darwin') {
  113. template.unshift({
  114. label: 'Electron',
  115. submenu: [
  116. {
  117. role: 'about'
  118. },
  119. {
  120. type: 'separator'
  121. },
  122. {
  123. role: 'services'
  124. },
  125. {
  126. type: 'separator'
  127. },
  128. {
  129. role: 'hide'
  130. },
  131. {
  132. role: 'hideothers'
  133. },
  134. {
  135. role: 'unhide'
  136. },
  137. {
  138. type: 'separator'
  139. },
  140. {
  141. role: 'quit'
  142. }
  143. ]
  144. })
  145. template[1].submenu.push({
  146. type: 'separator'
  147. }, {
  148. label: 'Speech',
  149. submenu: [
  150. {
  151. role: 'startspeaking'
  152. },
  153. {
  154. role: 'stopspeaking'
  155. }
  156. ]
  157. })
  158. template[3].submenu = [
  159. {
  160. role: 'close'
  161. },
  162. {
  163. role: 'minimize'
  164. },
  165. {
  166. role: 'zoom'
  167. },
  168. {
  169. type: 'separator'
  170. },
  171. {
  172. role: 'front'
  173. }
  174. ]
  175. } else {
  176. template.unshift({
  177. label: 'File',
  178. submenu: [{
  179. role: 'quit'
  180. }]
  181. })
  182. }
  183. const menu = Menu.buildFromTemplate(template)
  184. Menu.setApplicationMenu(menu)
  185. }
  186. module.exports = {
  187. setDefaultApplicationMenu
  188. }