Skip to content

Commit

Permalink
Replaced ant build script with jake build script. Files moved around.…
Browse files Browse the repository at this point in the history
… Created package.json and component.json
  • Loading branch information
josdejong committed May 3, 2013
1 parent a03ea9a commit b287c4b
Show file tree
Hide file tree
Showing 42 changed files with 7,139 additions and 265 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.idea
build
downloads
node_modules
13 changes: 13 additions & 0 deletions .npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
app
build
downloads
jsoneditor
misc
node_modules
test
tools
.idea
component.json
Jakefile.js
.npmignore
.gitignore
3 changes: 2 additions & 1 deletion changelog.txt → HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
# JSON Editor Online - Changelog
# JSON Editor Online - History

http://jsoneditoronline.org

## not yet released, version 2.2.0

- Unified JSONFormatter and JSONEditor in one editor with a switchable mode.
- Urls are navigable now.
- Added jsoneditor to npm and bower.


## 2013-03-11, version 2.1.1
Expand Down
313 changes: 313 additions & 0 deletions Jakefile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,313 @@
/**
* Jake build script
*/
var jake = require('jake'),
path = require('path'),
cleanCss = require('clean-css'),
archiver = require('archiver'),
fs = require('fs');

require('jake-utils');

// constants
var JSONEDITOR = './jsoneditor.js',
JSONEDITOR_CSS = './jsoneditor.css',
JSONEDITOR_MIN = './jsoneditor-min.js',
JSONEDITOR_CSS_MIN = './jsoneditor-min.css',
BUILD = './build';

/**
* default task
*/
desc('Execute all tasks: build, minify, and zip the library and web app');
task('default', ['clear', 'build', 'minify', 'zip', 'webapp', 'chromeapp'], function () {
console.log('Done');
});

/**
* build the library
*/
desc('Clear the build directory');
task('clear', function () {
jake.rmRf(BUILD);
});

/**
* build the library
*/
desc('Build the library');
task('build', ['clear'], function () {
// concatenate the javascript files
concat({
src: [
'./src/js/jsoneditor.js',
'./src/js/treeeditor.js',
'./src/js/texteditor.js',
'./src/js/node.js',
'./src/js/appendnode.js',
'./src/js/contextmenu.js',
'./src/js/history.js',
'./src/js/searchbox.js',
'./src/js/highlighter.js',
'./src/js/util.js',
'./src/js/module.js'
],
dest: JSONEDITOR,
header: read('./src/js/header.js') + '\n' +
'(function () {\n',
separator: '\n',
footer: '\n})();\n'
});

// update version number and stuff in the javascript files
replacePlaceholders(JSONEDITOR);
console.log('Created ' + JSONEDITOR);

// concatenate and stringify the css files
concat({
src: [
'./src/css/jsoneditor.css',
'./src/css/contextmenu.css',
'./src/css/menu.css',
'./src/css/searchbox.css'
],
dest: JSONEDITOR_CSS,
separator: '\n'
});
console.log('Created ' + JSONEDITOR_CSS);

// minify the css file
write(JSONEDITOR_CSS_MIN, cleanCss.process(String(read(JSONEDITOR_CSS))));

// create a folder img and copy the icons
jake.mkdirP('./img');
jake.cpR('./src/css/img/jsoneditor-icons.png', './img/');
console.log('Copied jsoneditor-icons.png to ./img/');
});

/**
* minify the library
*/
desc('Minify the library');
task('minify', ['build'], function () {
// minify javascript
minify({
src: JSONEDITOR,
dest: JSONEDITOR_MIN,
header: read('./src/js/header.js')
});

// update version number and stuff in the javascript files
replacePlaceholders(JSONEDITOR_MIN);

console.log('Created ' + JSONEDITOR_MIN);
});

/**
* zip the library
*/
desc('Zip the library');
task('zip', ['build', 'minify'], {async: true}, function () {
var zipfolder = BUILD + '/lib';
var pkg = 'jsoneditor-' + version();
var zipfile = zipfolder + '/' + pkg + '.zip';
jake.mkdirP(zipfolder);

var output = fs.createWriteStream(zipfile);
var archive = archiver('zip');

archive.on('error', function(err) {
throw err;
});

archive.pipe(output);

var filelist = new jake.FileList();
filelist.include([
'README.md',
'NOTICE',
'LICENSE',
'HISTORY.md',
JSONEDITOR,
JSONEDITOR_CSS,
JSONEDITOR_MIN,
JSONEDITOR_CSS_MIN,
'img/*.*',
'examples/**/*.*'
]);
var files = filelist.toArray();
files.forEach(function (file) {
archive.append(fs.createReadStream(file), {
name: pkg + '/' + file
})
});

archive.finalize(function(err, written) {
if (err) {
throw err;
}

console.log('Zipped ' + zipfile);
complete();
});
});

