diff --git a/lib/assets/Gruntfile.js b/lib/assets/Gruntfile.js new file mode 100644 index 0000000000..8e12fd134c --- /dev/null +++ b/lib/assets/Gruntfile.js @@ -0,0 +1,74 @@ +module.exports = function(grunt) { + + var cartodb_files = require('./files'); + var Handlebars = require('handlebars'); + var Mustache = require('mustache'); + + var concat = {}; + + for(var f in cartodb_files) { + if(f[0] !== '_') { + concat[f] = { + src: cartodb_files[f], + dest: 'dist/' + f + ".js" + }; + } + } + + // Project configuration. + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + + concat: concat, + jst: { + compile: { + options: { + processName: function(filename) { + return filename.replace(/^javascripts\//, '').replace(/\.jst\.ejs$/, ''); + } + }, + files: { + "dist/templates.js": cartodb_files._templates + } + }, + mustache: { + options: { + processName: function(filename) { + return filename.replace(/^javascripts\//, '').replace(/\.jst\.mustache/, ''); + }, + template: function(source) { + var src = source.replace(/\n/g, '\\n').replace(/'/g,"\\'") + return { source: "Mustache.compile('"+ src +"')" } + } + }, + files: { + 'dist/templates_mustache.js': cartodb_files._templates_mustache, + } + } + }, + + jasmine: { + pivotal: { + src: cartodb_files.all.concat(['user_data.js', 'dist/templates_mustache.js', 'dist/templates.js', 'test_init.js']), + options: { + specs: cartodb_files.specs, + helpers: ['http://maps.google.com/maps/api/js?sensor=false&v=3.12'].concat(cartodb_files._spec_helpers) + //'--remote-debugger-port': 9000 + } + } + } + }); + + // Load the plugin that provides the "uglify" task. + //grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-contrib-concat'); + grunt.loadNpmTasks('grunt-contrib-jasmine'); + grunt.loadNpmTasks('grunt-contrib-jst'); + + // Default task(s). + //grunt.registerTask('default', ['uglify']); + grunt.registerTask('test', ['concat', 'jst', 'jasmine']); + grunt.registerTask('default', ['concat', 'jst']); + +}; + diff --git a/lib/assets/files.js b/lib/assets/files.js new file mode 100644 index 0000000000..1f6e831b1b --- /dev/null +++ b/lib/assets/files.js @@ -0,0 +1,215 @@ +var _ = require('underscore'); + +module.exports = files = { + + dashboard: [ + '../../vendor/assets/javascripts/d3.v2.js', + '../../vendor/assets/javascripts/select2.min.js', + '../../vendor/assets/javascripts/moment.js', + '../../vendor/assets/javascripts/jquery-ui/**/*.js', + '../../vendor/assets/javascripts/jquery.fileupload.js', + '../../vendor/assets/javascripts/jquery.fileupload-fp.js', + '../../vendor/assets/javascripts/jquery.fileupload-ui.js', + '../../vendor/assets/javascripts/models.js', + 'javascripts/cartodb/common/dropdown_menu.js', + 'javascripts/cartodb/common/dropdown_basemap.js', + 'javascripts/cartodb/common/forms/string_field.js', + 'javascripts/cartodb/common/forms/widgets.js', + 'javascripts/cartodb/common/import/import_pane.js', + 'javascripts/cartodb/common/import/import_info/import_info.js', + 'javascripts/cartodb/common/**/*.js', + 'javascripts/cartodb/dashboard/**/*.js', + 'javascripts/cartodb/dashboard/dashboard.js', + 'javascripts/cartodb/dashboard/views/**/*.js', + 'javascripts/cartodb/common/views/**/*.js', + 'javascripts/cartodb/common/export_table_dialog.js', + ], + + application: [ + '../../vendor/assets/javascripts/jquery.tipsy.js', + '../../vendor/assets/javascripts/rails.js' + ], + + cdb: [ + '../../vendor/assets/javascripts/cartodb.uncompressed.js', + '../../vendor/assets/javascripts/cartodb.mod.torque.uncompressed.js', + 'javascripts/cartodb/app.js' + ], + + common_data: [ + '../../vendor/assets/javascripts/jquery-ui/**/*.js', + '../../vendor/assets/javascripts/jquery.fileupload.js', + '../../vendor/assets/javascripts/jquery.fileupload-fp.js', + '../../vendor/assets/javascripts/jquery.fileupload-ui.js', + '../../vendor/assets/javascripts/select2.min.js', + '../../vendor/assets/javascripts/models.js', + 'javascripts/cartodb/common/dropdown_menu.js', + 'javascripts/cartodb/common/user_settings_dropdown.js', + 'javascripts/cartodb/common/forms/string_field.js', + 'javascripts/cartodb/common/forms/widgets.js', + 'javascripts/cartodb/common/import/import_pane.js', + 'javascripts/cartodb/common/import/import_info/import_info.js', + 'javascripts/cartodb/common/**/*.js', + 'javascripts/cartodb/common_data/**/*.js', + 'javascripts/cartodb/common_data/common_data.js', + 'javascripts/cartodb/dashboard/views/**/*.js', + 'javascripts/cartodb/common/views/**/*.js' + ], + + keys: [ + '../../vendor/assets/javascripts/ZeroClipboard.js', + '../../vendor/assets/javascripts/models.js', + 'javascripts/cartodb/common/forms/string_field.js', + 'javascripts/cartodb/common/search_form.js', + 'javascripts/cartodb/common/dropdown_menu.js', + 'javascripts/cartodb/common/user_settings_dropdown.js', + 'javascripts/cartodb/keys/**/*.js', + 'javascripts/cartodb/common/view/**/*.js' + ], + + login: [ + '../../vendor/assets/javascripts/modernizr-min.js', + '../../vendor/assets/javascripts/selectivizr-min.js', + 'javascripts/cartodb/app.js', + 'javascripts/cartodb/login/placeholder.js', + 'javascripts/cartodb/login/logi.js' + ], + + models: [ + 'javascripts/cartodb/models/table.js', + 'javascripts/cartodb/models/tabledata.js', + 'javascripts/cartodb/models/sqlview.js', + 'javascripts/cartodb/models/sqlview_api.js', + 'javascripts/cartodb/models/**/*.js' + ], + + organization: [ + '../../vendor/assets/javascripts/models.js', + 'javascripts/cartodb/common/forms/widgets.js', + 'javascripts/cartodb/common/dropdown_menu.js', + 'javascripts/cartodb/common/user_settings_dropdown.js', + 'javascripts/cartodb/common/base_dialog.js', + 'javascripts/cartodb/common/utils.js', + 'javascripts/cartodb/common/global_click.js', + 'javascripts/cartodb/common/views/settings_item.js', + 'javascripts/cartodb/common/views/confirm_dialog.js', + 'javascripts/cartodb/common/views/dialog_base.js', + 'javascripts/cartodb/organization/**/*.js', + 'javascripts/cartodb/organization/view/**/*.js' + ], + + specs: [ + /*'test/lib/jasmine-1.3.1/jasmine.js', + 'test/lib/jasmine-1.3.1/jasmine-html.js',*/ + 'test/spec/cartodb/**/*.js' + ], + + _spec_helpers: [ + 'test/lib/jasmine.jquery.js', + 'test/lib/sinon-1.3.4.js', + 'test/spec/SpecHelper.js', + ], + + table: [ + '../../vendor/assets/javascripts/codemirror.js', + '../../vendor/assets/javascripts/show-hint.js', + '../../vendor/assets/javascripts/anyword-hint.js', + '../../vendor/assets/javascripts/custom-list-hint.js', + '../../vendor/assets/javascripts/custom-list-with-type-hint.js', + '../../vendor/assets/javascripts/select2.min.js', + '../../vendor/assets/javascripts/jquery.faviconNotify.js', + '../../vendor/assets/javascripts/rgbcolor.js', + '../../vendor/assets/javascripts/crossfilter.js', + '../../vendor/assets/javascripts/jquery-ui/**/*.js', + '../../vendor/assets/javascripts/jquery.caret.js', + '../../vendor/assets/javascripts/ZeroClipboard.js', + '../../vendor/assets/javascripts/tag-it.js', + '../../vendor/assets/javascripts/jquery.tipsy.js', + '../../vendor/assets/javascripts/d3.v2.js', + '../../vendor/assets/javascripts/jquery.fileupload.js', + '../../vendor/assets/javascripts/jquery.fileupload-fp.js', + '../../vendor/assets/javascripts/jquery.fileupload-ui.js', + '../../vendor/assets/javascripts/leaflet.draw.js', + '../../vendor/assets/javascripts/moment.js', + 'javascripts/utils/postgres.codemirror.js', + 'javascripts/utils/carto.codemirror.js', + '../../vendor/assets/javascripts/models.js', + 'javascripts/cartodb/common/dropdown_menu.js', + 'javascripts/cartodb/common/forms/string_field.js', + 'javascripts/cartodb/common/forms/widgets.js', + 'javascripts/cartodb/common/import/import_pane.js', + 'javascripts/cartodb/common/import/import_info/import_info.js', + 'javascripts/cartodb/common/**/*.js', + 'javascripts/cartodb/table/right_menu.js', + 'javascripts/cartodb/table/menu_module.js', + 'javascripts/cartodb/table/menu_modules/carto_editor.js', + 'javascripts/cartodb/table/menu_modules/carto_wizard.js', + 'javascripts/cartodb/table/**/*.js', + 'javascripts/cartodb/table/table.js', + 'javascripts/cartodb/table/views/**/*.js', + 'javascripts/cartodb/dashboard/views/**/*.js' + ], + + table_public: [ + '../../vendor/assets/javascripts/codemirror.js', + '../../vendor/assets/javascripts/select2.min.js', + '../../vendor/assets/javascripts/jquery.faviconNotify.js', + '../../vendor/assets/javascripts/rgbcolor.js', + '../../vendor/assets/javascripts/jquery-ui/**/*.js', + '../../vendor/assets/javascripts/jquery.caret.js', + '../../vendor/assets/javascripts/ZeroClipboard.js', + '../../vendor/assets/javascripts/tag-it.js', + '../../vendor/assets/javascripts/jquery.tipsy.js', + 'javascripts/utils/postgres.codemirror.js', + 'javascripts/utils/carto.codemirror.js', + '../../vendor/assets/javascripts/models.js', + 'javascripts/cartodb/common/dropdown_menu.js', + 'javascripts/cartodb/common/forms/string_field.js', + 'javascripts/cartodb/common/forms/widgets.js', + 'javascripts/cartodb/common/import/import_pane.js', + 'javascripts/cartodb/common/import/import_info/import_info.js', + 'javascripts/cartodb/common/**/*.js', + 'javascripts/cartodb/common/export_table_dialog.js', + 'javascripts/cartodb/table/column_type_dropdown.js', + 'javascripts/cartodb/table/editor_small_dialog.js', + 'javascripts/cartodb/table/header_dropdown.js', + 'javascripts/cartodb/table/header_view.js', + 'javascripts/cartodb/table/infowindow.js', + 'javascripts/cartodb/table/row_view.js', + 'javascripts/cartodb/table/header_view.js', + 'javascripts/cartodb/table/tableview.js', + 'javascripts/cartodb/table/mapview.js', + 'javascripts/cartodb/table/views/**/*.js', + 'javascripts/cartodb/table_public/**/*.js', + 'javascripts/cartodb/table_public/table_public.js', + 'javascripts/cartodb/table/views/**/*.js', + 'javascripts/cartodb/dashboard/views/**/*.js', + 'javascripts/cartodb/table_public/views/**/*.js' + ], + + _templates: [ + 'javascripts/cartodb/**/*.jst.ejs' + ], + _templates_mustache: [ + 'javascripts/cartodb/**/*.jst.mustache' + ] + +}; + + +var _all = [ + 'cdb', + 'application', + 'models', + 'dashboard', + 'table', + 'common_data', + 'table_public' +]; +var all = []; +for(var f in _all){ + all = all.concat(files[_all[f]]); +} + +module.exports.all = all; + diff --git a/lib/assets/package.json b/lib/assets/package.json new file mode 100644 index 0000000000..55eb4d5bab --- /dev/null +++ b/lib/assets/package.json @@ -0,0 +1,36 @@ +{ + "name": "cartodb-ui", + "version": "1.0.0", + "description": "CartoDB UI frontend", + "repository": { + "type": "git", + "url": "git://github.com/CartoDB/cartodb.git" + }, + "author": { + "name": "CartoDB", + "url": "http://cartodb.com/", + "email": "wadus@cartodb.com" + }, + "contributors": [], + "licenses": [ + { + "type": "BSD" + } + ], + "devDependencies": { + "uglify-js": "1.3.3", + "aws-sdk": "", + "git-rev": "", + "underscore": "", + "grunt": "~0.4.1", + "grunt-contrib-concat": "", + "grunt-contrib-jasmine": "", + "grunt-casper": "", + "grunt-contrib-jst": "~0.5.1", + "grunt-mustache": "~0.1.6" + }, + "files": [ + "dist" + ], + "main": "cartodb" +} diff --git a/lib/assets/test_init.js b/lib/assets/test_init.js new file mode 100644 index 0000000000..fe221dfca9 --- /dev/null +++ b/lib/assets/test_init.js @@ -0,0 +1,11 @@ + +var old_init = cdb.init; +cdb.init = function() { old_init(); }; +cdb.templates.namespace = 'cartodb/'; + +cdb.config.set({ + sql_api_port: 80, + sql_api_domain: 'cartodb.com', + sql_api_endpoint: '/api/v1/sql' +}); + diff --git a/lib/assets/tools/rails2grunt.py b/lib/assets/tools/rails2grunt.py new file mode 100644 index 0000000000..e04bacd8a8 --- /dev/null +++ b/lib/assets/tools/rails2grunt.py @@ -0,0 +1,33 @@ + +import sys +import os.path + +if (len(sys.argv) != 3): + print "rails2grunt rails_file grunt.json" + sys.exit() + +rails_file = sys.argv[1]; +rails_path = os.path.abspath(rails_file) +name = os.path.basename(rails_file).split('.')[0] + +def normalize(f): + return f \ + .replace('../../../lib/assets/javascripts/', 'javascripts/') \ + .replace('../../../vendor/assets/javascripts/', 'javascripts/vendor/') + +lines = [] +for x in open(rails_file): + tk = x.split(' ') + if tk[0] == '//=': + f = tk[2][:-1] + if tk[1] == 'require': + if '/' not in f: + lines.append("'vendor/assets/javascripts/" + f + ".js',") + else: + lines.append("'%s'," % (normalize(f) + ".js")) + elif tk[1] == 'require_tree': + lines.append("'%s'," % (normalize(f) + "/**/*.js")) + +print "%s: [\n%s\n]" % (name, '\n'.join(lines)[:-1]) + + diff --git a/lib/assets/user_data.js b/lib/assets/user_data.js new file mode 100644 index 0000000000..f214e94a93 --- /dev/null +++ b/lib/assets/user_data.js @@ -0,0 +1,6 @@ + +window.user_data = { account_type: '', remaining_byte_quota: 0 } +window.upgrade_url = '' +window.config = {} +window.account_host = '' +window.username = ''