Skip to content

Commit c9a9b91

Browse files
committed
Start using new app structure.
All files are located in the same directory, and symlinks are used for static files and views.
1 parent 2b77e4a commit c9a9b91

File tree

5 files changed

+98
-70
lines changed

5 files changed

+98
-70
lines changed

coder-apps/common/coder/app/app.js

Lines changed: 73 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ var mustache = require('mustache');
2222
var util = require('util');
2323
var fs = require('fs');
2424
var spawn = require('child_process').spawn;
25+
var ncp = require('ncp').ncp;
2526

2627
//hack to make fs.existsSync work between different node versions
2728
if ( !fs.existsSync ) {
@@ -78,6 +79,23 @@ var getAvailableNewAppID = function( newappid ) {
7879
return newappid;
7980
};
8081

82+
var createLinks = function(name, cb) {
83+
var apppath = "../../apps/" + name + "/";
84+
var viewpath = process.cwd() + "/views/apps/" + name;
85+
var staticpath = process.cwd() + "/static/apps/" + name;
86+
87+
fs.symlink(apppath + "views", viewpath, function(err) {
88+
if (err) {
89+
cb(err);
90+
return;
91+
}
92+
93+
fs.symlink(apppath + "static", staticpath, function(err) {
94+
cb(err);
95+
});
96+
});
97+
}
98+
8199
exports.api_app_create_handler = function( app, req, res ) {
82100

83101
var apptitle = req.param('app_title');
@@ -102,27 +120,63 @@ exports.api_app_create_handler = function( app, req, res ) {
102120
}
103121

104122
newappid = getAvailableNewAppID( newappid );
105-
106-
buildFolderStructure( newappid );
107-
cloneApp( 'boilerplate', newappid );
108-
109-
var metainfo = {
110-
created: getDateString( new Date() ),
111-
modified: getDateString( new Date() ),
112-
color: appcolor,
113-
author: coderlib.device.owner,
114-
name: apptitle,
115-
hidden: false,
116-
public: false
117-
};
118-
var metapath = process.cwd() + '/apps/' + newappid + '/meta.json';
119-
fs.writeFileSync( metapath, JSON.stringify(metainfo, null, 4), 'utf8' );
120123

121-
res.json({
122-
status: 'success',
123-
appname: newappid
124-
});
124+
var path = process.cwd() + "/apps/";
125125

126+
ncp(path + "boilerplate", path + newappid, function(err) {
127+
if (err) {
128+
res.json({
129+
status: 'error',
130+
error: err
131+
});
132+
return;
133+
}
134+
135+
createLinks(newappid, function(err) {
136+
if (err) {
137+
res.json({
138+
status: 'error',
139+
error: err
140+
});
141+
return;
142+
}
143+
144+
coderlib.app(newappid, function(err, app) {
145+
if (err) {
146+
res.json({
147+
status: 'error',
148+
error: err
149+
});
150+
return;
151+
}
152+
153+
app.metadata = {
154+
created: getDateString( new Date() ),
155+
modified: getDateString( new Date() ),
156+
color: appcolor,
157+
author: coderlib.device.owner,
158+
name: apptitle,
159+
hidden: false,
160+
public: false
161+
};
162+
163+
app.save(function(err) {
164+
if (err) {
165+
res.json({
166+
status: 'error',
167+
error: err
168+
});
169+
}
170+
else {
171+
res.json({
172+
status: 'success',
173+
appname: newappid
174+
});
175+
}
176+
});
177+
});
178+
});
179+
});
126180
};
127181

128182
exports.export_download_handler = function( app, req, res, pathmatches ) {
@@ -430,23 +484,6 @@ var buildFolderStructure = function( appid ) {
430484
return success;
431485
};
432486

433-
var cloneApp = function( fromapp, toapp ) {
434-
var path = process.cwd();
435-
var cpdata = "";
436-
437-
//app node.js file
438-
copyFile( path + '/apps/' + fromapp + '/app.js', path + '/apps/' + toapp + '/app.js' );
439-
//html view
440-
copyFile( path + '/views/apps/' + fromapp + '/index.html', path + '/views/apps/' + toapp + '/index.html' );
441-
//css data
442-
copyFile( path + '/static/apps/' + fromapp + '/css/index.css', path + '/static/apps/' + toapp + '/css/index.css' );
443-
//index.js file
444-
copyFile( path + '/static/apps/' + fromapp + '/js/index.js', path + '/static/apps/' + toapp + '/js/index.js' );
445-
446-
//TODO: not currently cloning anything in media directory.
447-
};
448-
449-
450487
var getDateString = function( d ) {
451488
var now = new Date();
452489
var twodigits = function( x ) {

coder-apps/common/coderlib/app/app.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,6 @@ var getDateString = function( d ) {
5151
};
5252

5353

54-
55-
5654
var appdir = process.cwd() + "/apps/";
5755
var appcache = {}
5856

@@ -62,8 +60,8 @@ exports.app = function(name, callback) {
6260
return;
6361
}
6462

65-
var metafile = appdir + name + "/meta.json";
66-
var loadpath = appdir + name + "/app";
63+
var metafile = appdir + name + "/app/meta.json";
64+
var loadpath = appdir + name + "/app/app";
6765
var viewpath = "apps/" + name + "/";
6866

6967
var userapp = {

coder-apps/install_app.sh

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,8 @@ app=$1
1919
base=$2
2020
from=$3
2121

22-
mkdir "$base/apps/$app"
23-
mkdir "$base/static/apps/$app"
24-
mkdir "$base/static/apps/$app/js"
25-
mkdir "$base/static/apps/$app/css"
26-
mkdir "$base/static/apps/$app/media"
27-
mkdir "$base/views/apps/$app"
22+
cp -RT $from/$app $base/apps/$app
2823

29-
cp $from/$app/app/* $base/apps/$app/
30-
cp $from/$app/views/* $base/views/apps/$app/
31-
cp $from/$app/static/js/* $base/static/apps/$app/js/
32-
cp $from/$app/static/css/* $base/static/apps/$app/css/
33-
cp $from/$app/static/media/* $base/static/apps/$app/media/
24+
ln -sTf ../../apps/$app/views $base/views/apps/$app
25+
ln -sTf ../../apps/$app/static $base/static/apps/$app
3426

coder-base/package.json

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
{
2-
"name": "coder-base",
3-
"description": "kid-friendly web programming environment for pi",
4-
"version": "0.0.1",
5-
"private": true,
6-
"dependencies": {
7-
"express": "3.1.0",
8-
"redis": "0.8.2",
9-
"mustache": "0.7.2",
10-
"consolidate": "0.8.0",
11-
"socket.io": "0.9.13",
12-
"express-params": "0.0.3",
13-
"bcrypt": "0.7.4",
14-
"connect": "*",
15-
"cookie": "*",
16-
"async": "0.2.*"
17-
}
2+
"name": "coder-base",
3+
"description": "kid-friendly web programming environment for pi",
4+
"version": "0.0.1",
5+
"private": true,
6+
"dependencies": {
7+
"express": "3.1.0",
8+
"redis": "0.8.2",
9+
"mustache": "0.7.2",
10+
"consolidate": "0.8.0",
11+
"socket.io": "0.9.13",
12+
"express-params": "0.0.3",
13+
"bcrypt": "0.7.4",
14+
"connect": "*",
15+
"cookie": "*",
16+
"async": "0.2.*",
17+
"ncp": "0.5.*"
18+
}
1819
}

coder-base/server.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ var cookie = require('cookie');
3535
var connect = require('connect');
3636

3737
global.config = require('./config');
38-
global.coderlib = require('./apps/coderlib/app');
38+
global.coderlib = require('./apps/coderlib/app/app');
39+
40+
var auth = require('./apps/auth/app/app');
3941

4042
var apphandler = function( req, res, appdir ) {
4143
var appname = req.params[0];
@@ -49,7 +51,6 @@ var apphandler = function( req, res, appdir ) {
4951

5052
util.log( req.route.method + ": " + apppath + " " + appname );
5153

52-
auth = require(appdir + "auth" + "/app");
5354
coderlib.app(appname, function(err, app) {
5455
if (err) {
5556
res.status( 404 );
@@ -220,7 +221,6 @@ var initSocketIO = function( server ) {
220221
}
221222
if ( data.appid !== undefined && data.appid.match(/^\w+$/) && data.key !== undefined ) {
222223
var appname = data.appid;
223-
var auth = require( __dirname + "/apps/auth/app" );
224224

225225
coderlib.app(appname, function(err, app) {
226226
if (err) {

0 commit comments

Comments
 (0)