/**
* build the web app
*/
desc('Build web app');
task('webapp', ['build', 'minify'], function () {
var webAppSrc = './app/web/';
var webApp = BUILD + '/app/web/';
var webAppLib = webApp + 'lib/';
var webAppAce = webAppLib + 'ace/';
var webAppImg = webApp + 'img/';
var webAppDoc = webApp + 'doc/';
var appJs = webApp + 'app.js';
var appCss = webApp + 'app.css';
var appCssMin = webApp + 'app-min.css';
var appJsMin = webApp + 'app-min.js';

// create directories
// TODO: should be created automatically...
jake.mkdirP(webApp);
jake.mkdirP(webAppLib);
jake.mkdirP(webAppLib + 'ace/');
jake.mkdirP(webAppLib + 'jsoneditor/');
jake.mkdirP(webAppLib + 'jsoneditor/img/');
jake.mkdirP(webAppLib + 'jsonlint/');
jake.mkdirP(webAppImg);
jake.mkdirP(webAppDoc);

// concatenate the javascript files
concat({
src: [
webAppSrc + 'queryparams.js',
webAppSrc + 'ajax.js',
webAppSrc + 'fileretriever.js',
webAppSrc + 'notify.js',
webAppSrc + 'splitter.js',
webAppSrc + 'app.js'
],
dest: appJs,
separator: '\n'
});

// minify javascript
minify({
src: appJs,
dest: appJsMin
});

// concatenate the css files
concat({
src: [
webAppSrc + 'fileretriever.css',
webAppSrc + 'app.css'
],
dest: appCss,
separator: '\n'
});

// minify css file
write(appCssMin, cleanCss.process(String(read(appCss))));

// remove non minified javascript and css file
fs.unlinkSync(appJs);
fs.unlinkSync(appCss);

// copy files
jake.cpR('./README.md', webApp);
jake.cpR('./HISTORY.md', webApp);
jake.cpR('./NOTICE', webApp);
jake.cpR('./LICENSE', webApp);
jake.cpR('./LICENSE', webApp);
jake.cpR(webAppSrc + 'robots.txt', webApp);
jake.cpR(webAppSrc + 'datapolicy.txt', webApp);
jake.cpR(webAppSrc + 'index.html', webApp);
jake.cpR(webAppSrc + 'favicon.ico', webApp);
jake.cpR(webAppSrc + 'fileretriever.php', webApp);
jake.cpR(webAppSrc + 'googlea47c4a0b36d11021.html', webApp);
jake.cpR(webAppSrc + 'img/logo.png', webAppImg);
jake.cpR(webAppSrc + 'img/header_background.png', webAppImg);
jake.cpR(webAppSrc + 'doc/', webAppDoc);

// update date and verison in index.html
replacePlaceholders(webApp + 'index.html');
replacePlaceholders(webApp + 'index.html'); // TODO: fix bug in replace, should replace all occurrences

// concatenate and copy ace files
concat({
src: [
webAppSrc + 'lib/ace/ace.js',
webAppSrc + 'lib/ace/mode-json.js',
webAppSrc + 'lib/ace/theme-textmate.js',
webAppSrc + 'lib/ace/theme-jso.js'
],
dest: webAppAce + 'ace-min.js',
separator: '\n'
});
jake.cpR(webAppSrc + 'lib/ace/worker-json.js', webAppAce);

// copy json lint file
jake.cpR(webAppSrc + 'lib/jsonlint/jsonlint.js', webAppLib + 'jsonlint/')

// copy jsoneditor files
jake.cpR(JSONEDITOR_MIN, webAppLib + 'jsoneditor/');
jake.cpR(JSONEDITOR_CSS_MIN, webAppLib + 'jsoneditor/');
jake.cpR('img', webAppLib + 'jsoneditor/');

});

/**
* build the chrome app
*/
desc('Build chrome app');
task('chromeapp', {async: true}, function () {
var folder = BUILD + '/app/';
var file = folder + 'chrome.zip';
jake.mkdirP(folder);

var output = fs.createWriteStream(file);
var archive = archiver('zip');

archive.on('error', function(err) {
throw err;
});

// create a temporary manifest file with version number
var manifestTmp = folder + 'manifest.json.tmp';
jake.cpR('./app/chrome/manifest.json', manifestTmp);
replacePlaceholders(manifestTmp);

archive.pipe(output);
archive.append(fs.createReadStream(manifestTmp), {name: 'manifest.json'});
archive.append(fs.createReadStream('./app/web/img/icon_16.png'), {name: 'icon_16.png'});
archive.append(fs.createReadStream('./app/web/img/icon_128.png'), {name: 'icon_128.png'});

// cleanup temporary manifest file
fs.unlinkSync(manifestTmp);

archive.finalize(function(err, written) {
if (err) {
throw err;
}

console.log('Created chrome app ' + file);
complete();
});
});

/**
* replace version, date, and name placeholders in the provided file
* @param {String} filename
*/
var replacePlaceholders = function (filename) {
replace({
replacements: [
{pattern: '@@date', replacement: today()},
{pattern: '@@version', replacement: version()}
],
src: filename
});
};
24 changes: 20 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,29 @@ a code editor.
- Sourcecode: https://github.com/josdejong/jsoneditoronline/


### Install

with npm:

npm install jsoneditor

with bower:

npm install bower

downloads:

http://jsoneditoronline.org/downloads/


### Build

The code of the JSON Editor is located in the folder `jsoneditor`.
The code of the JSON Editor is located in the folder `src`.
The code for the web application in `app/web`.
To build the library from sourcecode, run

ant
jake

in the root of the project. This will generate a folder `build` containing
generated library and web application.
in the root of the project. This will generate the files `jsoneditor.js`,
`jsoneditor.css`, etc., and will create a folder `build` containing the
zipped library and the built web application.
2 changes: 1 addition & 1 deletion app/chrome/manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"manifest_version": 2,
"name": "JSON Editor",
"version": "2.1.1",
"version": "@@version",
"description": "JSON Editor is a tool to view, edit, and format JSON. It shows your data in an editable treeview and in a code editor.",
"app": {
"urls": [
Expand Down
2 changes: 1 addition & 1 deletion app/web/app.css
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ span.header-light {
margin: 0 0 15px 0;
}

#splitter #toEditor {
#splitter #toTree {
margin: 40px 0 0 0 ;
}

Expand Down
Loading

0 comments on commit b287c4b

Please sign in to comment.