├── .bowerrc ├── .editorconfig ├── .ember-cli ├── .gitignore ├── .jshintrc ├── .travis.yml ├── Brocfile.js ├── Procfile ├── README.md ├── app ├── app.js ├── components │ └── .gitkeep ├── controllers │ ├── .gitkeep │ └── application.js ├── helpers │ └── .gitkeep ├── index.html ├── lib │ └── ipc-listener.js ├── models │ └── .gitkeep ├── router.js ├── routes │ ├── .gitkeep │ └── application.js ├── styles │ └── app.css ├── templates │ ├── application.hbs │ ├── components │ │ └── .gitkeep │ ├── foo.hbs │ └── index.hbs └── views │ └── .gitkeep ├── bower.json ├── config └── environment.js ├── main.js ├── package.json ├── public ├── crossdomain.xml └── robots.txt ├── testem.json ├── tests ├── .jshintrc ├── helpers │ ├── resolver.js │ └── start-app.js ├── index.html ├── test-helper.js └── unit │ └── .gitkeep └── vendor └── .gitkeep /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "bower_components", 3 | "analytics": false 4 | } 5 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | 8 | [*] 9 | end_of_line = lf 10 | charset = utf-8 11 | trim_trailing_whitespace = true 12 | insert_final_newline = true 13 | indent_style = space 14 | indent_size = 2 15 | 16 | [*.js] 17 | indent_style = space 18 | indent_size = 2 19 | 20 | [*.hbs] 21 | insert_final_newline = false 22 | indent_style = space 23 | indent_size = 2 24 | 25 | [*.css] 26 | indent_style = space 27 | indent_size = 2 28 | 29 | [*.html] 30 | indent_style = space 31 | indent_size = 2 32 | 33 | [*.{diff,md}] 34 | trim_trailing_whitespace = false 35 | -------------------------------------------------------------------------------- /.ember-cli: -------------------------------------------------------------------------------- 1 | { 2 | /** 3 | Ember CLI sends analytics information by default. The data is completely 4 | anonymous, but there are times when you might want to disable this behavior. 5 | 6 | Setting `disableAnalytics` to true will prevent any data from being sent. 7 | */ 8 | "disableAnalytics": false 9 | } 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist 5 | /tmp 6 | 7 | # dependencies 8 | /node_modules 9 | /bower_components 10 | 11 | # misc 12 | /.sass-cache 13 | /connect.lock 14 | /coverage/* 15 | /libpeerconnection.log 16 | npm-debug.log 17 | testem.log 18 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "predef": [ 3 | "document", 4 | "window", 5 | "-Promise" 6 | ], 7 | "browser": true, 8 | "boss": true, 9 | "curly": true, 10 | "debug": false, 11 | "devel": true, 12 | "eqeqeq": true, 13 | "evil": true, 14 | "forin": false, 15 | "immed": false, 16 | "laxbreak": false, 17 | "newcap": true, 18 | "noarg": true, 19 | "noempty": false, 20 | "nonew": false, 21 | "nomen": false, 22 | "onevar": false, 23 | "plusplus": false, 24 | "regexp": false, 25 | "undef": true, 26 | "sub": true, 27 | "strict": false, 28 | "white": false, 29 | "eqnull": true, 30 | "esnext": true, 31 | "unused": true 32 | } 33 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | --- 2 | language: node_js 3 | node_js: 4 | - "0.12" 5 | 6 | sudo: false 7 | 8 | cache: 9 | directories: 10 | - node_modules 11 | 12 | before_install: 13 | - export PATH=/usr/local/phantomjs-2.0.0/bin:$PATH 14 | - "npm config set spin false" 15 | - "npm install -g npm@^2" 16 | 17 | install: 18 | - npm install -g bower 19 | - npm install 20 | - bower install 21 | 22 | script: 23 | - npm test 24 | -------------------------------------------------------------------------------- /Brocfile.js: -------------------------------------------------------------------------------- 1 | /* global require, module */ 2 | 3 | var EmberApp = require('ember-cli/lib/broccoli/ember-app'); 4 | 5 | var app = new EmberApp(); 6 | 7 | // Use `app.import` to add additional libraries to the generated 8 | // output files. 9 | // 10 | // If you need to use different assets in different 11 | // environments, specify an object as the first parameter. That 12 | // object's keys should be the environment name and the values 13 | // should be the asset to use in that environment. 14 | // 15 | // If the library that you are including contains AMD or ES6 16 | // modules that you would like to import into your application 17 | // please specify an object with the list of modules as keys 18 | // along with the exports of each module as its value. 19 | 20 | module.exports = app.toTree(); 21 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | ember: ELECTRON_ENV=development ember server -p 5000 2 | electron: $(while ! echo exit | nc localhost 5000; do sleep 1; done) && ELECTRON_ENV=development electron . 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hello World 2 | 3 | **Disclaimer** This is just something we were experimenting with. It is in no way maintained. 4 | 5 | ## Run 6 | 7 | ``` 8 | npm i 9 | npm run dev 10 | ``` 11 | 12 | ## Notes 13 | 14 | - `baseURL` in config must be removed. 15 | - `locationType` in config must be "hash". 16 | - [`require` and `module`][removeRequire] need to be removed from window 17 | 18 | [removeRequire]: https://github.com/usecanvas/ember-electron/blob/7792722761301617a2bc685413e2261b227fc328/app/index.html#L10-L14 19 | -------------------------------------------------------------------------------- /app/app.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import Resolver from 'ember/resolver'; 3 | import loadInitializers from 'ember/load-initializers'; 4 | import config from './config/environment'; 5 | 6 | var App; 7 | 8 | Ember.MODEL_FACTORY_INJECTIONS = true; 9 | 10 | App = Ember.Application.extend({ 11 | modulePrefix: config.modulePrefix, 12 | Resolver: Resolver 13 | }); 14 | 15 | loadInitializers(App, config.modulePrefix); 16 | 17 | export default App; 18 | -------------------------------------------------------------------------------- /app/components/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/usecanvas/ember-electron/8cf843b73e82378736761d9157ad3bd73af63297/app/components/.gitkeep -------------------------------------------------------------------------------- /app/controllers/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/usecanvas/ember-electron/8cf843b73e82378736761d9157ad3bd73af63297/app/controllers/.gitkeep -------------------------------------------------------------------------------- /app/controllers/application.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Controller.extend({ 4 | files: [], 5 | }); -------------------------------------------------------------------------------- /app/helpers/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/usecanvas/ember-electron/8cf843b73e82378736761d9157ad3bd73af63297/app/helpers/.gitkeep -------------------------------------------------------------------------------- /app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | HelloWorld 8 | 9 | 10 | 15 | 16 | {{content-for 'head'}} 17 | 18 | 19 | 20 | 21 | {{content-for 'head-footer'}} 22 | 23 | 24 | {{content-for 'body'}} 25 | 26 | 27 | 28 | 29 | {{content-for 'body-footer'}} 30 | 31 | 32 | -------------------------------------------------------------------------------- /app/lib/ipc-listener.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | const ipc = window.requireNode('ipc'); 4 | 5 | export default Ember.Object.extend({ 6 | addListener: function addListener(event, callback) { 7 | ipc.on(event, function sendEvent(payload) { 8 | try { 9 | payload = JSON.parse(payload); 10 | callback(payload); 11 | } catch(err) { 12 | console.warn(`Error parsing IPC payload: ${payload}.`); 13 | } 14 | }); 15 | } 16 | }); 17 | -------------------------------------------------------------------------------- /app/models/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/usecanvas/ember-electron/8cf843b73e82378736761d9157ad3bd73af63297/app/models/.gitkeep -------------------------------------------------------------------------------- /app/router.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import config from './config/environment'; 3 | 4 | var Router = Ember.Router.extend({ 5 | location: config.locationType 6 | }); 7 | 8 | Router.map(function() { 9 | this.route('foo'); 10 | }); 11 | 12 | export default Router; 13 | -------------------------------------------------------------------------------- /app/routes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/usecanvas/ember-electron/8cf843b73e82378736761d9157ad3bd73af63297/app/routes/.gitkeep -------------------------------------------------------------------------------- /app/routes/application.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import IPCListener from '../lib/ipc-listener'; 3 | 4 | export default Ember.Route.extend({ 5 | initializeIPCListener: function initializeIPCListener() { 6 | const ipcListener = IPCListener.create(); 7 | ipcListener.addListener('filesOpened', this.filesOpened.bind(this)); 8 | }, 9 | 10 | filesOpened: function filesOpened(files) { 11 | this.get('controller.files').setObjects(files); 12 | }, 13 | 14 | actions: { 15 | didTransition: function didTransition() { 16 | this.initializeIPCListener(); 17 | }, 18 | }, 19 | }); -------------------------------------------------------------------------------- /app/styles/app.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/usecanvas/ember-electron/8cf843b73e82378736761d9157ad3bd73af63297/app/styles/app.css -------------------------------------------------------------------------------- /app/templates/application.hbs: -------------------------------------------------------------------------------- 1 |

