upgrade to rails3, but grip is broken
This commit is contained in:
		
							parent
							
								
									9f1de1b543
								
							
						
					
					
						commit
						29ee4585b2
					
				|  | @ -1,3 +1,5 @@ | |||
| .bundle | ||||
| db/*.sqlite3 | ||||
| log/*.log | ||||
| tmp/**/* | ||||
| .DS_Store | ||||
|  |  | |||
|  | @ -0,0 +1,32 @@ | |||
| # Edit this Gemfile to bundle your application's dependencies. | ||||
| source 'http://gemcutter.org' | ||||
| 
 | ||||
| gem "rails", "3.0.0.beta" | ||||
| 
 | ||||
| gem "liquid" | ||||
| 
 | ||||
| # http://github.com/merbjedi/mongomapper | ||||
| gem "mongo_mapper-rails3", :require => "mongo_mapper" | ||||
| #gem 'grip' | ||||
| 
 | ||||
| gem 'warden' | ||||
| gem 'devise', "1.1.pre" | ||||
| 
 | ||||
| ## Bundle edge rails: | ||||
| # gem "rails", :git => "git://github.com/rails/rails.git" | ||||
| 
 | ||||
| # ActiveRecord requires a database adapter. By default, | ||||
| # Rails has selected sqlite3. | ||||
| # gem "sqlite3-ruby", :require => "sqlite3" | ||||
| 
 | ||||
| ## Bundle the gems you use: | ||||
| # gem "bj" | ||||
| # gem "hpricot", "0.6" | ||||
| # gem "sqlite3-ruby", :require => "sqlite3" | ||||
| # gem "aws-s3", :require => "aws/s3" | ||||
| 
 | ||||
| ## Bundle gems used only in certain environments: | ||||
| # gem "rspec", :group => :test | ||||
| # group :test do | ||||
| #   gem "webrat" | ||||
| # end | ||||
							
								
								
									
										4
									
								
								Rakefile
								
								
								
								
							
							
						
						
									
										4
									
								
								Rakefile
								
								
								
								
							|  | @ -1,10 +1,10 @@ | |||
| # Add your own tasks in files placed in lib/tasks ending in .rake, | ||||
| # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. | ||||
| 
 | ||||
| require(File.join(File.dirname(__FILE__), 'config', 'boot')) | ||||
| require File.expand_path('../config/application', __FILE__) | ||||
| 
 | ||||
| require 'rake' | ||||
| require 'rake/testtask' | ||||
| require 'rake/rdoctask' | ||||
| 
 | ||||
| require 'tasks/rails' | ||||
| Rails::Application.load_tasks | ||||
|  |  | |||
|  | @ -1,8 +1,8 @@ | |||
| class ApplicationController < ActionController::Base | ||||
| 
 | ||||
|   helper :all | ||||
|   protect_from_forgery | ||||
| 
 | ||||
|    | ||||
|   helper :all | ||||
|    | ||||
|   before_filter :set_locale | ||||
|    | ||||
|   filter_parameter_logging :password | ||||
|  | @ -42,5 +42,5 @@ class ApplicationController < ActionController::Base | |||
|     render :text => 'missing entry_name' if params[:entry_name].blank? | ||||
|     return | ||||
|   end | ||||
|    | ||||
|      | ||||
| end | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ class PagesController < ApplicationController | |||
|   end | ||||
|    | ||||
|   def show     | ||||
|     @page = Page.find_by_full_name(params[:page_name].join("/")) | ||||
|     @page = Page.find_by_full_name(params[:page_name]) | ||||
|     render_liquid_page | ||||
|   end | ||||
|    | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ module AdminHelper | |||
|    | ||||
|   def show_parent_items_link(parent_item)   | ||||
|     @parent_items = @parent_item.ancestors.map{ |i| i.name } | ||||
|     ( @parent_items.map{ |i| link_to(i, admin_items_path(:parent_name=>i) ) } << parent_item.name ).join("/") | ||||
|     ( @parent_items.map{ |i| link_to(i, admin_items_path(:parent_name=>i) ) } << parent_item.name ).join("/").html_safe | ||||
|   end | ||||
|    | ||||
| end | ||||
|  | @ -1,3 +1,2 @@ | |||
| # Methods added to this helper will be available to all templates in the application. | ||||
| module ApplicationHelper | ||||
| end | ||||
|  |  | |||
|  | @ -39,7 +39,7 @@ | |||
| 
 | ||||
| <%= javascript_include_tag "jquery", | ||||
|                            "jquery-ui", | ||||
|                            "jrails", | ||||
|                            "rails", | ||||
|                            "easy", | ||||
|                            "application", :cache => 'all' %> | ||||
| <%= yield :page_specific_javascript %> | ||||
|  |  | |||
|  | @ -37,7 +37,7 @@ | |||
| 
 | ||||
| <%= javascript_include_tag "jquery", | ||||
|                            "jquery-ui", | ||||
|                            "jrails", | ||||
|                            "rails", | ||||
|                            "easy", | ||||
|                            "application", :cache => 'all' %> | ||||
| <%= yield :page_specific_javascript %> | ||||
|  |  | |||
|  | @ -0,0 +1,4 @@ | |||
| # This file is used by Rack-based servers to start the application. | ||||
| 
 | ||||
| require ::File.expand_path('../config/environment',  __FILE__) | ||||
| run R4::Application | ||||
|  | @ -0,0 +1,53 @@ | |||
| require File.expand_path('../boot', __FILE__) | ||||
| 
 | ||||
| # Pick the frameworks you want: | ||||
| # require "active_record/railtie" | ||||
| require "action_controller/railtie" | ||||
| require "action_mailer/railtie" | ||||
| # require "active_resource/railtie" | ||||
| # require "rails/test_unit/railtie" | ||||
| require File.expand_path('lib/reroute_middleware') | ||||
| 
 | ||||
| # Auto-require default libraries and those for the current Rails environment. | ||||
| Bundler.require :default, Rails.env | ||||
| 
 | ||||
| module R4 | ||||
|   class Application < Rails::Application | ||||
|     config.middleware.use RerouteMiddleware | ||||
|      | ||||
|     # Settings in config/environments/* take precedence over those specified here. | ||||
|     # Application configuration should go into files in config/initializers | ||||
|     # -- all .rb files in that directory are automatically loaded. | ||||
| 
 | ||||
|     # Add additional load paths for your own custom dirs | ||||
|     # config.load_paths += %W( #{config.root}/extras ) | ||||
| 
 | ||||
|     # Only load the plugins named here, in the order given (default is alphabetical). | ||||
|     # :all can be used as a placeholder for all plugins not explicitly named | ||||
|     # config.plugins = [ :exception_notification, :ssl_requirement, :all ] | ||||
| 
 | ||||
|     # Activate observers that should always be running | ||||
|     # config.active_record.observers = :cacher, :garbage_collector, :forum_observer | ||||
| 
 | ||||
|     # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. | ||||
|     # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. | ||||
|     config.time_zone = 'Taipei' | ||||
| 
 | ||||
|     # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. | ||||
|     # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')] | ||||
|     config.i18n.default_locale = :zh_tw | ||||
| 
 | ||||
|     # Configure generators values. Many other options are available, be sure to check the documentation. | ||||
|     # config.generators do |g| | ||||
|     #   g.orm             :active_record | ||||
|     #   g.template_engine :erb | ||||
|     #   g.test_framework  :test_unit, :fixture => true | ||||
|     # end | ||||
| 
 | ||||
|     # Configure sensitive parameters which will be filtered from the log file. | ||||
|     config.filter_parameters << :password | ||||
|      | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| VALID_LOCALES = ["en", "zh_tw"] | ||||
							
								
								
									
										123
									
								
								config/boot.rb
								
								
								
								
							
							
						
						
									
										123
									
								
								config/boot.rb
								
								
								
								
							|  | @ -1,110 +1,17 @@ | |||
| # Don't change this file! | ||||
| # Configure your app in config/environment.rb and config/environments/*.rb | ||||
| # Use Bundler (preferred) | ||||
| begin | ||||
|   require File.expand_path('../../.bundle/environment', __FILE__) | ||||
| rescue LoadError | ||||
|   require 'rubygems' | ||||
|   require 'bundler' | ||||
|   Bundler.setup | ||||
| 
 | ||||
| RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT) | ||||
| 
 | ||||
| module Rails | ||||
|   class << self | ||||
|     def boot! | ||||
|       unless booted? | ||||
|         preinitialize | ||||
|         pick_boot.run | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     def booted? | ||||
|       defined? Rails::Initializer | ||||
|     end | ||||
| 
 | ||||
|     def pick_boot | ||||
|       (vendor_rails? ? VendorBoot : GemBoot).new | ||||
|     end | ||||
| 
 | ||||
|     def vendor_rails? | ||||
|       File.exist?("#{RAILS_ROOT}/vendor/rails") | ||||
|     end | ||||
| 
 | ||||
|     def preinitialize | ||||
|       load(preinitializer_path) if File.exist?(preinitializer_path) | ||||
|     end | ||||
| 
 | ||||
|     def preinitializer_path | ||||
|       "#{RAILS_ROOT}/config/preinitializer.rb" | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   class Boot | ||||
|     def run | ||||
|       load_initializer | ||||
|       Rails::Initializer.run(:set_load_path) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   class VendorBoot < Boot | ||||
|     def load_initializer | ||||
|       require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer" | ||||
|       Rails::Initializer.run(:install_gem_spec_stubs) | ||||
|       Rails::GemDependency.add_frozen_gem_path | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   class GemBoot < Boot | ||||
|     def load_initializer | ||||
|       self.class.load_rubygems | ||||
|       load_rails_gem | ||||
|       require 'initializer' | ||||
|     end | ||||
| 
 | ||||
|     def load_rails_gem | ||||
|       if version = self.class.gem_version | ||||
|         gem 'rails', version | ||||
|       else | ||||
|         gem 'rails' | ||||
|       end | ||||
|     rescue Gem::LoadError => load_error | ||||
|       $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.) | ||||
|       exit 1 | ||||
|     end | ||||
| 
 | ||||
|     class << self | ||||
|       def rubygems_version | ||||
|         Gem::RubyGemsVersion rescue nil | ||||
|       end | ||||
| 
 | ||||
|       def gem_version | ||||
|         if defined? RAILS_GEM_VERSION | ||||
|           RAILS_GEM_VERSION | ||||
|         elsif ENV.include?('RAILS_GEM_VERSION') | ||||
|           ENV['RAILS_GEM_VERSION'] | ||||
|         else | ||||
|           parse_gem_version(read_environment_rb) | ||||
|         end | ||||
|       end | ||||
| 
 | ||||
|       def load_rubygems | ||||
|         require 'rubygems' | ||||
|         min_version = '1.3.1' | ||||
|         unless rubygems_version >= min_version | ||||
|           $stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.) | ||||
|           exit 1 | ||||
|         end | ||||
| 
 | ||||
