initial upload

This commit is contained in:
sander 2015-11-20 16:51:56 -05:00
commit f6b691bbd4
14 changed files with 276 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
node_modules/

6
README.md Normal file
View file

@ -0,0 +1,6 @@
Drawpad
Setup for dev:
* npm install
* npm run watch
* electron .

60
js/Drawpad.js Normal file
View file

@ -0,0 +1,60 @@
'use strict';
import Point from "./Point";
import simplify from "simplify-js";
import d3 from "d3";
class Drawpad{
constructor() {
this.drawing = false;
this.path = null;
this.pathD = "";
this.points = [];
}
startDrawing(event, parent){
this.drawing=true;
let newPoint=this.getPoint(event);
//add starting point to svg-path
this.pathD="M"+newPoint.x+","+newPoint.y;//path Move operation
this.path=d3.select("#drawpad").append("path").attr("d", this.pathD);
//add new point to array of points, used to reduce the number of points after finishing the line
this.points=[];
this.points.push(newPoint);
}
draw(event){
if (this.drawing) {
let newPoint=this.getPoint(event);
this.pathD+=" L"+newPoint.x+","+newPoint.y; //path LineTo operation
this.path.attr("d", this.pathD);
this.points.push(newPoint);
}
}
stopDrawing(event){
this.drawing=false;
//reduce the number of points in the polygon (simplify lib) and update the view
this.updatePath(simplify(this.points, 1));
}
getPoint(event){
return new Point(event.nativeEvent.offsetX, event.nativeEvent.offsetY);
}
updatePath(points){
this.pathD = "M" + points[0].x + "," + points[0].y;
points.forEach(function(point) {
this.pathD += " L" + point.x + "," + point.y;
}, this);
this.path.attr("d", this.pathD);//update d attribute in path
}
}
export default Drawpad

36
js/DrawpadView.js Normal file
View file

@ -0,0 +1,36 @@
require('../less/main.less');
'use strict';
import React from "react";
import Drawpad from './Drawpad';
let drawpad=new Drawpad();
class DrawpadView extends React.Component{
constructor(props) {
super(props);
}
startDrawing(event){
drawpad.startDrawing(event);
}
draw(event){
drawpad.draw(event);
}
stopDrawing(event){
drawpad.stopDrawing(event);
}
render() {
return <svg width="700" height="700" id ="drawpad" onMouseDown={this.startDrawing} onMouseMove={this.draw} onMouseUp={this.stopDrawing}></svg>;
}
}
export default DrawpadView

14
js/Line.js Normal file
View file

@ -0,0 +1,14 @@
'use strict';
import Point from './Point.js';
class Line{
constructor(startPoint, endPoint){
this.start=startPoint;
this.end=endPoint;
}
}
export default Line;

14
js/Point.js Normal file
View file

@ -0,0 +1,14 @@
'use strict';
class Point{
constructor(x,y){
this.x=x;
this.y=y;
}
toString(){
return "point["+ this.x + "," + this.y +"]";
}
}
export default Point

4
js/app.js Normal file
View file

@ -0,0 +1,4 @@
import React from 'react';
import DrawpadView from './DrawpadView';
React.render(<DrawpadView/>, document.getElementById('app'));

7
jsconfig.json Normal file
View file

@ -0,0 +1,7 @@
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"experimentalDecorators": true
}
}

13
less/main.less Normal file
View file

@ -0,0 +1,13 @@
@body-bg: #000;
@myDiv-fg: #f00;
svg{
background-color: #808080;
}
path{
stroke:#660000;
fill:none;
stroke-width:5;
}

22
main.js Normal file
View file

@ -0,0 +1,22 @@
var app = require('app');
var BrowserWindow = require('browser-window');
require('crash-reporter').start();
app.on('window-all-closed', function() {
if (process.platform != 'darwin') {
app.quit();
}
});
app.on('ready', function() {
mainWindow = new BrowserWindow({width: 1360, height: 800});
mainWindow.loadUrl('file://' + __dirname + '/public/index.html');
mainWindow.openDevTools();
mainWindow.on('closed', function() {
mainWindow = null;
});
});

24
npm-debug.log Normal file
View file

@ -0,0 +1,24 @@
0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/node',
1 verbose cli '/usr/bin/npm',
1 verbose cli 'install',
1 verbose cli 'simplify-js',
1 verbose cli '--save' ]
2 info using npm@1.4.28
3 info using node@v0.10.40
4 error Failed to parse json
4 error Unexpected token }
5 error File: /workspaces/electron/electron-react-tutorial/package.json
6 error Failed to parse package.json data.
6 error package.json must be actual JSON, not just JavaScript.
6 error
6 error This is not a bug in npm.
6 error Tell the package author to fix their package.json file. JSON.parse
7 error System Linux 3.10.0-229.20.1.el7.x86_64
8 error command "/usr/bin/node" "/usr/bin/npm" "install" "simplify-js" "--save"
9 error cwd /workspaces/electron/electron-react-tutorial
10 error node -v v0.10.40
11 error npm -v 1.4.28
12 error file /workspaces/electron/electron-react-tutorial/package.json
13 error code EJSONPARSE
14 verbose exit [ 1, true ]

33
package.json Normal file
View file

@ -0,0 +1,33 @@
{
"name": "my-electron-app",
"version": "0.1.0",
"main": "main.js",
"devDependencies": {
"babel": "^5.6.10",
"babel-core": "^5.6.11",
"babel-loader": "^5.2.2",
"babelify": "^7.2.0",
"browserify": "^12.0.1",
"css-loader": "^0.15.1",
"electron-packager": "^4.1.3",
"electron-rebuild": "^0.2.2",
"gulp": "^3.9.0",
"less": "^2.5.1",
"less-loader": "^2.2.0",
"node-libs-browser": "^0.5.2",
"style-loader": "^0.12.3",
"vinyl-source-stream": "^1.1.0",
"webpack": "^1.9.12",
"webpack-dev-server": "^1.9.0"
},
"scripts": {
"watch": "./node_modules/.bin/webpack-dev-server",
"rebuild": "./node_modules/.bin/electron-rebuild"
},
"dependencies": {
"d3": "^3.5.9",
"electron-prebuilt": "^0.28.3",
"react": "^0.13.3",
"simplify-js": "^1.2.1"
}
}

12
public/index.html Normal file
View file

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF8">
<title>My Electron-React app</title>
</head>
<body>
<div id="app"></div>
</body>
<script src="http://localhost:8080/webpack-dev-server.js"></script>
<script src="http://localhost:8080/built/bundle.js"></script>
</html>

30
webpack.config.js Normal file
View file

@ -0,0 +1,30 @@
var webpack = require('webpack');
module.exports = {
entry: {
app: ['webpack/hot/dev-server', './js/Drawpad.js', './js/app.js', './js/DrawpadView.js']
},
output: {
path: './public/built',
filename: 'bundle.js',
publicPath: 'http://localhost:8080/built/'
},
devServer: {
contentBase: './public',
publicPath: 'http://localhost:8080/built/'
},
module: {
loaders: [
{ test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/ },
{ test: /\.css$/, loader: 'style-loader!css-loader' },
{ test: /\.less$/, loader: 'style-loader!css-loader!less-loader'}
]
},
plugins: [
new webpack.HotModuleReplacementPlugin()
]
}