Welcome to Ember.js

2 | 3 |

Recent Files

4 | 9 | 10 | {{outlet}} 11 | -------------------------------------------------------------------------------- /app/templates/components/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/usecanvas/ember-electron/8cf843b73e82378736761d9157ad3bd73af63297/app/templates/components/.gitkeep -------------------------------------------------------------------------------- /app/templates/foo.hbs: -------------------------------------------------------------------------------- 1 | {{link-to 'Home' 'index'}} -------------------------------------------------------------------------------- /app/templates/index.hbs: -------------------------------------------------------------------------------- 1 | {{link-to 'Foo' 'foo'}} -------------------------------------------------------------------------------- /app/views/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/usecanvas/ember-electron/8cf843b73e82378736761d9157ad3bd73af63297/app/views/.gitkeep -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hello-world", 3 | "dependencies": { 4 | "ember": "1.12.0", 5 | "ember-cli-shims": "ember-cli/ember-cli-shims#0.0.3", 6 | "ember-cli-test-loader": "ember-cli-test-loader#0.1.3", 7 | "ember-data": "1.0.0-beta.17", 8 | "ember-load-initializers": "ember-cli/ember-load-initializers#0.1.4", 9 | "ember-qunit": "0.3.3", 10 | "ember-qunit-notifications": "0.0.7", 11 | "ember-resolver": "~0.1.15", 12 | "jquery": "^1.11.1", 13 | "loader.js": "ember-cli/loader.js#3.2.0", 14 | "qunit": "~1.17.1" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /config/environment.js: -------------------------------------------------------------------------------- 1 | /* jshint node: true */ 2 | 3 | var path = require('path'); 4 | 5 | module.exports = function(environment) { 6 | var ENV = { 7 | modulePrefix: 'hello-world', 8 | environment: environment, 9 | locationType: 'hash', 10 | EmberENV: { 11 | FEATURES: { 12 | // Here you can enable experimental features on an ember canary build 13 | // e.g. 'with-controller': true 14 | } 15 | }, 16 | 17 | APP: { 18 | // Here you can pass flags/options to your application instance 19 | // when it is created 20 | } 21 | }; 22 | 23 | if (environment === 'development') { 24 | // ENV.APP.LOG_RESOLVER = true; 25 | // ENV.APP.LOG_ACTIVE_GENERATION = true; 26 | // ENV.APP.LOG_TRANSITIONS = true; 27 | // ENV.APP.LOG_TRANSITIONS_INTERNAL = true; 28 | // ENV.APP.LOG_VIEW_LOOKUPS = true; 29 | } 30 | 31 | if (environment === 'test') { 32 | // Testem prefers this... 33 | ENV.locationType = 'none'; 34 | 35 | // keep test console output quieter 36 | ENV.APP.LOG_ACTIVE_GENERATION = false; 37 | ENV.APP.LOG_VIEW_LOOKUPS = false; 38 | 39 | ENV.APP.rootElement = '#ember-testing'; 40 | } 41 | 42 | if (environment === 'production') { 43 | 44 | } 45 | 46 | return ENV; 47 | }; 48 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var BrowserWindow = require('browser-window'); 4 | var Menu = require('menu'); 5 | var app = require('app'); 6 | var dialog = require('dialog'); 7 | var mainWindow = null; 8 | 9 | var template = [{ 10 | label: 'File', 11 | submenu: [{ 12 | label: 'Open', 13 | accelerator: 'Command+O', 14 | click: function() { 15 | dialog.showOpenDialog(mainWindow, { 16 | properties: ['openFile', 'multiSelections', 'createDirectory'] 17 | }, onFileOpen); 18 | } 19 | }] 20 | }]; 21 | 22 | app.on('window-all-closed', function onWindowAllClosed() { 23 | if (process.platform !== 'darwin') { 24 | app.quit(); 25 | } 26 | }); 27 | 28 | app.on('ready', function onReady() { 29 | mainWindow = new BrowserWindow({ width: 800, height: 600 }); 30 | 31 | var menu = Menu.buildFromTemplate(template); 32 | Menu.setApplicationMenu(menu); 33 | 34 | delete mainWindow.module; 35 | 36 | if (process.env.ELECTRON_ENV === 'development') { 37 | mainWindow.openDevTools(); 38 | mainWindow.loadUrl('http://localhost:5000'); 39 | } else { 40 | mainWindow.loadUrl('file://' + __dirname + '/dist/index.html'); 41 | } 42 | 43 | mainWindow.on('closed', function onClosed() { 44 | mainWindow = null; 45 | }); 46 | }); 47 | 48 | function onFileOpen(files) { 49 | if (files && files.length) { 50 | mainWindow.webContents.send('filesOpened', JSON.stringify(files)); 51 | } 52 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hello-world", 3 | "description": "A basic Ember/Electron app", 4 | "version": "0.0.0", 5 | "devDependencies": { 6 | "broccoli-asset-rev": "^2.0.2", 7 | "electron-prebuilt": "^0.26.1", 8 | "ember-cli": "0.2.5", 9 | "ember-cli-app-version": "0.3.3", 10 | "ember-cli-babel": "^5.0.0", 11 | "ember-cli-dependency-checker": "^1.0.0", 12 | "ember-cli-htmlbars": "0.7.6", 13 | "ember-cli-ic-ajax": "0.1.1", 14 | "ember-cli-inject-live-reload": "^1.3.0", 15 | "ember-cli-qunit": "0.3.13", 16 | "ember-cli-uglify": "^1.0.1", 17 | "ember-data": "1.0.0-beta.17", 18 | "ember-disable-proxy-controllers": "^0.7.0", 19 | "ember-export-application-global": "^1.0.2", 20 | "foreman": "^1.3.0" 21 | }, 22 | "directories": { 23 | "doc": "doc", 24 | "test": "tests" 25 | }, 26 | "main": "main.js", 27 | "private": true, 28 | "repository": "https://github.com/usecanvas/ember-electron.git", 29 | "scripts": { 30 | "build": "ember build", 31 | "dev": "nf start", 32 | "start": "ember server", 33 | "test": "ember test" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /public/crossdomain.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | 16 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # http://www.robotstxt.org 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /testem.json: -------------------------------------------------------------------------------- 1 | { 2 | "framework": "qunit", 3 | "test_page": "tests/index.html?hidepassed", 4 | "disable_watching": true, 5 | "launch_in_ci": [ 6 | "PhantomJS" 7 | ], 8 | "launch_in_dev": [ 9 | "PhantomJS", 10 | "Chrome" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /tests/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "predef": [ 3 | "document", 4 | "window", 5 | "location", 6 | "setTimeout", 7 | "$", 8 | "-Promise", 9 | "define", 10 | "console", 11 | "visit", 12 | "exists", 13 | "fillIn", 14 | "click", 15 | "keyEvent", 16 | "triggerEvent", 17 | "find", 18 | "findWithAssert", 19 | "wait", 20 | "DS", 21 | "andThen", 22 | "currentURL", 23 | "currentPath", 24 | "currentRouteName" 25 | ], 26 | "node": false, 27 | "browser": false, 28 | "boss": true, 29 | "curly": false, 30 | "debug": false, 31 | "devel": false, 32 | "eqeqeq": true, 33 | "evil": true, 34 | "forin": false, 35 | "immed": false, 36 | "laxbreak": false, 37 | "newcap": true, 38 | "noarg": true, 39 | "noempty": false, 40 | "nonew": false, 41 | "nomen": false, 42 | "onevar": false, 43 | "plusplus": false, 44 | "regexp": false, 45 | "undef": true, 46 | "sub": true, 47 | "strict": false, 48 | "white": false, 49 | "eqnull": true, 50 | "esnext": true 51 | } 52 | -------------------------------------------------------------------------------- /tests/helpers/resolver.js: -------------------------------------------------------------------------------- 1 | import Resolver from 'ember/resolver'; 2 | import config from '../../config/environment'; 3 | 4 | var resolver = Resolver.create(); 5 | 6 | resolver.namespace = { 7 | modulePrefix: config.modulePrefix, 8 | podModulePrefix: config.podModulePrefix 9 | }; 10 | 11 | export default resolver; 12 | -------------------------------------------------------------------------------- /tests/helpers/start-app.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import Application from '../../app'; 3 | import Router from '../../router'; 4 | import config from '../../config/environment'; 5 | 6 | export default function startApp(attrs) { 7 | var application; 8 | 9 | var attributes = Ember.merge({}, config.APP); 10 | attributes = Ember.merge(attributes, attrs); // use defaults, but you can override; 11 | 12 | Ember.run(function() { 13 | application = Application.create(attributes); 14 | application.setupForTesting(); 15 | application.injectTestHelpers(); 16 | }); 17 | 18 | return application; 19 | } 20 | -------------------------------------------------------------------------------- /tests/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | HelloWorld Tests 7 | 8 | 9 | 10 | {{content-for 'head'}} 11 | {{content-for 'test-head'}} 12 | 13 | 14 | 15 | 16 | 17 | {{content-for 'head-footer'}} 18 | {{content-for 'test-head-footer'}} 19 | 20 | 21 | 22 | {{content-for 'body'}} 23 | {{content-for 'test-body'}} 24 | 25 | 26 | 27 | 28 | 29 | 30 | {{content-for 'body-footer'}} 31 | {{content-for 'test-body-footer'}} 32 | 33 | 34 | -------------------------------------------------------------------------------- /tests/test-helper.js: -------------------------------------------------------------------------------- 1 | import resolver from './helpers/resolver'; 2 | import { 3 | setResolver 4 | } from 'ember-qunit'; 5 | 6 | setResolver(resolver); 7 | -------------------------------------------------------------------------------- /tests/unit/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/usecanvas/ember-electron/8cf843b73e82378736761d9157ad3bd73af63297/tests/unit/.gitkeep -------------------------------------------------------------------------------- /vendor/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/usecanvas/ember-electron/8cf843b73e82378736761d9157ad3bd73af63297/vendor/.gitkeep --------------------------------------------------------------------------------