├── test ├── dummy │ ├── log │ │ └── .gitkeep │ ├── app │ │ ├── mailers │ │ │ └── .gitkeep │ │ ├── models │ │ │ └── .gitkeep │ │ ├── helpers │ │ │ └── application_helper.rb │ │ ├── controllers │ │ │ └── application_controller.rb │ │ ├── views │ │ │ └── layouts │ │ │ │ └── application.html.erb │ │ └── assets │ │ │ ├── stylesheets │ │ │ └── application.css │ │ │ └── javascripts │ │ │ └── application.js │ ├── lib │ │ └── assets │ │ │ └── .gitkeep │ ├── public │ │ ├── favicon.ico │ │ ├── 500.html │ │ ├── 422.html │ │ └── 404.html │ ├── config │ │ ├── routes.rb │ │ ├── environment.rb │ │ ├── locales │ │ │ └── en.yml │ │ ├── initializers │ │ │ ├── mime_types.rb │ │ │ ├── backtrace_silencers.rb │ │ │ ├── session_store.rb │ │ │ ├── secret_token.rb │ │ │ ├── wrap_parameters.rb │ │ │ └── inflections.rb │ │ ├── boot.rb │ │ ├── database.yml │ │ ├── environments │ │ │ ├── development.rb │ │ │ ├── test.rb │ │ │ └── production.rb │ │ └── application.rb │ ├── config.ru │ ├── Rakefile │ ├── script │ │ └── rails │ └── README.rdoc ├── angularjs_scaffold_test.rb ├── integration │ └── navigation_test.rb └── test_helper.rb ├── app ├── assets │ ├── images │ │ └── angularjs_scaffold │ │ │ └── .gitkeep │ ├── stylesheets │ │ └── angularjs_scaffold │ │ │ └── application.css │ └── javascripts │ │ └── angularjs_scaffold │ │ └── application.js ├── helpers │ └── angularjs_scaffold │ │ └── application_helper.rb ├── controllers │ └── angularjs_scaffold │ │ └── application_controller.rb └── views │ └── layouts │ └── angularjs_scaffold │ └── application.html.erb ├── config └── routes.rb ├── lib ├── angularjs_scaffold │ ├── angularjs_scaffold │ │ ├── templates │ │ │ └── stylesheet.css │ │ ├── USAGE │ │ └── angularjs_scaffold_generator.rb │ ├── version.rb │ └── engine.rb ├── angularjs_scaffold.rb ├── tasks │ └── angularjs_scaffold_tasks.rake └── generators │ └── angularjs │ ├── install │ ├── templates │ │ ├── favicon.ico │ │ ├── AngularJS-medium.png │ │ ├── welcome_controller.js.coffee │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.ttf │ │ │ └── fontawesome-webfont.woff │ │ ├── bootstrap │ │ │ ├── img │ │ │ │ ├── glyphicons-halflings.png │ │ │ │ └── glyphicons-halflings-white.png │ │ │ ├── css │ │ │ │ └── bootstrap-responsive.min.css │ │ │ └── js │ │ │ │ └── bootstrap.min.js │ │ ├── index_welcome.html.erb │ │ ├── csrf_controller.js.coffee │ │ ├── welcome_controller.js │ │ ├── routes.coffee.erb │ │ ├── csrf_controller.js │ │ ├── application.css │ │ ├── routes.js.erb │ │ ├── application.js │ │ ├── angularjs │ │ │ ├── angular-cookies-1.0.6.min.js │ │ │ ├── angular-loader-1.0.6.min.js │ │ │ ├── angular-bootstrap-1.0.6.min.js │ │ │ ├── angular-resource-1.0.6.min.js │ │ │ ├── angular-sanitize-1.0.6.min.js │ │ │ └── angular-bootstrap-prettify-1.0.6.min.js │ │ ├── application.html.erb │ │ ├── underscore │ │ │ └── underscore-min.js │ │ └── fontawesome │ │ │ └── font-awesome.css.erb │ ├── USAGE │ └── install_generator.rb │ └── scaffold │ ├── templates │ ├── plural_model_name.js.coffee │ ├── plural_model_name.js │ ├── show.html.erb │ ├── index.html.erb │ ├── edit.html.erb │ ├── new.html.erb │ ├── plural_model_name_controller.js.coffee │ └── plural_model_name_controller.js │ └── scaffold_generator.rb ├── .gitignore ├── script └── rails ├── Gemfile ├── angularjs_scaffold.gemspec ├── Rakefile ├── MIT-LICENSE ├── README.md └── Gemfile.lock /test/dummy/log/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/dummy/app/mailers/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/dummy/app/models/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/dummy/lib/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/dummy/public/favicon.ico: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/assets/images/angularjs_scaffold/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /config/routes.rb: -------------------------------------------------------------------------------- 1 | AngularjsScaffold::Engine.routes.draw do 2 | end 3 | -------------------------------------------------------------------------------- /test/dummy/app/helpers/application_helper.rb: -------------------------------------------------------------------------------- 1 | module ApplicationHelper 2 | end 3 | -------------------------------------------------------------------------------- /lib/angularjs_scaffold/angularjs_scaffold/templates/stylesheet.css: -------------------------------------------------------------------------------- 1 | body {color: red;} 2 | -------------------------------------------------------------------------------- /lib/angularjs_scaffold/version.rb: -------------------------------------------------------------------------------- 1 | module AngularjsScaffold 2 | VERSION = "0.0.23" 3 | end 4 | -------------------------------------------------------------------------------- /lib/angularjs_scaffold.rb: -------------------------------------------------------------------------------- 1 | require "angularjs_scaffold/engine" 2 | 3 | module AngularjsScaffold 4 | end 5 | -------------------------------------------------------------------------------- /app/helpers/angularjs_scaffold/application_helper.rb: -------------------------------------------------------------------------------- 1 | module AngularjsScaffold 2 | module ApplicationHelper 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /test/dummy/config/routes.rb: -------------------------------------------------------------------------------- 1 | Rails.application.routes.draw do 2 | 3 | mount AngularjsScaffold::Engine => "/angularjs_scaffold" 4 | end 5 | -------------------------------------------------------------------------------- /test/dummy/app/controllers/application_controller.rb: -------------------------------------------------------------------------------- 1 | class ApplicationController < ActionController::Base 2 | protect_from_forgery 3 | end 4 | -------------------------------------------------------------------------------- /lib/tasks/angularjs_scaffold_tasks.rake: -------------------------------------------------------------------------------- 1 | # desc "Explaining what the task does" 2 | # task :angularjs_scaffold do 3 | # # Task goes here 4 | # end 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .bundle/ 2 | log/*.log 3 | pkg/ 4 | test/dummy/db/*.sqlite3 5 | test/dummy/log/*.log 6 | test/dummy/tmp/ 7 | test/dummy/.sass-cache 8 | .DS_Store 9 | -------------------------------------------------------------------------------- /lib/angularjs_scaffold/engine.rb: -------------------------------------------------------------------------------- 1 | module AngularjsScaffold 2 | class Engine < ::Rails::Engine 3 | isolate_namespace AngularjsScaffold 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /app/controllers/angularjs_scaffold/application_controller.rb: -------------------------------------------------------------------------------- 1 | module AngularjsScaffold 2 | class ApplicationController < ActionController::Base 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patcito/angularjs_scaffold/HEAD/lib/generators/angularjs/install/templates/favicon.ico -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/AngularJS-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patcito/angularjs_scaffold/HEAD/lib/generators/angularjs/install/templates/AngularJS-medium.png -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/welcome_controller.js.coffee: -------------------------------------------------------------------------------- 1 | root = global ? window 2 | 3 | thisApp = root.thisApp 4 | 5 | thisApp.controller "WelcomeCtrl", -> 6 | 7 | 8 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patcito/angularjs_scaffold/HEAD/lib/generators/angularjs/install/templates/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /test/dummy/config.ru: -------------------------------------------------------------------------------- 1 | # This file is used by Rack-based servers to start the application. 2 | 3 | require ::File.expand_path('../config/environment', __FILE__) 4 | run Dummy::Application 5 | -------------------------------------------------------------------------------- /test/dummy/config/environment.rb: -------------------------------------------------------------------------------- 1 | # Load the rails application 2 | require File.expand_path('../application', __FILE__) 3 | 4 | # Initialize the rails application 5 | Dummy::Application.initialize! 6 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patcito/angularjs_scaffold/HEAD/lib/generators/angularjs/install/templates/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patcito/angularjs_scaffold/HEAD/lib/generators/angularjs/install/templates/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patcito/angularjs_scaffold/HEAD/lib/generators/angularjs/install/templates/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /test/angularjs_scaffold_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class AngularjsScaffoldTest < ActiveSupport::TestCase 4 | test "truth" do 5 | assert_kind_of Module, AngularjsScaffold 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/USAGE: -------------------------------------------------------------------------------- 1 | Description: 2 | Explain the generator 3 | 4 | Example: 5 | rails generate angularjs_scaffold Thing 6 | 7 | This will create: 8 | what/will/it/create 9 | -------------------------------------------------------------------------------- /lib/angularjs_scaffold/angularjs_scaffold/USAGE: -------------------------------------------------------------------------------- 1 | Description: 2 | Explain the generator 3 | 4 | Example: 5 | rails generate angularjs_scaffold Thing 6 | 7 | This will create: 8 | what/will/it/create 9 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/bootstrap/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patcito/angularjs_scaffold/HEAD/lib/generators/angularjs/install/templates/bootstrap/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/bootstrap/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patcito/angularjs_scaffold/HEAD/lib/generators/angularjs/install/templates/bootstrap/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /test/integration/navigation_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class NavigationTest < ActionDispatch::IntegrationTest 4 | fixtures :all 5 | 6 | # test "the truth" do 7 | # assert true 8 | # end 9 | end 10 | 11 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/index_welcome.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

AngularJS, CoffeeScript and Rails!

3 |

4 | 5 |

