Browse Source

docs: added guide and updated docs for Tray (#29964)

* docs: added guide and updated docs for Tray (#29385) (#29762)

* docs: added guide and updated docs for Tray

* docs: improve clarity

* docs: fix frontmatter for Tray tutorial (#29788)

Co-authored-by: George Xu <[email protected]>
Erick Zhao 3 years ago
parent
commit
d27adae569

+ 2 - 81
docs/fiddles/native-ui/tray/index.html

@@ -16,91 +16,12 @@
       <p>
         Open the
         <a href="https://electronjs.org/docs/api/tray">
-          full API documentation (opens in new window)
+          full API documentation
         </a>
         in your browser.
       </p>
     </div>
-
-    <div>
       <div>
-        <div>
-          <div>
-            <button id="put-in-tray">View Demo</button>
-            <span id="tray-countdown"></span>
-          </div>
-          <p>
-            The demo button sends a message to the main process using the
-            <code>ipc</code> module. In the main process the app is told to
-            place an icon, with a context menu, in the tray.
-          </p>
-
-          <p>
-            In this example the tray icon can be removed by clicking 'Remove' in
-            the context menu or selecting the demo button again.
-          </p>
-          <h5>Main Process</h5>
-          <pre>
-              <code>
-const path = require('path')
-const {ipcMain, app, Menu, Tray} = require('electron')
-
-let appIcon = null
-
-ipcMain.on('put-in-tray', (event) => {
-  const iconName = process.platform === 'win32' ? 'windows-icon.png' : 'iconTemplate.png'
-  const iconPath = path.join(__dirname, iconName)
-  appIcon = new Tray(iconPath)
-
-  const contextMenu = Menu.buildFromTemplate([{
-    label: 'Remove',
-    click: () => {
-      event.sender.send('tray-removed')
-    }
-  }])
-
-  appIcon.setToolTip('Electron Demo in the tray.')
-  appIcon.setContextMenu(contextMenu)
-})
-
-ipcMain.on('remove-tray', () => {
-  appIcon.destroy()
-})
-
-app.on('window-all-closed', () => {
-  if (appIcon) appIcon.destroy()
-})
-              </code>
-            </pre>
-          <h5>Renderer Process</h5>
-          <pre>
-              <code>
-const ipc = require('electron').ipcRenderer
-
-const trayBtn = document.getElementById('put-in-tray')
-let trayOn = false
-
-trayBtn.addEventListener('click', function (event) {
-  if (trayOn) {
-    trayOn = false
-    document.getElementById('tray-countdown').innerHTML = ''
-    ipc.send('remove-tray')
-  } else {
-    trayOn = true
-    const message = 'Click demo again to remove.'
-    document.getElementById('tray-countdown').innerHTML = message
-    ipc.send('put-in-tray')
-  }
-})
-// Tray removed from context menu on icon
-ipc.on('tray-removed', function () {
-  ipc.send('remove-tray')
-  trayOn = false
-  document.getElementById('tray-countdown').innerHTML = ''
-})                  
-              </code>
-            </pre>
-
           <div>
             <h2>ProTip</h2>
             <strong>Tray support in Linux.</strong>
@@ -109,7 +30,7 @@ ipc.on('tray-removed', function () {
               will need to install <code>libappindicator1</code> to make the
               tray icon work. See the
               <a href="https://electronjs.org/docs/api/tray">
-                full API documentation (opens in new window)
+                full API documentation
               </a>
               for more details about using Tray on Linux.
             </p>

File diff suppressed because it is too large
+ 3 - 15
docs/fiddles/native-ui/tray/main.js


+ 0 - 35
docs/fiddles/native-ui/tray/renderer.js

@@ -1,35 +0,0 @@
-const { ipcRenderer, shell } = require('electron')
-
-const trayBtn = document.getElementById('put-in-tray')
-const links = document.querySelectorAll('a[href]')
-
-let trayOn = false
-
-trayBtn.addEventListener('click', function (event) {
-  if (trayOn) {
-    trayOn = false
-    document.getElementById('tray-countdown').innerHTML = ''
-    ipcRenderer.send('remove-tray')
-  } else {
-    trayOn = true
-    const message = 'Click demo again to remove.'
-    document.getElementById('tray-countdown').innerHTML = message
-    ipcRenderer.send('put-in-tray')
-  }
-})
-// Tray removed from context menu on icon
-ipcRenderer.on('tray-removed', function () {
-  ipcRenderer.send('remove-tray')
-  trayOn = false
-  document.getElementById('tray-countdown').innerHTML = ''
-})
-
-Array.prototype.forEach.call(links, (link) => {
-  const url = link.getAttribute('href')
-  if (url.indexOf('http') === 0) {
-    link.addEventListener('click', (e) => {
-      e.preventDefault()
-      shell.openExternal(url)
-    })
-  }
-})

+ 83 - 0
docs/tutorial/tray.md

@@ -0,0 +1,83 @@
+---
+title: Tray
+description: This guide will take you through the process of creating
+  a Tray icon with its own context menu to the system's notification area.
+slug: tray
+hide_title: true
+---
+
+# Tray
+
+## Overview
+
+<!-- ✍ Update this section if you want to provide more details -->
+
+This guide will take you through the process of creating a
+[Tray](https://www.electronjs.org/docs/api/tray) icon with
+its own context menu to the system's notification area.
+
+On MacOS and Ubuntu, the Tray will be located on the top
+right corner of your screen, adjacent to your battery and wifi icons.
+On Windows, the Tray will usually be located in the bottom right corner.
+
+## Example
+
+### main.js
+
+First we must import `app`, `Tray`, `Menu`, `nativeImage` from `electron`.
+
+```js
+const { app, Tray, Menu, nativeImage } = require('electron')
+```
+
+Next we will create our Tray. To do this, we will use a
+[`NativeImage`](https://www.electronjs.org/docs/api/native-image) icon,
+which can be created through any one of these
+[methods](https://www.electronjs.org/docs/api/native-image#methods).
+Note that we wrap our Tray creation code within an
+[`app.whenReady`](https://www.electronjs.org/docs/api/app#appwhenready)
+as we will need to wait for our electron app to finish initializing.
+
+```js title='main.js'
+let tray
+
+app.whenReady().then(() => {
+  const icon = nativeImage.createFromPath('path/to/asset.png')
+  tray = new Tray(icon)
+
+  // note: your contextMenu, Tooltip and Title code will go here!
+})
+```
+
+Great! Now we can start attaching a context menu to our Tray, like so:
+
+```js
+const contextMenu = Menu.buildFromTemplate([
+  { label: 'Item1', type: 'radio' },
+  { label: 'Item2', type: 'radio' },
+  { label: 'Item3', type: 'radio', checked: true },
+  { label: 'Item4', type: 'radio' }
+])
+
+tray.setContextMenu(contextMenu)
+```
+
+The code above will create 4 separate radio-type items in the context menu.
+To read more about constructing native menus, click
+[here](https://www.electronjs.org/docs/api/menu#menubuildfromtemplatetemplate).
+
+Finally, let's give our tray a tooltip and a title.
+
+```js
+tray.setToolTip('This is my application')
+tray.setTitle('This is my title')
+```
+
+## Conclusion
+
+After you start your electron app, you should see the Tray residing
+in either the top or bottom right of your screen, depending on your
+operating system.
+
+```fiddle docs/fiddles/native-ui/tray
+```

Some files were not shown because too many files changed in this diff