diff options
author | Russell Branca <chewbranca@gmail.com> | 2013-02-24 14:08:44 -0800 |
---|---|---|
committer | Russell Branca <chewbranca@gmail.com> | 2013-02-24 14:08:44 -0800 |
commit | c09e3cc76f0e19ef1c2da624b57d67ec09a52b16 (patch) | |
tree | d837973b8b7fc760dc59922709d3a56796498f07 | |
parent | c31fa4bfb3448b04c9e5f27a656858e81d476e80 (diff) | |
parent | 66286e9a4688200d67091e0fbbe56957b5833a10 (diff) | |
download | couchdb-c09e3cc76f0e19ef1c2da624b57d67ec09a52b16.tar.gz |
Merge branch 'pr/44' into fauxton
Fauxton addons
-rw-r--r-- | src/fauxton/app/addons/contribute/base.js | 17 | ||||
-rw-r--r-- | src/fauxton/app/modules/databases/views.js | 11 | ||||
-rw-r--r-- | src/fauxton/app/modules/documents/views.js | 10 | ||||
-rw-r--r-- | src/fauxton/app/router.js | 12 | ||||
-rw-r--r-- | src/fauxton/grunt.js | 71 | ||||
-rw-r--r-- | src/fauxton/settings.json.default | 3 | ||||
-rw-r--r-- | src/fauxton/tasks/fauxton.js | 24 | ||||
-rw-r--r-- | src/fauxton/writing_addons.md | 5 |
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 |