6 |
7 | -------------------------------------------------------------------------------- /test/dummy/config/locales/en.yml: -------------------------------------------------------------------------------- 1 | # Sample localization file for English. Add more files in this directory for other locales. 2 | # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. 3 | 4 | en: 5 | hello: "Hello world" 6 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/mime_types.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new mime types for use in respond_to blocks: 4 | # Mime::Type.register "text/richtext", :rtf 5 | # Mime::Type.register_alias "text/html", :iphone 6 | -------------------------------------------------------------------------------- /test/dummy/config/boot.rb: -------------------------------------------------------------------------------- 1 | require 'rubygems' 2 | gemfile = File.expand_path('../../../../Gemfile', __FILE__) 3 | 4 | if File.exist?(gemfile) 5 | ENV['BUNDLE_GEMFILE'] = gemfile 6 | require 'bundler' 7 | Bundler.setup 8 | end 9 | 10 | $:.unshift File.expand_path('../../../../lib', __FILE__) -------------------------------------------------------------------------------- /test/dummy/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # Add your own tasks in files placed in lib/tasks ending in .rake, 3 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. 4 | 5 | require File.expand_path('../config/application', __FILE__) 6 | 7 | Dummy::Application.load_tasks 8 | -------------------------------------------------------------------------------- /test/dummy/script/rails: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. 3 | 4 | APP_PATH = File.expand_path('../../config/application', __FILE__) 5 | require File.expand_path('../../config/boot', __FILE__) 6 | require 'rails/commands' 7 | -------------------------------------------------------------------------------- /test/dummy/app/views/layouts/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Dummy 5 | <%= stylesheet_link_tag "application", media: "all" %> 6 | <%= javascript_include_tag "application" %> 7 | <%= csrf_meta_tags %> 8 | 9 | 10 | 11 | <%= yield %> 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/csrf_controller.js.coffee: -------------------------------------------------------------------------------- 1 | root = global ? window 2 | angular = root.angular 3 | 4 | CsrfCtrl = ($cookieStore) -> 5 | $cookieStore.put "XSRF-TOKEN", angular.element(document.getElementById("csrf")).attr("data-csrf") 6 | 7 | CsrfCtrl.$inject = ['$cookieStore']; 8 | 9 | # exports 10 | root.CsrfCtrl = CsrfCtrl -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/welcome_controller.js: -------------------------------------------------------------------------------- 1 | // Generated by CoffeeScript 1.4.0 2 | (function() { 3 | var root, thisApp; 4 | 5 | root = typeof global !== "undefined" && global !== null ? global : window; 6 | 7 | thisApp = root.thisApp; 8 | 9 | thisApp.controller("WelcomeCtrl", function() {}); 10 | 11 | }).call(this); 12 | -------------------------------------------------------------------------------- /script/rails: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. 3 | 4 | ENGINE_ROOT = File.expand_path('../..', __FILE__) 5 | ENGINE_PATH = File.expand_path('../../lib/angularjs_scaffold/engine', __FILE__) 6 | 7 | require 'rails/all' 8 | require 'rails/engine/commands' 9 | -------------------------------------------------------------------------------- /lib/angularjs_scaffold/angularjs_scaffold/angularjs_scaffold_generator.rb: -------------------------------------------------------------------------------- 1 | class AngularjsScaffoldGenerator < Rails::Generators::NamedBase 2 | source_root File.expand_path('../templates', __FILE__) 3 | argument :file_name, type: :string, default: "angularjs_scaffold" 4 | def init_angularjs 5 | copy_file "stylesheet.css", "app/assets/stylesheets/#{file_name}.css" 6 | end 7 | 8 | end 9 | -------------------------------------------------------------------------------- /app/views/layouts/angularjs_scaffold/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | AngularjsScaffold 5 | <%= stylesheet_link_tag "angularjs_scaffold/application", media: "all" %> 6 | <%= javascript_include_tag "angularjs_scaffold/application" %> 7 | <%= csrf_meta_tags %> 8 | 9 | 10 | 11 | <%= yield %> 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/backtrace_silencers.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. 4 | # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } 5 | 6 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. 7 | # Rails.backtrace_cleaner.remove_silencers! 8 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/session_store.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | Dummy::Application.config.session_store :cookie_store, key: '_dummy_session' 4 | 5 | # Use the database for sessions instead of the cookie-based default, 6 | # which shouldn't be used to store highly confidential information 7 | # (create the session table with "rails generate session_migration") 8 | # Dummy::Application.config.session_store :active_record_store 9 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/routes.coffee.erb: -------------------------------------------------------------------------------- 1 | root = global ? window 2 | angular = root.angular 3 | 4 | thisApp = angular.module("Client", ['ngCookies']).config(['$routeProvider', '$locationProvider' , 5 | ($routeProvider, $locationProvider) -> 6 | #$locationProvider.hashPrefix(''); 7 | $locationProvider.html5Mode true 8 | $routeProvider.when("/", 9 | controller: "WelcomeCtrl" 10 | templateUrl: "<%= asset_path('welcome/index.html') %>" 11 | ).otherwise redirectTo: "/" 12 | ]) 13 | 14 | root.thisApp = thisApp 15 | 16 | -------------------------------------------------------------------------------- /test/test_helper.rb: -------------------------------------------------------------------------------- 1 | # Configure Rails Environment 2 | ENV["RAILS_ENV"] = "test" 3 | 4 | require File.expand_path("../dummy/config/environment.rb", __FILE__) 5 | require "rails/test_help" 6 | 7 | Rails.backtrace_cleaner.remove_silencers! 8 | 9 | # Load support files 10 | Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } 11 | 12 | # Load fixtures from the engine 13 | if ActiveSupport::TestCase.method_defined?(:fixture_path=) 14 | ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__) 15 | end 16 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/secret_token.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Your secret key for verifying the integrity of signed cookies. 4 | # If you change this key, all old signed cookies will become invalid! 5 | # Make sure the secret is at least 30 characters and all random, 6 | # no regular words or you'll be exposed to dictionary attacks. 7 | Dummy::Application.config.secret_token = '31bf8ac99e282335e8df5c5cc93c64e7125743153c19dd38314d57aab7fa2a70d7b7adb85832bce835ed9b257b40a47b1c388e3730c6446c2f640f5d0d52c949' 8 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/csrf_controller.js: -------------------------------------------------------------------------------- 1 | // Generated by CoffeeScript 1.4.0 2 | 3 | (function() { 4 | var CsrfCtrl, angular, root; 5 | 6 | root = typeof global !== "undefined" && global !== null ? global : window; 7 | 8 | angular = root.angular; 9 | 10 | CsrfCtrl = function($cookieStore) { 11 | return $cookieStore.put("XSRF-TOKEN", angular.element(document.getElementById("csrf")).attr("data-csrf")); 12 | }; 13 | 14 | CsrfCtrl.$inject = ['$cookieStore']; 15 | 16 | root.CsrfCtrl = CsrfCtrl; 17 | 18 | }).call(this); 19 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/wrap_parameters.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | # 3 | # This file contains settings for ActionController::ParamsWrapper which 4 | # is enabled by default. 5 | 6 | # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. 7 | ActiveSupport.on_load(:action_controller) do 8 | wrap_parameters format: [:json] 9 | end 10 | 11 | # Disable root element in JSON by default. 12 | ActiveSupport.on_load(:active_record) do 13 | self.include_root_in_json = false 14 | end 15 | -------------------------------------------------------------------------------- /lib/generators/angularjs/scaffold/templates/plural_model_name.js.coffee: -------------------------------------------------------------------------------- 1 | root = global ? window 2 | 3 | angular.module("<%= @plural_model_name %>", ["ngResource"]).factory "<%= @model_name %>", ['$resource', ($resource) -> 4 | <%= "#{@model_name}" %> = $resource("/<%= @plural_model_name %>/:id", 5 | id: "@id" 6 | , 7 | update: 8 | method: "PUT" 9 | 10 | destroy: 11 | method: "DELETE" 12 | ) 13 | <%= "#{@model_name}" %>::destroy = (cb) -> 14 | <%= "#{@model_name}" %>.remove 15 | id: @id 16 | , cb 17 | 18 | <%= "#{@model_name}" %> 19 | ] 20 | root.angular = angular 21 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/inflections.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new inflection rules using the following format 4 | # (all these examples are active by default): 5 | # ActiveSupport::Inflector.inflections do |inflect| 6 | # inflect.plural /^(ox)$/i, '\1en' 7 | # inflect.singular /^(ox)en/i, '\1' 8 | # inflect.irregular 'person', 'people' 9 | # inflect.uncountable %w( fish sheep ) 10 | # end 11 | # 12 | # These inflection rules are supported but not enabled by default: 13 | # ActiveSupport::Inflector.inflections do |inflect| 14 | # inflect.acronym 'RESTful' 15 | # end 16 | -------------------------------------------------------------------------------- /test/dummy/app/assets/stylesheets/application.css: -------------------------------------------------------------------------------- 1 | /* 2 | * This is a manifest file that'll be compiled into application.css, which will include all the files 3 | * listed below. 4 | * 5 | * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, 6 | * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. 7 | * 8 | * You're free to add application-wide styles to this file and they'll appear at the top of the 9 | * compiled file, but it's generally better to create a new file per style scope. 10 | * 11 | *= require_self 12 | *= require_tree . 13 | */ 14 | -------------------------------------------------------------------------------- /app/assets/stylesheets/angularjs_scaffold/application.css: -------------------------------------------------------------------------------- 1 | /* 2 | * This is a manifest file that'll be compiled into application.css, which will include all the files 3 | * listed below. 4 | * 5 | * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, 6 | * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. 7 | * 8 | * You're free to add application-wide styles to this file and they'll appear at the top of the 9 | * compiled file, but it's generally better to create a new file per style scope. 10 | * 11 | *= require_self 12 | *= require_tree . 13 | */ 14 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/application.css: -------------------------------------------------------------------------------- 1 | /* 2 | * This is a manifest file that'll be compiled into application.css, which will include all the files 3 | * listed below. 4 | * 5 | * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, 6 | * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. 7 | * 8 | * You're free to add application-wide styles to this file and they'll appear at the top of the 9 | * compiled file, but it's generally better to create a new file per style scope. 10 | * 11 | *= require_self 12 | *= require_tree . 13 | */ 14 | -------------------------------------------------------------------------------- /lib/generators/angularjs/scaffold/templates/plural_model_name.js: -------------------------------------------------------------------------------- 1 | angular.module("<%= @plural_model_name %>", ["ngResource"]). 2 | factory("<%= @model_name %>", ['$resource', function($resource) { 3 | var <%= @model_name %>; 4 | <%= @model_name %> = $resource("/<%= @plural_model_name %>/:id", 5 | { id: "@id" }, 6 | { 7 | update: { method: "PUT" }, 8 | destroy: { method: "DELETE" } 9 | }); 10 | 11 | <%= @model_name %>.prototype.destroy = function(cb) { 12 | return <%= @model_name %>.remove({ 13 | id: this.id 14 | }, cb); 15 | }; 16 | 17 | return <%= @model_name %>; 18 | } 19 | ]); 20 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "http://rubygems.org" 2 | 3 | # Declare your gem's dependencies in angularjs_scaffold.gemspec. 4 | # Bundler will treat runtime dependencies like base dependencies, and 5 | # development dependencies will be added by default to the :development group. 6 | gemspec 7 | 8 | # jquery-rails is used by the dummy application 9 | gem "jquery-rails" 10 | 11 | # Declare any dependencies that are still in development here instead of in 12 | # your gemspec. These might include edge Rails or gems from your path or 13 | # Git. Remember to move these dependencies to your gemspec before releasing 14 | # your gem to rubygems.org. 15 | 16 | # To use debugger 17 | # gem 'debugger' 18 | -------------------------------------------------------------------------------- /test/dummy/config/database.yml: -------------------------------------------------------------------------------- 1 | # SQLite version 3.x 2 | # gem install sqlite3 3 | # 4 | # Ensure the SQLite 3 gem is defined in your Gemfile 5 | # gem 'sqlite3' 6 | development: 7 | adapter: sqlite3 8 | database: db/development.sqlite3 9 | pool: 5 10 | timeout: 5000 11 | 12 | # Warning: The database defined as "test" will be erased and 13 | # re-generated from your development database when you run "rake". 14 | # Do not set this db to the same as development or production. 15 | test: 16 | adapter: sqlite3 17 | database: db/test.sqlite3 18 | pool: 5 19 | timeout: 5000 20 | 21 | production: 22 | adapter: sqlite3 23 | database: db/production.sqlite3 24 | pool: 5 25 | timeout: 5000 26 | -------------------------------------------------------------------------------- /lib/generators/angularjs/scaffold/templates/show.html.erb: -------------------------------------------------------------------------------- 1 |

<%= @model_name.titleize %>

2 | 3 | <%- columns.each do |column| -%> 4 |

5 | <%= column.name.humanize %>
6 | {{<%=@resource_name%>.<%= column.name %>}} 7 |