|       rescue LoadError | ||||
|         $stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org) | ||||
|         exit 1 | ||||
|       end | ||||
| 
 | ||||
|       def parse_gem_version(text) | ||||
|         $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/ | ||||
|       end | ||||
| 
 | ||||
|       private | ||||
|         def read_environment_rb | ||||
|           File.read("#{RAILS_ROOT}/config/environment.rb") | ||||
|         end | ||||
|     end | ||||
|   end | ||||
|   # To use 2.x style vendor/rails and RubyGems | ||||
|   # | ||||
|   # vendor_rails = File.expand_path('../../vendor/rails', __FILE__) | ||||
|   # if File.exist?(vendor_rails) | ||||
|   #   Dir["#{vendor_rails}/*/lib"].each { |path| $:.unshift(path) } | ||||
|   # end | ||||
|   # | ||||
|   # require 'rubygems' | ||||
| end | ||||
| 
 | ||||
| # All that for this: | ||||
| Rails.boot! | ||||
|  |  | |||
|  | @ -1,76 +1,5 @@ | |||
| # Be sure to restart your server when you modify this file | ||||
| 
 | ||||
| # Specifies gem version of Rails to use when vendor/rails is not present | ||||
| RAILS_GEM_VERSION = '2.3.5' unless defined? RAILS_GEM_VERSION | ||||
| 
 | ||||
| # Bootstrap the Rails environment, frameworks, and default configuration | ||||
| require File.join(File.dirname(__FILE__), 'boot') | ||||
| 
 | ||||
| Rails::Initializer.run do |config| | ||||
|   # Settings in config/environments/* take precedence over those specified here. | ||||
|   # Application configuration should go into files in config/initializers | ||||
|   # -- all .rb files in that directory are automatically loaded. | ||||
| 
 | ||||
|   # Add additional load paths for your own custom dirs | ||||
|   # config.load_paths += %W( #{RAILS_ROOT}/extras ) | ||||
| 
 | ||||
|   # Specify gems that this application depends on and have them installed with rake gems:install | ||||
|   # config.gem "bj" | ||||
|   # config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net" | ||||
|   # config.gem "sqlite3-ruby", :lib => "sqlite3" | ||||
|   # config.gem "aws-s3", :lib => "aws/s3" | ||||
|      | ||||
|   config.gem "liquid" | ||||
|   config.gem "mongo_mapper"   | ||||
|   config.gem 'grip' | ||||
|   config.gem "devise", :version => '1.0.1' | ||||
|    | ||||
|   # Only load the plugins named here, in the order given (default is alphabetical). | ||||
|   # :all can be used as a placeholder for all plugins not explicitly named | ||||
|   # config.plugins = [ :exception_notification, :ssl_requirement, :all ] | ||||
| 
 | ||||
|   # Skip frameworks you're not going to use. To use Rails without a database, | ||||
|   # you must remove the Active Record framework. | ||||
|   config.frameworks -= [ :active_record ] | ||||
| 
 | ||||
|   # Activate observers that should always be running | ||||
|   # config.active_record.observers = :cacher, :garbage_collector, :forum_observer | ||||
| 
 | ||||
|   # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. | ||||
|   # Run "rake -D time" for a list of tasks for finding time zone names. | ||||
|   config.time_zone = "Taipei" | ||||
|    | ||||
|   # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. | ||||
|   # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')] | ||||
|   config.i18n.default_locale = "zh_tw" | ||||
|    | ||||
|   config.middleware.use :RerouteMiddleware | ||||
|    | ||||
| end | ||||
| 
 | ||||
| #VALID_LOCALES = ["en", "zh_tw"] | ||||
| VALID_LOCALES = ["en", "zh_tw"] | ||||
| 
 | ||||
| MongoMapper.database = "r4-#{Rails.env}"   | ||||
| 
 | ||||
| module MongoMapper::Document::ClassMethods | ||||
|    | ||||
|   def key_i18n(key, *options) | ||||
|     VALID_LOCALES.each do |locale| | ||||
|        key "#{key.to_s}_#{locale}".to_sym, *options | ||||
|     end | ||||
|      | ||||
|     define_method(key) do | ||||
|       self.send("#{key.to_s}_#{I18n.locale}") | ||||
|     end | ||||
|      | ||||
|     define_method("#{key}=") do |value| | ||||
|       VALID_LOCALES.each do |locale| | ||||
|         self.send("#{key.to_s}_#{locale}=", value) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
| end | ||||
| 
 | ||||
| # Load the rails application | ||||
| require File.expand_path('../application', __FILE__) | ||||
| 
 | ||||
| # Initialize the rails application | ||||
| R4::Application.initialize! | ||||
|  |  | |||
|  | @ -1,19 +1,20 @@ | |||
| # Settings specified here will take precedence over those in config/environment.rb | ||||
| R4::Application.configure do | ||||
|   # Settings specified here will take precedence over those in config/environment.rb | ||||
| 
 | ||||
| # In the development environment your application's code is reloaded on | ||||
| # every request.  This slows down response time but is perfect for development | ||||
| # since you don't have to restart the webserver when you make code changes. | ||||
| config.cache_classes = false | ||||
|   # In the development environment your application's code is reloaded on | ||||
|   # every request.  This slows down response time but is perfect for development | ||||
|   # since you don't have to restart the webserver when you make code changes. | ||||
|   config.cache_classes = false | ||||
| 
 | ||||
| # Log error messages when you accidentally call methods on nil. | ||||
| config.whiny_nils = true | ||||
|   # Log error messages when you accidentally call methods on nil. | ||||
|   config.whiny_nils = true | ||||
| 
 | ||||
| # Show full error reports and disable caching | ||||
| config.action_controller.consider_all_requests_local = true | ||||
| config.action_view.debug_rjs                         = true | ||||
| config.action_controller.perform_caching             = false | ||||
|   # Show full error reports and disable caching | ||||
|   config.consider_all_requests_local       = true | ||||
|   config.action_view.debug_rjs             = true | ||||
|   config.action_controller.perform_caching = false | ||||
| 
 | ||||
| # Don't care if the mailer can't send | ||||
| config.action_mailer.raise_delivery_errors = false | ||||
|   # Don't care if the mailer can't send | ||||
|   config.action_mailer.raise_delivery_errors = false | ||||
| 
 | ||||
| config.action_mailer.default_url_options = { :host => 'localhost:3000' } | ||||
| end | ||||
|  |  | |||
|  | @ -1,28 +1,33 @@ | |||
| # Settings specified here will take precedence over those in config/environment.rb | ||||
| R4::Application.configure do | ||||
|   # Settings specified here will take precedence over those in config/environment.rb | ||||
| 
 | ||||
| # The production environment is meant for finished, "live" apps. | ||||
| # Code is not reloaded between requests | ||||
| config.cache_classes = true | ||||
|   # The production environment is meant for finished, "live" apps. | ||||
|   # Code is not reloaded between requests | ||||
|   config.cache_classes = true | ||||
| 
 | ||||
| # Full error reports are disabled and caching is turned on | ||||
| config.action_controller.consider_all_requests_local = false | ||||
| config.action_controller.perform_caching             = true | ||||
| config.action_view.cache_template_loading            = true | ||||
|   # Full error reports are disabled and caching is turned on | ||||
|   config.consider_all_requests_local       = false | ||||
|   config.action_controller.perform_caching = true | ||||
| 
 | ||||
| # See everything in the log (default is :info) | ||||
| # config.log_level = :debug | ||||
|   # See everything in the log (default is :info) | ||||
|   # config.log_level = :debug | ||||
| 
 | ||||
| # Use a different logger for distributed setups | ||||
| # config.logger = SyslogLogger.new | ||||
|   # Use a different logger for distributed setups | ||||
|   # config.logger = SyslogLogger.new | ||||
| 
 | ||||
| # Use a different cache store in production | ||||
| # config.cache_store = :mem_cache_store | ||||
|   # Use a different cache store in production | ||||
|   # config.cache_store = :mem_cache_store | ||||
| 
 | ||||
| # Enable serving of images, stylesheets, and javascripts from an asset server | ||||
| # config.action_controller.asset_host = "http://assets.example.com" | ||||
|   # Disable Rails's static asset server | ||||
|   # In production, Apache or nginx will already do this | ||||
|   config.serve_static_assets = false | ||||
| 
 | ||||
| # Disable delivery errors, bad email addresses will be ignored | ||||
| # config.action_mailer.raise_delivery_errors = false | ||||
|   # Enable serving of images, stylesheets, and javascripts from an asset server | ||||
|   # config.action_controller.asset_host = "http://assets.example.com" | ||||
| 
 | ||||
| # Enable threaded mode | ||||
| # config.threadsafe! | ||||
|   # Disable delivery errors, bad email addresses will be ignored | ||||
|   # config.action_mailer.raise_delivery_errors = false | ||||
| 
 | ||||
|   # Enable threaded mode | ||||
|   # config.threadsafe! | ||||
| end | ||||
|  |  | |||
|  | @ -1,28 +1,29 @@ | |||
| # Settings specified here will take precedence over those in config/environment.rb | ||||
| R4::Application.configure do | ||||
|   # Settings specified here will take precedence over those in config/environment.rb | ||||
| 
 | ||||
| # The test environment is used exclusively to run your application's | ||||
| # test suite.  You never need to work with it otherwise.  Remember that | ||||
| # your test database is "scratch space" for the test suite and is wiped | ||||
| # and recreated between test runs.  Don't rely on the data there! | ||||
| config.cache_classes = true | ||||
|   # The test environment is used exclusively to run your application's | ||||
|   # test suite.  You never need to work with it otherwise.  Remember that | ||||
|   # your test database is "scratch space" for the test suite and is wiped | ||||
|   # and recreated between test runs.  Don't rely on the data there! | ||||
|   config.cache_classes = true | ||||
| 
 | ||||
| # Log error messages when you accidentally call methods on nil. | ||||
| config.whiny_nils = true | ||||
|   # Log error messages when you accidentally call methods on nil. | ||||
|   config.whiny_nils = true | ||||
| 
 | ||||
| # Show full error reports and disable caching | ||||
| config.action_controller.consider_all_requests_local = true | ||||
| config.action_controller.perform_caching             = false | ||||
| config.action_view.cache_template_loading            = true | ||||
|   # Show full error reports and disable caching | ||||
|   config.consider_all_requests_local       = true | ||||
|   config.action_controller.perform_caching = false | ||||
| 
 | ||||
| # Disable request forgery protection in test environment | ||||
| config.action_controller.allow_forgery_protection    = false | ||||
|   # Disable request forgery protection in test environment | ||||
|   config.action_controller.allow_forgery_protection    = false | ||||
| 
 | ||||
