middleman-targets 1.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.
- 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 %>
|