From 527d323ea70d9ee91ec92da1a720e8714902d373 Mon Sep 17 00:00:00 2001 From: Thomas Denney Date: Wed, 21 Sep 2016 06:02:18 +0100 Subject: [PATCH] New electron client (#256) --- clients/electron/.gitignore | 2 + clients/electron/README.md | 5 +++ clients/electron/index.html | 15 +++++++ clients/electron/main.js | 74 +++++++++++------------------------ clients/electron/package.json | 25 +++++------- 5 files changed, 55 insertions(+), 66 deletions(-) create mode 100644 clients/electron/.gitignore create mode 100644 clients/electron/README.md create mode 100644 clients/electron/index.html diff --git a/clients/electron/.gitignore b/clients/electron/.gitignore new file mode 100644 index 00000000..ccedfdac --- /dev/null +++ b/clients/electron/.gitignore @@ -0,0 +1,2 @@ +node_modules +projects \ No newline at end of file diff --git a/clients/electron/README.md b/clients/electron/README.md new file mode 100644 index 00000000..f0aae8bb --- /dev/null +++ b/clients/electron/README.md @@ -0,0 +1,5 @@ +# PXT micro:bit Electron app + +A very basic wrapper around the web app. To install, copy the contents of this +directory to somewhere outside the main `pxt-microbit` repository. Then run `npm +install && npm start`. diff --git a/clients/electron/index.html b/clients/electron/index.html new file mode 100644 index 00000000..260b1839 --- /dev/null +++ b/clients/electron/index.html @@ -0,0 +1,15 @@ + + + + + code the micro:bit + + + + + + diff --git a/clients/electron/main.js b/clients/electron/main.js index e93a653b..58bba12e 100644 --- a/clients/electron/main.js +++ b/clients/electron/main.js @@ -1,67 +1,39 @@ -const electron = require('electron') -// Module to control application life. -const app = electron.app -// Module to create native browser window. -const BrowserWindow = electron.BrowserWindow -// pxt toolchain +const {app, BrowserWindow, Menu} = require('electron') const pxt = require('pxt-core') +const path = require('path') -// 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 mainWindow +let win -function createWindow() { - console.log('starting app...') - // Create the browser window. - mainWindow = new BrowserWindow({ - width: 800, height: 600, - webPreferences: { - nodeIntegration: false, - } +const cliPath = path.join(process.cwd(), "node_modules/pxt-microbit") + +function startServerAndCreateWindow() { + pxt.mainCli(cliPath, ["serve", "-no-browser"]) + createWindow() +} + +function createWindow () { + win = new BrowserWindow({ + width: 800, + height: 600, + title: "code the micro:bit" }) - - ts.pxt.Util.debug = true; - pxt.mainCli("C:/gh/pxt-microbit/clients/electron/node_modules/pxt-microbit", ["serve", "-just"]); - - // no menu - mainWindow.setMenu(null); - - // and load the index.html of the app. - mainWindow.loadURL(`http://localhost:3232/#local_token=08ba9b8f-6ccb-4202-296d-28fac7a553d9`) - - // Open the DevTools. - mainWindow.webContents.openDevTools() - - // Emitted when the window is closed. - mainWindow.on('closed', function () { - // Dereference the window object, usually you would store windows - // in an array if your app supports multi windows, this is the time - // when you should delete the corresponding element. - mainWindow = null + Menu.setApplicationMenu(null) + win.loadURL(`file://${__dirname}/index.html#local_token=${pxt.globalConfig.localToken}`) + win.on('closed', () => { + win = null }) } -// 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', createWindow) +app.on('ready', startServerAndCreateWindow) -// Quit when all windows are closed. -app.on('window-all-closed', function () { - // On OS X it is common for applications and their menu bar - // to stay active until the user quits explicitly with Cmd + Q +app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } }) -app.on('activate', function () { - // On OS X 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 (mainWindow === null) { +app.on('activate', () => { + if (win === null) { createWindow() } }) - -// In this file you can include the rest of your app's specific main process -// code. You can also put them in separate files and require them here. \ No newline at end of file diff --git a/clients/electron/package.json b/clients/electron/package.json index c5e949fe..f9633774 100644 --- a/clients/electron/package.json +++ b/clients/electron/package.json @@ -1,19 +1,14 @@ { - "name": "codethemicrobit", - "version": "0.1.0", - "description": "A Blocks / JavaScript editor for the micro:bit", - "main": "main.js", - "scripts": { - "start": "electron ." - }, + "name" : "code-the-microbit", + "version" : "1.0.0", + "description": "Blocks / Javascript editor", "author": "Microsoft", - "license": "MIT", - "devDependencies": { - "electron-prebuilt": "^1.2.0" + "main" : "main.js", + "scripts": { + "start": "node_modules/.bin/electron ." }, - "dependencies": { - "typescript": "1.8.7", - "pxt-core": "*", - "pxt-microbit": "*" + "devDependencies": { + "electron": "*", + "pxt-microbit": "*" } -} \ No newline at end of file +}