| # Tell Action Mailer not to deliver emails to the real world. | ||||
| # The :test delivery method accumulates sent emails in the | ||||
| # ActionMailer::Base.deliveries array. | ||||
| config.action_mailer.delivery_method = :test | ||||
|   # Tell Action Mailer not to deliver emails to the real world. | ||||
|   # The :test delivery method accumulates sent emails in the | ||||
|   # ActionMailer::Base.deliveries array. | ||||
|   config.action_mailer.delivery_method = :test | ||||
| 
 | ||||
| # Use SQL instead of Active Record's schema dumper when creating the test database. | ||||
| # This is necessary if your schema can't be completely dumped by the schema dumper, | ||||
| # like if you have constraints or database-specific column types | ||||
| # config.active_record.schema_format = :sql | ||||
|   # Use SQL instead of Active Record's schema dumper when creating the test database. | ||||
|   # This is necessary if your schema can't be completely dumped by the schema dumper, | ||||
|   # like if you have constraints or database-specific column types | ||||
|   # config.active_record.schema_format = :sql | ||||
| end | ||||
|  |  | |||
|  | @ -3,5 +3,5 @@ | |||
| # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. | ||||
| # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } | ||||
| 
 | ||||
| # You can also remove all the silencers if you're trying do debug a problem that might steem from framework code. | ||||
| # Rails.backtrace_cleaner.remove_silencers! | ||||
| # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. | ||||
| # Rails.backtrace_cleaner.remove_silencers! | ||||
|  |  | |||
|  | @ -0,0 +1,7 @@ | |||
| # Be sure to restart your server when you modify this file. | ||||
| 
 | ||||
| # Your secret key for verifying the integrity of signed cookies. | ||||
| # If you change this key, all old signed cookies will become invalid! | ||||
| # Make sure the secret is at least 30 characters and all random,  | ||||
| # no regular words or you'll be exposed to dictionary attacks. | ||||
| ActionController::Base.cookie_verifier_secret = 'cbf6409102b30cb9f4da455ee08c3a7e9d8b2a3d32a0e5b59a354dad03f469d363a8127ef4b7bc3b1afa632d7cf947a1e59e09022d2d4cd8df1f4fa521d7ec07' | ||||
|  | @ -2,7 +2,7 @@ | |||
| # four configuration values can also be set straight in your models. | ||||
| Devise.setup do |config| | ||||
|   # Configure the e-mail address which will be shown in DeviseMailer. | ||||
|   # config.mailer_sender = "please-change-me@config-initializers-devise.com" | ||||
|   config.mailer_sender = "please-change-me@config-initializers-devise.com" | ||||
| 
 | ||||
|   # ==> Configuration for :authenticatable | ||||
|   # Invoke `rake secret` and use the printed value to setup a pepper to generate | ||||
|  |  | |||
|  | @ -0,0 +1,28 @@ | |||
| MongoMapper.connection = Mongo::Connection.new('localhost', 27017) | ||||
| MongoMapper.database = "r4-#{Rails.env}" | ||||
| 
 | ||||
| if defined?(PhusionPassenger) | ||||
|    PhusionPassenger.on_event(:starting_worker_process) do |forked| | ||||
|      MongoMapper.connection.connect_to_master if forked | ||||
|    end | ||||
| end | ||||
| 
 | ||||
| module MongoMapper::Document::ClassMethods | ||||
|    | ||||
|   def key_i18n(key, *options) | ||||
|     VALID_LOCALES.each do |locale| | ||||
|        key "#{key.to_s}_#{locale}".to_sym, *options | ||||
|     end | ||||
|      | ||||
|     define_method(key) do | ||||
|       self.send("#{key.to_s}_#{I18n.locale}") | ||||
|     end | ||||
|      | ||||
|     define_method("#{key}=") do |value| | ||||
|       VALID_LOCALES.each do |locale| | ||||
|         self.send("#{key.to_s}_#{locale}=", value) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
| end | ||||
|  | @ -5,8 +5,8 @@ | |||
| # Make sure the secret is at least 30 characters and all random,  | ||||
| # no regular words or you'll be exposed to dictionary attacks. | ||||
| ActionController::Base.session = { | ||||
|   :key         => '_r4_session', | ||||
|   :secret      => '1f062d6db3c797bea2da1ae0c82c0dd952833633fcfdda1e20baca0686bc2bee75aaa0db9ffe67e44655fad008fd1ddc5d670b051c7cf54ac6fa51c16dbe49fd' | ||||
|   :key    => '_r4_session', | ||||
|   :secret => '3de7e1b7f4a979950642fd6ebf1a1f67488c568c7e510d7fe9011d6f8ad37e4195bc32aed07167ac7541b7b152d4ffbca73e05bd19d8faddff52b422f3851890' | ||||
| } | ||||
| 
 | ||||
| # Use the database for sessions instead of the cookie-based default, | ||||
|  |  | |||
|  | @ -1,4 +1,10 @@ | |||
| en: | ||||
|   errors: | ||||
|     messages: | ||||
|       not_found: "not found" | ||||
|       already_confirmed: "was already confirmed" | ||||
|       not_locked: "was not locked" | ||||
| 
 | ||||
|   devise: | ||||
|     sessions: | ||||
|       link: 'Sign in' | ||||
|  |  | |||
|  | @ -2,4 +2,4 @@ | |||
| # See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. | ||||
| 
 | ||||
| en: | ||||
|   hello: "Hello world" | ||||
|   hello: "Hello world" | ||||
|  |  | |||
							
								
								
									
										104
									
								
								config/routes.rb
								
								
								
								
							
							
						
						
									
										104
									
								
								config/routes.rb
								
								
								
								
							|  | @ -1,66 +1,90 @@ | |||
| ActionController::Routing::Routes.draw do |map| | ||||
| R4::Application.routes.draw do |map| | ||||
|    | ||||
|   map.resources :announcements | ||||
|   resources :announcements | ||||
|    | ||||
|   map.namespace :admin do |admin| | ||||
|     admin.resources :items, :member => { :up => :put, :down => :put } | ||||
|     admin.resources :pages | ||||
|     admin.resources :links | ||||
|     admin.resources :components | ||||
|     admin.resources :layouts | ||||
|     admin.resources :snippets | ||||
|     admin.resources :assets | ||||
|   end | ||||
|   namespace :admin do | ||||
|      resources :items do | ||||
|          member do | ||||
|            put :up | ||||
|            put :down | ||||
|          end | ||||
| 
 | ||||
|      end | ||||
|      | ||||
|      resources :pages | ||||
|      resources :links | ||||
|      resources :components | ||||
|      resources :layouts | ||||
|      resources :snippets | ||||
|      resources :assets | ||||
|    end | ||||
| 
 | ||||
|    namespace :panel do | ||||
|      resources :users | ||||
|      resources :announcements | ||||
|    end | ||||
| 
 | ||||
|   devise_for :users | ||||
| #   match 'users' => '#index', :as => :devise_for | ||||
|    match '/' => 'pages#index' | ||||
|    match '*page_name' => 'pages#show', :as => :page | ||||
|    | ||||
|   map.namespace :panel do |panel| | ||||
|     panel.resources :users | ||||
|     panel.resources :announcements | ||||
|   end | ||||
|     | ||||
|    | ||||
|   map.devise_for :users | ||||
|    | ||||
|   # The priority is based upon order of creation: first created -> highest priority. | ||||
|   # The priority is based upon order of creation: | ||||
|   # first created -> highest priority. | ||||
| 
 | ||||
|   # Sample of regular route: | ||||
|   #   map.connect 'products/:id', :controller => 'catalog', :action => 'view' | ||||
|   #   match 'products/:id' => 'catalog#view' | ||||
|   # Keep in mind you can assign values other than :controller and :action | ||||
| 
 | ||||
|   # Sample of named route: | ||||
|   #   map.purchase 'products/:id/purchase', :controller => 'catalog', :action => 'purchase' | ||||
|   #   match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase | ||||
|   # This route can be invoked with purchase_url(:id => product.id) | ||||
| 
 | ||||
|   # Sample resource route (maps HTTP verbs to controller actions automatically): | ||||
|   #   map.resources :products | ||||
|   #   resources :products | ||||
| 
 | ||||
|   # Sample resource route with options: | ||||
|   #   map.resources :products, :member => { :short => :get, :toggle => :post }, :collection => { :sold => :get } | ||||
|   #   resources :products do | ||||
|   #     member do | ||||
|   #       get :short | ||||
|   #       post :toggle | ||||
|   #     end | ||||
|   # | ||||
|   #     collection do | ||||
|   #       get :sold | ||||
|   #     end | ||||
|   #   end | ||||
| 
 | ||||
|   # Sample resource route with sub-resources: | ||||
|   #   map.resources :products, :has_many => [ :comments, :sales ], :has_one => :seller | ||||
|    | ||||
|   #   resources :products do | ||||
|   #     resources :comments, :sales | ||||
|   #     resource :seller | ||||
|   #   end | ||||
| 
 | ||||
|   # Sample resource route with more complex sub-resources | ||||
|   #   map.resources :products do |products| | ||||
|   #     products.resources :comments | ||||
|   #     products.resources :sales, :collection => { :recent => :get } | ||||
|   #   resources :products do | ||||
|   #     resources :comments | ||||
|   #     resources :sales do | ||||
|   #       get :recent, :on => :collection | ||||
|   #     end | ||||
|   #   end | ||||
| 
 | ||||
|   # Sample resource route within a namespace: | ||||
|   #   map.namespace :admin do |admin| | ||||
|   #     # Directs /admin/products/* to Admin::ProductsController (app/controllers/admin/products_controller.rb) | ||||
|   #     admin.resources :products | ||||
|   #   namespace :admin do | ||||
|   #     # Directs /admin/products/* to Admin::ProductsController | ||||
|   #     # (app/controllers/admin/products_controller.rb) | ||||
|   #     resources :products | ||||
|   #   end | ||||
| 
 | ||||
|   # You can have the root of your site routed with map.root -- just remember to delete public/index.html. | ||||
|   map.root :controller => "pages" | ||||
|   # You can have the root of your site routed with "root" | ||||
|   # just remember to delete public/index.html. | ||||
|   root :to => "pages#index" | ||||
| 
 | ||||
|   # See how all your routes lay out with "rake routes" | ||||
| 
 | ||||
|   # Install the default routes as the lowest priority. | ||||
|   # Note: These default routes make all actions in every controller accessible via GET requests. You should | ||||
|   # consider removing the them or commenting them out if you're using named routes and resources. | ||||
|    | ||||
|   map.page '*page_name', :controller => 'pages', :action => 'show' | ||||
|    | ||||
|   #map.connect ':controller/:action/:id' | ||||
|   #map.connect ':controller/:action/:id.:format' | ||||
|   # This is a legacy wild controller route that's not recommended for RESTful applications. | ||||
|   # Note: This route will make all actions in every controller accessible via GET requests. | ||||
|   # match ':controller(/:action(/:id(.:format)))' | ||||
| end | ||||
|  |  | |||
|  | @ -0,0 +1,7 @@ | |||
| # This file should contain all the record creation needed to seed the database with its default values. | ||||
| # The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). | ||||
| # | ||||
| # Examples: | ||||
| # | ||||
| #   cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }]) | ||||
| #   Mayor.create(:name => 'Daley', :city => cities.first) | ||||
|  | @ -1,23 +1,19 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | ||||
|        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | ||||
| 
 | ||||
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | ||||
| 
 | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
