Added the RoR Login-Engine and activated it on the site.
[selectricity-live] / vendor / plugins / engines / lib / engines / action_view_extensions.rb
diff --git a/vendor/plugins/engines/lib/engines/action_view_extensions.rb b/vendor/plugins/engines/lib/engines/action_view_extensions.rb
new file mode 100644 (file)
index 0000000..bdfa11a
--- /dev/null
@@ -0,0 +1,141 @@
+require 'fileutils'
+
+module ::ActionView
+  class Base
+    
+    private
+      def full_template_path(template_path, extension)
+
+        unless Engines.disable_app_views_loading
+          # If the template exists in the normal application directory,
+          # return that path
+          default_template = "#{@base_path}/#{template_path}.#{extension}"
+          return default_template if File.exist?(default_template)
+        end
+
+        # Otherwise, check in the engines to see if the template can be found there.
+        # Load this in order so that more recently started Engines will take priority.
+        Engines.each(:precidence_order) do |engine|
+          site_specific_path = File.join(engine.root, 'app', 'views',  
+                                         template_path.to_s + '.' + extension.to_s)
+          return site_specific_path if File.exist?(site_specific_path)
+        end
+
+        # If it cannot be found anywhere, return the default path, where the
+        # user *should* have put it.  
+        return "#{@base_path}/#{template_path}.#{extension}" 
+      end
+  end
+
+
+  # add methods to handle including javascripts and stylesheets
+  module Helpers
+    module AssetTagHelper
+      # Returns a stylesheet link tag to the named stylesheet(s) for the given
+      # engine. A stylesheet with the same name as the engine is included automatically.
+      # If other names are supplied, those stylesheets from within the same engine
+      # will be linked too.
+      #
+      #   engine_stylesheet "my_engine" =>
+      #   <link href="/engine_files/my_engine/stylesheets/my_engine.css" media="screen" rel="Stylesheet" type="text/css" />
+      #
+      #   engine_stylesheet "my_engine", "another_file", "one_more" =>
+      #   <link href="/engine_files/my_engine/stylesheets/my_engine.css" media="screen" rel="Stylesheet" type="text/css" />
+      #   <link href="/engine_files/my_engine/stylesheets/another_file.css" media="screen" rel="Stylesheet" type="text/css" />
+      #   <link href="/engine_files/my_engine/stylesheets/one_more.css" media="screen" rel="Stylesheet" type="text/css" />
+      #
+      # Any options supplied as a Hash as the last argument will be processed as in
+      # stylesheet_link_tag.
+      #
+      def engine_stylesheet(engine_name, *sources)
+        stylesheet_link_tag(*convert_public_sources(engine_name, :stylesheet, sources))
+      end
+
+      # Returns a javascript link tag to the named stylesheet(s) for the given
+      # engine. A javascript file with the same name as the engine is included automatically.
+      # If other names are supplied, those javascript from within the same engine
+      # will be linked too.
+      #
+      #   engine_javascript "my_engine" =>
+      #   <script type="text/javascript" src="/engine_files/my_engine/javascripts/my_engine.js"></script>
+      #
+      #   engine_javascript "my_engine", "another_file", "one_more" =>
+      #   <script type="text/javascript" src="/engine_files/my_engine/javascripts/my_engine.js"></script>
+      #   <script type="text/javascript" src="/engine_files/my_engine/javascripts/another_file.js"></script>
+      #   <script type="text/javascript" src="/engine_files/my_engine/javascripts/one_more.js"></script>
+      #
+      # Any options supplied as a Hash as the last argument will be processed as in
+      # javascript_include_tag.
+      #
+      def engine_javascript(engine_name, *sources)
+        javascript_include_tag(*convert_public_sources(engine_name, :javascript, sources))       
+      end
+
+      # Returns a image tag based on the parameters passed to it
+      # Required option is option[:engine] in order to correctly idenfity the correct engine location
+      #
+      #   engine_image 'rails-engines.png', :engine => 'my_engine', :alt => 'My Engine' =>
+      #   <img src="/engine_files/my_engine/images/rails-engines.png" alt="My Engine />
+      #
+      # Any options supplied as a Hash as the last argument will be processed as in
+      # image_tag.
+      #
+      def engine_image(src, options = {})
+       return if !src
+
+       image_src = engine_image_src(src, options)
+
+       options.delete(:engine)
+
+       image_tag(image_src, options)
+      end
+
+      # Alias for engine_image
+      def engine_image_tag(src, options = {})
+        engine_image(src, options)
+      end
+
+      # Returns a path to the image stored within the engine_files
+      # Required option is option[:engine] in order to correctly idenfity the correct engine location
+      #
+      #   engine_image_src 'rails-engines.png', :engine => 'my_engine' =>
+      #   "/engine_files/my_engine/images/rails-engines.png"
+      #
+      def engine_image_src(src, options = {})
+        File.join(Engines.get(options[:engine].to_sym).public_dir, 'images', src)
+      end
+      
+      private
+        # convert the engine public file sources into actual public paths
+        # type:
+        #   :stylesheet
+        #   :javascript
+        def convert_public_sources(engine_name, type, sources)
+          options = sources.last.is_a?(Hash) ? sources.pop.stringify_keys : { }
+          new_sources = []
+        
+          case type
+            when :javascript
+              type_dir = "javascripts"
+              ext = "js"
+            when :stylesheet
+              type_dir = "stylesheets"
+              ext = "css"
+          end
+          
+          engine = Engines.get(engine_name)
+          
+          default = "#{engine.public_dir}/#{type_dir}/#{engine_name}"
+          if defined?(RAILS_ROOT) && File.exists?(File.join(RAILS_ROOT, "public", "#{default}.#{ext}"))
+            new_sources << default
+          end
+        
+          sources.each { |name| 
+            new_sources << "#{engine.public_dir}/#{type_dir}/#{name}"
+          }
+
+          new_sources << options         
+        end
+    end
+  end
+end

Benjamin Mako Hill || Want to submit a patch?