You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by lu...@apache.org on 2010/07/09 01:35:31 UTC

svn commit: r962192 - /incubator/deltacloud/trunk/server/libexec/lib/sinatra/static_assets.rb

Author: lutter
Date: Thu Jul  8 23:35:30 2010
New Revision: 962192

URL: http://svn.apache.org/viewvc?rev=962192&view=rev
Log:
* lib/sinatra/static_assets.rb: helper for links to static assets

>From http://github.com/wbzyl/sinatra-static-assets, d7668570

Added:
    incubator/deltacloud/trunk/server/libexec/lib/sinatra/static_assets.rb

Added: incubator/deltacloud/trunk/server/libexec/lib/sinatra/static_assets.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/libexec/lib/sinatra/static_assets.rb?rev=962192&view=auto
==============================================================================
--- incubator/deltacloud/trunk/server/libexec/lib/sinatra/static_assets.rb (added)
+++ incubator/deltacloud/trunk/server/libexec/lib/sinatra/static_assets.rb Thu Jul  8 23:35:30 2010
@@ -0,0 +1,83 @@
+require 'sinatra/base'
+require 'sinatra/url_for'
+
+module Sinatra
+  module StaticAssets
+    module Helpers
+      # In HTML <link> and <img> tags have no end tag.
+      # In XHTML, on the contrary, these tags must be properly closed.
+      #
+      # We can choose the appropriate behaviour with +closed+ option:
+      #
+      #   image_tag "/images/foo.png", :alt => "Foo itself", :closed => true
+      #
+      # The default value of +closed+ option is +false+.
+      #
+      def image_tag(source, options = {})
+        options[:src] = url_for(source)
+        tag("img", options)
+      end
+
+      def stylesheet_link_tag(*sources)
+        list, options = extract_options(sources)
+        list.collect { |source| stylesheet_tag(source, options) }.join("\n")
+      end
+
+      def javascript_script_tag(*sources)
+        list, options = extract_options(sources)
+        list.collect { |source| javascript_tag(source, options) }.join("\n")
+      end
+
+      def link_to(desc, url, options = {})
+        tag("a", options.merge(:href => url_for(url))) do
+          desc
+        end
+      end
+
+      private
+
+      def tag(name, local_options = {})
+        start_tag = "<#{name}#{tag_options(local_options) if local_options}"
+        if block_given?
+          content = yield
+          "#{start_tag}>#{content}</#{name}>"
+        else
+          "#{start_tag}#{"/" if options.xhtml}>"
+        end
+      end
+
+      def tag_options(options)
+        unless options.empty?
+          attrs = []
+          attrs = options.map { |key, value| %(#{key}="#{Rack::Utils.escape_html(value)}") }
+          " #{attrs.sort * ' '}" unless attrs.empty?
+        end
+      end
+
+      def stylesheet_tag(source, options = {})
+        tag("link", { :type => "text/css",
+            :charset => "utf-8", :media => "screen", :rel => "stylesheet",
+            :href => url_for(source) }.merge(options))
+      end
+
+      def javascript_tag(source, options = {})
+        tag("script", { :type => "text/javascript", :charset => "utf-8",
+            :src => url_for(source) }.merge(options)) do
+            end
+      end
+
+      def extract_options(a)
+        opts = a.last.is_a?(::Hash) ? a.pop : {}
+        [a, opts]  
+      end
+
+    end
+
+    def self.registered(app)
+      app.helpers StaticAssets::Helpers
+      app.disable :xhtml
+    end
+  end
+
+  register StaticAssets
+end