middleman-targets 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile +18 -0
- data/LICENSE.md +22 -0
- data/README.md +110 -0
- data/Rakefile +10 -0
- data/bin/middleman-targets +80 -0
- data/documentation_project/.gitignore +25 -0
- data/documentation_project/Gemfile +14 -0
- data/documentation_project/README.md +13 -0
- data/documentation_project/config.rb +123 -0
- data/documentation_project/source/frontmatter.html.md.erb +70 -0
- data/documentation_project/source/helpers-resources.html.md.erb +98 -0
- data/documentation_project/source/images/free-logo-small.png +0 -0
- data/documentation_project/source/images/free-logo-small@2x.png +0 -0
- data/documentation_project/source/images/free-logo.png +0 -0
- data/documentation_project/source/images/free-logo@2x.png +0 -0
- data/documentation_project/source/images/pro-logo-small.png +0 -0
- data/documentation_project/source/images/pro-logo-small@2x.png +0 -0
- data/documentation_project/source/images/pro-logo.png +0 -0
- data/documentation_project/source/images/pro-logo@2x.png +0 -0
- data/documentation_project/source/index.html.md.erb +59 -0
- data/documentation_project/source/javascripts/all.js +1 -0
- data/documentation_project/source/layouts/layout.haml +9 -0
- data/documentation_project/source/layouts/template-logo-large.haml +17 -0
- data/documentation_project/source/layouts/template-logo-medium.haml +14 -0
- data/documentation_project/source/layouts/template-logo-small.haml +11 -0
- data/documentation_project/source/only-free.html.md.erb +38 -0
- data/documentation_project/source/only-pro.html.md.erb +39 -0
- data/documentation_project/source/simple-demo.html.md.erb +183 -0
- data/documentation_project/source/stylesheets/_github.scss +61 -0
- data/documentation_project/source/stylesheets/_middlemac_minimal.scss +516 -0
- data/documentation_project/source/stylesheets/_normalize.scss +374 -0
- data/documentation_project/source/stylesheets/style.css.scss +3 -0
- data/documentation_project/source/target-feature-config.html.md.erb +153 -0
- data/lib/middleman-targets.rb +13 -0
- data/lib/middleman-targets/commands.rb +6 -0
- data/lib/middleman-targets/extension.rb +281 -0
- data/lib/middleman-targets/version.rb +5 -0
- data/middleman-targets.gemspec +26 -0
- metadata +126 -0
@@ -0,0 +1,70 @@
|
|
1
|
+
---
|
2
|
+
title: Front Matter
|
3
|
+
layout: template-logo-medium
|
4
|
+
---
|
5
|
+
|
6
|
+
# Front Matter
|
7
|
+
|
8
|
+
By default every page in a Middleman project is included in the build output,
|
9
|
+
but `middleman-targets` provides means to ensure that only target- and
|
10
|
+
feature-specific pages are included. This is controlled by data in your pages’
|
11
|
+
front matter.
|
12
|
+
|
13
|
+
## `target`
|
14
|
+
|
15
|
+
The `target` key acts to ensure that _only_ targets and features in its array
|
16
|
+
are included in the build. For example:
|
17
|
+
|
18
|
+
~~~ erb
|
19
|
+
---
|
20
|
+
target:
|
21
|
+
- :free
|
22
|
+
- :insults_user
|
23
|
+
---
|
24
|
+
~~~
|
25
|
+
|
26
|
+
This example page would only be built if the target **or** feature is `free`
|
27
|
+
or `insults_user`.
|
28
|
+
|
29
|
+
Note there is no distinction between targets and features in this list. If the
|
30
|
+
target is `insults_user` or the feature is `free`, then output will be enabled.
|
31
|
+
{:.note}
|
32
|
+
|
33
|
+
|
34
|
+
## `exclude`
|
35
|
+
|
36
|
+
The `exclude` key ensures that pages are only built for targets and features
|
37
|
+
that do not appear in the `exclude` array. For example:
|
38
|
+
|
39
|
+
~~~ erb
|
40
|
+
---
|
41
|
+
exclude:
|
42
|
+
- :pro
|
43
|
+
- :insults_user
|
44
|
+
---
|
45
|
+
~~~
|
46
|
+
|
47
|
+
This example would build the page, unless the current target or feature were
|
48
|
+
`pro` **or** `insults_user`, i.e., either condition prevents the page from
|
49
|
+
being output.
|
50
|
+
|
51
|
+
Note there is no distinction between targets and features in this list. If the
|
52
|
+
target is `insults_user` or the feature is `free`, then output will be enabled.
|
53
|
+
{:.note}
|
54
|
+
|
55
|
+
|
56
|
+
## Precedence
|
57
|
+
|
58
|
+
`exclude` will always override `target`.
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
<% content_for :seeAlso do %>
|
63
|
+
<ul>
|
64
|
+
<li><a href="index.html">Welcome to middleman-targets</a></li>
|
65
|
+
<li><a href="simple-demo.html">Simple features demonstration</a></li>
|
66
|
+
<li><a href="build-serve-targets.html">Build and Serve different targets</a></li>
|
67
|
+
<li><a href="target-feature-config.html">Configuration</a></li>
|
68
|
+
<li><a href="helpers-resources.html">Helpers and Resources</a></li>
|
69
|
+
</ul>
|
70
|
+
<% end %>
|
@@ -0,0 +1,98 @@
|
|
1
|
+
---
|
2
|
+
title: Helpers and Resources
|
3
|
+
layout: template-logo-medium
|
4
|
+
---
|
5
|
+
|
6
|
+
# Helpers and Resources
|
7
|
+
|
8
|
+
`middleman-targets` includes some helpers and some page resources that make
|
9
|
+
working with multiple targets easier.
|
10
|
+
|
11
|
+
|
12
|
+
## Resources
|
13
|
+
|
14
|
+
Middleman’s resource list is available to all of your templates and pages, and
|
15
|
+
also available for your own helpers, and `middleman-targets` provides a couple
|
16
|
+
of resource map additions than can prove useful when developing your own
|
17
|
+
helpers.
|
18
|
+
|
19
|
+
`valid_features`
|
20
|
+
|
21
|
+
: `valid_features` returns an array of features that are enabled and applicable
|
22
|
+
to the current build target. Although available for output in your pages,
|
23
|
+
this is probably most useful for developing your own helpers.
|
24
|
+
|
25
|
+
By way of example, the raw output of `<%%= current_page.valid_features %>`
|
26
|
+
on this page is `<%= current_page.valid_features %>`. The output will be
|
27
|
+
different if you switch targets.
|
28
|
+
|
29
|
+
`targeted?`
|
30
|
+
|
31
|
+
: Determines if the resource is eligible for inclusion in the current page
|
32
|
+
based on the front matter `target` and `exclude` data fields
|
33
|
+
|
34
|
+
- if `frontmatter:target` is used, the target or feature appears in the
|
35
|
+
front matter, and
|
36
|
+
- if `frontmatter:exclude` is used, the target or enabled feature does NOT
|
37
|
+
appear in the frontmatter.
|
38
|
+
|
39
|
+
In general you won't use this resource method on pages because resources will
|
40
|
+
already be excluded before you have a chance to check them, and so any
|
41
|
+
leftover resources will always return true for this method. This method could
|
42
|
+
be valuable in writing your own helpers, however.
|
43
|
+
|
44
|
+
|
45
|
+
## Helpers
|
46
|
+
|
47
|
+
`target_name`
|
48
|
+
|
49
|
+
: Return the current build target.
|
50
|
+
|
51
|
+
`target_name?(proposal)`
|
52
|
+
|
53
|
+
: Is the current target `proposal`?
|
54
|
+
|
55
|
+
`target_feature?(feature)`
|
56
|
+
|
57
|
+
: Does the target have the feature `feature`?
|
58
|
+
|
59
|
+
`target_value(key)`
|
60
|
+
|
61
|
+
: Attempts to return the value for they key `key` for the current target.
|
62
|
+
|
63
|
+
`image_tag`
|
64
|
+
|
65
|
+
: Extends Middleman’s built-in `image_tag` helper in order to support:
|
66
|
+
|
67
|
+
- automatic target-specific images. Note that this only works on local files.
|
68
|
+
- target and feature dependent images.
|
69
|
+
- absolute paths
|
70
|
+
|
71
|
+
Automatic target-specific images are described in
|
72
|
+
[Simple features demonstration](simple-demo.html), and allow you to specify
|
73
|
+
an image with a magic prefix in your source code which will be substituted
|
74
|
+
with a target-specific image for output.
|
75
|
+
|
76
|
+
Target- and feature-dependent images add the `:target` and `:feature`
|
77
|
+
options to the `image_tag` parameter array, indicating that the image should
|
78
|
+
only be used in the condition specified. For example,
|
79
|
+
`image_tag 'my_image.png', :feature => 'insults_user'` will only include the
|
80
|
+
image if the current target has the feature `insults_user` enabled.
|
81
|
+
|
82
|
+
As a freebie that’s not specifically related to multiple targets, our
|
83
|
+
`image_tag` helper also works with absolute image paths, where ”absolute”
|
84
|
+
means relative to your project directory. Specifying `/assets/images/photo.png`
|
85
|
+
will correctly reference that image as if your project directory were the
|
86
|
+
root filesystem.
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
<% content_for :seeAlso do %>
|
91
|
+
<ul>
|
92
|
+
<li><a href="index.html">Welcome to middleman-targets</a></li>
|
93
|
+
<li><a href="simple-demo.html">Simple features demonstration</a></li>
|
94
|
+
<li><a href="build-serve-targets.html">Build and Serve different targets</a></li>
|
95
|
+
<li><a href="target-feature-config.html">Configuration</a></li>
|
96
|
+
<li><a href="frontmatter.html">Front Matter</a></li>
|
97
|
+
</ul>
|
98
|
+
<% end %>
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,59 @@
|
|
1
|
+
---
|
2
|
+
title: Welcome to middleman-targets
|
3
|
+
layout: template-logo-large
|
4
|
+
---
|
5
|
+
|
6
|
+
<div markdown="1">
|
7
|
+
|
8
|
+
# Welcome to middleman-targets
|
9
|
+
|
10
|
+
The `middleman-targets` gem is an extension to [Middleman][1] that gives you the
|
11
|
+
ability to specify multiple build targets and provides useful tools for dealing
|
12
|
+
with multiple targets and features.
|
13
|
+
|
14
|
+
- Generate multiple targets for different uses using the same basic project
|
15
|
+
structure, content, and code.
|
16
|
+
- Assign “features” to targets which give you fine-grained control over what
|
17
|
+
content appears in each target.
|
18
|
+
- Select images automatically based on the current build target.
|
19
|
+
- Use images selectively based on the current build target or feature.
|
20
|
+
- Include target-specific versions of data in a consistent fashion.
|
21
|
+
|
22
|
+
`middleman-targets` was written as part of the [Middlemac][2] Help Book building
|
23
|
+
system for Mac OS X applications, but it’s suitable for any project that
|
24
|
+
requires multiple build targets, such as software documentation, training
|
25
|
+
manuals, and more.
|
26
|
+
|
27
|
+
This documentation will refer to two sample targets: `:pro` and `:free`, which
|
28
|
+
is something that a typical software publisher might do.
|
29
|
+
|
30
|
+
Note that parts of this documentation will have different content depending on
|
31
|
+
whether you are building the `:pro` or `:free` target. These are just examples,
|
32
|
+
though, and all of the technical documentation is the same.
|
33
|
+
{:.note}
|
34
|
+
|
35
|
+
* * *
|
36
|
+
|
37
|
+
- [Simple features demonstration](simple-demo.html)
|
38
|
+
- [Build and Serve different targets](build-serve-targets.html)
|
39
|
+
- [Configuration](target-feature-config.html)
|
40
|
+
- [Helpers and Resources](helpers-resources.html)
|
41
|
+
- [Front Matter](frontmatter.html)
|
42
|
+
|
43
|
+
|
44
|
+
</div>
|
45
|
+
|
46
|
+
[1]: https://middlemanapp.com/
|
47
|
+
[2]: https://github.com/middlemac
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
<% content_for :seeAlso do %>
|
52
|
+
<ul>
|
53
|
+
<li><a href="simple-demo.html">Simple features demonstration</a></li>
|
54
|
+
<li><a href="build-serve-targets.html">Build and Serve different targets</a></li>
|
55
|
+
<li><a href="target-feature-config.html">Configuration</a></li>
|
56
|
+
<li><a href="helpers-resources.html">Helpers and Resources</a></li>
|
57
|
+
<li><a href="frontmatter.html">Front Matter</a></li>
|
58
|
+
</ul>
|
59
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
// This is where it all goes :)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
= wrap_layout ('layout'.to_sym) do
|
2
|
+
.container-logo-large
|
3
|
+
%div
|
4
|
+
%div
|
5
|
+
= image_tag 'all-logo-small.png', :alt => 'middleman-targets logo'
|
6
|
+
%h1= "#{product_name}"
|
7
|
+
%h2= "version #{product_version}"
|
8
|
+
%a{:href => product_uri}= product_uri
|
9
|
+
|
10
|
+
- if content_for?(:seeAlso)
|
11
|
+
.related_topics
|
12
|
+
%h1 See Also
|
13
|
+
= yield_content :seeAlso
|
14
|
+
|
15
|
+
%div
|
16
|
+
.yield-content
|
17
|
+
~ yield
|
@@ -0,0 +1,14 @@
|
|
1
|
+
= wrap_layout ('layout'.to_sym) do
|
2
|
+
.container-logo-medium
|
3
|
+
%div
|
4
|
+
.yield-content
|
5
|
+
~ yield
|
6
|
+
|
7
|
+
%div
|
8
|
+
%div
|
9
|
+
= image_tag 'all-logo-small.png', :alt => 'middleman-targets logo'
|
10
|
+
.related_topics
|
11
|
+
|
12
|
+
- if content_for?(:seeAlso)
|
13
|
+
%h1 See Also
|
14
|
+
= yield_content :seeAlso
|
@@ -0,0 +1,38 @@
|
|
1
|
+
---
|
2
|
+
title: Only for :free
|
3
|
+
layout: template-logo-small
|
4
|
+
target:
|
5
|
+
- :free
|
6
|
+
---
|
7
|
+
|
8
|
+
# Only for :free
|
9
|
+
|
10
|
+
This page is only available to the `:free` target, and no other target will make
|
11
|
+
this page available during build or while running the server.
|
12
|
+
|
13
|
+
This is accomplished by using the `target` key in the
|
14
|
+
[front matter](frontmatter.html) data, and specifying only the `:free` target.
|
15
|
+
|
16
|
+
~~~ erb
|
17
|
+
---
|
18
|
+
title: Only for :free
|
19
|
+
layout: template-logo-small
|
20
|
+
target:
|
21
|
+
- :free
|
22
|
+
---
|
23
|
+
~~~
|
24
|
+
|
25
|
+
Note that `target` is a YAML array; you can include multiple `target` targets
|
26
|
+
and/or features here.
|
27
|
+
{:.note}
|
28
|
+
|
29
|
+
<% content_for :seeAlso do %>
|
30
|
+
<ul>
|
31
|
+
<li><a href="index.html">Welcome to middleman-targets</a></li>
|
32
|
+
<li><a href="simple-demo.html">Simple features demonstration</a></li>
|
33
|
+
<li><a href="build-serve-targets.html">Build and Serve different targets</a></li>
|
34
|
+
<li><a href="target-feature-config.html">Configuration</a></li>
|
35
|
+
<li><a href="helpers-resources.html">Helpers and Resources</a></li>
|
36
|
+
<li><a href="frontmatter.html">Front Matter</a></li>
|
37
|
+
</ul>
|
38
|
+
<% end %>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
---
|
2
|
+
title: Only for :pro
|
3
|
+
layout: template-logo-small
|
4
|
+
exclude:
|
5
|
+
- :free
|
6
|
+
---
|
7
|
+
|
8
|
+
# Only for :pro
|
9
|
+
|
10
|
+
This page is only available to targets that are not `:free`; in this sample
|
11
|
+
project, that means that only the `:pro` target will make this page available
|
12
|
+
during build or while running the server.
|
13
|
+
|
14
|
+
This is accomplished by using the `exclude` key in the
|
15
|
+
[front matter](frontmatter.html) data, and excluding the `:free` target.
|
16
|
+
|
17
|
+
~~~ erb
|
18
|
+
---
|
19
|
+
title: Only for :pro
|
20
|
+
layout: template-logo-small
|
21
|
+
exclude:
|
22
|
+
- :free
|
23
|
+
---
|
24
|
+
~~~
|
25
|
+
|
26
|
+
Note that `exclude` is a YAML array; you can include multiple `exclude` targets
|
27
|
+
and/or features here.
|
28
|
+
{:.note}
|
29
|
+
|
30
|
+
<% content_for :seeAlso do %>
|
31
|
+
<ul>
|
32
|
+
<li><a href="index.html">Welcome to middleman-targets</a></li>
|
33
|
+
<li><a href="simple-demo.html">Simple features demonstration</a></li>
|
34
|
+
<li><a href="build-serve-targets.html">Build and Serve different targets</a></li>
|
35
|
+
<li><a href="target-feature-config.html">Configuration</a></li>
|
36
|
+
<li><a href="helpers-resources.html">Helpers and Resources</a></li>
|
37
|
+
<li><a href="frontmatter.html">Front Matter</a></li>
|
38
|
+
</ul>
|
39
|
+
<% end %>
|
@@ -0,0 +1,183 @@
|
|
1
|
+
---
|
2
|
+
title: Simple features demonstration
|
3
|
+
layout: template-logo-medium
|
4
|
+
---
|
5
|
+
|
6
|
+
# Simple features demonstration
|
7
|
+
|
8
|
+
This page demonstrates most of the features provided by `middleman-targets`.
|
9
|
+
Notably on this page (as on all others) you can see that the logo reflects
|
10
|
+
the current target. If you build or serve `:pro` you will see the logo text
|
11
|
+
differently than building or serving `:free`.
|
12
|
+
|
13
|
+
This is accomplished by using the enhanced `image_tag`
|
14
|
+
[helper](helpers-resources.html) and specifying an image with a magic prefix (in
|
15
|
+
this project the prefix is `all-`).
|
16
|
+
|
17
|
+
|
18
|
+
## Current target
|
19
|
+
|
20
|
+
Your current `target_name` is `<%= target_name %>`, and this `<%= target_name %>`
|
21
|
+
output is a result of the `target_name` [helper](helpers-resources.html).
|
22
|
+
|
23
|
+
This in itself isn’t so useful; your users probably don’t care about the
|
24
|
+
internal names for your targets. However…
|
25
|
+
|
26
|
+
|
27
|
+
## Target based conditions
|
28
|
+
|
29
|
+
You can vary the output per target using simple conditional expressions in
|
30
|
+
whatever template language you use. Since the source for this page is an ERB
|
31
|
+
file, let’s show an example using ERB:
|
32
|
+
|
33
|
+
<% if target_name?(:pro) %>
|
34
|
+
**You are viewing the `pro` target.**
|
35
|
+
<% else %>
|
36
|
+
**You are viewing the `free` target.**
|
37
|
+
<% end %>
|
38
|
+
{:.note}
|
39
|
+
|
40
|
+
This output is a result of this conditional in the source file:
|
41
|
+
|
42
|
+
~~~ erb
|
43
|
+
<%% if target_name?(:pro) %>
|
44
|
+
**You are viewing the `pro` target.**
|
45
|
+
<%% else %>
|
46
|
+
**You are viewing the `free` target.**
|
47
|
+
<%% end %>
|
48
|
+
~~~
|
49
|
+
|
50
|
+
If you only have a few targets without a large variety of feature differences,
|
51
|
+
then using target based conditions may be ideal for you. However as things tend
|
52
|
+
to become more complex, micromanaging which content belongs to which feature
|
53
|
+
tends to become unmanageable.
|
54
|
+
|
55
|
+
|
56
|
+
## Feature based conditions
|
57
|
+
|
58
|
+
Applying content based on feature gives you much greater flexibility and control
|
59
|
+
over what content is included in your builds. The concept is simple: add an
|
60
|
+
identical list of features to each target in your [`config.rb`](target-feature-config.html)
|
61
|
+
file, and then either enable them (`true`) or disable them (`false`) for each
|
62
|
+
target.
|
63
|
+
|
64
|
+
For example, the `config.rb` for this project includes the feature
|
65
|
+
`feature_advertise_pro`, which is something that might be reasonable to include
|
66
|
+
in your free project but unnecessary in your professional project, e.g.:
|
67
|
+
|
68
|
+
<% if target_feature?(:feature_advertise_pro) %>
|
69
|
+
Did you know that the Professional version of project has an even better message
|
70
|
+
for you?
|
71
|
+
<% else %>
|
72
|
+
As a thank you to our valued, paying customers we offer you, well, thanks!
|
73
|
+
<% end %>
|
74
|
+
{:.note}
|
75
|
+
|
76
|
+
The notice above was produced with this simple code:
|
77
|
+
|
78
|
+
~~~ erb
|
79
|
+
<%% if target_feature?(:feature_advertise_pro) %>
|
80
|
+
As a thank you to our valued, paying customers we offer you, well, thanks!
|
81
|
+
<%% else %>
|
82
|
+
Did you know that the Professional version of project has an even better message
|
83
|
+
for you?
|
84
|
+
<%% end %>
|
85
|
+
~~~
|
86
|
+
|
87
|
+
Managing your content with features instead of targets can make it dead simple
|
88
|
+
to change your documentation in the event that your product features change.
|
89
|
+
|
90
|
+
|
91
|
+
## Target specific data
|
92
|
+
|
93
|
+
This project’s [`config.rb`](target-feature-config.html) defines a sample data
|
94
|
+
key called `sample_key` containing a different message for each target.
|
95
|
+
|
96
|
+
<%= @app.config[:targets][@app.config[:target]][:sample_key] %>
|
97
|
+
{:.note}
|
98
|
+
|
99
|
+
That output was generated with this code:
|
100
|
+
|
101
|
+
~~~ erb
|
102
|
+
<%%= @app.config[:targets][@app.config[:target]][:sample_key] %>
|
103
|
+
~~~
|
104
|
+
|
105
|
+
However that’s a bit fussy, and could be output much more easily by using a
|
106
|
+
built-in [helper](helpers-resources.html):
|
107
|
+
|
108
|
+
<%= target_value(:sample_key) %>
|
109
|
+
{:.note}
|
110
|
+
|
111
|
+
~~~ erb
|
112
|
+
<%%= target_value(:sample_key) %>
|
113
|
+
~~~
|
114
|
+
|
115
|
+
|
116
|
+
## Omitting pages
|
117
|
+
|
118
|
+
Using [frontmatter data](frontmatter.html) you can selectively include and/or
|
119
|
+
exclude entire pages from your project based on target and/or features. The
|
120
|
+
two links (but not destinations) that follow are present in both the `:pro`
|
121
|
+
and `:free` targets, but depending on which target you are viewing the
|
122
|
+
destination will not be present.
|
123
|
+
|
124
|
+
- [Link to a `:free`-only page](only-free.html)
|
125
|
+
- [Link to a `:pro`-only page](only-pro.html)
|
126
|
+
|
127
|
+
Code revealing how this is done is present on those two pages.
|
128
|
+
|
129
|
+
|
130
|
+
## Target and feature specific images
|
131
|
+
|
132
|
+
Our `image_tag` helper adds the `:target` and `:feature` parameters to the
|
133
|
+
built-in helper which is intended as a space-saver compared to
|
134
|
+
`<%% if target_name?(…) %>` and `<%% if target_feature?(…) %>` conditional
|
135
|
+
blocks. Simply supply the desired target or feature in the options parameter
|
136
|
+
and the image will be included or excluded appropriately.
|
137
|
+
|
138
|
+
<%= image_tag 'pro-logo-small.png', :target => 'pro' %>
|
139
|
+
<%= image_tag 'free-logo-small.png', :target => 'free' %>
|
140
|
+
|
141
|
+
You will see an appropriate version of the logo based on this code:
|
142
|
+
|
143
|
+
~~~ erb
|
144
|
+
<%%= image_tag 'pro-logo-small.png', :target => 'pro' %>
|
145
|
+
<%%= image_tag 'free-logo-small.png', :target => 'free' %>
|
146
|
+
~~~
|
147
|
+
|
148
|
+
However in the case of target based image selection, there’s an even easier
|
149
|
+
way…
|
150
|
+
|
151
|
+
|
152
|
+
## Automatic target based images
|
153
|
+
|
154
|
+
By specifying a magic prefix defined in your [`config.rb`](target-feature-config.html)
|
155
|
+
file, you can enable automatic substitution of images based on the current
|
156
|
+
build target. For example:
|
157
|
+
|
158
|
+
<%= image_tag 'all-logo-small.png' %>
|
159
|
+
|
160
|
+
The above, target-appropriate image was produced with this single line of code:
|
161
|
+
|
162
|
+
~~~ erb
|
163
|
+
<%%= image_tag 'all-logo-small.png' %>
|
164
|
+
~~~
|
165
|
+
|
166
|
+
If you look at the `images/` directory in this project’s source, you’ll notice
|
167
|
+
that there’s not even a file named `all-logo-small.png`.
|
168
|
+
|
169
|
+
Do note, however, that this automatic substitution _only_ works for images that
|
170
|
+
are located within your project’s directory, and not from assets not available
|
171
|
+
in the file system.
|
172
|
+
{:.note}
|
173
|
+
|
174
|
+
|
175
|
+
<% content_for :seeAlso do %>
|
176
|
+
<ul>
|
177
|
+
<li><a href="index.html">Welcome to middleman-targets</a></li>
|
178
|
+
<li><a href="build-serve-targets.html">Build and Serve different targets</a></li>
|
179
|
+
<li><a href="target-feature-config.html">Configuration</a></li>
|
180
|
+
<li><a href="helpers-resources.html">Helpers and Resources</a></li>
|
181
|
+
<li><a href="frontmatter.html">Front Matter</a></li>
|
182
|
+
</ul>
|
183
|
+
<% end %>
|