8 | 9 | <%- end -%> 10 |
11 | 13 | Edit <%= @model_name.titleize %> 14 | 15 | 18 | 19 | Back to <%= @plural_model_name%> 20 | 21 |
22 | 23 | -------------------------------------------------------------------------------- /test/dummy/app/assets/javascripts/application.js: -------------------------------------------------------------------------------- 1 | // This is a manifest file that'll be compiled into application.js, which will include all the files 2 | // listed below. 3 | // 4 | // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, 5 | // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. 6 | // 7 | // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the 8 | // the compiled file. 9 | // 10 | // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD 11 | // GO AFTER THE REQUIRES BELOW. 12 | // 13 | //= require jquery 14 | //= require jquery_ujs 15 | //= require_tree . 16 | -------------------------------------------------------------------------------- /app/assets/javascripts/angularjs_scaffold/application.js: -------------------------------------------------------------------------------- 1 | // This is a manifest file that'll be compiled into application.js, which will include all the files 2 | // listed below. 3 | // 4 | // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, 5 | // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. 6 | // 7 | // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the 8 | // the compiled file. 9 | // 10 | // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD 11 | // GO AFTER THE REQUIRES BELOW. 12 | // 13 | //= require jquery 14 | //= require jquery_ujs 15 | //= require_tree . 16 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/routes.js.erb: -------------------------------------------------------------------------------- 1 | // Generated by CoffeeScript 1.4.0 2 | (function() { 3 | var angular, root, thisApp; 4 | 5 | root = typeof global !== "undefined" && global !== null ? global : window; 6 | 7 | angular = root.angular; 8 | 9 | thisApp = angular.module("Client", ['ngCookies']).config([ 10 | '$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) { 11 | $locationProvider.html5Mode(true); 12 | return $routeProvider.when("/", { 13 | controller: "WelcomeCtrl", 14 | templateUrl: "<%= asset_path('welcome/index.html') %>" 15 | }).otherwise({ 16 | redirectTo: "/" 17 | }); 18 | } 19 | ]); 20 | 21 | root.thisApp = thisApp; 22 | 23 | }).call(this); 24 | -------------------------------------------------------------------------------- /test/dummy/public/500.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | We're sorry, but something went wrong (500) 5 | 17 | 18 | 19 | 20 | 21 |
22 |

We're sorry, but something went wrong.

23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/application.js: -------------------------------------------------------------------------------- 1 | // This is a manifest file that'll be compiled into application.js, which will include all the files 2 | // listed below. 3 | // 4 | // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, 5 | // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. 6 | // 7 | // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the 8 | // the compiled file. 9 | // 10 | // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD 11 | // GO AFTER THE REQUIRES BELOW. 12 | // 13 | //= require jquery 14 | //= require jquery_ujs 15 | //= require_tree ./underscore/ 16 | //= require_tree ./angularjs/ 17 | 18 | -------------------------------------------------------------------------------- /test/dummy/public/422.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The change you wanted was rejected (422) 5 | 17 | 18 | 19 | 20 | 21 |
22 |

The change you wanted was rejected.

23 |

Maybe you tried to change something you didn't have access to.

24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /test/dummy/public/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The page you were looking for doesn't exist (404) 5 | 17 | 18 | 19 | 20 | 21 |
22 |

The page you were looking for doesn't exist.

23 |

You may have mistyped the address or the page may have moved.

