docs: Adds Native-UI tray Fiddle example (#20526)
This commit is contained in:
parent
1b61fe780e
commit
143407ea1b
3 changed files with 238 additions and 0 deletions
126
docs/fiddles/native-ui/tray/index.html
Normal file
126
docs/fiddles/native-ui/tray/index.html
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>Tray</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<h1>Tray</h1>
|
||||||
|
<h3>
|
||||||
|
The <code>tray</code> module allows you to create an icon in the
|
||||||
|
operating system's notification area.
|
||||||
|
</h3>
|
||||||
|
<p>This icon can also have a context menu attached.</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Open the
|
||||||
|
<a href="http://electron.atom.io/docs/api/tray">
|
||||||
|
full API documentation (opens in new window)
|
||||||
|
</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>
|
||||||
|
<p>
|
||||||
|
On Linux distributions that only have app indicator support, users
|
||||||
|
will need to install <code>libappindicator1</code> to make the
|
||||||
|
tray icon work. See the
|
||||||
|
<a href="http://electron.atom.io/docs/api/tray">
|
||||||
|
full API documentation (opens in new window)
|
||||||
|
</a>
|
||||||
|
for more details about using Tray on Linux.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// You can also require other files to run in this process
|
||||||
|
require("./renderer.js");
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
77
docs/fiddles/native-ui/tray/main.js
Normal file
77
docs/fiddles/native-ui/tray/main.js
Normal file
File diff suppressed because one or more lines are too long
35
docs/fiddles/native-ui/tray/renderer.js
Normal file
35
docs/fiddles/native-ui/tray/renderer.js
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
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)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
Loading…
Add table
Add a link
Reference in a new issue