| <head> | ||||
|   <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> | ||||
|   <title>The page you were looking for doesn't exist (404)</title> | ||||
| 	<style type="text/css"> | ||||
| 		body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; } | ||||
| 		div.dialog { | ||||
| 			width: 25em; | ||||
| 			padding: 0 4em; | ||||
| 			margin: 4em auto 0 auto; | ||||
| 			border: 1px solid #ccc; | ||||
| 			border-right-color: #999; | ||||
| 			border-bottom-color: #999; | ||||
| 		} | ||||
| 		h1 { font-size: 100%; color: #f00; line-height: 1.5em; } | ||||
| 	</style> | ||||
|   <style type="text/css"> | ||||
|     body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; } | ||||
|     div.dialog { | ||||
|       width: 25em; | ||||
|       padding: 0 4em; | ||||
|       margin: 4em auto 0 auto; | ||||
|       border: 1px solid #ccc; | ||||
|       border-right-color: #999; | ||||
|       border-bottom-color: #999; | ||||
|     } | ||||
|     h1 { font-size: 100%; color: #f00; line-height: 1.5em; } | ||||
|   </style> | ||||
| </head> | ||||
| 
 | ||||
| <body> | ||||
|  | @ -27,4 +23,4 @@ | |||
|     <p>You may have mistyped the address or the page may have moved.</p> | ||||
|   </div> | ||||
| </body> | ||||
| </html> | ||||
| </html> | ||||
|  |  | |||
|  | @ -1,23 +1,19 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | ||||
|        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | ||||
| 
 | ||||
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | ||||
| 
 | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
| <head> | ||||
|   <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> | ||||
|   <title>The change you wanted was rejected (422)</title> | ||||
| 	<style type="text/css"> | ||||
| 		body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; } | ||||
| 		div.dialog { | ||||
| 			width: 25em; | ||||
| 			padding: 0 4em; | ||||
| 			margin: 4em auto 0 auto; | ||||
| 			border: 1px solid #ccc; | ||||
| 			border-right-color: #999; | ||||
| 			border-bottom-color: #999; | ||||
| 		} | ||||
| 		h1 { font-size: 100%; color: #f00; line-height: 1.5em; } | ||||
| 	</style> | ||||
|   <style type="text/css"> | ||||
|     body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; } | ||||
|     div.dialog { | ||||
|       width: 25em; | ||||
|       padding: 0 4em; | ||||
|       margin: 4em auto 0 auto; | ||||
|       border: 1px solid #ccc; | ||||
|       border-right-color: #999; | ||||
|       border-bottom-color: #999; | ||||
|     } | ||||
|     h1 { font-size: 100%; color: #f00; line-height: 1.5em; } | ||||
|   </style> | ||||
| </head> | ||||
| 
 | ||||
| <body> | ||||
|  | @ -27,4 +23,4 @@ | |||
|     <p>Maybe you tried to change something you didn't have access to.</p> | ||||
|   </div> | ||||
| </body> | ||||
| </html> | ||||
| </html> | ||||
|  |  | |||
|  | @ -1,23 +1,19 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | ||||
|        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | ||||
| 
 | ||||
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | ||||
| 
 | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
| <head> | ||||
|   <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> | ||||
|   <title>We're sorry, but something went wrong (500)</title> | ||||
| 	<style type="text/css"> | ||||
| 		body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; } | ||||
| 		div.dialog { | ||||
| 			width: 25em; | ||||
| 			padding: 0 4em; | ||||
| 			margin: 4em auto 0 auto; | ||||
| 			border: 1px solid #ccc; | ||||
| 			border-right-color: #999; | ||||
| 			border-bottom-color: #999; | ||||
| 		} | ||||
| 		h1 { font-size: 100%; color: #f00; line-height: 1.5em; } | ||||
| 	</style> | ||||
|   <style type="text/css"> | ||||
|     body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; } | ||||
|     div.dialog { | ||||
|       width: 25em; | ||||
|       padding: 0 4em; | ||||
|       margin: 4em auto 0 auto; | ||||
|       border: 1px solid #ccc; | ||||
|       border-right-color: #999; | ||||
|       border-bottom-color: #999; | ||||
|     } | ||||
|     h1 { font-size: 100%; color: #f00; line-height: 1.5em; } | ||||
|   </style> | ||||
| </head> | ||||
| 
 | ||||
| <body> | ||||
|  |  | |||
|  | @ -1,10 +1,2 @@ | |||
| $(document).ready(function(){	 | ||||
| 	$.easy.navigation(); | ||||
| 	$.easy.tooltip(); | ||||
| 	$.easy.popup(); | ||||
| 	$.easy.external(); | ||||
| 	$.easy.rotate(); | ||||
| 	$.easy.forms(); | ||||
| 	$.easy.showhide(); | ||||
| 	$.easy.jump(); | ||||
| }); | ||||
| // Place your application-specific JavaScript functions and classes here
 | ||||
| // This file is automatically included by javascript_include_tag :defaults
 | ||||
|  |  | |||
|  | @ -0,0 +1,126 @@ | |||
| jQuery(function ($) { | ||||
|     var csrf_token = $('meta[name=csrf-token]').attr('content'), | ||||
|         csrf_param = $('meta[name=csrf-param]').attr('content'); | ||||
| 
 | ||||
|     $.fn.extend({ | ||||
|         /** | ||||
|          * Triggers a custom event on an element and returns the event result | ||||
|          * this is used to get around not being able to ensure callbacks are placed | ||||
|          * at the end of the chain. | ||||
|          * | ||||
|          * TODO: deprecate with jQuery 1.4.2 release, in favor of subscribing to our | ||||
|          *       own events and placing ourselves at the end of the chain. | ||||
|          */ | ||||
|         triggerAndReturn: function (name, data) { | ||||
|             var event = new $.Event(name); | ||||
|             this.trigger(event, data); | ||||
| 
 | ||||
|             return event.result !== false; | ||||
|         }, | ||||
| 
 | ||||
|         /** | ||||
|          * Handles execution of remote calls firing overridable events along the way | ||||
|          */ | ||||
|         callRemote: function () { | ||||
|             var el      = this, | ||||
|                 data    = el.is('form') ? el.serializeArray() : [], | ||||
|                 method  = el.attr('method') || el.attr('data-method') || 'GET', | ||||
|                 url     = el.attr('action') || el.attr('href'); | ||||
| 
 | ||||
|             if (url === undefined) { | ||||
|               throw "No URL specified for remote call (action or href must be present)."; | ||||
|             } else { | ||||
|                 if (el.triggerAndReturn('ajax:before')) { | ||||
|                     $.ajax({ | ||||
|                         url: url, | ||||
|                         data: data, | ||||
|                         dataType: 'script', | ||||
|                         type: method.toUpperCase(), | ||||
|                         beforeSend: function (xhr) { | ||||
|                             el.trigger('ajax:loading', xhr); | ||||
|                         }, | ||||
|                         success: function (data, status, xhr) { | ||||
|                             el.trigger('ajax:success', [data, status, xhr]); | ||||
|                         }, | ||||
|                         complete: function (xhr) { | ||||
|                             el.trigger('ajax:complete', xhr); | ||||
|                         }, | ||||
|                         error: function (xhr, status, error) { | ||||
|                             el.trigger('ajax:failure', [xhr, status, error]); | ||||
|                         } | ||||
|                     }); | ||||
|                 } | ||||
| 
 | ||||
|                 el.trigger('ajax:after'); | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
| 
 | ||||
|     /** | ||||
|      *  confirmation handler | ||||
|      */ | ||||
|     $('a[data-confirm],input[data-confirm]').live('click', function () { | ||||
|         var el = $(this); | ||||
|         if (el.triggerAndReturn('confirm')) { | ||||
|             if (!confirm(el.attr('data-confirm'))) { | ||||
|                 return false; | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|      * remote handlers | ||||
|      */ | ||||
|     $('form[data-remote]').live('submit', function (e) { | ||||
|         $(this).callRemote(); | ||||
|         e.preventDefault(); | ||||
|     }); | ||||
| 
 | ||||
|     $('a[data-remote],input[data-remote]').live('click', function (e) { | ||||
|         $(this).callRemote(); | ||||
|         e.preventDefault(); | ||||
|     }); | ||||
| 
 | ||||
|     $('a[data-method]:not([data-remote])').live('click', function (e){ | ||||
|         var link = $(this), | ||||
|             href = link.attr('href'), | ||||
|             method = link.attr('data-method'), | ||||
|             form = $('<form method="post" action="'+href+'">'), | ||||
|             metadata_input = '<input name="_method" value="'+method+'" type="hidden" />'; | ||||
| 
 | ||||
|         if (csrf_param != null && csrf_token != null) { | ||||
|           metadata_input += '<input name="'+csrf_param+'" value="'+csrf_token+'" type="hidden" />'; | ||||
|         } | ||||
| 
 | ||||
|         form.hide() | ||||
|             .append(metadata_input) | ||||
|             .appendTo('body'); | ||||
| 
 | ||||
|         e.preventDefault(); | ||||
|         form.submit(); | ||||
|     }); | ||||
| 
 | ||||
|     /** | ||||
|      * disable-with handlers | ||||
|      */ | ||||
|     var disable_with_input_selector = 'input[data-disable-with]'; | ||||
|     var disable_with_form_selector = 'form[data-remote]:has(' + disable_with_input_selector + ')'; | ||||
| 
 | ||||
|     $(disable_with_form_selector).live('ajax:before', function () { | ||||
|         $(this).find(disable_with_input_selector).each(function () { | ||||
|             var input = $(this); | ||||
|             input.data('enable-with', input.val()) | ||||
|                  .attr('value', input.attr('data-disable-with')) | ||||
|                  .attr('disabled', 'disabled'); | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
|     $(disable_with_form_selector).live('ajax:after', function () { | ||||
|         $(this).find(disable_with_input_selector).each(function () { | ||||
|             var input = $(this); | ||||
|             input.removeAttr('disabled') | ||||
|                  .val(input.data('enable-with')); | ||||
|         }); | ||||
|     }); | ||||
| }); | ||||
|  | @ -1,4 +0,0 @@ | |||
| #!/usr/bin/env ruby | ||||
| require File.dirname(__FILE__) + '/../config/boot' | ||||
| $LOAD_PATH.unshift "#{RAILTIES_PATH}/builtin/rails_info" | ||||
| require 'commands/about' | ||||
|  | @ -1,3 +0,0 @@ | |||
| #!/usr/bin/env ruby | ||||
| require File.dirname(__FILE__) + '/../config/boot' | ||||
| require 'commands/console' | ||||
|  | @ -1,3 +0,0 @@ | |||
| #!/usr/bin/env ruby | ||||
| require File.dirname(__FILE__) + '/../config/boot' | ||||
| require 'commands/dbconsole' | ||||
|  | @ -1,3 +0,0 @@ | |||
| #!/usr/bin/env ruby | ||||
| require File.dirname(__FILE__) + '/../config/boot' | ||||
| require 'commands/destroy' | ||||
|  | @ -1,3 +0,0 @@ | |||
| #!/usr/bin/env ruby | ||||
| require File.dirname(__FILE__) + '/../config/boot' | ||||
| require 'commands/generate' | ||||
|  | @ -1,3 +0,0 @@ | |||
| #!/usr/bin/env ruby | ||||
| require File.dirname(__FILE__) + '/../../config/boot' | ||||
| require 'commands/performance/benchmarker' | ||||
|  | @ -1,3 +0,0 @@ | |||
| #!/usr/bin/env ruby | ||||
| require File.dirname(__FILE__) + '/../../config/boot' | ||||
| require 'commands/performance/profiler' | ||||
|  | @ -1,3 +0,0 @@ | |||
| #!/usr/bin/env ruby | ||||
| require File.dirname(__FILE__) + '/../config/boot' | ||||
| require 'commands/plugin' | ||||
|  | @ -0,0 +1,10 @@ | |||
| #!/usr/bin/env ruby | ||||
| # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. | ||||
| 
 | ||||
| ENV_PATH  = File.expand_path('../../config/environment',  __FILE__) | ||||
| BOOT_PATH = File.expand_path('../../config/boot',  __FILE__) | ||||
| APP_PATH  = File.expand_path('../../config/application',  __FILE__) | ||||
| ROOT_PATH = File.expand_path('../..',  __FILE__) | ||||
| 
 | ||||
| require BOOT_PATH | ||||
| require 'rails/commands' | ||||
|  | @ -1,3 +0,0 @@ | |||
| #!/usr/bin/env ruby | ||||
| require File.dirname(__FILE__) + '/../config/boot' | ||||
| require 'commands/runner' | ||||
|  | @ -1,3 +0,0 @@ | |||
| #!/usr/bin/env ruby | ||||
| require File.dirname(__FILE__) + '/../config/boot' | ||||
| require 'commands/server' | ||||
|  | @ -1,5 +1,5 @@ | |||
| require 'test_helper' | ||||
| require 'performance_test_help' | ||||
| require 'rails/performance_test_help' | ||||
| 
 | ||||
| # Profiling results for each test method are written to tmp/performance. | ||||
| class BrowsingTest < ActionController::PerformanceTest | ||||
|  |  | |||
|  | @ -1,33 +1,8 @@ | |||
| ENV["RAILS_ENV"] = "test" | ||||
| require File.expand_path(File.dirname(__FILE__) + "/../config/environment") | ||||
| require 'test_help' | ||||
| require 'rails/test_help' | ||||
| 
 | ||||
| class ActiveSupport::TestCase | ||||
|   # Transactional fixtures accelerate your tests by wrapping each test method | ||||
|   # in a transaction that's rolled back on completion.  This ensures that the | ||||
|   # test database remains unchanged so your fixtures don't have to be reloaded | ||||
|   # between every test method.  Fewer database queries means faster tests. | ||||
|   # | ||||
|   # Read Mike Clark's excellent walkthrough at | ||||
|   #   http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting | ||||
|   # | ||||
|   # Every Active Record database supports transactions except MyISAM tables | ||||
|   # in MySQL.  Turn off transactional fixtures in this case; however, if you | ||||
|   # don't care one way or the other, switching from MyISAM to InnoDB tables | ||||
|   # is recommended. | ||||
|   # | ||||
|   # The only drawback to using transactional fixtures is when you actually  | ||||
|   # need to test transactions.  Since your test is bracketed by a transaction, | ||||
|   # any transactions started in your code will be automatically rolled back. | ||||
|   self.use_transactional_fixtures = true | ||||
| 
 | ||||
|   # Instantiated fixtures are slow, but give you @david where otherwise you | ||||
|   # would need people(:david).  If you don't want to migrate your existing | ||||
|   # test cases which use the @david style and don't mind the speed hit (each | ||||
|   # instantiated fixtures translates to a database query per test method), | ||||
|   # then set this back to true. | ||||
|   self.use_instantiated_fixtures  = false | ||||
| 
 | ||||
|   # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order. | ||||
|   # | ||||
|   # Note: You'll currently still have to declare fixtures explicitly in integration tests | ||||
|  |  | |||
|  | @ -1,35 +0,0 @@ | |||
| SVN | ||||
| * better approximate scriptaculous effect names | ||||
| * add support for page[:element_id].visual_effect(:effect) as well as page.visual_effect(:effect, :element_id) | ||||
| * added a reset form function to jrails.js (stolen from jquery form) | ||||
| * can now use jquery selectors in all functions | ||||
| * added javascript_function helper to render inline rjs helpers | ||||
| * better support for sortable_element | ||||
| * updated to jquery-ui 1.5.1 | ||||
| 
 | ||||
| 0.4.0 (16 June 2008) | ||||
| * updated to jquery-ui 1.5 & merged js into single file | ||||
| * Added jQuery.noConflict support | ||||
| * support for value/val | ||||
| * additional support for update/delete methods | ||||
| * support for success/failure hash | ||||
| * setRequestHeader now gets called globally | ||||
| * Better support for droppables, sortables | ||||
| * Add support for prototype AJAX callbacks | ||||
| * better support for AJAX form calls | ||||
| 
 | ||||
| 0.3.0 (22 Feb 2008) | ||||
| * updated to jquery-fx 1.0b and jquery-ui 1.5b | ||||
| * Add text/javascript request header to fix format.js | ||||
| * Added Tasks (thanks ggarside) | ||||
| * Improve visual_effects methods | ||||
| * Fixed some RJS calls | ||||
| * Fixed observer code for ie | ||||
| 
 | ||||
| 0.2.0 (26 Nov 2007) | ||||
| * Vastly Improved FX | ||||
| * Improved Form Observers | ||||
| * Fixed Rails <= 1.2.6 Compatibility | ||||
| 
 | ||||
| 0.1.0 (15 Nov 2007) | ||||
| * Initial release | ||||
|  | @ -1,21 +0,0 @@ | |||
| = jRails | ||||
| 
 | ||||
| jRails is a drop-in jQuery replacement for the Rails Prototype/script.aculo.us helpers. | ||||
| 
 | ||||
| == Resources | ||||
| 
 | ||||
| Install | ||||
| 
 | ||||
| * .script/plugin install http://ennerchi.googlecode.com/svn/trunk/plugins/jrails | ||||
| 
 | ||||
| Project Site | ||||
| 
 | ||||
| * http://code.google.com/p/ennerchi/ | ||||
| 
 | ||||
| Web Site | ||||
| 
 | ||||
| * http://www.ennerchi.com/projects/jrails | ||||
| 
 | ||||
| Group Site | ||||
| 
 | ||||
| * http://groups.google.com/group/jrails | ||||
|  | @ -1,6 +0,0 @@ | |||
| # uncomment to use jQuery.noConflict() | ||||
| #ActionView::Helpers::PrototypeHelper::JQUERY_VAR = 'jQuery' | ||||
| 
 | ||||
| ActionView::Helpers::AssetTagHelper::JAVASCRIPT_DEFAULT_SOURCES = ['jquery','jquery-ui','jrails'] | ||||
| ActionView::Helpers::AssetTagHelper::reset_javascript_include_default | ||||
| require 'jrails' | ||||
|  | @ -1,9 +0,0 @@ | |||
| # Install hook code here | ||||
| puts "Copying files..." | ||||
| dir = "javascripts" | ||||
| ["jquery-ui.js", "jquery.js", "jrails.js"].each do |js_file| | ||||
| 	dest_file = File.join(RAILS_ROOT, "public", dir, js_file) | ||||
| 	src_file = File.join(File.dirname(__FILE__) , dir, js_file) | ||||
| 	FileUtils.cp_r(src_file, dest_file) | ||||
| end | ||||
| puts "Files copied - Installation complete!" | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -1 +0,0 @@ | |||
| (function($){$.ajaxSettings.accepts._default = "text/javascript, text/html, application/xml, text/xml, */*"})(jQuery);(function($){$.fn.reset=function(){return this.each(function(){if(typeof this.reset=="function"||(typeof this.reset=="object"&&!this.reset.nodeType)){this.reset()}})};$.fn.enable=function(){return this.each(function(){this.disabled=false})};$.fn.disable=function(){return this.each(function(){this.disabled=true})}})(jQuery);(function($){$.extend({fieldEvent:function(el,obs){var field=el[0]||el,e="change";if(field.type=="radio"||field.type=="checkbox"){e="click"}else{if(obs&&field.type=="text"||field.type=="textarea"){e="keyup"}}return e}});$.fn.extend({delayedObserver:function(delay,callback){var el=$(this);if(typeof window.delayedObserverStack=="undefined"){window.delayedObserverStack=[]}if(typeof window.delayedObserverCallback=="undefined"){window.delayedObserverCallback=function(stackPos){observed=window.delayedObserverStack[stackPos];if(observed.timer){clearTimeout(observed.timer)}observed.timer=setTimeout(function(){observed.timer=null;observed.callback(observed.obj,observed.obj.formVal())},observed.delay*1000);observed.oldVal=observed.obj.formVal()}}window.delayedObserverStack.push({obj:el,timer:null,delay:delay,oldVal:el.formVal(),callback:callback});var stackPos=window.delayedObserverStack.length-1;if(el[0].tagName=="FORM"){$(":input",el).each(function(){var field=$(this);field.bind($.fieldEvent(field,delay),function(){observed=window.delayedObserverStack[stackPos];if(observed.obj.formVal()==observed.obj.oldVal){return}else{window.delayedObserverCallback(stackPos)}})})}else{el.bind($.fieldEvent(el,delay),function(){observed=window.delayedObserverStack[stackPos];if(observed.obj.formVal()==observed.obj.oldVal){return}else{window.delayedObserverCallback(stackPos)}})}},formVal:function(){var el=this[0];if(el.tagName=="FORM"){return this.serialize()}if(el.type=="checkbox"||self.type=="radio"){return this.filter("input:checked").val()||""}else{return this.val()}}})})(jQuery);(function($){$.fn.extend({visualEffect:function(o){e=o.replace(/\_(.)/g,function(m,l){return l.toUpperCase()});return eval("$(this)."+e+"()")},appear:function(speed,callback){return this.fadeIn(speed,callback)},blindDown:function(speed,callback){return this.show("blind",{direction:"vertical"},speed,callback)},blindUp:function(speed,callback){return this.hide("blind",{direction:"vertical"},speed,callback)},blindRight:function(speed,callback){return this.show("blind",{direction:"horizontal"},speed,callback)},blindLeft:function(speed,callback){this.hide("blind",{direction:"horizontal"},speed,callback);return this},dropOut:function(speed,callback){return this.hide("drop",{direction:"down"},speed,callback)},dropIn:function(speed,callback){return this.show("drop",{direction:"up"},speed,callback)},fade:function(speed,callback){return this.fadeOut(speed,callback)},fadeToggle:function(speed,callback){return this.animate({opacity:"toggle"},speed,callback)},fold:function(speed,callback){return this.hide("fold",{},speed,callback)},foldOut:function(speed,callback){return this.show("fold",{},speed,callback)},grow:function(speed,callback){return this.show("scale",{},speed,callback)},highlight:function(speed,callback){return this.show("highlight",{},speed,callback)},puff:function(speed,callback){return this.hide("puff",{},speed,callback)},pulsate:function(speed,callback){return this.show("pulsate",{},speed,callback)},shake:function(speed,callback){return this.show("shake",{},speed,callback)},shrink:function(speed,callback){return this.hide("scale",{},speed,callback)},squish:function(speed,callback){return this.hide("scale",{origin:["top","left"]},speed,callback)},slideUp:function(speed,callback){return this.hide("slide",{direction:"up"},speed,callback)},slideDown:function(speed,callback){return this.show("slide",{direction:"up"},speed,callback)},switchOff:function(speed,callback){return this.hide("clip",{},speed,callback)},switchOn:function(speed,callback){return this.show("clip",{},speed,callback)}})})(jQuery); | ||||
|  | @ -1,192 +0,0 @@ | |||
| /* | ||||
| * | ||||
| * jRails ajax extras | ||||
| * version 0.1 | ||||
| * <aaron@ennerchi.com> | http://www.ennerchi.com
 | ||||
| * | ||||
| */ | ||||
| 
 | ||||
| (function($) { | ||||
| 	$.ajaxSettings.accepts._default = "text/javascript, text/html, application/xml, text/xml, */*"; | ||||
| })(jQuery); | ||||
| 
 | ||||
| 
 | ||||
| /* | ||||
| * | ||||
| * jRails form extras | ||||
| * <aaron@ennerchi.com> | http://www.ennerchi.com
 | ||||
| * | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
| (function($) { | ||||
| 	// reset a form
 | ||||
| 	$.fn.reset = function() { | ||||
| 		return this.each(function() { | ||||
| 			// guard against an input with the name of 'reset'
 | ||||
| 			// note that IE reports the reset function as an 'object'
 | ||||
| 			if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) | ||||
| 				this.reset(); | ||||
| 		}); | ||||
| 	}; | ||||
| 	// enable a form element
 | ||||
| 	$.fn.enable = function() { | ||||
| 		return this.each(function() { | ||||
| 			this.disabled = false; | ||||
| 		}); | ||||
| 	}; | ||||
| 	// disable a form element
 | ||||
| 	$.fn.disable = function() { | ||||
| 		return this.each(function() { | ||||
| 			this.disabled = true; | ||||
| 		}); | ||||
| 	}; | ||||
| 
 | ||||
| })(jQuery); | ||||
| 
 | ||||
| /* | ||||
| * | ||||
| * jRails form observer plugin | ||||
| * version 0.2 | ||||
| * <aaron@ennerchi.com> | http://www.ennerchi.com
 | ||||
| * | ||||
| */ | ||||
| 
 | ||||
| (function($) { | ||||
| 	$.extend({ // Translate field to event
 | ||||
| 		fieldEvent: function(el, obs) { | ||||
| 			var field = el[0] || el, e = 'change'; | ||||
| 			if (field.type == 'radio' || field.type == 'checkbox') e = 'click'; | ||||
| 			else if (obs && field.type == 'text' || field.type == 'textarea') e = 'keyup'; | ||||
| 			return e; | ||||
| 		} | ||||
| 	}); | ||||
| 	$.fn.extend({ // Delayed observer for fields and forms
 | ||||
| 		delayedObserver: function(delay, callback){ | ||||
| 			var el = $(this); | ||||
| 			if (typeof window.delayedObserverStack == 'undefined') window.delayedObserverStack = []; | ||||
| 			if (typeof window.delayedObserverCallback == 'undefined') { | ||||
| 				window.delayedObserverCallback = function(stackPos) { | ||||
| 					var observed = window.delayedObserverStack[stackPos]; | ||||
| 					if (observed.timer) clearTimeout(observed.timer); | ||||
| 					observed.timer = setTimeout(function(){ | ||||
| 						observed.timer = null; | ||||
| 						observed.callback(observed.obj, observed.obj.formVal()); | ||||
| 					}, observed.delay * 1000); | ||||
| 					observed.oldVal = observed.obj.formVal(); | ||||
| 				}; | ||||
| 			} | ||||
| 			window.delayedObserverStack.push({ | ||||
| 				obj: el, timer: null, delay: delay, | ||||
| 				oldVal: el.formVal(), callback: callback | ||||
| 			}); | ||||
| 			var stackPos = window.delayedObserverStack.length-1; | ||||
| 			if (el[0].tagName == 'FORM') { | ||||
| 				$(':input', el).each(function(){ | ||||
| 					var field = $(this); | ||||
| 					field.bind($.fieldEvent(field, delay), function(){ | ||||
| 						var observed = window.delayedObserverStack[stackPos]; | ||||
| 						if (observed.obj.formVal() == observed.oldVal) return; | ||||
| 						else window.delayedObserverCallback(stackPos); | ||||
| 					}); | ||||
| 				}); | ||||
| 			} else { | ||||
| 				el.bind($.fieldEvent(el, delay), function(){ | ||||
| 					var observed = window.delayedObserverStack[stackPos]; | ||||
| 					if (observed.obj.formVal() == observed.oldVal) return; | ||||
| 					else window.delayedObserverCallback(stackPos); | ||||
| 				}); | ||||
| 			}; | ||||
| 		}, | ||||
| 		formVal: function() { // Gets form values
 | ||||
| 			var el = this[0]; | ||||
| 			if(el.tagName == 'FORM') return this.serialize(); | ||||
| 			if(el.type == 'checkbox' || el.type == 'radio') return this.filter('input:checked').val() || ''; | ||||
| 			else return this.val(); | ||||
| 		} | ||||
| 	}); | ||||
| })(jQuery); | ||||
| 
 | ||||
| /* | ||||
| * | ||||
| * jRails visual effects stubs | ||||
| * version 0.2 | ||||
| * <aaron@ennerchi.com> | http://www.ennerchi.com
 | ||||
| * | ||||
| */ | ||||
| 
 | ||||
| (function($) { | ||||
| 	$.fn.extend({ | ||||
| 		visualEffect : function(o) { | ||||
| 			e = o.replace(/\_(.)/g, function(m, l){return l.toUpperCase()}); | ||||
| 			return eval('$(this).'+e+'()'); | ||||
| 		}, | ||||
| 		appear : function(speed, callback) { | ||||
| 			return this.fadeIn(speed, callback); | ||||
| 		}, | ||||
| 		blindDown : function(speed, callback) { | ||||
| 			return this.show('blind', { direction: 'vertical' }, speed, callback); | ||||
| 		}, | ||||
| 		blindUp : function(speed, callback) { | ||||
| 			return this.hide('blind', { direction: 'vertical' }, speed, callback); | ||||
| 		}, | ||||
| 		blindRight : function(speed, callback) { | ||||
| 			return this.show('blind', { direction: 'horizontal' }, speed, callback); | ||||
| 		}, | ||||
| 		blindLeft : function(speed, callback) { | ||||
| 			this.hide('blind', { direction: 'horizontal' }, speed, callback); | ||||
| 			return this; | ||||
| 		}, | ||||
| 		dropOut : function(speed, callback) { | ||||
| 			return this.hide('drop', {direction: 'down' }, speed, callback); | ||||
| 		}, | ||||
| 		dropIn : function(speed, callback) { | ||||
| 			return this.show('drop', { direction: 'up' }, speed, callback); | ||||
| 		}, | ||||
| 		fade : function(speed, callback) { | ||||
| 			return this.fadeOut(speed, callback); | ||||
| 		}, | ||||
| 		fadeToggle : function(speed, callback) { | ||||
| 			return this.animate({opacity: 'toggle'}, speed, callback); | ||||
| 		}, | ||||
| 		fold : function(speed, callback) { | ||||
| 			return this.hide('fold', {}, speed, callback); | ||||
| 		}, | ||||
| 		foldOut : function(speed, callback) { | ||||
| 			return this.show('fold', {}, speed, callback); | ||||
| 		}, | ||||
| 		grow : function(speed, callback) { | ||||
| 			return this.show('scale', {}, speed, callback); | ||||
| 		}, | ||||
| 		highlight : function(speed, callback) { | ||||
| 			return this.show('highlight', {}, speed, callback); | ||||
| 		}, | ||||
| 		puff : function(speed, callback) { | ||||
| 			return this.hide('puff', {}, speed, callback); | ||||
| 		}, | ||||
| 		pulsate : function(speed, callback) { | ||||
| 			return this.show('pulsate', {}, speed, callback); | ||||
| 		}, | ||||
| 		shake : function(speed, callback) { | ||||
| 			return this.show('shake', {}, speed, callback); | ||||
| 		}, | ||||
| 		shrink : function(speed, callback) { | ||||
| 			return this.hide('scale', {}, speed, callback); | ||||
| 		}, | ||||
| 		squish : function(speed, callback) { | ||||
| 			return this.hide('scale', { origin: ['top', 'left'] }, speed, callback); | ||||
| 		}, | ||||
| 		slideUp : function(speed, callback) { | ||||
| 			return this.hide('slide', { direction: 'up'}, speed, callback); | ||||
| 		}, | ||||
| 		slideDown : function(speed, callback) { | ||||
| 			return this.show('slide', { direction: 'up'}, speed, callback); | ||||
| 		}, | ||||
| 		switchOff : function(speed, callback) { | ||||
| 			return this.hide('clip', {}, speed, callback); | ||||
| 		}, | ||||
| 		switchOn : function(speed, callback) { | ||||
| 			return this.show('clip', {}, speed, callback); | ||||
| 		} | ||||
| 	}); | ||||
| })(jQuery); | ||||
|  | @ -1,410 +0,0 @@ | |||
| module ActionView | ||||
|   module Helpers | ||||
|      | ||||
|     module JavaScriptHelper | ||||
|        | ||||
|       # This function can be used to render rjs inline | ||||
|       # | ||||
|       # <%= javascript_function do |page| | ||||
|       #   page.replace_html :list, :partial => 'list', :object => @list | ||||
|       # end %> | ||||
|       # | ||||
|       def javascript_function(*args, &block) | ||||
|         html_options = args.extract_options! | ||||
|         function = args[0] || '' | ||||
| 
 | ||||
|         html_options.symbolize_keys! | ||||
|         function = update_page(&block) if block_given? | ||||
|         javascript_tag(function) | ||||
|       end | ||||
|        | ||||
|       def jquery_id(id) | ||||
|         id.to_s.count('#.*,>+~:[/ ') == 0 ? "##{id}" : id | ||||
|       end | ||||
|            | ||||
|       def jquery_ids(ids) | ||||
|         Array(ids).map{|id| jquery_id(id)}.join(',') | ||||
|       end | ||||
| 
 | ||||
|     end | ||||
|      | ||||
|     module PrototypeHelper | ||||
|        | ||||
|       unless const_defined? :JQUERY_VAR | ||||
|         JQUERY_VAR = '$' | ||||
|       end | ||||
|            | ||||
|       unless const_defined? :JQCALLBACKS | ||||
|         JQCALLBACKS = Set.new([ :beforeSend, :complete, :error, :success ] + (100..599).to_a) | ||||
|         AJAX_OPTIONS = Set.new([ :before, :after, :condition, :url, | ||||
|                          :asynchronous, :method, :insertion, :position, | ||||
|                          :form, :with, :update, :script ]).merge(JQCALLBACKS) | ||||
|       end | ||||
|        | ||||
|       def periodically_call_remote(options = {}) | ||||
|         frequency = options[:frequency] || 10 # every ten seconds by default | ||||
|         code = "setInterval(function() {#{remote_function(options)}}, #{frequency} * 1000)" | ||||
|         javascript_tag(code) | ||||
|       end | ||||
|        | ||||
|       def remote_function(options) | ||||
|         javascript_options = options_for_ajax(options) | ||||
| 
 | ||||
|         update = '' | ||||
|         if options[:update] && options[:update].is_a?(Hash) | ||||
|           update  = [] | ||||
|           update << "success:'#{options[:update][:success]}'" if options[:update][:success] | ||||
|           update << "failure:'#{options[:update][:failure]}'" if options[:update][:failure] | ||||
|           update  = '{' + update.join(',') + '}' | ||||
|         elsif options[:update] | ||||
|           update << "'#{options[:update]}'" | ||||
|         end | ||||
| 
 | ||||
|         function = "#{JQUERY_VAR}.ajax(#{javascript_options})" | ||||
| 
 | ||||
|         function = "#{options[:before]}; #{function}" if options[:before] | ||||
|         function = "#{function}; #{options[:after]}"  if options[:after] | ||||
|         function = "if (#{options[:condition]}) { #{function}; }" if options[:condition] | ||||
|         function = "if (confirm('#{escape_javascript(options[:confirm])}')) { #{function}; }" if options[:confirm] | ||||
|         return function | ||||
|       end | ||||
|        | ||||
|       class JavaScriptGenerator | ||||
|         module GeneratorMethods | ||||
|            | ||||
|           def insert_html(position, id, *options_for_render) | ||||
|             insertion = position.to_s.downcase | ||||
|             insertion = 'append' if insertion == 'bottom' | ||||
|             insertion = 'prepend' if insertion == 'top' | ||||
|             call "#{JQUERY_VAR}(\"#{jquery_id(id)}\").#{insertion}", render(*options_for_render) | ||||
|           end | ||||
|            | ||||
|           def replace_html(id, *options_for_render) | ||||
|             insert_html(:html, id, *options_for_render) | ||||
|           end | ||||
|            | ||||
|           def replace(id, *options_for_render) | ||||
|             call "#{JQUERY_VAR}(\"#{jquery_id(id)}\").replaceWith", render(*options_for_render) | ||||
|           end | ||||
|            | ||||
|           def remove(*ids) | ||||
|             call "#{JQUERY_VAR}(\"#{jquery_ids(ids)}\").remove" | ||||
|           end | ||||
|            | ||||
|           def show(*ids) | ||||
|             call "#{JQUERY_VAR}(\"#{jquery_ids(ids)}\").show" | ||||
|           end | ||||
|            | ||||
|           def hide(*ids) | ||||
|             call "#{JQUERY_VAR}(\"#{jquery_ids(ids)}\").hide" | ||||
|           end | ||||
| 
 | ||||
|           def toggle(*ids) | ||||
|             call "#{JQUERY_VAR}(\"#{jquery_ids(ids)}\").toggle" | ||||
|           end | ||||
|            | ||||
|           def jquery_id(id) | ||||
|             id.to_s.count('#.*,>+~:[/ ') == 0 ? "##{id}" : id | ||||
|           end | ||||
|            | ||||
|           def jquery_ids(ids) | ||||
|             Array(ids).map{|id| jquery_id(id)}.join(',') | ||||
|           end | ||||
|            | ||||
|         end | ||||
|       end | ||||
|        | ||||
|     protected | ||||
|       def options_for_ajax(options) | ||||
|         js_options = build_callbacks(options) | ||||
|          | ||||
|         url_options = options[:url] | ||||
|         url_options = url_options.merge(:escape => false) if url_options.is_a?(Hash) | ||||
|         js_options['url'] = "'#{url_for(url_options)}'" | ||||
|         js_options['async'] = false if options[:type] == :synchronous | ||||
|         js_options['type'] = options[:method] ? method_option_to_s(options[:method]) : ( options[:form] ? "'post'" : nil ) | ||||
|         js_options['dataType'] = options[:datatype] ? "'#{options[:datatype]}'" : (options[:update] ? nil : "'script'") | ||||
|          | ||||
|         if options[:form] | ||||
|           js_options['data'] = "#{JQUERY_VAR}.param(#{JQUERY_VAR}(this).serializeArray())" | ||||
|         elsif options[:submit] | ||||
|           js_options['data'] = "#{JQUERY_VAR}(\"##{options[:submit]} :input\").serialize()" | ||||
|         elsif options[:with] | ||||
|           js_options['data'] = options[:with].gsub("Form.serialize(this.form)","#{JQUERY_VAR}.param(#{JQUERY_VAR}(this.form).serializeArray())") | ||||
|         end | ||||
|          | ||||
|         js_options['type'] ||= "'post'" | ||||
|         if options[:method] | ||||
|           if method_option_to_s(options[:method]) == "'put'" || method_option_to_s(options[:method]) == "'delete'" | ||||
|             js_options['type'] = "'post'" | ||||
|             if js_options['data'] | ||||
|               js_options['data'] << " + '&" | ||||
|             else | ||||
|               js_options['data'] = "'" | ||||
|             end | ||||
|             js_options['data'] << "_method=#{options[:method]}'" | ||||
|           end | ||||
|         end | ||||
|          | ||||
|         if respond_to?('protect_against_forgery?') && protect_against_forgery? | ||||
|           if js_options['data'] | ||||
|             js_options['data'] << " + '&" | ||||
|           else | ||||
|             js_options['data'] = "'" | ||||
|           end | ||||
|           js_options['data'] << "#{request_forgery_protection_token}=' + encodeURIComponent('#{escape_javascript form_authenticity_token}')" | ||||
|         end | ||||
|         js_options['data'] = "''" if js_options['type'] == "'post'" && js_options['data'].nil? | ||||
|         options_for_javascript(js_options.reject {|key, value| value.nil?}) | ||||
|       end | ||||
|        | ||||
|       def build_update_for_success(html_id, insertion=nil) | ||||
|         insertion = build_insertion(insertion) | ||||
|         "#{JQUERY_VAR}('#{jquery_id(html_id)}').#{insertion}(request);" | ||||
|       end | ||||
| 
 | ||||
|       def build_update_for_error(html_id, insertion=nil) | ||||
|         insertion = build_insertion(insertion) | ||||
|         "#{JQUERY_VAR}('#{jquery_id(html_id)}').#{insertion}(request.responseText);" | ||||
|       end | ||||
| 
 | ||||
|       def build_insertion(insertion) | ||||
|         insertion = insertion ? insertion.to_s.downcase : 'html' | ||||
|         insertion = 'append' if insertion == 'bottom' | ||||
|         insertion = 'prepend' if insertion == 'top' | ||||
|         insertion | ||||
|       end | ||||
| 
 | ||||
|       def build_observer(klass, name, options = {}) | ||||
|         if options[:with] && (options[:with] !~ /[\{=(.]/) | ||||
|           options[:with] = "'#{options[:with]}=' + value" | ||||
|         else | ||||
|           options[:with] ||= 'value' unless options[:function] | ||||
|         end | ||||
| 
 | ||||
|         callback = options[:function] || remote_function(options) | ||||
|         javascript  = "#{JQUERY_VAR}('#{jquery_id(name)}').delayedObserver(" | ||||
|         javascript << "#{options[:frequency] || 0}, " | ||||
|         javascript << "function(element, value) {" | ||||
|         javascript << "#{callback}}" | ||||
|         #javascript << ", '#{options[:on]}'" if options[:on] | ||||
|         javascript << ")" | ||||
|         javascript_tag(javascript) | ||||
|       end | ||||
|        | ||||
|       def build_callbacks(options) | ||||
|         callbacks = {} | ||||
|         options[:beforeSend] = ''; | ||||
|         [:uninitialized,:loading,:loaded].each do |key| | ||||
|           options[:beforeSend] << (options[key].last == ';' ? options.delete(key) : options.delete(key) << ';') if options[key] | ||||
|         end | ||||
|         options.delete(:beforeSend) if options[:beforeSend].blank? | ||||
|         options[:error] = options.delete(:failure) if options[:failure] | ||||
|         if options[:update] | ||||
|           if options[:update].is_a?(Hash) | ||||
|             options[:update][:error] = options[:update].delete(:failure) if options[:update][:failure] | ||||
|             if options[:update][:success] | ||||
|               options[:success] = build_update_for_success(options[:update][:success], options[:position]) << (options[:success] ? options[:success] : '') | ||||
|             end | ||||
|             if options[:update][:error] | ||||
|               options[:error] = build_update_for_error(options[:update][:error], options[:position]) << (options[:error] ? options[:error] : '') | ||||
|             end | ||||
|           else | ||||
|             options[:success] = build_update_for_success(options[:update], options[:position]) << (options[:success] ? options[:success] : '') | ||||
|           end | ||||
|         end | ||||
|         options.each do |callback, code| | ||||
|           if JQCALLBACKS.include?(callback) | ||||
|             callbacks[callback] = "function(request){#{code}}" | ||||
|           end | ||||
|         end | ||||
|         callbacks | ||||
|       end | ||||
|        | ||||
|     end | ||||
|      | ||||
|     class JavaScriptElementProxy < JavaScriptProxy #:nodoc: | ||||
|        | ||||
|       unless const_defined? :JQUERY_VAR | ||||
|         JQUERY_VAR = ActionView::Helpers::PrototypeHelper::JQUERY_VAR | ||||
|       end | ||||
|        | ||||
|       def initialize(generator, id) | ||||
|         id = id.to_s.count('#.*,>+~:[/ ') == 0 ? "##{id}" : id | ||||
|         @id = id | ||||
|         super(generator, "#{JQUERY_VAR}(\"#{id}\")") | ||||
|       end | ||||
|        | ||||
|       def replace_html(*options_for_render) | ||||
|         call 'html', @generator.send(:render, *options_for_render) | ||||
|       end | ||||
| 
 | ||||
|       def replace(*options_for_render) | ||||
|         call 'replaceWith', @generator.send(:render, *options_for_render) | ||||
|       end | ||||
|        | ||||
|       def reload(options_for_replace={}) | ||||
|         replace(options_for_replace.merge({ :partial => @id.to_s.sub(/^#/,'') })) | ||||
|       end | ||||
|        | ||||
|       def value() | ||||
|         call 'val()' | ||||
|       end | ||||
| 
 | ||||
|       def value=(value) | ||||
|         call 'val', value | ||||
|       end | ||||
|        | ||||
|     end | ||||
|      | ||||
|     class JavaScriptElementCollectionProxy < JavaScriptCollectionProxy #:nodoc:\ | ||||
|        | ||||
|       unless const_defined? :JQUERY_VAR | ||||
|         JQUERY_VAR = ActionView::Helpers::PrototypeHelper::JQUERY_VAR | ||||
|       end | ||||
|        | ||||
|       def initialize(generator, pattern) | ||||
|         super(generator, "#{JQUERY_VAR}(#{pattern.to_json})") | ||||
|       end | ||||
|     end | ||||
|      | ||||
|     module ScriptaculousHelper | ||||
|        | ||||
|       unless const_defined? :JQUERY_VAR | ||||
|         JQUERY_VAR = ActionView::Helpers::PrototypeHelper::JQUERY_VAR | ||||
|       end | ||||
|        | ||||
|       unless const_defined? :SCRIPTACULOUS_EFFECTS | ||||
|         SCRIPTACULOUS_EFFECTS = { | ||||
|           :appear => {:method => 'fadeIn'}, | ||||
|           :blind_down => {:method => 'blind', :mode => 'show', :options => {:direction => 'vertical'}}, | ||||
|           :blind_up => {:method => 'blind', :mode => 'hide', :options => {:direction => 'vertical'}}, | ||||
|           :blind_right => {:method => 'blind', :mode => 'show', :options => {:direction => 'horizontal'}}, | ||||
|           :blind_left => {:method => 'blind', :mode => 'hide', :options => {:direction => 'horizontal'}}, | ||||
|           :bounce_in => {:method => 'bounce', :mode => 'show', :options => {:direction => 'up'}}, | ||||
|           :bounce_out => {:method => 'bounce', :mode => 'hide', :options => {:direction => 'up'}}, | ||||
|           :drop_in => {:method => 'drop', :mode => 'show', :options => {:direction => 'up'}}, | ||||
|           :drop_out => {:method => 'drop', :mode => 'hide', :options => {:direction => 'down'}}, | ||||
|           :fade => {:method => 'fadeOut'}, | ||||
|           :fold_in => {:method => 'fold', :mode => 'hide'}, | ||||
|           :fold_out => {:method => 'fold', :mode => 'show'}, | ||||
|           :grow => {:method => 'scale', :mode => 'show'}, | ||||
|           :shrink => {:method => 'scale', :mode => 'hide'}, | ||||
|           :slide_down => {:method => 'slide', :mode => 'show', :options => {:direction => 'up'}}, | ||||
|           :slide_up => {:method => 'slide', :mode => 'hide', :options => {:direction => 'up'}}, | ||||
|           :slide_right => {:method => 'slide', :mode => 'show', :options => {:direction => 'left'}}, | ||||
|           :slide_left => {:method => 'slide', :mode => 'hide', :options => {:direction => 'left'}}, | ||||
|           :squish => {:method => 'scale', :mode => 'hide', :options => {:origin => "['top','left']"}}, | ||||
|           :switch_on => {:method => 'clip', :mode => 'show', :options => {:direction => 'vertical'}}, | ||||
|           :switch_off => {:method => 'clip', :mode => 'hide', :options => {:direction => 'vertical'}}, | ||||
|           :toggle_appear => {:method => 'fadeToggle'}, | ||||
|           :toggle_slide => {:method => 'slide', :mode => 'toggle', :options => {:direction => 'up'}}, | ||||
|           :toggle_blind => {:method => 'blind', :mode => 'toggle', :options => {:direction => 'vertical'}}, | ||||
|         } | ||||
|       end | ||||
|        | ||||
|       def visual_effect(name, element_id = false, js_options = {}) | ||||
|         element = element_id ? element_id : "this" | ||||
|          | ||||
|         if SCRIPTACULOUS_EFFECTS.has_key? name.to_sym | ||||
|           effect = SCRIPTACULOUS_EFFECTS[name.to_sym] | ||||
|           name = effect[:method] | ||||
|           mode = effect[:mode] | ||||
|           js_options = js_options.merge(effect[:options]) if effect[:options] | ||||
|         end | ||||
|          | ||||
|         [:color, :direction].each do |option| | ||||
|           js_options[option] = "'#{js_options[option]}'" if js_options[option] | ||||
|         end | ||||
|          | ||||
|         if js_options.has_key? :duration | ||||
|           speed = js_options.delete :duration | ||||
|           speed = (speed * 1000).to_i unless speed.nil? | ||||
|         else | ||||
|           speed = js_options.delete :speed | ||||
|         end | ||||
|          | ||||
|         if ['fadeIn','fadeOut','fadeToggle'].include?(name) | ||||
|           javascript = "#{JQUERY_VAR}('#{jquery_id(element_id)}').#{name}(" | ||||
|           javascript << "#{speed}" unless speed.nil? | ||||
|           javascript << ");" | ||||
|         else | ||||
|           javascript = "#{JQUERY_VAR}('#{jquery_id(element_id)}').#{mode || 'effect'}('#{name}'" | ||||
|           javascript << ",#{options_for_javascript(js_options)}" unless speed.nil? && js_options.empty? | ||||
|           javascript << ",#{speed}" unless speed.nil? | ||||
|           javascript << ");" | ||||
|         end | ||||
|          | ||||
|       end | ||||
|        | ||||
|       def sortable_element_js(element_id, options = {}) #:nodoc: | ||||
|         #convert similar attributes | ||||
|         options[:handle] = ".#{options[:handle]}" if options[:handle] | ||||
|         if options[:tag] || options[:only] | ||||
|           options[:items] = "> " | ||||
|           options[:items] << options.delete(:tag) if options[:tag] | ||||
|           options[:items] << ".#{options.delete(:only)}" if options[:only] | ||||
|         end | ||||
|         options[:connectWith] = options.delete(:containment).map {|x| "##{x}"} if options[:containment] | ||||
|         options[:containment] = options.delete(:container) if options[:container] | ||||
|         options[:dropOnEmpty] = false unless options[:dropOnEmpty] | ||||
|         options[:helper] = "'clone'" if options[:ghosting] == true | ||||
|         options[:axis] = case options.delete(:constraint) | ||||
|           when "vertical" | ||||
|             "y" | ||||
|           when "horizontal" | ||||
|             "x" | ||||
|           when false | ||||
|             nil | ||||
|           when nil | ||||
|             "y" | ||||
|         end | ||||
|         options.delete(:axis) if options[:axis].nil? | ||||
|         options.delete(:overlap) | ||||
|         options.delete(:ghosting) | ||||
|          | ||||
|         if options[:onUpdate] || options[:url] | ||||
|           options[:with] ||= "#{JQUERY_VAR}(this).sortable('serialize',{key:'#{element_id}[]'})" | ||||
|           options[:onUpdate] ||= "function(){" + remote_function(options) + "}" | ||||
|         end | ||||
|          | ||||
|         options.delete_if { |key, value| PrototypeHelper::AJAX_OPTIONS.include?(key) } | ||||
|         options[:update] = options.delete(:onUpdate) if options[:onUpdate] | ||||
|          | ||||
|         [:axis, :cancel, :containment, :cursor, :handle, :tolerance, :items, :placeholder].each do |option| | ||||
|           options[option] = "'#{options[option]}'" if options[option] | ||||
|         end | ||||
|          | ||||
|         options[:connectWith] = array_or_string_for_javascript(options[:connectWith]) if options[:connectWith] | ||||
|          | ||||
|         %(#{JQUERY_VAR}('#{jquery_id(element_id)}').sortable(#{options_for_javascript(options)});) | ||||
|       end | ||||
|        | ||||
|       def draggable_element_js(element_id, options = {}) | ||||
|         %(#{JQUERY_VAR}("#{jquery_id(element_id)}").draggable(#{options_for_javascript(options)});) | ||||
|       end | ||||
|        | ||||
|       def drop_receiving_element_js(element_id, options = {}) | ||||
|         #convert similar options | ||||
|         options[:hoverClass] = options.delete(:hoverclass) if options[:hoverclass] | ||||
|         options[:drop] = options.delete(:onDrop) if options[:onDrop] | ||||
|          | ||||
|         if options[:drop] || options[:url] | ||||
|           options[:with] ||= "'id=' + encodeURIComponent(#{JQUERY_VAR}(ui.draggable).attr('id'))" | ||||
|           options[:drop] ||= "function(ev, ui){" + remote_function(options) + "}" | ||||
|         end | ||||
|          | ||||
|         options.delete_if { |key, value| PrototypeHelper::AJAX_OPTIONS.include?(key) } | ||||
| 
 | ||||
|         options[:accept] = array_or_string_for_javascript(options[:accept]) if options[:accept]     | ||||
|         [:activeClass, :hoverClass, :tolerance].each do |option| | ||||
|           options[option] = "'#{options[option]}'" if options[option] | ||||
|         end | ||||
|          | ||||
|         %(#{JQUERY_VAR}('#{jquery_id(element_id)}').droppable(#{options_for_javascript(options)});) | ||||
|       end | ||||
|        | ||||
|     end | ||||
|      | ||||
|   end | ||||
| end | ||||
|  | @ -1,19 +0,0 @@ | |||
| namespace :jrails do | ||||
| 	namespace :update do | ||||
| 		desc "Copies the jQuery and jRails javascripts to public/javascripts" | ||||
| 		task :javascripts do | ||||
| 			puts "Copying files..." | ||||
| 			project_dir = RAILS_ROOT + '/public/javascripts/' | ||||
| 			scripts = Dir[File.join(File.dirname(__FILE__), '..') + '/javascripts/*.js'] | ||||
| 			FileUtils.cp(scripts, project_dir) | ||||
| 			puts "files copied successfully." | ||||
| 		end | ||||
| 	end | ||||
| 	 | ||||
| 	namespace :install do | ||||
| 		desc "Installs the jQuery and jRails javascripts to public/javascripts" | ||||
| 		task :javascripts do | ||||
| 			Rake::Task['jrails:update:javascripts'].invoke | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
		Reference in New Issue