-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 649f70e
Showing
7 changed files
with
186 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
# vue-cli-plugin-nucleus-tracking | ||
|
||
Vue-cli 3 plugin for adding nucleus tracking support to projects using electron. Uses a custom fork of `nucleus-electron` built for Cello Health Digital's kiosk apps. | ||
|
||
## How to Use | ||
|
||
### Existing kiosks: | ||
|
||
``` | ||
yarn add -D vue-cli-plugin-nucleus-tracking | ||
vue invoke vue-cli-plugin-nucleus-tracking | ||
``` | ||
|
||
You will be propted to enter your API key. | ||
|
||
### New Projects | ||
|
||
``` | ||
vue add nucleus-tracking | ||
``` | ||
|
||
You will be propted to enter your API key. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
module.exports = (api, opts) => { | ||
api.extendPackage({ | ||
dependencies: { | ||
'electron-nucleus': 'DRBragg/electron-nucleus#chd_custom' | ||
} | ||
}) | ||
|
||
api.render( | ||
{ './src/background.js': './templates/default/src/background.js' }, | ||
opts | ||
) | ||
|
||
api.injectImports(api.entryFile, `import ipcRenderer from 'electron';`) | ||
|
||
const tracker = `\n\n// Send tracking data via ipc channel\n// Allows us to use this.$tracker(action, data) anywhere in the app\nVue.prototype.$tracker = function(action, data={}) {\n\tipcRenderer.ipcRenderer.send('track', { action: action, data: data })\n}` | ||
|
||
api.onCreateComplete(() => { | ||
// inject to main.js | ||
const fs = require('fs') | ||
const ext = api.hasPlugin('typescript') ? 'ts' : 'js' | ||
const mainPath = api.resolve(`./src/main.${ext}`) | ||
|
||
// get content | ||
let contentMain = fs.readFileSync(mainPath, { encoding: 'utf-8' }) | ||
const lines = contentMain.split(/\r?\n/g).reverse() | ||
|
||
// inject import | ||
const lastImportIndex = lines.findIndex(line => line.match(/^import/)) | ||
lines[lastImportIndex] += tracker | ||
|
||
// modify app | ||
contentMain = lines.reverse().join('\n') | ||
fs.writeFileSync(mainPath, contentMain, { encoding: 'utf-8' }) | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
'use strict' | ||
|
||
import { app, protocol, BrowserWindow, ipcMain } from 'electron' | ||
import { | ||
createProtocol, | ||
installVueDevtools | ||
} from 'vue-cli-plugin-electron-builder/lib' | ||
const isDevelopment = process.env.NODE_ENV !== 'production' | ||
|
||
// create and configure a nucleus instance | ||
const Nucleus = require('electron-nucleus')('<%= nucleusApiKey %>', { | ||
onlyMainProcess: true, | ||
persist: true, | ||
enableLogs: isDevelopment | ||
}) | ||
|
||
// listens to the 'track' channel and then passes args to the nucleus tracker | ||
ipcMain.on('track', (event, args) => { | ||
Nucleus.track(args.action, args.data) | ||
}) | ||
|
||
// Keep a global reference of the window object, if you don't, the window will | ||
// be closed automatically when the JavaScript object is garbage collected. | ||
let win | ||
|
||
// Scheme must be registered before the app is ready | ||
protocol.registerSchemesAsPrivileged([ | ||
{ scheme: 'app', privileges: { secure: true, standard: true } } | ||
]) | ||
|
||
function createWindow() { | ||
// Create the browser window. | ||
win = new BrowserWindow({ | ||
width: 800, | ||
height: 600, | ||
webPreferences: { | ||
nodeIntegration: true | ||
} | ||
}) | ||
|
||
if (process.env.WEBPACK_DEV_SERVER_URL) { | ||
// Load the url of the dev server if in development mode | ||
win.loadURL(process.env.WEBPACK_DEV_SERVER_URL) | ||
if (!process.env.IS_TEST) win.webContents.openDevTools() | ||
} else { | ||
createProtocol('app') | ||
// Load the index.html when not in development | ||
win.loadURL('app://./index.html') | ||
} | ||
|
||
win.on('closed', () => { | ||
win = null | ||
}) | ||
} | ||
|
||
// Quit when all windows are closed. | ||
app.on('window-all-closed', () => { | ||
// On macOS it is common for applications and their menu bar | ||
// to stay active until the user quits explicitly with Cmd + Q | ||
if (process.platform !== 'darwin') { | ||
app.quit() | ||
} | ||
}) | ||
|
||
app.on('activate', () => { | ||
// On macOS it's common to re-create a window in the app when the | ||
// dock icon is clicked and there are no other windows open. | ||
if (win === null) { | ||
createWindow() | ||
} | ||
}) | ||
|
||
// This method will be called when Electron has finished | ||
// initialization and is ready to create browser windows. | ||
// Some APIs can only be used after this event occurs. | ||
app.on('ready', async () => { | ||
if (isDevelopment && !process.env.IS_TEST) { | ||
// Install Vue Devtools | ||
// Devtools extensions are broken in Electron 6.0.0 and greater | ||
// See https://github.com/nklayman/vue-cli-plugin-electron-builder/issues/378 for more info | ||
// Electron will not launch with Devtools extensions installed on Windows 10 with dark mode | ||
// If you are not using Windows 10 dark mode, you may uncomment these lines | ||
// In addition, if the linked issue is closed, you can upgrade electron and uncomment these lines | ||
// try { | ||
// await installVueDevtools() | ||
// } catch (e) { | ||
// console.error('Vue Devtools failed to install:', e.toString()) | ||
// } | ||
} | ||
createWindow() | ||
}) | ||
|
||
// Exit cleanly on request from parent process in development mode. | ||
if (isDevelopment) { | ||
if (process.platform === 'win32') { | ||
process.on('message', data => { | ||
if (data === 'graceful-exit') { | ||
app.quit() | ||
} | ||
}) | ||
} else { | ||
process.on('SIGTERM', () => { | ||
app.quit() | ||
}) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
module.exports = (api, opts) => {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
{ | ||
"name": "vue-cli-plugin-nucleus-tracking", | ||
"version": "0.1.1", | ||
"description": "Vue-cli 3 plugin for adding nucleus tracking support to Vue projects using electron", | ||
"main": "index.js", | ||
"repository": { | ||
"type": "git", | ||
"url": "git+https://github.com/cellohealthdigital/vue-cli-plugin-nucleus-tracking.git" | ||
}, | ||
"author": "Cello Health Digital Team <cellohealthdigital@gmail.com>", | ||
"license": "MIT", | ||
"homepage": "https://github.com/cellohealthdigital/vue-cli-plugin-nucleus-tracking#readme" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
module.exports = [ | ||
{ | ||
name: `nucleusApiKey`, | ||
type: 'input', | ||
message: 'Add you Nucleus API key', | ||
default: '' | ||
} | ||
] |