summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Branca <chewbranca@gmail.com>2013-02-24 14:08:44 -0800
committerRussell Branca <chewbranca@gmail.com>2013-02-24 14:08:44 -0800
commitc09e3cc76f0e19ef1c2da624b57d67ec09a52b16 (patch)
treed837973b8b7fc760dc59922709d3a56796498f07
parentc31fa4bfb3448b04c9e5f27a656858e81d476e80 (diff)
parent66286e9a4688200d67091e0fbbe56957b5833a10 (diff)
downloadcouchdb-c09e3cc76f0e19ef1c2da624b57d67ec09a52b16.tar.gz
Merge branch 'pr/44' into fauxton
Fauxton addons
-rw-r--r--src/fauxton/app/addons/contribute/base.js17
-rw-r--r--src/fauxton/app/modules/databases/views.js11
-rw-r--r--src/fauxton/app/modules/documents/views.js10
-rw-r--r--src/fauxton/app/router.js12
-rw-r--r--src/fauxton/grunt.js71
-rw-r--r--src/fauxton/settings.json.default3
-rw-r--r--src/fauxton/tasks/fauxton.js24
-rw-r--r--src/fauxton/writing_addons.md5
8 files changed, 122 insertions, 31 deletions
diff --git a/src/fauxton/app/addons/contribute/base.js b/src/fauxton/app/addons/contribute/base.js
new file mode 100644
index 000000000..50a12cba0
--- /dev/null
+++ b/src/fauxton/app/addons/contribute/base.js
@@ -0,0 +1,17 @@
+define([
+ // Libraries.
+ "jquery",
+ "lodash"
+],
+function($, _){
+ $.contribute = function(message, file){
+ var JST = window.JST = window.JST || {};
+ var template = JST['app/addons/contribute/templates/modal.html'];
+ console.log(template);
+ var compiled = template({message: message, file: file});
+ console.log('contribute!contribute!monorail!contribute!');
+ console.log(compiled);
+ var elem = $(compiled);
+ elem.modal('show');
+ };
+});
diff --git a/src/fauxton/app/modules/databases/views.js b/src/fauxton/app/modules/databases/views.js
index 83c79ae60..322cd5ad9 100644
--- a/src/fauxton/app/modules/databases/views.js
+++ b/src/fauxton/app/modules/databases/views.js
@@ -150,12 +150,17 @@ function(app, FauxtonAPI) {
},
showMine: function(){
- console.log('will show users databases and hide shared');
+ $.contribute(
+ 'Show unshared databases',
+ 'app/addons/databases/views.js'
+ );
},
showShared: function(){
- console.log('will show shared databases and hide the users');
- alert('Support for shared databases coming soon');
+ $.contribute(
+ 'Show shared databases (e.g. continuous replications to/from the database)',
+ 'app/addons/databases/views.js'
+ );
}
});
diff --git a/src/fauxton/app/modules/documents/views.js b/src/fauxton/app/modules/documents/views.js
index c23530c1d..7bae3e9ab 100644
--- a/src/fauxton/app/modules/documents/views.js
+++ b/src/fauxton/app/modules/documents/views.js
@@ -817,12 +817,18 @@ function(app, FauxtonAPI, Codemirror, JSHint) {
newIndex: function(event){
event.preventDefault();
- alert('coming soon');
+ $.contribute(
+ 'Create a new view.',
+ 'app/addons/documents/views.js'
+ );
},
toggleView: function(event){
- alert('filter data by search/view/type');
event.preventDefault();
+ $.contribute(
+ 'Filter data by type or view',
+ 'app/addons/databases/views.js'
+ );
url = event.currentTarget.href.split('#')[1];
app.router.navigate(url);
},
diff --git a/src/fauxton/app/router.js b/src/fauxton/app/router.js
index 3b74afc4d..94b72f66a 100644
--- a/src/fauxton/app/router.js
+++ b/src/fauxton/app/router.js
@@ -107,10 +107,12 @@ function(req, app, Initialize, FauxtonAPI, Fauxton, Layout, Databases, Documents
}
}, this);
_.each(LoadAddons.addons, function(module) {
- module.initialize();
- // This is pure routes the addon provides
- if (module.Routes) {
- _.each(module.Routes, this.addModuleRoute, this);
+ if (module){
+ module.initialize();
+ // This is pure routes the addon provides
+ if (module.Routes) {
+ _.each(module.Routes, this.addModuleRoute, this);
+ }
}
}, this);
},
@@ -118,7 +120,7 @@ function(req, app, Initialize, FauxtonAPI, Fauxton, Layout, Databases, Documents
setAddonHooks: function() {
_.each(LoadAddons.addons, function(module) {
// This is updates to views by the addon
- if (module.hooks){
+ if (module && module.hooks){
_.each(module.hooks, function(callback, route){
if (this.masterLayout.hooks[route]) {
this.masterLayout.hooks[route].push(callback);
diff --git a/src/fauxton/grunt.js b/src/fauxton/grunt.js
index 428ec144a..9dc7ddb51 100644
--- a/src/fauxton/grunt.js
+++ b/src/fauxton/grunt.js
@@ -1,8 +1,9 @@
// This is the main application configuration file. It is a Grunt
// configuration file, which you can learn more about here:
// https://github.com/cowboy/grunt/blob/master/docs/configuring.md
-module.exports = function(grunt) {
+module.exports = function(grunt) {
+ var path = require('path');
var couch_config = {
fauxton: {
db: 'http://localhost:5984/fauxton',
@@ -13,24 +14,60 @@ module.exports = function(grunt) {
}
};
+ function processAddons(callback){
+ if (path.existsSync("settings.json")){
+ var settings = grunt.file.readJSON("settings.json") || {deps: []};
+ settings.deps.forEach(callback);
+ }
+ }
+
var cleanable = function(){
// Whitelist files and directories to be cleaned
- var path = require('path');
+
// You'll always want to clean these two directories
var theListToClean = ["dist/", "app/load_addons.js"];
// Now find the external addons you have and add them for cleaning up
- if (path.existsSync("settings.json")){
- var settings = grunt.file.readJSON("settings.json") || {deps: []};
- settings.deps.forEach(function(addon){
- // Only clean addons that are included from a local dir
- if (addon.path){
- theListToClean.push("app/addons/" + addon.name);
- }
- });
- }
+ processAddons(function(addon){
+ // Only clean addons that are included from a local dir
+ if (addon.path){
+ theListToClean.push("app/addons/" + addon.name);
+ }
+ });
return theListToClean;
}();
+ var assets = function(){
+ // Base assets
+ var theAssets = {
+ less:{
+ paths: ["assets/less"],
+ files: {
+ "dist/debug/css/fauxton.css": "assets/less/fauxton.less"
+ }
+ },
+ img: ["assets/img/**"]
+ };
+ processAddons(function(addon){
+ // Less files from addons
+ var root = addon.path || "app/addons/" + addon.name;
+ var lessPath = root + "/assets/less";
+ if(path.existsSync(lessPath)){
+ // .less files exist for this addon
+ theAssets.less.paths.push(lessPath);
+ theAssets.less.files["dist/debug/css/" + addon.name + ".css"] =
+ lessPath + "/" + addon.name + ".less";
+ }
+ // Images
+ var root = addon.path || "app/addons/" + addon.name;
+ var imgPath = root + "/assets/img";
+ if(path.existsSync(imgPath)){
+ theAssets.img.push(imgPath + "/**");
+ }
+ });
+ grunt.log.write(theAssets.img[0]);
+ return theAssets;
+ }();
+
grunt.initConfig({
// The clean task ensures all files are removed from the dist/ directory so
@@ -50,11 +87,9 @@ module.exports = function(grunt) {
less: {
compile: {
options: {
- paths: ["assets/less"]
+ paths: assets.less.paths
},
- files: {
- "dist/debug/css/index.css": "assets/less/fauxton.less"
- }
+ files: assets.less.files
}
},
@@ -142,7 +177,7 @@ module.exports = function(grunt) {
},
debug: {
- src: ["dist/debug/css/index.css", 'assets/css/*.css'],
+ src: ["dist/debug/css/*.css", 'assets/css/*.css'],
dest: 'dist/debug/css/index.css'
}
@@ -280,14 +315,14 @@ module.exports = function(grunt) {
files:{
"dist/release/js/": "assets/js/**",
//"dist/release/css/**": "assets/css/**"
- "dist/release/img/": "assets/img/**"
+ "dist/release/img/": assets.img
}
},
debug:{
files:{
"dist/debug/js/": "assets/js/**",
//"dist/debug/css/": "dist/release/css/**"
- "dist/debug/img/": "assets/img/**"
+ "dist/debug/img/": assets.img
}
}
},
diff --git a/src/fauxton/settings.json.default b/src/fauxton/settings.json.default
index 1063ea48c..01c04a4dc 100644
--- a/src/fauxton/settings.json.default
+++ b/src/fauxton/settings.json.default
@@ -2,6 +2,7 @@
"deps": [
{ "name": "config" },
{ "name": "logs" },
- { "name": "stats" }
+ { "name": "stats" },
+ { "name": "contribute" }
]
}
diff --git a/src/fauxton/tasks/fauxton.js b/src/fauxton/tasks/fauxton.js
index a08a56130..78b50f377 100644
--- a/src/fauxton/tasks/fauxton.js
+++ b/src/fauxton/tasks/fauxton.js
@@ -25,6 +25,11 @@ module.exports = function(grunt) {
name: "path",
message: "Location of add ons",
default: "app/addons"
+ },
+ {
+ name: "assets",
+ message: "Do you need an assets folder? (for .less)",
+ default: 'y/N'
}
];
@@ -51,14 +56,29 @@ module.exports = function(grunt) {
var done = this.async()
grunt.helper('prompt', {}, prompts, function (err, result) {
if (err) { return onErr(err); }
- var module = result.name
+ grunt.log.writeln(result.assets);
+ var module = result.name,
+ assets = result.assets;
+ if (assets == 'y') {
+ //if you need an assets folder
+ filepath = result.path + '/' + module.toLowerCase() + '/assets/less';
+ grunt.file.mkdir(filepath);
+ lessfile = {
+ name: 'less',
+ filename: module.toLowerCase()+'.less',
+ template: '//<%= module %> styles'
+ }
+ lessfile.module = module.charAt(0).toUpperCase() + module.substr(1);
+ var content = grunt.template.process(lessfile.template, lessfile);
+ grunt.file.write(filepath + '/' + lessfile.filename, content);
+ }
filepath = result.path + '/' + module.toLowerCase() + '/templates';
grunt.file.mkdir(filepath);
filepath = result.path + '/' + module.toLowerCase();
_.each(addonTemplates, function(file){
file.module = module.charAt(0).toUpperCase() + module.substr(1);
var content = grunt.template.process(file.template, file);
- grunt.file.write(filepath + '/' + file.filename, content)
+ grunt.file.write(filepath + '/' + file.filename, content);
});
grunt.log.writeln('Created addon ' + result.name + ' in ' + result.path);
done();
diff --git a/src/fauxton/writing_addons.md b/src/fauxton/writing_addons.md
index a41af53e3..6d3f87bc0 100644
--- a/src/fauxton/writing_addons.md
+++ b/src/fauxton/writing_addons.md
@@ -9,6 +9,10 @@ have the following structure:
* routes.js - _URL routing for the addon_
* views.js - _views that the model provides_
+ [optional]
+ * assets/less
+ * my_addon.less
+
## Generating an addon
We have a grunt task that lets you create a skeleton addon, including all the
boiler plate code. Run `bbb addon` and answer the questions it asks to create
@@ -21,6 +25,7 @@ an addon:
Please answer the following:
[?] Add on Name (WickedCool) SuperAddon
[?] Location of add ons (app/addons)
+ [?] Do you need an assets folder?(for .less) (y/N)
[?] Do you need to make any changes to the above before continuing? (y/N)
Created addon SuperAddon in app/addons