24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/angularjs/angular-cookies-1.0.6.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.0.6 3 | (c) 2010-2012 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(m,f,l){'use strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(d,c){var b={},g={},h,i=!1,j=f.copy,k=f.isUndefined;c.addPollFn(function(){var a=c.cookies();h!=a&&(h=a,j(a,g),j(a,b),i&&d.$apply())})();i=!0;d.$watch(function(){var a,e,d;for(a in g)k(b[a])&&c.cookies(a,l);for(a in b)e=b[a],f.isString(e)?e!==g[a]&&(c.cookies(a,e),d=!0):f.isDefined(g[a])?b[a]=g[a]:delete b[a];if(d)for(a in e=c.cookies(),b)b[a]!==e[a]&&(k(e[a])?delete b[a]:b[a]=e[a])});return b}]).factory("$cookieStore", 7 | ["$cookies",function(d){return{get:function(c){return f.fromJson(d[c])},put:function(c,b){d[c]=f.toJson(b)},remove:function(c){delete d[c]}}}])})(window,window.angular); 8 | -------------------------------------------------------------------------------- /angularjs_scaffold.gemspec: -------------------------------------------------------------------------------- 1 | $:.push File.expand_path("../lib", __FILE__) 2 | 3 | # Maintain your gem's version: 4 | require "angularjs_scaffold/version" 5 | 6 | # Describe your gem and declare its dependencies: 7 | Gem::Specification.new do |s| 8 | s.name = "angularjs_scaffold" 9 | s.version = AngularjsScaffold::VERSION 10 | s.authors = ["Patrick Aljord", "Ken Burgett"] 11 | s.email = ["patcito@gmail.com"] 12 | s.homepage = "http://ricodigo.com" 13 | s.summary = "Angularjs scaffolding." 14 | s.description = "A rails plugin for scaffolding views using Angular.js, Twitter bootstrap and font awesome." 15 | 16 | s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.md"] 17 | s.test_files = Dir["test/**/*"] 18 | 19 | s.add_dependency "rails", ">= 3.2.6" 20 | # s.add_dependency "jquery-rails" 21 | 22 | s.add_development_dependency "sqlite3" 23 | end 24 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/angularjs/angular-loader-1.0.6.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.0.6 3 | (c) 2010-2012 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(i){'use strict';function d(c,b,e){return c[b]||(c[b]=e())}return d(d(i,"angular",Object),"module",function(){var c={};return function(b,e,f){e&&c.hasOwnProperty(b)&&(c[b]=null);return d(c,b,function(){function a(a,b,d){return function(){c[d||"push"]([a,b,arguments]);return g}}if(!e)throw Error("No module: "+b);var c=[],d=[],h=a("$injector","invoke"),g={_invokeQueue:c,_runBlocks:d,requires:e,name:b,provider:a("$provide","provider"),factory:a("$provide","factory"),service:a("$provide","service"), 7 | value:a("$provide","value"),constant:a("$provide","constant","unshift"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:h,run:function(a){d.push(a);return this}};f&&h(f);return g})}})})(window); 8 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | begin 3 | require 'bundler/setup' 4 | rescue LoadError 5 | puts 'You must `gem install bundler` and `bundle install` to run rake tasks' 6 | end 7 | begin 8 | require 'rdoc/task' 9 | rescue LoadError 10 | require 'rdoc/rdoc' 11 | require 'rake/rdoctask' 12 | RDoc::Task = Rake::RDocTask 13 | end 14 | 15 | RDoc::Task.new(:rdoc) do |rdoc| 16 | rdoc.rdoc_dir = 'rdoc' 17 | rdoc.title = 'AngularjsScaffold' 18 | rdoc.options << '--line-numbers' 19 | rdoc.rdoc_files.include('README.rdoc') 20 | rdoc.rdoc_files.include('lib/**/*.rb') 21 | end 22 | 23 | APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__) 24 | load 'rails/tasks/engine.rake' 25 | 26 | 27 | 28 | Bundler::GemHelper.install_tasks 29 | 30 | require 'rake/testtask' 31 | 32 | Rake::TestTask.new(:test) do |t| 33 | t.libs << 'lib' 34 | t.libs << 'test' 35 | t.pattern = 'test/**/*_test.rb' 36 | t.verbose = false 37 | end 38 | 39 | 40 | task :default => :test 41 | -------------------------------------------------------------------------------- /MIT-LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2012 Patrick Aljord patcito@gmail.com 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## AngularjsScaffold + CoffeeScript 2 | 3 | A rails plugin for scaffolding views using Angular.js, Twitter bootstrap 4 | and font awesome 5 | 6 | This project uses MIT-LICENSE. 7 | 8 | First install the gem or add it to your Gemfile: 9 | 10 | $ gem install angularjs_scaffold 11 | 12 | Second install it, this will add angularjs, bootstrap and fontawesome (there's an option to only install AngularJS) 13 | 14 | $ rails g angularjs:install # adds angular.js and a dummy welcome JS controller 15 | 16 | options: 17 | 18 | --layout-type=fixed [fluid] 19 | --no-jquery 20 | --no-bootstrap 21 | --language=coffeescript [javascript] NOTE: this setting will be set for the entire rails app 22 | and will affect all subsequent 'rails generate angularjs:scaffold <>' commands 23 | 24 | Run your usual scaffold command: 25 | 26 | $ rails g scaffold Post title:string body:string 27 | $ rake db:migrate 28 | 29 | Now run the angularjs:scaffold command and it will rewrite everything the AngularJS way: 30 | 31 | $ rails g angularjs:scaffold Posts # adds everything needed using AngularJS 32 | 33 | Enjoy! 34 | -------------------------------------------------------------------------------- /lib/generators/angularjs/scaffold/templates/index.html.erb: -------------------------------------------------------------------------------- 1 |

<%= @controller %>

2 | 3 | 4 | 5 | <%- columns.each do |column| -%> 6 | 7 | <%- end -%> 8 | 9 | 10 | 11 | <%- @columns = columns -%> 12 | <%- tag_column = @columns.shift -%> 13 | 14 | 15 | 20 | <%- @columns.each do |column| -%> 21 | 24 | <%- end -%> 25 | 34 | 35 | 36 |
<%= column.name.humanize %>Actions
16 | 17 | {{<%= "#{@resource_name}.#{tag_column.name}"%>}} 18 | 19 | 22 | {{<%= @resource_name%>.<%= column.name %>}} 23 | 26 | 28 | Edit 29 | 30 | 33 |
37 | 38 |

39 | 40 | New 41 | 42 |

43 | -------------------------------------------------------------------------------- /test/dummy/config/environments/development.rb: -------------------------------------------------------------------------------- 1 | Dummy::Application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb 3 | 4 | # In the development environment your application's code is reloaded on 5 | # every request. This slows down response time but is perfect for development 6 | # since you don't have to restart the web server when you make code changes. 7 | config.cache_classes = false 8 | 9 | # Log error messages when you accidentally call methods on nil. 10 | config.whiny_nils = true 11 | 12 | # Show full error reports and disable caching 13 | config.consider_all_requests_local = true 14 | config.action_controller.perform_caching = false 15 | 16 | # Don't care if the mailer can't send 17 | config.action_mailer.raise_delivery_errors = false 18 | 19 | # Print deprecation notices to the Rails logger 20 | config.active_support.deprecation = :log 21 | 22 | # Only use best-standards-support built into browsers 23 | config.action_dispatch.best_standards_support = :builtin 24 | 25 | # Raise exception on mass assignment protection for Active Record models 26 | config.active_record.mass_assignment_sanitizer = :strict 27 | 28 | # Log the query plan for queries taking more than this (works 29 | # with SQLite, MySQL, and PostgreSQL) 30 | config.active_record.auto_explain_threshold_in_seconds = 0.5 31 | 32 | # Do not compress assets 33 | config.assets.compress = false 34 | 35 | # Expands the lines which load the assets 36 | config.assets.debug = true 37 | end 38 | -------------------------------------------------------------------------------- /test/dummy/config/environments/test.rb: -------------------------------------------------------------------------------- 1 | Dummy::Application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb 3 | 4 | # The test environment is used exclusively to run your application's 5 | # test suite. You never need to work with it otherwise. Remember that 6 | # your test database is "scratch space" for the test suite and is wiped 7 | # and recreated between test runs. Don't rely on the data there! 8 | config.cache_classes = true 9 | 10 | # Configure static asset server for tests with Cache-Control for performance 11 | config.serve_static_assets = true 12 | config.static_cache_control = "public, max-age=3600" 13 | 14 | # Log error messages when you accidentally call methods on nil 15 | config.whiny_nils = true 16 | 17 | # Show full error reports and disable caching 18 | config.consider_all_requests_local = true 19 | config.action_controller.perform_caching = false 20 | 21 | # Raise exceptions instead of rendering exception templates 22 | config.action_dispatch.show_exceptions = false 23 | 24 | # Disable request forgery protection in test environment 25 | config.action_controller.allow_forgery_protection = false 26 | 27 | # Tell Action Mailer not to deliver emails to the real world. 28 | # The :test delivery method accumulates sent emails in the 29 | # ActionMailer::Base.deliveries array. 30 | config.action_mailer.delivery_method = :test 31 | 32 | # Raise exception on mass assignment protection for Active Record models 33 | config.active_record.mass_assignment_sanitizer = :strict 34 | 35 | # Print deprecation notices to the stderr 36 | config.active_support.deprecation = :stderr 37 | end 38 | -------------------------------------------------------------------------------- /lib/generators/angularjs/scaffold/templates/edit.html.erb: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | Edit <%= @model_name.titleize %> 5 | 6 | <%- columns.each do |column| -%> 7 |
8 | 11 |
12 | <%- if ['description', 'body'].include? column.name -%> 13 | 17 | <%- else -%> 18 | 23 | <%- end -%> 24 | 26 | Required 27 | 28 |
29 |
30 | <%- end -%> 31 |
32 | 36 | 41 | 42 | Back to <%= @plural_model_name%> 43 | 44 |
45 |
46 |
47 | 48 | -------------------------------------------------------------------------------- /lib/generators/angularjs/scaffold/templates/new.html.erb: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | New <%= @model_name.titleize %> 5 | 6 | <%- columns.each do |column| -%> 7 |
8 | 11 |
12 | <%- if ['description', 'body'].include? column.name -%> 13 | 17 | <%- else -%> 18 | 23 | <%- end -%> 24 | 26 | Required 27 | 28 |
29 |
30 | <%- end -%> 31 |
32 | 36 | 41 | Back to <%= @plural_model_name%> 42 |
43 |
44 |
45 | 46 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/angularjs/angular-bootstrap-1.0.6.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.0.6 3 | (c) 2010-2012 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(n,j){'use strict';j.module("bootstrap",[]).directive({dropdownToggle:["$document","$location","$window",function(h,e){var d=null,a;return{restrict:"C",link:function(g,b){g.$watch(function(){return e.path()},function(){a&&a()});b.parent().bind("click",function(){a&&a()});b.bind("click",function(i){i.preventDefault();i.stopPropagation();i=!1;d&&(i=d===b,a());i||(b.parent().addClass("open"),d=b,a=function(c){c&&c.preventDefault();c&&c.stopPropagation();h.unbind("click",a);b.parent().removeClass("open"); 7 | d=a=null},h.bind("click",a))})}}}],tabbable:function(){return{restrict:"C",compile:function(h){var e=j.element(''),d=j.element('
');d.append(h.contents());h.append(e).append(d)},controller:["$scope","$element",function(h,e){var d=e.contents().eq(0),a=e.controller("ngModel")||{},g=[],b;a.$render=function(){var a=this.$viewValue;if(b?b.value!=a:a)if(b&&(b.paneElement.removeClass("active"),b.tabElement.removeClass("active"),b=null),a){for(var c= 8 | 0,d=g.length;c"),m=k.find("a"),f={paneElement:e,paneAttrs:c,tabElement:k};g.push(f);c.$observe("value",l)();c.$observe("title",function(){l();m.text(f.title)})();d.append(k);k.bind("click",function(b){b.preventDefault(); 9 | b.stopPropagation();a.$setViewValue?h.$apply(function(){a.$setViewValue(f.value);a.$render()}):(a.$viewValue=f.value,a.$render())});return function(){f.tabElement.remove();for(var a=0,b=g.length;a 3.2.6) 6 | 7 | GEM 8 | remote: http://rubygems.org/ 9 | specs: 10 | actionmailer (3.2.6) 11 | actionpack (= 3.2.6) 12 | mail (~> 2.4.4) 13 | actionpack (3.2.6) 14 | activemodel (= 3.2.6) 15 | activesupport (= 3.2.6) 16 | builder (~> 3.0.0) 17 | erubis (~> 2.7.0) 18 | journey (~> 1.0.1) 19 | rack (~> 1.4.0) 20 | rack-cache (~> 1.2) 21 | rack-test (~> 0.6.1) 22 | sprockets (~> 2.1.3) 23 | activemodel (3.2.6) 24 | activesupport (= 3.2.6) 25 | builder (~> 3.0.0) 26 | activerecord (3.2.6) 27 | activemodel (= 3.2.6) 28 | activesupport (= 3.2.6) 29 | arel (~> 3.0.2) 30 | tzinfo (~> 0.3.29) 31 | activeresource (3.2.6) 32 | activemodel (= 3.2.6) 33 | activesupport (= 3.2.6) 34 | activesupport (3.2.6) 35 | i18n (~> 0.6) 36 | multi_json (~> 1.0) 37 | arel (3.0.2) 38 | builder (3.0.0) 39 | erubis (2.7.0) 40 | hike (1.2.1) 41 | i18n (0.6.0) 42 | journey (1.0.4) 43 | jquery-rails (2.0.2) 44 | railties (>= 3.2.0, < 5.0) 45 | thor (~> 0.14) 46 | json (1.7.3) 47 | mail (2.4.4) 48 | i18n (>= 0.4.0) 49 | mime-types (~> 1.16) 50 | treetop (~> 1.4.8) 51 | mime-types (1.19) 52 | multi_json (1.3.6) 53 | polyglot (0.3.3) 54 | rack (1.4.1) 55 | rack-cache (1.2) 56 | rack (>= 0.4) 57 | rack-ssl (1.3.2) 58 | rack 59 | rack-test (0.6.1) 60 | rack (>= 1.0) 61 | rails (3.2.6) 62 | actionmailer (= 3.2.6) 63 | actionpack (= 3.2.6) 64 | activerecord (= 3.2.6) 65 | activeresource (= 3.2.6) 66 | activesupport (= 3.2.6) 67 | bundler (~> 1.0) 68 | railties (= 3.2.6) 69 | railties (3.2.6) 70 | actionpack (= 3.2.6) 71 | activesupport (= 3.2.6) 72 | rack-ssl (~> 1.3.2) 73 | rake (>= 0.8.7) 74 | rdoc (~> 3.4) 75 | thor (>= 0.14.6, < 2.0) 76 | rake (0.9.2.2) 77 | rdoc (3.12) 78 | json (~> 1.4) 79 | sprockets (2.1.3) 80 | hike (~> 1.2) 81 | rack (~> 1.0) 82 | tilt (~> 1.1, != 1.3.0) 83 | sqlite3 (1.3.6) 84 | thor (0.15.4) 85 | tilt (1.3.3) 86 | treetop (1.4.12) 87 | polyglot 88 | polyglot (>= 0.3.1) 89 | tzinfo (0.3.35) 90 | 91 | PLATFORMS 92 | ruby 93 | 94 | DEPENDENCIES 95 | angularjs_scaffold! 96 | jquery-rails 97 | sqlite3 98 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/angularjs/angular-resource-1.0.6.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.0.6 3 | (c) 2010-2012 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(C,d,w){'use strict';d.module("ngResource",["ng"]).factory("$resource",["$http","$parse",function(x,y){function s(b,e){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,e?"%20":"+")}function t(b,e){this.template=b+="#";this.defaults=e||{};var a=this.urlParams={};h(b.split(/\W/),function(f){f&&RegExp("(^|[^\\\\]):"+f+"\\W").test(b)&&(a[f]=!0)});this.template=b.replace(/\\:/g,":")}function u(b,e,a){function f(m,a){var b= 7 | {},a=o({},e,a);h(a,function(a,z){var c;a.charAt&&a.charAt(0)=="@"?(c=a.substr(1),c=y(c)(m)):c=a;b[z]=c});return b}function g(a){v(a||{},this)}var k=new t(b),a=o({},A,a);h(a,function(a,b){a.method=d.uppercase(a.method);var e=a.method=="POST"||a.method=="PUT"||a.method=="PATCH";g[b]=function(b,c,d,B){var j={},i,l=p,q=null;switch(arguments.length){case 4:q=B,l=d;case 3:case 2:if(r(c)){if(r(b)){l=b;q=c;break}l=c;q=d}else{j=b;i=c;l=d;break}case 1:r(b)?l=b:e?i=b:j=b;break;case 0:break;default:throw"Expected between 0-4 arguments [params, data, success, error], got "+ 8 | arguments.length+" arguments.";}var n=this instanceof g?this:a.isArray?[]:new g(i);x({method:a.method,url:k.url(o({},f(i,a.params||{}),j)),data:i}).then(function(b){var c=b.data;if(c)a.isArray?(n.length=0,h(c,function(a){n.push(new g(a))})):v(c,n);(l||p)(n,b.headers)},q);return n};g.prototype["$"+b]=function(a,d,h){var m=f(this),j=p,i;switch(arguments.length){case 3:m=a;j=d;i=h;break;case 2:case 1:r(a)?(j=a,i=d):(m=a,j=d||p);case 0:break;default:throw"Expected between 1-3 arguments [params, success, error], got "+ 9 | arguments.length+" arguments.";}g[b].call(this,m,e?this:w,j,i)}});g.bind=function(d){return u(b,o({},e,d),a)};return g}var A={get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}},p=d.noop,h=d.forEach,o=d.extend,v=d.copy,r=d.isFunction;t.prototype={url:function(b){var e=this,a=this.template,f,g,b=b||{};h(this.urlParams,function(h,c){f=b.hasOwnProperty(c)?b[c]:e.defaults[c];d.isDefined(f)&&f!==null?(g=s(f,!0).replace(/%26/gi,"&").replace(/%3D/gi, 10 | "=").replace(/%2B/gi,"+"),a=a.replace(RegExp(":"+c+"(\\W)","g"),g+"$1")):a=a.replace(RegExp("(/?):"+c+"(\\W)","g"),function(a,b,c){return c.charAt(0)=="/"?c:b+c})});var a=a.replace(/\/?#$/,""),k=[];h(b,function(a,b){e.urlParams[b]||k.push(s(b)+"="+s(a))});k.sort();a=a.replace(/\/*$/,"");return a+(k.length?"?"+k.join("&"):"")}};return u}])})(window,window.angular); 11 | -------------------------------------------------------------------------------- /lib/generators/angularjs/scaffold/templates/plural_model_name_controller.js.coffee: -------------------------------------------------------------------------------- 1 | 2 | root = global ? window 3 | 4 | <%= @controller %>IndexCtrl = ($scope, <%= @model_name %>) -> 5 | $scope.<%= @plural_model_name %> = <%= @model_name %>.query() 6 | 7 | $scope.destroy = -> 8 | if confirm("Are you sure?") 9 | original = @<%= @resource_name %> 10 | @<%= @resource_name %>.destroy -> 11 | $scope.<%= @plural_model_name %> = _.without($scope.<%= @plural_model_name %>, original) 12 | 13 | <%= @controller %>IndexCtrl.$inject = ['$scope', '<%= @model_name %>']; 14 | 15 | <%= @controller %>CreateCtrl = ($scope, $location, <%= @model_name %>) -> 16 | $scope.save = -> 17 | <%= @model_name %>.save $scope.<%= @resource_name %>, (<%= @resource_name %>) -> 18 | $location.path "/<%= @plural_model_name %>/#{<%= @resource_name %>.id}/edit" 19 | 20 | <%= @controller %>CreateCtrl.$inject = ['$scope', '$location', '<%= @model_name %>']; 21 | 22 | <%= @controller %>ShowCtrl = ($scope, $location, $routeParams, <%= @model_name %>) -> 23 | <%= @model_name %>.get 24 | id: $routeParams.id 25 | , (<%= @resource_name %>) -> 26 | @original = <%= @resource_name %> 27 | $scope.<%= @resource_name %> = new <%= @model_name %>(@original) 28 | 29 | $scope.destroy = -> 30 | if confirm("Are you sure?") 31 | $scope.<%= @resource_name %>.destroy -> 32 | $location.path "/<%= @plural_model_name %>" 33 | 34 | <%= @controller %>ShowCtrl.$inject = ['$scope', '$location', '$routeParams', '<%= @model_name %>']; 35 | 36 | <%= @controller %>EditCtrl = ($scope, $location, $routeParams, <%= @model_name %>) -> 37 | <%= @model_name %>.get 38 | id: $routeParams.id 39 | , (<%= @resource_name %>) -> 40 | @original = <%= @resource_name %> 41 | $scope.<%= @resource_name %> = new <%= @model_name %>(@original) 42 | 43 | $scope.isClean = -> 44 | console.log "[<%= @controller %>EditCtrl, $scope.isClean]" 45 | angular.equals @original, $scope.<%= @resource_name %> 46 | 47 | $scope.destroy = -> 48 | if confirm("Are you sure?") 49 | $scope.<%= @resource_name %>.destroy -> 50 | $location.path "/<%= @plural_model_name %>" 51 | 52 | $scope.save = -> 53 | <%= @model_name %>.update $scope.<%= @resource_name %>, (<%= @resource_name %>) -> 54 | $location.path "/<%= @plural_model_name %>" 55 | 56 | <%= @controller %>EditCtrl.$inject = ['$scope', '$location', '$routeParams', '<%= @model_name %>']; 57 | 58 | # exports 59 | root.<%= @controller %>IndexCtrl = <%= @controller %>IndexCtrl 60 | root.<%= @controller %>CreateCtrl = <%= @controller %>CreateCtrl 61 | root.<%= @controller %>ShowCtrl = <%= @controller %>ShowCtrl 62 | root.<%= @controller %>EditCtrl = <%= @controller %>EditCtrl -------------------------------------------------------------------------------- /test/dummy/config/environments/production.rb: -------------------------------------------------------------------------------- 1 | Dummy::Application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb 3 | 4 | # Code is not reloaded between requests 5 | config.cache_classes = true 6 | 7 | # Full error reports are disabled and caching is turned on 8 | config.consider_all_requests_local = false 9 | config.action_controller.perform_caching = true 10 | 11 | # Disable Rails's static asset server (Apache or nginx will already do this) 12 | config.serve_static_assets = false 13 | 14 | # Compress JavaScripts and CSS 15 | config.assets.compress = true 16 | 17 | # Don't fallback to assets pipeline if a precompiled asset is missed 18 | config.assets.compile = false 19 | 20 | # Generate digests for assets URLs 21 | config.assets.digest = true 22 | 23 | # Defaults to nil and saved in location specified by config.assets.prefix 24 | # config.assets.manifest = YOUR_PATH 25 | 26 | # Specifies the header that your server uses for sending files 27 | # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache 28 | # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx 29 | 30 | # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. 31 | # config.force_ssl = true 32 | 33 | # See everything in the log (default is :info) 34 | # config.log_level = :debug 35 | 36 | # Prepend all log lines with the following tags 37 | # config.log_tags = [ :subdomain, :uuid ] 38 | 39 | # Use a different logger for distributed setups 40 | # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) 41 | 42 | # Use a different cache store in production 43 | # config.cache_store = :mem_cache_store 44 | 45 | # Enable serving of images, stylesheets, and JavaScripts from an asset server 46 | # config.action_controller.asset_host = "http://assets.example.com" 47 | 48 | # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) 49 | # config.assets.precompile += %w( search.js ) 50 | 51 | # Disable delivery errors, bad email addresses will be ignored 52 | # config.action_mailer.raise_delivery_errors = false 53 | 54 | # Enable threaded mode 55 | # config.threadsafe! 56 | 57 | # Enable locale fallbacks for I18n (makes lookups for any locale fall back to 58 | # the I18n.default_locale when a translation can not be found) 59 | config.i18n.fallbacks = true 60 | 61 | # Send deprecation notices to registered listeners 62 | config.active_support.deprecation = :notify 63 | 64 | # Log the query plan for queries taking more than this (works 65 | # with SQLite, MySQL, and PostgreSQL) 66 | # config.active_record.auto_explain_threshold_in_seconds = 0.5 67 | end 68 | -------------------------------------------------------------------------------- /test/dummy/config/application.rb: -------------------------------------------------------------------------------- 1 | require File.expand_path('../boot', __FILE__) 2 | 3 | require 'rails/all' 4 | 5 | Bundler.require 6 | require "angularjs_scaffold" 7 | 8 | module Dummy 9 | class Application < Rails::Application 10 | # Settings in config/environments/* take precedence over those specified here. 11 | # Application configuration should go into files in config/initializers 12 | # -- all .rb files in that directory are automatically loaded. 13 | 14 | # Custom directories with classes and modules you want to be autoloadable. 15 | # config.autoload_paths += %W(#{config.root}/extras) 16 | 17 | # Only load the plugins named here, in the order given (default is alphabetical). 18 | # :all can be used as a placeholder for all plugins not explicitly named. 19 | # config.plugins = [ :exception_notification, :ssl_requirement, :all ] 20 | 21 | # Activate observers that should always be running. 22 | # config.active_record.observers = :cacher, :garbage_collector, :forum_observer 23 | 24 | # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. 25 | # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. 26 | # config.time_zone = 'Central Time (US & Canada)' 27 | 28 | # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. 29 | # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] 30 | # config.i18n.default_locale = :de 31 | 32 | # Configure the default encoding used in templates for Ruby 1.9. 33 | config.encoding = "utf-8" 34 | 35 | # Configure sensitive parameters which will be filtered from the log file. 36 | config.filter_parameters += [:password] 37 | 38 | # Enable escaping HTML in JSON. 39 | config.active_support.escape_html_entities_in_json = true 40 | 41 | # Use SQL instead of Active Record's schema dumper when creating the database. 42 | # This is necessary if your schema can't be completely dumped by the schema dumper, 43 | # like if you have constraints or database-specific column types 44 | # config.active_record.schema_format = :sql 45 | 46 | # Enforce whitelist mode for mass assignment. 47 | # This will create an empty whitelist of attributes available for mass-assignment for all models 48 | # in your app. As such, your models will need to explicitly whitelist or blacklist accessible 49 | # parameters by using an attr_accessible or attr_protected declaration. 50 | config.active_record.whitelist_attributes = true 51 | 52 | # Enable the asset pipeline 53 | config.assets.enabled = true 54 | 55 | # Version of your assets, change this if you want to expire all your assets 56 | config.assets.version = '1.0' 57 | end 58 | end 59 | 60 | -------------------------------------------------------------------------------- /lib/generators/angularjs/scaffold/templates/plural_model_name_controller.js: -------------------------------------------------------------------------------- 1 | <%= @controller %>IndexCtrl = function($scope, <%= @model_name %>) { 2 | $scope.<%= @plural_model_name %> = <%= @model_name %>.query(); 3 | 4 | return $scope.destroy = function() { 5 | var original; 6 | if (confirm("Are you sure?")) { 7 | original = this.<%= @resource_name %>; 8 | return this.<%= @resource_name %>.destroy(function() { 9 | return $scope.<%= @plural_model_name %> = _.without($scope.<%= @plural_model_name %>, original); 10 | }); 11 | } 12 | }; 13 | }; 14 | 15 | <%= @controller %>IndexCtrl.$inject = ['$scope', '<%= @model_name %>']; 16 | 17 | <%= @controller %>CreateCtrl = function($scope, $location, <%= @model_name %>) { 18 | return $scope.save = function() { 19 | return <%= @model_name %>.save($scope.<%= @resource_name %>, function(<%= @resource_name %>) { 20 | return $location.path("/<%= @plural_model_name %>/" + <%= @resource_name %>.id + "/edit"); 21 | }); 22 | }; 23 | }; 24 | 25 | <%= @controller %>CreateCtrl.$inject = ['$scope', '$location', '<%= @model_name %>']; 26 | 27 | <%= @controller %>ShowCtrl = function($scope, $location, $routeParams, <%= @model_name %>) { 28 | <%= @model_name %>.get({ 29 | id: $routeParams.id 30 | }, function(<%= @resource_name %>) { 31 | this.original = <%= @resource_name %>; 32 | return $scope.<%= @resource_name %> = new <%= @model_name %>(this.original); 33 | }); 34 | return $scope.destroy = function() { 35 | if (confirm("Are you sure?")) { 36 | return $scope.<%= @resource_name %>.destroy(function() { 37 | return $location.path("/<%= @plural_model_name %>"); 38 | }); 39 | } 40 | }; 41 | }; 42 | 43 | <%= @controller %>ShowCtrl.$inject = ['$scope', '$location', '$routeParams', '<%= @model_name %>']; 44 | 45 | <%= @controller %>EditCtrl = function($scope, $location, $routeParams, <%= @model_name %>) { 46 | <%= @model_name %>.get({ 47 | id: $routeParams.id 48 | }, function(<%= @resource_name %>) { 49 | this.original = <%= @resource_name %>; 50 | return $scope.<%= @resource_name %> = new <%= @model_name %>(this.original); 51 | }); 52 | $scope.isClean = function() { 53 | return angular.equals(this.original, $scope.<%= @resource_name %>); 54 | }; 55 | $scope.destroy = function() { 56 | if (confirm("Are you sure?")) { 57 | return $scope.<%= @resource_name %>.destroy(function() { 58 | return $location.path("/<%= @plural_model_name %>"); 59 | }); 60 | } 61 | }; 62 | return $scope.save = function() { 63 | return <%= @model_name %>.update($scope.<%= @resource_name %>, function(<%= @resource_name %>) { 64 | return $location.path("/<%= @plural_model_name %>"); 65 | }); 66 | }; 67 | }; 68 | 69 | <%= @controller %>EditCtrl.$inject = ['$scope', '$location', '$routeParams', '<%= @model_name %>']; 70 | 71 | 72 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | <%%= content_for?(:title) ? yield(:title) : "<%= app_name %>" %> 7 | <%%= csrf_meta_tags %> 8 | 9 | 10 | 13 | 14 | <%%= stylesheet_link_tag "application", media: "all" %> 15 | <%%= javascript_include_tag "application" %> 16 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 43 | 44 |
45 |
46 |
47 | 48 |
49 | 50 |
51 | 61 |
62 |
63 |
64 | 65 |
66 |

© Company 2012

67 |
68 | 69 |
70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/angularjs/angular-sanitize-1.0.6.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.0.6 3 | (c) 2010-2012 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(I,g){'use strict';function i(a){var d={},a=a.split(","),b;for(b=0;b=0;e--)if(f[e]==b)break;if(e>=0){for(c=f.length-1;c>=e;c--)d.end&&d.end(f[c]);f.length= 7 | e}}var c,h,f=[],j=a;for(f.last=function(){return f[f.length-1]};a;){h=!0;if(!f.last()||!q[f.last()]){if(a.indexOf("<\!--")===0)c=a.indexOf("--\>"),c>=0&&(d.comment&&d.comment(a.substring(4,c)),a=a.substring(c+3),h=!1);else if(B.test(a)){if(c=a.match(r))a=a.substring(c[0].length),c[0].replace(r,e),h=!1}else if(C.test(a)&&(c=a.match(s)))a=a.substring(c[0].length),c[0].replace(s,b),h=!1;h&&(c=a.indexOf("<"),h=c<0?a:a.substring(0,c),a=c<0?"":a.substring(c),d.chars&&d.chars(k(h)))}else a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+ 8 | f.last()+"[^>]*>","i"),function(b,a){a=a.replace(D,"$1").replace(E,"$1");d.chars&&d.chars(k(a));return""}),e("",f.last());if(a==j)throw"Parse Error: "+a;j=a}e()}function k(a){l.innerHTML=a.replace(//g,">")}function u(a){var d=!1,b=g.bind(a,a.push);return{start:function(a,c,h){a=g.lowercase(a);!d&&q[a]&&(d=a);!d&&v[a]== 9 | !0&&(b("<"),b(a),g.forEach(c,function(a,c){var e=g.lowercase(c);if(G[e]==!0&&(w[e]!==!0||a.match(H)))b(" "),b(c),b('="'),b(t(a)),b('"')}),b(h?"/>":">"))},end:function(a){a=g.lowercase(a);!d&&v[a]==!0&&(b(""));a==d&&(d=!1)},chars:function(a){d||b(t(a))}}}var s=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,r=/^<\s*\/\s*([\w:-]+)[^>]*>/,A=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,C=/^/g, 10 | E=//g,H=/^((ftp|https?):\/\/|mailto:|#)/,F=/([^\#-~| |!])/g,p=i("area,br,col,hr,img,wbr"),x=i("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),y=i("rp,rt"),o=g.extend({},y,x),m=g.extend({},x,i("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")),n=g.extend({},y,i("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")), 11 | q=i("script,style"),v=g.extend({},p,m,n,o),w=i("background,cite,href,longdesc,src,usemap"),G=g.extend({},w,i("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,span,start,summary,target,title,type,valign,value,vspace,width")),l=document.createElement("pre");g.module("ngSanitize",[]).value("$sanitize",function(a){var d=[]; 12 | z(a,u(d));return d.join("")});g.module("ngSanitize").directive("ngBindHtml",["$sanitize",function(a){return function(d,b,e){b.addClass("ng-binding").data("$binding",e.ngBindHtml);d.$watch(e.ngBindHtml,function(c){c=a(c);b.html(c||"")})}}]);g.module("ngSanitize").filter("linky",function(){var a=/((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s\.\;\,\(\)\{\}\<\>]/,d=/^mailto:/;return function(b){if(!b)return b;for(var e=b,c=[],h=u(c),f,g;b=e.match(a);)f=b[0],b[2]==b[3]&&(f="mailto:"+f),g=b.index, 13 | h.chars(e.substr(0,g)),h.start("a",{href:f}),h.chars(b[0].replace(d,"")),h.end("a"),e=e.substring(g+b[0].length);h.chars(e);return c.join("")}})})(window,window.angular); 14 | -------------------------------------------------------------------------------- /lib/generators/angularjs/scaffold/scaffold_generator.rb: -------------------------------------------------------------------------------- 1 | require 'rails/generators' 2 | require 'rails/generators/generated_attribute' 3 | 4 | module Angularjs 5 | class ScaffoldGenerator < Rails::Generators::Base 6 | source_root File.expand_path('../templates', __FILE__) 7 | argument :controller_name, type: :string 8 | 9 | def language_option 10 | if File.exist?("app/assets/javascripts/routes.js.erb") 11 | answer = 'javascript' 12 | else 13 | answer = 'coffeescript' 14 | end 15 | answer 16 | end 17 | 18 | def init_vars 19 | @model_name = controller_name.singularize #"Post" 20 | @controller = controller_name #"Posts" 21 | @resource_name = @model_name.demodulize.underscore #post 22 | @plural_model_name = @resource_name.pluralize #posts 23 | end 24 | 25 | def columns 26 | begin 27 | excluded_column_names = %w[id _id _type created_at updated_at] 28 | @model_name.constantize.columns. 29 | reject{|c| excluded_column_names.include?(c.name) }. 30 | collect{|c| ::Rails::Generators::GeneratedAttribute. 31 | new(c.name, c.type)} 32 | rescue NoMethodError 33 | @model_name.constantize.fields. 34 | collect{|c| c[1]}. 35 | reject{|c| excluded_column_names.include?(c.name) }. 36 | collect{|c| 37 | ::Rails::Generators::GeneratedAttribute. 38 | new(c.name, c.type.to_s)} 39 | end 40 | end 41 | 42 | def generate 43 | remove_file "app/assets/stylesheets/scaffolds.css.scss" 44 | # append_to_file "app/assets/javascripts/application.js", 45 | # "//= require #{@plural_model_name}_controller\n" 46 | # append_to_file "app/assets/javascripts/application.js", 47 | # "//= require #{@plural_model_name}\n" 48 | if language_option == 'coffeescript' 49 | insert_into_file "app/assets/javascripts/routes.coffee.erb", 50 | ", \'#{@plural_model_name}\'", :after => "'ngCookies'" 51 | insert_into_file "app/assets/javascripts/routes.coffee.erb", 52 | %{when("/#{@plural_model_name}", 53 | controller: #{@controller}IndexCtrl 54 | templateUrl: '<%= asset_path(\"#{@plural_model_name}/index.html\") %>' 55 | ).when("/#{@plural_model_name}/new", 56 | controller: #{@controller}CreateCtrl 57 | templateUrl: '<%= asset_path(\"#{@plural_model_name}/new.html\") %>' 58 | ).when("/#{@plural_model_name}/:id", 59 | controller: #{@controller}ShowCtrl 60 | templateUrl: '<%= asset_path(\"#{@plural_model_name}/show.html\") %>' 61 | ).when("/#{@plural_model_name}/:id/edit", 62 | controller: #{@controller}EditCtrl 63 | templateUrl: '<%= asset_path(\"#{@plural_model_name}/edit.html\") %>' 64 | ).}, :before => 'otherwise' 65 | else 66 | insert_into_file "app/assets/javascripts/routes.js.erb", 67 | ", '#{@plural_model_name}'", :after => "'ngCookies'" 68 | insert_into_file "app/assets/javascripts/routes.js.erb", 69 | %{\n when('/#{@plural_model_name}', {controller:#{@controller}IndexCtrl, 70 | templateUrl:'<%= asset_path("#{@plural_model_name}/index.html") %>'}). 71 | when('/#{@plural_model_name}/new', {controller:#{@controller}CreateCtrl, 72 | templateUrl:'<%= asset_path("#{@plural_model_name}/new.html") %>'}). 73 | when('/#{@plural_model_name}/:id', {controller:#{@controller}ShowCtrl, 74 | templateUrl:'<%= asset_path("#{@plural_model_name}/show.html") %>'}). 75 | when('/#{@plural_model_name}/:id/edit', {controller:#{@controller}EditCtrl, 76 | templateUrl:'<%= asset_path("#{@plural_model_name}/edit.html") %>'}).}, :before => 'otherwise' 77 | end 78 | 79 | inject_into_class "app/controllers/#{@plural_model_name}_controller.rb", 80 | "#{@controller}Controller".constantize, "respond_to :json\n" 81 | template "new.html.erb", 82 | "app/assets/templates/#{@plural_model_name}/new.html.erb" 83 | template "edit.html.erb", 84 | "app/assets/templates/#{@plural_model_name}/edit.html.erb" 85 | template "show.html.erb", 86 | "app/assets/templates/#{@plural_model_name}/show.html.erb" 87 | template "index.html.erb", 88 | "app/assets/templates/#{@plural_model_name}/index.html.erb" 89 | 90 | model_index_link = "\n
  • <%= link_to \'#{@controller_name}\', #{@plural_model_name}_path %>
  • " 91 | 92 | # insert_into_file "app/views/layouts/application.html.erb", model_index_link, 93 | # after: "" 94 | 95 | insert_into_file "app/views/layouts/application.html.erb", model_index_link, 96 | after: "" 97 | 98 | if language_option == 'coffeescript' 99 | remove_file "app/assets/javascripts/#{@plural_model_name}.js" 100 | remove_file "app/assets/javascripts/#{@plural_model_name}_controller.js" 101 | template "plural_model_name.js.coffee", "app/assets/javascripts/#{@plural_model_name}.js.coffee" 102 | template "plural_model_name_controller.js.coffee", 103 | "app/assets/javascripts/#{@plural_model_name}_controller.js.coffee" 104 | else 105 | remove_file "app/assets/javascripts/#{@plural_model_name}.js.coffee" 106 | remove_file "app/assets/javascripts/#{@plural_model_name}_controller.js.coffee" 107 | template "plural_model_name.js", "app/assets/javascripts/#{@plural_model_name}.js" 108 | template "plural_model_name_controller.js", 109 | "app/assets/javascripts/#{@plural_model_name}_controller.js" 110 | # remove the default .js.coffee file added by rails. 111 | remove_file "app/assets/javascripts/#{@plural_model_name}.js.coffee" 112 | end 113 | end 114 | end 115 | end 116 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/install_generator.rb: -------------------------------------------------------------------------------- 1 | module Angularjs 2 | class InstallGenerator < Rails::Generators::Base 3 | source_root File.expand_path('../templates', __FILE__) 4 | class_option 'layout-type', type: :string, default: "fixed", 5 | banner: "*fixed or fluid", aliases: ["-lt"] 6 | class_option 'no-jquery', type: :boolean, aliases: ["-njq"], 7 | desc: "Don't include jquery" 8 | class_option 'no-bootstrap', type: :boolean, aliases: ["-nb"], 9 | desc: "Don't include bootstrap" 10 | class_option 'language', type: :string, default: 'coffeescript', aliases: ["-ln"], 11 | desc: "Choose your preferred language, 'coffeescript' or 'javascript' " 12 | 13 | def init_angularjs 14 | if File.exist?('app/assets/javascripts/application.js') 15 | insert_into_file "app/assets/javascripts/application.js", 16 | "//= require_tree ./angularjs/\n", :after => "jquery_ujs\n" 17 | else 18 | copy_file "application.js", "app/assets/javascripts/application.js" 19 | end 20 | @application_css_file ='app/assets/stylesheets/application.css' 21 | if (!(File.exist?('app/assets/stylesheets/application.css')) && 22 | File.exist?('app/assets/stylesheets/application.css.scss')) 23 | @application_css_file ='app/assets/stylesheets/application.css.scss' 24 | elsif !File.exist?('app/assets/stylesheets/application.css') 25 | create_file @application_css_file 26 | end 27 | directory "underscore", "app/assets/javascripts/underscore/" 28 | directory "angularjs", "app/assets/javascripts/angularjs/" 29 | if options["no-jquery"] 30 | gsub_file "app/assets/javascripts/application.js", 31 | /\/\/= require jquery_ujs\n/, '' 32 | gsub_file "app/assets/javascripts/application.js", 33 | /\/\/= require jquery\n/, '' 34 | #gsub_file "app/assets/javascripts/application.js", 35 | # /^$\n/, '' 36 | end 37 | end 38 | 39 | def init_twitter_bootstrap_assets 40 | unless options["no-bootstrap"] 41 | directory "fonts", "app/assets/fonts/" 42 | directory "fontawesome", "app/assets/stylesheets/fontawesome/" 43 | directory "bootstrap/css", "app/assets/stylesheets/bootstrap/" 44 | directory "bootstrap/js", "app/assets/javascripts/bootstrap/" 45 | directory "bootstrap/img", "app/assets/javascripts/img/" 46 | insert_into_file @application_css_file, 47 | " *= require bootstrap/bootstrap.min.css\n", :after => "require_self\n" 48 | insert_into_file @application_css_file, 49 | " *= require bootstrap/bootstrap-responsive.min.css\n", 50 | :after => "bootstrap.min.css\n" 51 | insert_into_file @application_css_file, 52 | " *= require fontawesome/font-awesome.css\n", 53 | :after => "bootstrap-responsive.min.css\n" 54 | append_to_file @application_css_file, 55 | "\nbody { padding-top: 60px; }\n" 56 | unless options["no-jquery"] 57 | insert_into_file "app/assets/javascripts/application.js", 58 | "//= require_tree ./bootstrap/\n", after: "angularjs/\n" 59 | end 60 | end 61 | end 62 | 63 | attr_reader :app_name, :container_class, :language 64 | def init_twitter_bootstrap_layout 65 | @app_name = Rails.application.class.parent_name 66 | @container_class = options["layout-type"] == "fluid" ? "container-fluid" : "container" 67 | @language = options["language"] == 'javascript' ? "javascript" : "coffeescript" 68 | template "application.html.erb", "app/views/layouts/application.html.erb" 69 | end 70 | 71 | def generate_welcome_controller 72 | remove_file "public/index.html" 73 | uncomment_lines 'config/routes.rb', /root :to => 'welcome#index'/ 74 | run "rails g controller welcome index" 75 | copy_file "AngularJS-medium.png", "app/assets/images/AngularJS-medium.png" 76 | copy_file 'favicon.ico', "app/assets/images/favicon.ico" 77 | empty_directory "app/assets/templates" 78 | empty_directory "app/assets/templates/welcome" 79 | copy_file "index_welcome.html.erb", "app/assets/templates/welcome/index.html.erb" 80 | if @language == 'coffeescript' 81 | if File.exists?('app/assets/javascripts/routes.js.erb') 82 | remove_file 'app/assets/javascripts/routes.js.erb' 83 | end 84 | copy_file "routes.coffee.erb", "app/assets/javascripts/routes.coffee.erb" 85 | insert_into_file "app/assets/javascripts/routes.coffee.erb", @app_name, before: 'Client' 86 | ['csrf', 'welcome'].each do |prefix| 87 | copy_file "#{prefix}_controller.js.coffee", 88 | "app/assets/javascripts/#{prefix}_controller.js.coffee" 89 | remove_file "app/assets/javascripts/#{prefix}_controller.js" 90 | end 91 | # insert_into_file "app/assets/javascripts/welcome_controller.js.coffee", @app_name, before: 'Client' 92 | else # javascript 93 | if File.exists?('app/assets/javascripts/routes.coffee.erb') 94 | remove_file 'app/assets/javascripts/routes.coffee.erb' 95 | end 96 | copy_file "routes.js.erb", "app/assets/javascripts/routes.js.erb" #if File.exists?("app/assets/javascripts/routes.js.erb") 97 | # Rails.logger.info "#{__FILE__}, #{__LINE__}, @app_name: #{@app_name}" 98 | insert_into_file "app/assets/javascripts/routes.js.erb", @app_name, before: 'Client' 99 | ['csrf', 'welcome'].each do |prefix| 100 | copy_file "#{prefix}_controller.js", 101 | "app/assets/javascripts/#{prefix}_controller.js" 102 | remove_file "app/assets/javascripts/#{prefix}_controller.js.coffee" # if File.exists?("app/assets/javascripts/#{prefix}_controller.js.coffee") 103 | end 104 | # insert_into_file "app/assets/javascripts/welcome_controller.js", @app_name, before: 'Client' 105 | end 106 | # append_to_file "app/assets/javascripts/application.js", 107 | # "//= require routes\n" 108 | # append_to_file "app/assets/javascripts/application.js", 109 | # "//= require welcome_controller\n" 110 | append_to_file @application_css_file, 111 | ".center {text-align: center;}\n" 112 | insert_into_file "app/controllers/application_controller.rb", 113 | %{ 114 | private 115 | 116 | # AngularJS automatically sends CSRF token as a header called X-XSRF 117 | # this makes sure rails gets it 118 | def verified_request? 119 | !protect_against_forgery? || request.get? || 120 | form_authenticity_token == params[request_forgery_protection_token] || 121 | form_authenticity_token == request.headers['X-CSRF-Token'] || 122 | form_authenticity_token == (request.headers['X-XSRF-Token'].chomp('"').reverse.chomp('"').reverse if request.headers['X-XSRF-Token']) 123 | end 124 | }, before: "end" 125 | 126 | end 127 | end 128 | end 129 | -------------------------------------------------------------------------------- /test/dummy/README.rdoc: -------------------------------------------------------------------------------- 1 | == Welcome to Rails 2 | 3 | Rails is a web-application framework that includes everything needed to create 4 | database-backed web applications according to the Model-View-Control pattern. 5 | 6 | This pattern splits the view (also called the presentation) into "dumb" 7 | templates that are primarily responsible for inserting pre-built data in between 8 | HTML tags. The model contains the "smart" domain objects (such as Account, 9 | Product, Person, Post) that holds all the business logic and knows how to 10 | persist themselves to a database. The controller handles the incoming requests 11 | (such as Save New Account, Update Product, Show Post) by manipulating the model 12 | and directing data to the view. 13 | 14 | In Rails, the model is handled by what's called an object-relational mapping 15 | layer entitled Active Record. This layer allows you to present the data from 16 | database rows as objects and embellish these data objects with business logic 17 | methods. You can read more about Active Record in 18 | link:files/vendor/rails/activerecord/README.html. 19 | 20 | The controller and view are handled by the Action Pack, which handles both 21 | layers by its two parts: Action View and Action Controller. These two layers 22 | are bundled in a single package due to their heavy interdependence. This is 23 | unlike the relationship between the Active Record and Action Pack that is much 24 | more separate. Each of these packages can be used independently outside of 25 | Rails. You can read more about Action Pack in 26 | link:files/vendor/rails/actionpack/README.html. 27 | 28 | 29 | == Getting Started 30 | 31 | 1. At the command prompt, create a new Rails application: 32 | rails new myapp (where myapp is the application name) 33 | 34 | 2. Change directory to myapp and start the web server: 35 | cd myapp; rails server (run with --help for options) 36 | 37 | 3. Go to http://localhost:3000/ and you'll see: 38 | "Welcome aboard: You're riding Ruby on Rails!" 39 | 40 | 4. Follow the guidelines to start developing your application. You can find 41 | the following resources handy: 42 | 43 | * The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html 44 | * Ruby on Rails Tutorial Book: http://www.railstutorial.org/ 45 | 46 | 47 | == Debugging Rails 48 | 49 | Sometimes your application goes wrong. Fortunately there are a lot of tools that 50 | will help you debug it and get it back on the rails. 51 | 52 | First area to check is the application log files. Have "tail -f" commands 53 | running on the server.log and development.log. Rails will automatically display 54 | debugging and runtime information to these files. Debugging info will also be 55 | shown in the browser on requests from 127.0.0.1. 56 | 57 | You can also log your own messages directly into the log file from your code 58 | using the Ruby logger class from inside your controllers. Example: 59 | 60 | class WeblogController < ActionController::Base 61 | def destroy 62 | @weblog = Weblog.find(params[:id]) 63 | @weblog.destroy 64 | logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!") 65 | end 66 | end 67 | 68 | The result will be a message in your log file along the lines of: 69 | 70 | Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1! 71 | 72 | More information on how to use the logger is at http://www.ruby-doc.org/core/ 73 | 74 | Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are 75 | several books available online as well: 76 | 77 | * Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe) 78 | * Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide) 79 | 80 | These two books will bring you up to speed on the Ruby language and also on 81 | programming in general. 82 | 83 | 84 | == Debugger 85 | 86 | Debugger support is available through the debugger command when you start your 87 | Mongrel or WEBrick server with --debugger. This means that you can break out of 88 | execution at any point in the code, investigate and change the model, and then, 89 | resume execution! You need to install ruby-debug to run the server in debugging 90 | mode. With gems, use sudo gem install ruby-debug. Example: 91 | 92 | class WeblogController < ActionController::Base 93 | def index 94 | @posts = Post.all 95 | debugger 96 | end 97 | end 98 | 99 | So the controller will accept the action, run the first line, then present you 100 | with a IRB prompt in the server window. Here you can do things like: 101 | 102 | >> @posts.inspect 103 | => "[#nil, "body"=>nil, "id"=>"1"}>, 105 | #"Rails", "body"=>"Only ten..", "id"=>"2"}>]" 107 | >> @posts.first.title = "hello from a debugger" 108 | => "hello from a debugger" 109 | 110 | ...and even better, you can examine how your runtime objects actually work: 111 | 112 | >> f = @posts.first 113 | => #nil, "body"=>nil, "id"=>"1"}> 114 | >> f. 115 | Display all 152 possibilities? (y or n) 116 | 117 | Finally, when you're ready to resume execution, you can enter "cont". 118 | 119 | 120 | == Console 121 | 122 | The console is a Ruby shell, which allows you to interact with your 123 | application's domain model. Here you'll have all parts of the application 124 | configured, just like it is when the application is running. You can inspect 125 | domain models, change values, and save to the database. Starting the script 126 | without arguments will launch it in the development environment. 127 | 128 | To start the console, run rails console from the application 129 | directory. 130 | 131 | Options: 132 | 133 | * Passing the -s, --sandbox argument will rollback any modifications 134 | made to the database. 135 | * Passing an environment name as an argument will load the corresponding 136 | environment. Example: rails console production. 137 | 138 | To reload your controllers and models after launching the console run 139 | reload! 140 | 141 | More information about irb can be found at: 142 | link:http://www.rubycentral.org/pickaxe/irb.html 143 | 144 | 145 | == dbconsole 146 | 147 | You can go to the command line of your database directly through rails 148 | dbconsole. You would be connected to the database with the credentials 149 | defined in database.yml. Starting the script without arguments will connect you 150 | to the development database. Passing an argument will connect you to a different 151 | database, like rails dbconsole production. Currently works for MySQL, 152 | PostgreSQL and SQLite 3. 153 | 154 | == Description of Contents 155 | 156 | The default directory structure of a generated Ruby on Rails application: 157 | 158 | |-- app 159 | | |-- assets 160 | | |-- images 161 | | |-- javascripts 162 | | `-- stylesheets 163 | | |-- controllers 164 | | |-- helpers 165 | | |-- mailers 166 | | |-- models 167 | | `-- views 168 | | `-- layouts 169 | |-- config 170 | | |-- environments 171 | | |-- initializers 172 | | `-- locales 173 | |-- db 174 | |-- doc 175 | |-- lib 176 | | `-- tasks 177 | |-- log 178 | |-- public 179 | |-- script 180 | |-- test 181 | | |-- fixtures 182 | | |-- functional 183 | | |-- integration 184 | | |-- performance 185 | | `-- unit 186 | |-- tmp 187 | | |-- cache 188 | | |-- pids 189 | | |-- sessions 190 | | `-- sockets 191 | `-- vendor 192 | |-- assets 193 | `-- stylesheets 194 | `-- plugins 195 | 196 | app 197 | Holds all the code that's specific to this particular application. 198 | 199 | app/assets 200 | Contains subdirectories for images, stylesheets, and JavaScript files. 201 | 202 | app/controllers 203 | Holds controllers that should be named like weblogs_controller.rb for 204 | automated URL mapping. All controllers should descend from 205 | ApplicationController which itself descends from ActionController::Base. 206 | 207 | app/models 208 | Holds models that should be named like post.rb. Models descend from 209 | ActiveRecord::Base by default. 210 | 211 | app/views 212 | Holds the template files for the view that should be named like 213 | weblogs/index.html.erb for the WeblogsController#index action. All views use 214 | eRuby syntax by default. 215 | 216 | app/views/layouts 217 | Holds the template files for layouts to be used with views. This models the 218 | common header/footer method of wrapping views. In your views, define a layout 219 | using the layout :default and create a file named default.html.erb. 220 | Inside default.html.erb, call <% yield %> to render the view using this 221 | layout. 222 | 223 | app/helpers 224 | Holds view helpers that should be named like weblogs_helper.rb. These are 225 | generated for you automatically when using generators for controllers. 226 | Helpers can be used to wrap functionality for your views into methods. 227 | 228 | config 229 | Configuration files for the Rails environment, the routing map, the database, 230 | and other dependencies. 231 | 232 | db 233 | Contains the database schema in schema.rb. db/migrate contains all the 234 | sequence of Migrations for your schema. 235 | 236 | doc 237 | This directory is where your application documentation will be stored when 238 | generated using rake doc:app 239 | 240 | lib 241 | Application specific libraries. Basically, any kind of custom code that 242 | doesn't belong under controllers, models, or helpers. This directory is in 243 | the load path. 244 | 245 | public 246 | The directory available for the web server. Also contains the dispatchers and the 247 | default HTML files. This should be set as the DOCUMENT_ROOT of your web 248 | server. 249 | 250 | script 251 | Helper scripts for automation and generation. 252 | 253 | test 254 | Unit and functional tests along with fixtures. When using the rails generate 255 | command, template test files will be generated for you and placed in this 256 | directory. 257 | 258 | vendor 259 | External libraries that the application depends on. Also includes the plugins 260 | subdirectory. If the app has frozen rails, those gems also go here, under 261 | vendor/rails/. This directory is in the load path. 262 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/underscore/underscore-min.js: -------------------------------------------------------------------------------- 1 | (function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,h=e.reduce,v=e.reduceRight,d=e.filter,g=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,_=Object.keys,j=i.bind,w=function(n){return n instanceof w?n:this instanceof w?(this._wrapped=n,void 0):new w(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=w),exports._=w):n._=w,w.VERSION="1.4.4";var A=w.each=w.forEach=function(n,t,e){if(null!=n)if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a in n)if(w.has(n,a)&&t.call(e,n[a],a,n)===r)return};w.map=w.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e[e.length]=t.call(r,n,u,i)}),e)};var O="Reduce of empty array with no initial value";w.reduce=w.foldl=w.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduce===h)return e&&(t=w.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(O);return r},w.reduceRight=w.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduceRight===v)return e&&(t=w.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=w.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(O);return r},w.find=w.detect=function(n,t,r){var e;return E(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},w.filter=w.select=function(n,t,r){var e=[];return null==n?e:d&&n.filter===d?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&(e[e.length]=n)}),e)},w.reject=function(n,t,r){return w.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},w.every=w.all=function(n,t,e){t||(t=w.identity);var u=!0;return null==n?u:g&&n.every===g?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var E=w.some=w.any=function(n,t,e){t||(t=w.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};w.contains=w.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:E(n,function(n){return n===t})},w.invoke=function(n,t){var r=o.call(arguments,2),e=w.isFunction(t);return w.map(n,function(n){return(e?t:n[t]).apply(n,r)})},w.pluck=function(n,t){return w.map(n,function(n){return n[t]})},w.where=function(n,t,r){return w.isEmpty(t)?r?null:[]:w[r?"find":"filter"](n,function(n){for(var r in t)if(t[r]!==n[r])return!1;return!0})},w.findWhere=function(n,t){return w.where(n,t,!0)},w.max=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.max.apply(Math,n);if(!t&&w.isEmpty(n))return-1/0;var e={computed:-1/0,value:-1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a>=e.computed&&(e={value:n,computed:a})}),e.value},w.min=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.min.apply(Math,n);if(!t&&w.isEmpty(n))return 1/0;var e={computed:1/0,value:1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;e.computed>a&&(e={value:n,computed:a})}),e.value},w.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=w.random(r++),e[r-1]=e[t],e[t]=n}),e};var k=function(n){return w.isFunction(n)?n:function(t){return t[n]}};w.sortBy=function(n,t,r){var e=k(t);return w.pluck(w.map(n,function(n,t,u){return{value:n,index:t,criteria:e.call(r,n,t,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.indexi;){var o=i+a>>>1;u>r.call(e,n[o])?i=o+1:a=o}return i},w.toArray=function(n){return n?w.isArray(n)?o.call(n):n.length===+n.length?w.map(n,w.identity):w.values(n):[]},w.size=function(n){return null==n?0:n.length===+n.length?n.length:w.keys(n).length},w.first=w.head=w.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:o.call(n,0,t)},w.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},w.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},w.rest=w.tail=w.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},w.compact=function(n){return w.filter(n,w.identity)};var R=function(n,t,r){return A(n,function(n){w.isArray(n)?t?a.apply(r,n):R(n,t,r):r.push(n)}),r};w.flatten=function(n,t){return R(n,t,[])},w.without=function(n){return w.difference(n,o.call(arguments,1))},w.uniq=w.unique=function(n,t,r,e){w.isFunction(t)&&(e=r,r=t,t=!1);var u=r?w.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:w.contains(a,r))||(a.push(r),i.push(n[e]))}),i},w.union=function(){return w.uniq(c.apply(e,arguments))},w.intersection=function(n){var t=o.call(arguments,1);return w.filter(w.uniq(n),function(n){return w.every(t,function(t){return w.indexOf(t,n)>=0})})},w.difference=function(n){var t=c.apply(e,o.call(arguments,1));return w.filter(n,function(n){return!w.contains(t,n)})},w.zip=function(){for(var n=o.call(arguments),t=w.max(w.pluck(n,"length")),r=Array(t),e=0;t>e;e++)r[e]=w.pluck(n,""+e);return r},w.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},w.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=w.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},w.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},w.range=function(n,t,r){1>=arguments.length&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=Array(e);e>u;)i[u++]=n,n+=r;return i},w.bind=function(n,t){if(n.bind===j&&j)return j.apply(n,o.call(arguments,1));var r=o.call(arguments,2);return function(){return n.apply(t,r.concat(o.call(arguments)))}},w.partial=function(n){var t=o.call(arguments,1);return function(){return n.apply(this,t.concat(o.call(arguments)))}},w.bindAll=function(n){var t=o.call(arguments,1);return 0===t.length&&(t=w.functions(n)),A(t,function(t){n[t]=w.bind(n[t],n)}),n},w.memoize=function(n,t){var r={};return t||(t=w.identity),function(){var e=t.apply(this,arguments);return w.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},w.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},w.defer=function(n){return w.delay.apply(w,[n,1].concat(o.call(arguments,1)))},w.throttle=function(n,t){var r,e,u,i,a=0,o=function(){a=new Date,u=null,i=n.apply(r,e)};return function(){var c=new Date,l=t-(c-a);return r=this,e=arguments,0>=l?(clearTimeout(u),u=null,a=c,i=n.apply(r,e)):u||(u=setTimeout(o,l)),i}},w.debounce=function(n,t,r){var e,u;return function(){var i=this,a=arguments,o=function(){e=null,r||(u=n.apply(i,a))},c=r&&!e;return clearTimeout(e),e=setTimeout(o,t),c&&(u=n.apply(i,a)),u}},w.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},w.wrap=function(n,t){return function(){var r=[n];return a.apply(r,arguments),t.apply(this,r)}},w.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},w.after=function(n,t){return 0>=n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},w.keys=_||function(n){if(n!==Object(n))throw new TypeError("Invalid object");var t=[];for(var r in n)w.has(n,r)&&(t[t.length]=r);return t},w.values=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push(n[r]);return t},w.pairs=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push([r,n[r]]);return t},w.invert=function(n){var t={};for(var r in n)w.has(n,r)&&(t[n[r]]=r);return t},w.functions=w.methods=function(n){var t=[];for(var r in n)w.isFunction(n[r])&&t.push(r);return t.sort()},w.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},w.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},w.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)w.contains(r,u)||(t[u]=n[u]);return t},w.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)null==n[r]&&(n[r]=t[r])}),n},w.clone=function(n){return w.isObject(n)?w.isArray(n)?n.slice():w.extend({},n):n},w.tap=function(n,t){return t(n),n};var I=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof w&&(n=n._wrapped),t instanceof w&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==t+"";case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;r.push(n),e.push(t);var a=0,o=!0;if("[object Array]"==u){if(a=n.length,o=a==t.length)for(;a--&&(o=I(n[a],t[a],r,e)););}else{var c=n.constructor,f=t.constructor;if(c!==f&&!(w.isFunction(c)&&c instanceof c&&w.isFunction(f)&&f instanceof f))return!1;for(var s in n)if(w.has(n,s)&&(a++,!(o=w.has(t,s)&&I(n[s],t[s],r,e))))break;if(o){for(s in t)if(w.has(t,s)&&!a--)break;o=!a}}return r.pop(),e.pop(),o};w.isEqual=function(n,t){return I(n,t,[],[])},w.isEmpty=function(n){if(null==n)return!0;if(w.isArray(n)||w.isString(n))return 0===n.length;for(var t in n)if(w.has(n,t))return!1;return!0},w.isElement=function(n){return!(!n||1!==n.nodeType)},w.isArray=x||function(n){return"[object Array]"==l.call(n)},w.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){w["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),w.isArguments(arguments)||(w.isArguments=function(n){return!(!n||!w.has(n,"callee"))}),"function"!=typeof/./&&(w.isFunction=function(n){return"function"==typeof n}),w.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},w.isNaN=function(n){return w.isNumber(n)&&n!=+n},w.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},w.isNull=function(n){return null===n},w.isUndefined=function(n){return n===void 0},w.has=function(n,t){return f.call(n,t)},w.noConflict=function(){return n._=t,this},w.identity=function(n){return n},w.times=function(n,t,r){for(var e=Array(n),u=0;n>u;u++)e[u]=t.call(r,u);return e},w.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))};var M={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};M.unescape=w.invert(M.escape);var S={escape:RegExp("["+w.keys(M.escape).join("")+"]","g"),unescape:RegExp("("+w.keys(M.unescape).join("|")+")","g")};w.each(["escape","unescape"],function(n){w[n]=function(t){return null==t?"":(""+t).replace(S[n],function(t){return M[n][t]})}}),w.result=function(n,t){if(null==n)return null;var r=n[t];return w.isFunction(r)?r.call(n):r},w.mixin=function(n){A(w.functions(n),function(t){var r=w[t]=n[t];w.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),D.call(this,r.apply(w,n))}})};var N=0;w.uniqueId=function(n){var t=++N+"";return n?n+t:t},w.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var T=/(.)^/,q={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},B=/\\|'|\r|\n|\t|\u2028|\u2029/g;w.template=function(n,t,r){var e;r=w.defaults({},r,w.templateSettings);var u=RegExp([(r.escape||T).source,(r.interpolate||T).source,(r.evaluate||T).source].join("|")+"|$","g"),i=0,a="__p+='";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(B,function(n){return"\\"+q[n]}),r&&(a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(a+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),u&&(a+="';\n"+u+"\n__p+='"),i=o+t.length,t}),a+="';\n",r.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{e=Function(r.variable||"obj","_",a)}catch(o){throw o.source=a,o}if(t)return e(t,w);var c=function(n){return e.call(this,n,w)};return c.source="function("+(r.variable||"obj")+"){\n"+a+"}",c},w.chain=function(n){return w(n).chain()};var D=function(n){return this._chain?w(n).chain():n};w.mixin(w),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];w.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],D.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];w.prototype[n]=function(){return D.call(this,t.apply(this._wrapped,arguments))}}),w.extend(w.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this); -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/bootstrap/css/bootstrap-responsive.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Responsive v2.3.1 3 | * 4 | * Copyright 2012 Twitter, Inc 5 | * Licensed under the Apache License v2.0 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Designed and built with all the love in the world @twitter by @mdo and @fat. 9 | */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} 10 | -------------------------------------------------------------------------------- /lib/generators/angularjs/install/templates/angularjs/angular-bootstrap-prettify-1.0.6.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.0.6 3 | (c) 2010-2012 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(q,k,I){'use strict';function G(c){return c.replace(/\&/g,"&").replace(/\/g,">").replace(/"/g,""")}function D(c,e){var b=k.element("
    "+e+"
    ");c.html("");c.append(b.contents());return c}var t={},w={value:{}},L={"angular.js":"http://code.angularjs.org/"+k.version.full+"/angular.min.js","angular-resource.js":"http://code.angularjs.org/"+k.version.full+"/angular-resource.min.js","angular-sanitize.js":"http://code.angularjs.org/"+k.version.full+"/angular-sanitize.min.js", 7 | "angular-cookies.js":"http://code.angularjs.org/"+k.version.full+"/angular-cookies.min.js"};t.jsFiddle=function(c,e,b){return{terminal:!0,link:function(x,a,r){function d(a,b){return''}var H={html:"",css:"",js:""};k.forEach(r.jsFiddle.split(" "),function(a,b){var d=a.split(".")[1];H[d]+=d=="html"?b==0?"
    \n"+c(a,2):"\n\n\n <\!-- CACHE FILE: "+a+' --\>\n