sinatra-exstatic-assets 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +5 -0
- data/.travis.yml +11 -0
- data/CHANGES.md +9 -0
- data/Gemfile +29 -0
- data/LICENCE +27 -0
- data/README.md +76 -0
- data/Rakefile +38 -0
- data/examples/app/main.rb +13 -0
- data/examples/app/public/css/base.css +93 -0
- data/examples/app/public/css/screen.css +8 -0
- data/examples/app/public/favicon.ico +0 -0
- data/examples/app/public/images/3609420787_f7fc0e53c7.jpg +0 -0
- data/examples/app/views/index.erb +90 -0
- data/examples/app/views/layout.erb +40 -0
- data/examples/app2/main.rb +12 -0
- data/examples/app2/public/css/base.css +93 -0
- data/examples/app2/public/css/screen.css +8 -0
- data/examples/app2/public/favicon +0 -0
- data/examples/app2/views/index.erb +105 -0
- data/examples/app2/views/layout.erb +40 -0
- data/examples/config.rb +17 -0
- data/examples/config.ru +11 -0
- data/examples/views/index.erb +83 -0
- data/examples/views/layout.erb +40 -0
- data/lib/sinatra/exstatic-assets.rb +1 -0
- data/lib/sinatra/exstatic_assets.rb +304 -0
- data/lib/sinatra/exstatic_assets/version.rb +6 -0
- data/sinatra-exstatic-assets.gemspec +20 -0
- data/spec/spec_helper.rb +38 -0
- data/spec/static_assets_spec.rb +156 -0
- data/spec/support/fixtures/app2.txt +144 -0
- data/spec/support/fixtures/main.txt +129 -0
- data/spec/support/shared/all_routes.rb +20 -0
- metadata +101 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
$:.push File.expand_path("../lib", __FILE__)
|
4
|
+
require "sinatra/exstatic_assets/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "sinatra-exstatic-assets"
|
8
|
+
s.version = Sinatra::Exstatic::VERSION
|
9
|
+
s.authors = ["Włodek Bzyl", "Iain Barnett"]
|
10
|
+
s.email = ["iainspeed@gmail.com"]
|
11
|
+
s.homepage = "https://github.com/yb66/sinatra-exstatic-assets"
|
12
|
+
s.summary = %q{A Sinatra extension of helpers for static assets.}
|
13
|
+
s.description = %q{Helpers for writing the HTML and caching of static assets. A fork of Sinatra Static Assets.}
|
14
|
+
|
15
|
+
s.add_dependency 'sinatra'
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'rspec'
|
4
|
+
Spec_dir = File.expand_path( File.dirname __FILE__ )
|
5
|
+
|
6
|
+
|
7
|
+
# code coverage
|
8
|
+
require 'simplecov'
|
9
|
+
SimpleCov.start do
|
10
|
+
add_filter "/vendor/"
|
11
|
+
add_filter "/bin/"
|
12
|
+
end
|
13
|
+
|
14
|
+
require "rack/test"
|
15
|
+
ENV['RACK_ENV'] ||= 'test'
|
16
|
+
ENV["EXPECT_WITH"] ||= "racktest"
|
17
|
+
|
18
|
+
|
19
|
+
require "logger"
|
20
|
+
logger = Logger.new STDOUT
|
21
|
+
logger.level = Logger::DEBUG
|
22
|
+
logger.datetime_format = '%a %d-%m-%Y %H%M '
|
23
|
+
LOgger = logger
|
24
|
+
|
25
|
+
|
26
|
+
Dir[ File.join( Spec_dir, "/support/**/*.rb")].each do |f|
|
27
|
+
logger.info "requiring #{f}"
|
28
|
+
require f
|
29
|
+
end
|
30
|
+
|
31
|
+
require 'rack/test/accepts'
|
32
|
+
|
33
|
+
RSpec.configure do |config|
|
34
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
35
|
+
|
36
|
+
config.include Rack::Test::Accepts, :type => :request
|
37
|
+
end
|
38
|
+
|
@@ -0,0 +1,156 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require_relative "../lib/sinatra/exstatic_assets.rb"
|
3
|
+
|
4
|
+
module Sinatra
|
5
|
+
module Exstatic
|
6
|
+
|
7
|
+
describe Asset, :time_sensitive do
|
8
|
+
let(:asset_dir) { "app/public" }
|
9
|
+
subject(:asset){ Asset.new filename, asset_dir }
|
10
|
+
context "Given a file" do
|
11
|
+
let(:fullpath) { File.join asset_dir, filename }
|
12
|
+
before do
|
13
|
+
File.stub(:"exists?").with(fullpath).and_return(true)
|
14
|
+
File.stub(:mtime).with(fullpath).and_return(Time.now)
|
15
|
+
end
|
16
|
+
let(:filename) { "image.jpg" }
|
17
|
+
let(:expected) { "image.jpg" }
|
18
|
+
it { should_not be_nil }
|
19
|
+
it { should == expected }
|
20
|
+
its(:fullpath) { should == fullpath }
|
21
|
+
its(:timestamp) { should == Time.now.to_i }
|
22
|
+
its(:"is_uri?") { should be_false }
|
23
|
+
its(:querystring) { should == "?ts=#{Time.now.to_i}" }
|
24
|
+
end
|
25
|
+
context "Given a url" do let(:filename) { "http://code.jquery.com/jquery-1.9.1.min.js" }
|
26
|
+
let(:expected) { "http://code.jquery.com/jquery-1.9.1.min.js" }
|
27
|
+
it { should_not be_nil }
|
28
|
+
it { should == expected }
|
29
|
+
its(:fullpath) { should be_nil }
|
30
|
+
its(:timestamp) { should == false }
|
31
|
+
its(:"is_uri?") { should be_true }
|
32
|
+
its(:querystring) { should be_nil }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe Tag do
|
37
|
+
subject { tag }
|
38
|
+
context "Given a group of options" do
|
39
|
+
let(:tag) {
|
40
|
+
Tag.new "link",
|
41
|
+
{ :type => "text/css",
|
42
|
+
:charset => "utf-8",
|
43
|
+
:media => "projection",
|
44
|
+
:rel => "stylesheet",
|
45
|
+
:href => "/bar/stylesheets/winter.css"
|
46
|
+
}
|
47
|
+
}
|
48
|
+
let(:expected) { %Q!<link charset="utf-8" href="/bar/stylesheets/winter.css" media="projection" rel="stylesheet" type="text/css" />! }
|
49
|
+
it { should == expected }
|
50
|
+
|
51
|
+
context "That include closed=false" do
|
52
|
+
let(:tag) {
|
53
|
+
Tag.new "link",
|
54
|
+
{ :type => "text/css",
|
55
|
+
:charset => "utf-8",
|
56
|
+
:media => "projection",
|
57
|
+
:rel => "stylesheet",
|
58
|
+
:href => "/bar/stylesheets/winter.css",
|
59
|
+
:closed => false
|
60
|
+
}
|
61
|
+
}
|
62
|
+
let(:expected) { %Q!<link charset="utf-8" href="/bar/stylesheets/winter.css" media="projection" rel="stylesheet" type="text/css">! }
|
63
|
+
it { should == expected }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
class FakeObject
|
70
|
+
include Sinatra::Exstatic::Private
|
71
|
+
def uri( addr, absolute, script_tag )
|
72
|
+
script_tag ? File.join( ENV["SCRIPT_NAME"], addr) : addr
|
73
|
+
end
|
74
|
+
def settings
|
75
|
+
self
|
76
|
+
end
|
77
|
+
def public_folder
|
78
|
+
"app/public"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
describe "Private methods", :time_sensitive do
|
82
|
+
let(:o) {
|
83
|
+
# A double, I couldn't get RSpec's to work with this
|
84
|
+
# probably because they're not well documented
|
85
|
+
# hint hint RSpec team
|
86
|
+
o = FakeObject.new
|
87
|
+
}
|
88
|
+
let(:script_name) { "/bar" }
|
89
|
+
let(:fullpath) { File.join asset_dir, filename }
|
90
|
+
let(:asset_dir) { "app/public/" }
|
91
|
+
let(:time) { Time.now.to_i }
|
92
|
+
before do
|
93
|
+
ENV["SCRIPT_NAME"] = script_name
|
94
|
+
File.stub(:"exists?").with(fullpath).and_return(true)
|
95
|
+
File.stub(:mtime).with(fullpath).and_return(time)
|
96
|
+
end
|
97
|
+
context "Stylesheets" do
|
98
|
+
let(:url) { "/stylesheets/winter.css" }
|
99
|
+
let(:filename) { "/stylesheets/winter.css" }
|
100
|
+
let(:expected) { %Q!<link charset="utf-8" href="/bar/stylesheets/winter.css?ts=#{time}" media="screen" rel="stylesheet" />! }
|
101
|
+
subject { o.send :sss_stylesheet_tag, url }
|
102
|
+
it { should_not be_nil }
|
103
|
+
it { should == expected }
|
104
|
+
end
|
105
|
+
context "Javascripts" do
|
106
|
+
let(:url) { "/js/get_stuff.js" }
|
107
|
+
let(:filename) { "/js/get_stuff.js" }
|
108
|
+
let(:expected) { %Q!<script charset="utf-8" src="/bar/js/get_stuff.js?ts=#{time}"></script>! }
|
109
|
+
subject { o.send :sss_javascript_tag, url }
|
110
|
+
it { should_not be_nil }
|
111
|
+
it { should == expected }
|
112
|
+
end
|
113
|
+
context "Images" do
|
114
|
+
let(:url) { "/images/foo.png" }
|
115
|
+
let(:filename) { "/images/foo.png" }
|
116
|
+
let(:expected) { %Q!<img src="/bar/images/foo.png?ts=#{time}" />! }
|
117
|
+
subject { o.send :sss_image_tag, url }
|
118
|
+
it { should_not be_nil }
|
119
|
+
it { should == expected }
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
end # Exstatic
|
124
|
+
end # Sinatra
|
125
|
+
|
126
|
+
describe "Using them with a Sinatra app", :time_sensitive do
|
127
|
+
include_context "All routes"
|
128
|
+
let(:expected) { File.read File.expand_path(fixture_file, File.dirname(__FILE__)) }
|
129
|
+
before do
|
130
|
+
Sinatra::Exstatic::Asset.any_instance
|
131
|
+
.stub(:exists?)
|
132
|
+
.and_return(true)
|
133
|
+
|
134
|
+
Sinatra::Exstatic::Asset.any_instance
|
135
|
+
.stub(:mtime_int)
|
136
|
+
.and_return(1367612251)
|
137
|
+
end
|
138
|
+
context "Main" do
|
139
|
+
let(:fixture_file) { "./support/fixtures/main.txt" }
|
140
|
+
before do
|
141
|
+
get "/"
|
142
|
+
end
|
143
|
+
it_should_behave_like "Any route"
|
144
|
+
subject { last_response.body }
|
145
|
+
it { should == expected }
|
146
|
+
end
|
147
|
+
context "Sub" do
|
148
|
+
let(:fixture_file) { "./support/fixtures/app2.txt" }
|
149
|
+
before do
|
150
|
+
get "/app2"
|
151
|
+
end
|
152
|
+
it_should_behave_like "Any route"
|
153
|
+
subject { last_response.body }
|
154
|
+
it { should == expected }
|
155
|
+
end
|
156
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8" />
|
5
|
+
<title>Example</title>
|
6
|
+
<link href="/favicon.ico" rel="icon" />
|
7
|
+
<link charset="utf-8" href="http://fonts.googleapis.com/css?family=Quicksand|Faster+One|Cherry+Swash:700|Titillium+Web" media="screen" rel="stylesheet" type="text/css" />
|
8
|
+
<link charset="utf-8" href="/app2/css/base.css?ts=1367612251" media="screen" rel="stylesheet" />
|
9
|
+
<link charset="utf-8" href="/app2/css/screen.css?ts=1367612251" media="screen" rel="stylesheet" />
|
10
|
+
<script charset="utf-8" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
|
11
|
+
|
12
|
+
</head>
|
13
|
+
|
14
|
+
<body>
|
15
|
+
<header role='banner'>
|
16
|
+
<a href="http://www.flickr.com/photos/tjt195/12470738/" title="Greased Lightning by tarotastic, on Flickr"><img alt="Greased Lightning" height="375" src="http://farm1.staticflickr.com/10/12470738_fc0212bf8c.jpg" width="500" /></a>
|
17
|
+
<hgroup>
|
18
|
+
<h1>Sinatra Exstatic Assets</h1>
|
19
|
+
<h2>Helpers for your JS, CSS and anything static</h2>
|
20
|
+
</hgroup>
|
21
|
+
</header>
|
22
|
+
|
23
|
+
<nav>
|
24
|
+
<ul>
|
25
|
+
<li><a href="/">Main app</a></li>
|
26
|
+
<li><a href="/app2">App 2</a></li>
|
27
|
+
<li><a href="https://rubygems.org/gems/sinatra-exstatic-assets">Rubygems</a></li>
|
28
|
+
<li><a href="https://github.com/yb66/sinatra-exstatic-assets">Source code</a></li>
|
29
|
+
</ul>
|
30
|
+
</nav>
|
31
|
+
<article>
|
32
|
+
<header>
|
33
|
+
<h1>
|
34
|
+
<a href="#" title="Link to this post"
|
35
|
+
rel="bookmark">Usage</a>
|
36
|
+
</h1>
|
37
|
+
</header>
|
38
|
+
<p>Note that there is a Main App and an App2. This is to demonstrate that you can give links relative to the app, but if they are mounted with an extra prefix (using Rack#map, for example) the helper will respect that and produce the right href attribute.</p>
|
39
|
+
<section><header><h2>Installation and loading</h2></header>
|
40
|
+
<p>Start by installing:</p>
|
41
|
+
<code>gem 'sinatra-exstatic-assets'</code>
|
42
|
+
<p>Then require it in your Sinatra app.</p>
|
43
|
+
<code>require 'sinatra/exstatic_assets'</code>
|
44
|
+
</section>
|
45
|
+
<section>
|
46
|
+
<header><h2>The helpers</h2></header>
|
47
|
+
<p>Use these helpers in your views.</p>
|
48
|
+
<p>To add an attribute to a helper, pass it as an option, e.g. <code>width: "500"</code></p>
|
49
|
+
<p>Sometimes, you won't want the script tag (e.g. "/app2") prepended to the url, like in the case of a favicon. In that case you can pass in <code>url_options: {script_tag: false}</code> to the helper, e.g. <code>favicon_tag url_options: {script_tag: false}</code></p>
|
50
|
+
<section id='stylesheet_tag'>
|
51
|
+
<header>
|
52
|
+
<h3>stylesheet_tag</h3>
|
53
|
+
</header>
|
54
|
+
<p>The code:
|
55
|
+
</p>
|
56
|
+
<code>stylesheet_tag "/css/screen.css"</code>
|
57
|
+
<p>Output:</p>
|
58
|
+
<samp>
|
59
|
+
<link charset="utf-8" href="/app2/css/screen.css?ts=1367612251" media="screen" rel="stylesheet" />
|
60
|
+
</samp>
|
61
|
+
<footer><p>Also known as:
|
62
|
+
<ul>
|
63
|
+
<li><code>css_tag</code></li>
|
64
|
+
<li><code>stylesheet</code></li>
|
65
|
+
</ul>
|
66
|
+
</footer>
|
67
|
+
</section>
|
68
|
+
<section id='javascript_tag'>
|
69
|
+
<header>
|
70
|
+
<h3>javascript_tag</h3>
|
71
|
+
</header>
|
72
|
+
<p>The code:
|
73
|
+
</p>
|
74
|
+
<code>javascript_tag "http://code.jquery.com/jquery-1.9.1.min.js"</code>
|
75
|
+
<p>Output:</p>
|
76
|
+
<samp>
|
77
|
+
<script charset="utf-8" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
|
78
|
+
</samp>
|
79
|
+
<p>The code:
|
80
|
+
</p>
|
81
|
+
<code>javascript_tag "/js/helpers.js"</code>
|
82
|
+
<p>Output:</p>
|
83
|
+
<samp>
|
84
|
+
<script charset="utf-8" src="/app2/js/helpers.js?ts=1367612251"></script>
|
85
|
+
</samp>
|
86
|
+
<footer><p>Also known as:
|
87
|
+
<ul>
|
88
|
+
<li><code>javascript_include_tag</code></li>
|
89
|
+
<li><code>js_tag</code></li>
|
90
|
+
<li><code>script_tag</code></li>
|
91
|
+
</ul>
|
92
|
+
</footer>
|
93
|
+
</section>
|
94
|
+
<section id='image_tag'>
|
95
|
+
<header>
|
96
|
+
<h3>image_tag</h3>
|
97
|
+
</header>
|
98
|
+
<p>The code:
|
99
|
+
</p>
|
100
|
+
<code>image_tag "http://farm1.staticflickr.com/10/12470738_fc0212bf8c.jpg", width: "500", height: "375", alt: "Greased Lightning"</code>
|
101
|
+
<p>Output:</p>
|
102
|
+
<samp>
|
103
|
+
<img alt="Greased Lightning" height="375" src="http://farm1.staticflickr.com/10/12470738_fc0212bf8c.jpg" width="500" />
|
104
|
+
</samp>
|
105
|
+
<p>The code:
|
106
|
+
</p>
|
107
|
+
<code>image_tag "/images/turnip.jpg", width: "500", height: "375", alt: "Turnip"</code>
|
108
|
+
<p>Output:</p>
|
109
|
+
<samp>
|
110
|
+
<img alt="Turnip" height="375" src="/app2/images/turnip.jpg?ts=1367612251" width="500" />
|
111
|
+
</samp>
|
112
|
+
<footer><p>Also known as:
|
113
|
+
<ul>
|
114
|
+
<li><code>img_tag</code></li>
|
115
|
+
<li><code>img</code></li>
|
116
|
+
</ul>
|
117
|
+
</footer>
|
118
|
+
</section>
|
119
|
+
<section id='favicon_tag'>
|
120
|
+
<header>
|
121
|
+
<h3>favicon_tag</h3>
|
122
|
+
</header>
|
123
|
+
<p>The code:
|
124
|
+
</p>
|
125
|
+
<code>favicon_tag</code>
|
126
|
+
<p>Output:</p>
|
127
|
+
<samp>
|
128
|
+
<link href="/favicon.ico" rel="icon" />
|
129
|
+
</samp>
|
130
|
+
<footer><p>Also known as:
|
131
|
+
<ul>
|
132
|
+
<li><code>favicon</code></li>
|
133
|
+
</ul>
|
134
|
+
</footer>
|
135
|
+
</section>
|
136
|
+
</section>
|
137
|
+
</article>
|
138
|
+
|
139
|
+
|
140
|
+
<footer>
|
141
|
+
<p>© 2013 See the LICENCE file for more.</p>
|
142
|
+
</footer>
|
143
|
+
</body>
|
144
|
+
</html>
|
@@ -0,0 +1,129 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8" />
|
5
|
+
<title>Example</title>
|
6
|
+
<link href="/favicon.ico" rel="icon" />
|
7
|
+
<link charset="utf-8" href="http://fonts.googleapis.com/css?family=Quicksand|Faster+One|Cherry+Swash:700|Titillium+Web" media="screen" rel="stylesheet" type="text/css" />
|
8
|
+
<link charset="utf-8" href="/css/base.css?ts=1367612251" media="screen" rel="stylesheet" />
|
9
|
+
<link charset="utf-8" href="/css/screen.css?ts=1367612251" media="screen" rel="stylesheet" />
|
10
|
+
<script charset="utf-8" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
|
11
|
+
|
12
|
+
</head>
|
13
|
+
|
14
|
+
<body>
|
15
|
+
<header role='banner'>
|
16
|
+
<a href="http://www.flickr.com/photos/28931095@N03/3609420787/" title="Magic Ball by Sam Bald, on Flickr"><img alt="Magic Ball" height="375" src="http://farm3.staticflickr.com/2474/3609420787_f7fc0e53c7.jpg" width="500" /></a>
|
17
|
+
<hgroup>
|
18
|
+
<h1>Sinatra Exstatic Assets</h1>
|
19
|
+
<h2>Helpers for your JS, CSS and anything static</h2>
|
20
|
+
</hgroup>
|
21
|
+
</header>
|
22
|
+
|
23
|
+
<nav>
|
24
|
+
<ul>
|
25
|
+
<li><a href="/">Main app</a></li>
|
26
|
+
<li><a href="/app2">App 2</a></li>
|
27
|
+
<li><a href="https://rubygems.org/gems/sinatra-exstatic-assets">Rubygems</a></li>
|
28
|
+
<li><a href="https://github.com/yb66/sinatra-exstatic-assets">Source code</a></li>
|
29
|
+
</ul>
|
30
|
+
</nav>
|
31
|
+
<article>
|
32
|
+
<header>
|
33
|
+
<h1>
|
34
|
+
<a href="#" title="Link to this post"
|
35
|
+
rel="bookmark">Usage</a>
|
36
|
+
</h1>
|
37
|
+
</header>
|
38
|
+
<p>Note that there is a Main App and an App2. This is to demonstrate that you can give links relative to the app, but if they are mounted with an extra prefix (using Rack#map, for example) the helper will respect that and produce the right href attribute.</p>
|
39
|
+
<section><header><h2>Installation and loading</h2></header>
|
40
|
+
<p>Start by installing:</p>
|
41
|
+
<code>gem 'sinatra-exstatic-assets'</code>
|
42
|
+
<p>Then require it in your Sinatra app.</p>
|
43
|
+
<code>require 'sinatra/exstatic_assets'</code>
|
44
|
+
</section>
|
45
|
+
<section>
|
46
|
+
<section>
|
47
|
+
<header><h2>The helpers</h2></header>
|
48
|
+
<p>Use these helpers in your views.<p>
|
49
|
+
<section id='stylesheet_tag'>
|
50
|
+
<header>
|
51
|
+
<h3>stylesheet_tag</h3>
|
52
|
+
</header>
|
53
|
+
<p>The code:
|
54
|
+
</p>
|
55
|
+
<code>stylesheet_tag "/css/screen.css"</code>
|
56
|
+
<p>Output:</p>
|
57
|
+
<samp>
|
58
|
+
<link charset="utf-8" href="/css/screen.css?ts=1367612251" media="screen" rel="stylesheet" />
|
59
|
+
</samp>
|
60
|
+
<footer><p>Also known as:
|
61
|
+
<ul>
|
62
|
+
<li><code>css_tag</code></li>
|
63
|
+
<li><code>stylesheet</code></li>
|
64
|
+
</ul>
|
65
|
+
</footer>
|
66
|
+
</section>
|
67
|
+
<section id='javascript_tag'>
|
68
|
+
<header>
|
69
|
+
<h3>javascript_tag</h3>
|
70
|
+
</header>
|
71
|
+
<p>The code:
|
72
|
+
</p>
|
73
|
+
<code>javascript_tag "http://code.jquery.com/jquery-1.9.1.min.js"</code>
|
74
|
+
<p>Output:</p>
|
75
|
+
<samp>
|
76
|
+
<script charset="utf-8" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
|
77
|
+
</samp>
|
78
|
+
<footer><p>Also known as:
|
79
|
+
<ul>
|
80
|
+
<li><code>javascript_include_tag</code></li>
|
81
|
+
<li><code>js_tag</code></li>
|
82
|
+
<li><code>script_tag</code></li>
|
83
|
+
</ul>
|
84
|
+
</footer>
|
85
|
+
</section>
|
86
|
+
<section id='image_tag'>
|
87
|
+
<header>
|
88
|
+
<h3>image_tag</h3>
|
89
|
+
</header>
|
90
|
+
<p>The code:
|
91
|
+
</p>
|
92
|
+
<code>image_tag "http://farm3.staticflickr.com/2474/3609420787_f7fc0e53c7.jpg", width: "500", height: "375", alt: "Magic Ball"</code>
|
93
|
+
<p>Output:</p>
|
94
|
+
<samp>
|
95
|
+
<img alt="Magic Ball" height="375" src="http://farm3.staticflickr.com/2474/3609420787_f7fc0e53c7.jpg" width="500" />
|
96
|
+
</samp>
|
97
|
+
<footer><p>Also known as:
|
98
|
+
<ul>
|
99
|
+
<li><code>img_tag</code></li>
|
100
|
+
<li><code>img</code></li>
|
101
|
+
</ul>
|
102
|
+
</footer>
|
103
|
+
</section>
|
104
|
+
<section id='favicon_tag'>
|
105
|
+
<header>
|
106
|
+
<h3>favicon_tag</h3>
|
107
|
+
</header>
|
108
|
+
<p>The code:
|
109
|
+
</p>
|
110
|
+
<code>favicon_tag</code>
|
111
|
+
<p>Output:</p>
|
112
|
+
<samp>
|
113
|
+
<link href="/favicon.ico" rel="icon" />
|
114
|
+
</samp>
|
115
|
+
<footer><p>Also known as:
|
116
|
+
<ul>
|
117
|
+
<li><code>favicon</code></li>
|
118
|
+
</ul>
|
119
|
+
</footer>
|
120
|
+
</section>
|
121
|
+
</section>
|
122
|
+
</article>
|
123
|
+
|
124
|
+
|
125
|
+
<footer>
|
126
|
+
<p>© 2013 See the LICENCE file for more.</p>
|
127
|
+
</footer>
|
128
|
+
</body>
|
129
|
+
</html>
|