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