middleman-targets 1.0.3 → 1.0.4

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +7 -0
  3. data/.yardopts +9 -0
  4. data/CHANGELOG.md +7 -0
  5. data/README.md +21 -4
  6. data/Rakefile +12 -6
  7. data/documentation_project/Gemfile +1 -1
  8. data/documentation_project/config.rb +7 -7
  9. data/documentation_project/source/helpers-resources.html.md.erb +14 -66
  10. data/documentation_project/source/partials/config.erb +326 -0
  11. data/documentation_project/source/partials/helpers.erb +354 -0
  12. data/documentation_project/source/partials/resources.erb +100 -0
  13. data/documentation_project/source/stylesheets/_middlemac_minimal.scss +283 -1
  14. data/documentation_project/source/target-feature-config.html.md.erb +6 -36
  15. data/features/build_target_option.feature +42 -0
  16. data/features/helpers_and_resources.feature +44 -0
  17. data/features/server_target_option.feature +42 -0
  18. data/features/support/env.rb +20 -0
  19. data/fixtures/middleman_targets_app/config.rb +33 -0
  20. data/fixtures/middleman_targets_app/source/all-root-logo.png +0 -0
  21. data/fixtures/middleman_targets_app/source/all-root.png +0 -0
  22. data/fixtures/middleman_targets_app/source/free-root.png +0 -0
  23. data/fixtures/middleman_targets_app/source/images/all-image.png +0 -0
  24. data/fixtures/middleman_targets_app/source/images/all-logo.png +0 -0
  25. data/fixtures/middleman_targets_app/source/images/free-image.png +0 -0
  26. data/fixtures/middleman_targets_app/source/images/pro-image.png +0 -0
  27. data/fixtures/middleman_targets_app/source/index.html.md.erb +35 -0
  28. data/fixtures/middleman_targets_app/source/pro-root.png +0 -0
  29. data/lib/middleman-targets/extension.rb +182 -54
  30. data/lib/middleman-targets/middleman-cli/build_all.rb +5 -6
  31. data/lib/middleman-targets/version.rb +1 -1
  32. data/middleman-targets.gemspec +9 -2
  33. data/yard/readme.md +6 -0
  34. data/yard/templates/default/fulldoc/html/css/common.css +1 -0
  35. data/yard/templates/default/fulldoc/html/css/full_list.css +57 -0
  36. data/yard/templates/default/fulldoc/html/css/style.css +343 -0
  37. data/yard/templates/default/onefile/html/files.erb +5 -0
  38. data/yard/templates/default/onefile/html/headers.erb +6 -0
  39. data/yard/templates/default/onefile/html/layout.erb +17 -0
  40. data/yard/templates/default/onefile/html/readme.erb +3 -0
  41. data/yard/templates/default/onefile/html/setup.rb +61 -0
  42. data/yard/yard_extensions.rb +73 -0
  43. metadata +83 -3
@@ -1,23 +1,114 @@
1
- ################################################################################
2
- # extension.rb
3
- # This file constitutes the framework for the bulk of this extension.
4
- ################################################################################
5
1
  require 'middleman-core'
6
2
 
3
+ ################################################################################
4
+ # This extension provides Middleman the ability to build and serve multiple
5
+ # targets, and includes resource extensions and helpers to take advantage of
6
+ # this new feature.
7
+ # @author Jim Derry <balthisar@gmail.com>
8
+ ################################################################################
7
9
  class MiddlemanTargets < ::Middleman::Extension
8
10
 
9
11
  ############################################################
10
12
  # Define the options that are to be set within `config.rb`
11
13
  # as Middleman *application* (not extension) options.
12
14
  ############################################################
15
+
13
16
  define_setting :target, 'default', 'The default target to process if not specified.'
14
17
  define_setting :targets, { :default => { :features => {} } } , 'A hash that defines many characteristics of the target.'
15
18
  define_setting :target_magic_images, true, 'Enable magic images for targets.'
16
- define_setting :target_magic_word, 'all', 'The magic image prefix for asset substitution.'
19
+ define_setting :target_magic_word, 'all', 'The magic image prefix for image substitution.'
20
+
21
+ # @!group Middleman Configuration
22
+
23
+ # @!attribute [rw] config[:target]=
24
+ # Indicates the current target that is being built or served. When
25
+ # set in `config.rb` it indicates the default target if one is not
26
+ # specified on the command line.
27
+ # @param [Symbol] value The target from `config[:targets]` that should
28
+ # be used as the default.
29
+ # @return [Symbol] Returns the current target.
30
+ # @note This is a Middleman application level config option.
31
+
32
+
33
+ # @!attribute [rw] config[:targets]=
34
+ # A hash that defines all of the characteristics of your individual targets.
35
+ # The `build_dir` and `features` keys in a target have special meanings;
36
+ # other keys can be added arbitrarily and helpers can fetch these for you.
37
+ # A best practice is to assign the same features to _all_ of your targets and
38
+ # toggle them `on` or `off` on a target-specific basis.
39
+ # @example You might define this in your `config.rb` like this:
40
+ # config[:targets] = {
41
+ # :free =>
42
+ # {
43
+ # :sample_key => 'People who use free versions don\'t drive profits.',
44
+ # :build_dir => 'build (%s)',
45
+ # :features =>
46
+ # {
47
+ # :feature_advertise_pro => true,
48
+ # :insults_user => true,
49
+ # :grants_wishes => false,
50
+ # }
51
+ # },
52
+ #
53
+ # :pro =>
54
+ # {
55
+ # :sample_key => 'You are a valued contributor to our balance sheet!',
56
+ # :features =>
57
+ # {
58
+ # :feature_advertise_pro => false,
59
+ # :insults_user => false,
60
+ # :grants_wishes => true,
61
+ # }
62
+ # },
63
+ # }
64
+ # @param [Hash] value The complete definition of your targets, their
65
+ # features, and other keys-value pairs that you wish to include.
66
+ # @return [Hash] Returns the attributes of your targets.
67
+ # @note This is a Middleman application level config option.
68
+
69
+
70
+ # @!attribute [rw] config[:target_magic_images]=
71
+ # This option is used to enable or disable the target magic images feature.
72
+ # If it's `true` then the `image_tag` helper will attempt to substitute
73
+ # target-specific images instead of the specified image, if the specified
74
+ # image begins with `:target_magic_word`.
75
+ # @param [Boolean] value Specify whether or not automatic target-specific
76
+ # image substitution should be enabled.
77
+ # @return [Boolean] Returns the current state of this option.
78
+ # @note This is a Middleman application level config option.
79
+
80
+
81
+ # @!attribute [rw] config[:target_magic_word]=
82
+ # Indicates the magic image prefix for image substitution with the
83
+ # `image_tag` helper when `:target_magic_images` is enabled. For example
84
+ # if you specify `all-image.png` and `pro-image.png` exists, then the
85
+ # latter will be used by the helper instead of the former.
86
+ # @param [String] value Indicate the prefix that should indicate and image
87
+ # the should be substituted, such as `all`.
88
+ # @return [String] Returns the current magic prefix.
89
+ # @note This is a Middleman application level config option.
90
+
91
+
92
+ # @!attribute [rw] config[:build_dir]=
93
+ # Indicates where **Middleman** will put build output. This standard config
94
+ # value will be treated as a *prefix*; for example if the current target is
95
+ # `:pro` and this value is set to its default `build`, then the actual build
96
+ # directory will be `build (pro)/`.
97
+ #
98
+ # If the `build_dir` key is present for any of the `config[:targets]`, they
99
+ # will override this setting.
100
+ # @param [String] value Indicate the build directory prefix that should be
101
+ # used for build output.
102
+ # @return [String] Returns the current value of this configuration setting.
103
+ # @note This is a Middleman application level config option.
104
+
105
+
106
+ # @!endgroup
17
107
 
18
108
 
19
109
  ############################################################
20
110
  # initialize
111
+ # @!visibility private
21
112
  ############################################################
22
113
  def initialize(app, options_hash={}, &block)
23
114
 
@@ -30,6 +121,7 @@ class MiddlemanTargets < ::Middleman::Extension
30
121
  ############################################################
31
122
  # after_configuration
32
123
  # Handle the --target cli setting.
124
+ # @!visibility private
33
125
  #############################################################
34
126
  def after_configuration
35
127
 
@@ -83,12 +175,10 @@ class MiddlemanTargets < ::Middleman::Extension
83
175
  resources.each do |resource|
84
176
 
85
177
  #--------------------------------------------------------
86
- # valid_features
87
- # Returns an array of valid features for this page
88
- # based on the current target, i.e., features that
89
- # are true for the current target. These are the
90
- # only features that can be used with frontmatter
91
- # :target or :exclude.
178
+ # Returns an array of valid features for a resource
179
+ # based on the current target, i.e., features that
180
+ # are true for the current target.
181
+ # @return [Array] Returns an array of features.
92
182
  #--------------------------------------------------------
93
183
  def resource.valid_features
94
184
  @app.config[:targets][@app.config[:target]][:features].select { |k, v| v }.keys
@@ -96,21 +186,22 @@ class MiddlemanTargets < ::Middleman::Extension
96
186
 
97
187
 
98
188
  #--------------------------------------------------------
99
- # targeted?
100
- # Determines if the resource is eligible for
101
- # inclusion in the current page based on the front
102
- # matter `target` and `exclude` data fields:
103
- # - if frontmatter:target is used, the target or
104
- # feature appears in the frontmatter, and
105
- # - if frontmatter:exclude is used, the target or
106
- # enabled feature does NOT appear in the
107
- # frontmatter.
189
+ # Determines if the resource is eligible for inclusion
190
+ # in the current target based on the front matter data
191
+ # `target` and `exclude` fields.
192
+ #
193
+ # * If **frontmatter:target** is used, the target or
194
+ # feature appears in the frontmatter, and
195
+ # * If **frontmatter:exclude** is used, the target or
196
+ # enabled feature does NOT appear in the
197
+ # frontmatter
108
198
  #
109
- # In general you won't use this resource method
110
- # because resources will already be excluded before
111
- # you have a chance to check them, and so any
112
- # leftover resources will always return true for
113
- # this method.
199
+ # In general you won't use this resource method because
200
+ # resources will already be excluded before you have a
201
+ # chance to check them, and so any leftover resources
202
+ # will always return `true` for this method.
203
+ # @return [Boolean] Returns a value indicating whether
204
+ # or not this resource belongs in the current target.
114
205
  #--------------------------------------------------------
115
206
  def resource.targeted?
116
207
  target_name = @app.config[:target]
@@ -153,16 +244,16 @@ class MiddlemanTargets < ::Middleman::Extension
153
244
 
154
245
 
155
246
  ############################################################
156
- # Helpers
157
- # Methods defined in this helpers block are available in
158
- # templates.
247
+ # Helpers
248
+ # Methods defined in this helpers block are available in
249
+ # templates.
159
250
  ############################################################
160
251
 
161
252
  helpers do
162
253
 
163
254
  #--------------------------------------------------------
164
- # target_name
165
- # Return the current build target.
255
+ # Return the current build target.
256
+ # @return [Symbol] Returns the current build target.
166
257
  #--------------------------------------------------------
167
258
  def target_name
168
259
  @app.config[:target]
@@ -170,8 +261,11 @@ class MiddlemanTargets < ::Middleman::Extension
170
261
 
171
262
 
172
263
  #--------------------------------------------------------
173
- # target_name?
174
- # Is the current target `proposal`?
264
+ # Is the current target `proposal`?
265
+ # @param [String, Symbol] proposal Specifies a proposed
266
+ # target.
267
+ # @return [Boolean] Returns `true` if the current target
268
+ # matches the parameter `proposal`.
175
269
  #--------------------------------------------------------
176
270
  def target_name?( proposal )
177
271
  @app.config[:target] == proposal.to_sym
@@ -179,8 +273,12 @@ class MiddlemanTargets < ::Middleman::Extension
179
273
 
180
274
 
181
275
  #--------------------------------------------------------
182
- # target_feature?
183
- # Does the target have the feature `feature`?
276
+ # Does the target have the feature `feature` enabled?
277
+ # @param [String, Symbol] feature Specifies a proposed
278
+ # feature.
279
+ # @return [Boolean] Returns `true` if the current target
280
+ # has the features `feature` and the features is
281
+ # enabled.
184
282
  #--------------------------------------------------------
185
283
  def target_feature?( feature )
186
284
  features = @app.config[:targets][@app.config[:target]][:features]
@@ -189,9 +287,13 @@ class MiddlemanTargets < ::Middleman::Extension
189
287
 
190
288
 
191
289
  #--------------------------------------------------------
192
- # target_value( key )
193
- # Attempts to return arbitrary key values for the
194
- # current target.
290
+ # Attempts to return arbitrary key values for the key
291
+ # `key` for the current target.
292
+ # @param [String, Symbol] key Specifies the desired key
293
+ # to look up.
294
+ # @return [String, Nil] Returns the value for `key` in
295
+ # the `:targets` structure, or `nil` if it doesn’t
296
+ # exist.
195
297
  #--------------------------------------------------------
196
298
  def target_value( key )
197
299
  target_values = @app.config[:targets][@app.config[:target]]
@@ -200,12 +302,30 @@ class MiddlemanTargets < ::Middleman::Extension
200
302
 
201
303
 
202
304
  #--------------------------------------------------------
203
- # image_tag
204
- # Override the built-in version in order to support:
205
- # - automatic target-specific images. Note that this
206
- # only works on local files.
207
- # - target and feature dependent images.
208
- # - absolute paths
305
+ # Override the built-in `image-tag` helper in order to
306
+ # support additional features.
307
+ #
308
+ # * Automatic target-specific images. Note that this
309
+ # only works on local files, and only if enabled
310
+ # with the option `:target_magic_images`.
311
+ # * Target and feature dependent images using the
312
+ # `params` hash.
313
+ # * Absolute paths, which Middleman sometimes bungles.
314
+ #
315
+ # Note that in addition to the options described below,
316
+ # `middleman-targets` inherits all of the built-in
317
+ # option parameters as well.
318
+ #
319
+ # @param [String] path The path to the image file.
320
+ # @param [Hash] params Optional parameters to pass to
321
+ # the helper.
322
+ # @option params [String, Symbol] :target This image
323
+ # tag will only be applied if the current target is
324
+ # `target`.
325
+ # @option params [String, Symbol] :feature This image
326
+ # tag will only be applied if the current target
327
+ # enables the feature `feature`.
328
+ # @return [Void]
209
329
  #--------------------------------------------------------
210
330
  def image_tag(path, params={})
211
331
  params.symbolize_keys!
@@ -237,7 +357,6 @@ class MiddlemanTargets < ::Middleman::Extension
237
357
  super(path, params)
238
358
  end
239
359
 
240
-
241
360
  end #helpers
242
361
 
243
362
 
@@ -246,12 +365,21 @@ class MiddlemanTargets < ::Middleman::Extension
246
365
  ############################################################
247
366
 
248
367
 
249
- #--------------------------------------------------------
250
- # target_specific_proposal( file )
251
- # Returns a target-specific proposed file when given
252
- # a user-specified file, and will return the same file
253
- # if not enabled or doesn't begin with the magic word.
254
- #--------------------------------------------------------
368
+ #########################################################
369
+ # Returns a target-specific proposed file when given
370
+ # a user-specified file, and will return the same file
371
+ # if not enabled or doesn't begin with the magic word.
372
+ #
373
+ # This method allow other implementations of `image-tag`
374
+ # to honor this implementation’s use of automatic
375
+ # image substitutions.
376
+ # @param [String] path Specify the path to the image
377
+ # for which you want to provide a substitution. This
378
+ # image doesn’t have to exist in fact if suitable
379
+ # images exist for the current target.
380
+ # @return [String] Returns the substitute image if one
381
+ # was found, otherwise it returns the original path.
382
+ #########################################################
255
383
  def target_specific_proposal( path )
256
384
  return path unless @app.config[:target_magic_images] && File.basename(path).start_with?( @app.config[:target_magic_word])
257
385
 
@@ -278,10 +406,10 @@ class MiddlemanTargets < ::Middleman::Extension
278
406
  end
279
407
 
280
408
 
281
- #--------------------------------------------------------
282
- # say
283
- # Output colored messages using ANSI codes.
284
- #--------------------------------------------------------
409
+ #########################################################
410
+ # Output colored messages using ANSI codes.
411
+ # @!visibility private
412
+ #########################################################
285
413
  def say(message = '', color = :reset)
286
414
  colors = { :blue => "\033[34m",
287
415
  :cyan => "\033[36m",
@@ -1,10 +1,8 @@
1
- ################################################################################
2
- # build_all.rb
3
- # Provides the class necessary for the build_all (all) command.
4
- ################################################################################
5
-
6
1
  require 'middleman-cli'
7
2
 
3
+ ################################################################################
4
+ # Envelops the class necessary to provide the `build_all`/`all` commands.
5
+ ################################################################################
8
6
  module Middleman::Cli
9
7
 
10
8
  ###################################################################
@@ -16,7 +14,8 @@ module Middleman::Cli
16
14
  check_unknown_options!
17
15
 
18
16
  ############################################################
19
- # build_all
17
+ # Build all targets.
18
+ # @return [Void]
20
19
  ############################################################
21
20
  def build_all
22
21
 
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  module MiddlemanTargets
3
- VERSION = '1.0.3'
3
+ VERSION = '1.0.4'
4
4
  end
5
5
  end
@@ -2,6 +2,8 @@
2
2
  $:.push File.expand_path('../lib', __FILE__)
3
3
  require 'middleman-targets/version'
4
4
 
5
+ mm_needed = ['~> 4.1', '>= 4.1.6']
6
+
5
7
  Gem::Specification.new do |s|
6
8
  s.name = 'middleman-targets'
7
9
  s.version = Middleman::MiddlemanTargets::VERSION
@@ -19,8 +21,13 @@ Gem::Specification.new do |s|
19
21
  s.require_paths = ['lib']
20
22
 
21
23
  # The version of middleman-core your extension depends on
22
- s.add_runtime_dependency('middleman-core', ['~> 4.1', '>= 4.1.6'])
24
+ s.add_runtime_dependency('middleman-core', mm_needed)
23
25
 
24
26
  # Additional dependencies
25
- s.add_runtime_dependency('middleman-cli', ['~> 4.1', '>= 4.1.6'])
27
+ s.add_runtime_dependency('middleman-cli', mm_needed)
28
+
29
+ # Development dependencies
30
+ s.add_development_dependency 'middleman', mm_needed
31
+ s.add_development_dependency 'bundler', '>= 1.6'
32
+ s.add_development_dependency 'rake', '>= 10.3'
26
33
  end
data/yard/readme.md ADDED
@@ -0,0 +1,6 @@
1
+ This gem provides the ability to generate multiple targets by outfitting
2
+ *Middleman** with additional command line options. The provided helpers make it
3
+ simple to control content that is specific to each target, based on the target
4
+ name or based on feature sets for each target.
5
+
6
+ It is standalone and can be used in any **Middleman** project.
@@ -0,0 +1 @@
1
+ /* Override this file with custom rules */
@@ -0,0 +1,57 @@
1
+ body {
2
+ margin: 0;
3
+ font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
4
+ font-size: 13px;
5
+ height: 101%;
6
+ overflow-x: hidden;
7
+ }
8
+
9
+ h1 { padding: 12px 10px; padding-bottom: 0; margin: 0; font-size: 1.4em; }
10
+ .clear { clear: both; }
11
+ #search { position: absolute; right: 5px; top: 9px; padding-left: 24px; }
12
+ #content.insearch #search, #content.insearch #noresults { background: url(data:image/gif;base64,R0lGODlhEAAQAPYAAP///wAAAPr6+pKSkoiIiO7u7sjIyNjY2J6engAAAI6OjsbGxjIyMlJSUuzs7KamppSUlPLy8oKCghwcHLKysqSkpJqamvT09Pj4+KioqM7OzkRERAwMDGBgYN7e3ujo6Ly8vCoqKjY2NkZGRtTU1MTExDw8PE5OTj4+PkhISNDQ0MrKylpaWrS0tOrq6nBwcKysrLi4uLq6ul5eXlxcXGJiYoaGhuDg4H5+fvz8/KKiohgYGCwsLFZWVgQEBFBQUMzMzDg4OFhYWBoaGvDw8NbW1pycnOLi4ubm5kBAQKqqqiQkJCAgIK6urnJyckpKSjQ0NGpqatLS0sDAwCYmJnx8fEJCQlRUVAoKCggICLCwsOTk5ExMTPb29ra2tmZmZmhoaNzc3KCgoBISEiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCAAAACwAAAAAEAAQAAAHaIAAgoMgIiYlg4kACxIaACEJCSiKggYMCRselwkpghGJBJEcFgsjJyoAGBmfggcNEx0flBiKDhQFlIoCCA+5lAORFb4AJIihCRbDxQAFChAXw9HSqb60iREZ1omqrIPdJCTe0SWI09GBACH5BAkIAAAALAAAAAAQABAAAAdrgACCgwc0NTeDiYozCQkvOTo9GTmDKy8aFy+NOBA7CTswgywJDTIuEjYFIY0JNYMtKTEFiRU8Pjwygy4ws4owPyCKwsMAJSTEgiQlgsbIAMrO0dKDGMTViREZ14kYGRGK38nHguHEJcvTyIEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDAggPg4iJAAMJCRUAJRIqiRGCBI0WQEEJJkWDERkYAAUKEBc4Po1GiKKJHkJDNEeKig4URLS0ICImJZAkuQAhjSi/wQyNKcGDCyMnk8u5rYrTgqDVghgZlYjcACTA1sslvtHRgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCQARAtOUoQRGRiFD0kJUYWZhUhKT1OLhR8wBaaFBzQ1NwAlkIszCQkvsbOHL7Y4q4IuEjaqq0ZQD5+GEEsJTDCMmIUhtgk1lo6QFUwJVDKLiYJNUd6/hoEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4uen4ICCA+IkIsDCQkVACWmhwSpFqAABQoQF6ALTkWFnYMrVlhWvIKTlSAiJiVVPqlGhJkhqShHV1lCW4cMqSkAR1ofiwsjJyqGgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCSMhREZGIYYGY2ElYebi56fhyWQniSKAKKfpaCLFlAPhl0gXYNGEwkhGYREUywag1wJwSkHNDU3D0kJYIMZQwk8MjPBLx9eXwuETVEyAC/BOKsuEjYFhoEAIfkECQgAAAAsAAAAABAAEAAAB2eAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4ueICImip6CIQkJKJ4kigynKaqKCyMnKqSEK05StgAGQRxPYZaENqccFgIID4KXmQBhXFkzDgOnFYLNgltaSAAEpxa7BQoQF4aBACH5BAkIAAAALAAAAAAQABAAAAdogACCg4SFggJiPUqCJSWGgkZjCUwZACQkgxGEXAmdT4UYGZqCGWQ+IjKGGIUwPzGPhAc0NTewhDOdL7Ykji+dOLuOLhI2BbaFETICx4MlQitdqoUsCQ2vhKGjglNfU0SWmILaj43M5oEAOwAAAAAAAAAAAA==) no-repeat center left; }
13
+ #full_list { padding: 0; list-style: none; margin-left: 0; }
14
+ #full_list ul { padding: 0; }
15
+ #full_list li { padding: 5px; padding-left: 12px; margin: 0; font-size: 1.1em; list-style: none; }
16
+ #noresults { padding: 7px 12px; }
17
+ #content.insearch #noresults { margin-left: 7px; }
18
+ ul.collapsed ul, ul.collapsed li { display: none; }
19
+ ul.collapsed.search_uncollapsed { display: block; }
20
+ ul.collapsed.search_uncollapsed li { display: list-item; }
21
+ li a.toggle { cursor: default; position: relative; left: -5px; top: 4px; text-indent: -999px; width: 10px; height: 9px; margin-left: -10px; display: block; float: left; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTM5jWRgMAAAAVdEVYdENyZWF0aW9uIFRpbWUAMy8xNC8wOeNZPpQAAAE2SURBVDiNrZTBccIwEEXfelIAHUA6CZ24BGaWO+FuzZAK4k6gg5QAdGAq+Bxs2Yqx7BzyL7Llp/VfzZeQhCTc/ezuGzKKnKSzpCxXJM8fwNXda3df5RZETlIt6YUzSQDs93sl8w3wBZxCCE10GM1OcWbWjB2mWgEH4Mfdyxm3PSepBHibgQE2wLe7r4HjEidpnXMYdQPKEMJcsZ4zs2POYQOcaPfwMVOo58zsAdMt18BuoVDPxUJRacELbXv3hUIX2vYmOUvi8C8ydz/ThjXrqKqqLbDIAdsCKBd+Wo7GWa7o9qzOQHVVVXeAbs+yHHCH4aTsaCOQqunmUy1yBUAXkdMIfMlgF5EXLo2OpV/c/Up7jG4hhHcYLgWzAZXUc2b2ixsfvc/RmNNfOXD3Q/oeL9axJE1yT9IOoUu6MGUkAAAAAElFTkSuQmCC) no-repeat bottom left; }
22
+ li.collapsed a.toggle { opacity: 0.5; cursor: default; background-position: top left; }
23
+ li { color: #888; cursor: pointer; }
24
+ li.deprecated { text-decoration: line-through; font-style: italic; }
25
+ li.r1 { background: #f0f0f0; }
26
+ li.r2 { background: #fafafa; }
27
+ li:hover { background: #ddd; }
28
+ li small:before { content: "("; }
29
+ li small:after { content: ")"; }
30
+ li small.search_info { display: none; }
31
+ a:link, a:visited { text-decoration: none; color: #05a; }
32
+ li.clicked { background: #05a; color: #ccc; }
33
+ li.clicked a:link, li.clicked a:visited { color: #eee; }
34
+ li.clicked a.toggle { opacity: 0.5; background-position: bottom right; }
35
+ li.collapsed.clicked a.toggle { background-position: top right; }
36
+ #search input { border: 1px solid #bbb; -moz-border-radius: 3px; -webkit-border-radius: 3px; }
37
+ #nav { margin-left: 10px; font-size: 0.9em; display: none; color: #aaa; }
38
+ #nav a:link, #nav a:visited { color: #358; }
39
+ #nav a:hover { background: transparent; color: #5af; }
40
+ .frames #nav span:after { content: ' | '; }
41
+ .frames #nav span:last-child:after { content: ''; }
42
+
43
+ .frames #content h1 { margin-top: 0; }
44
+ .frames li { white-space: nowrap; cursor: normal; }
45
+ .frames li small { display: block; font-size: 0.8em; }
46
+ .frames li small:before { content: ""; }
47
+ .frames li small:after { content: ""; }
48
+ .frames li small.search_info { display: none; }
49
+ .frames #search { width: 170px; position: static; margin: 3px; margin-left: 10px; font-size: 0.9em; color: #888; padding-left: 0; padding-right: 24px; }
50
+ .frames #content.insearch #search { background-position: center right; }
51
+ .frames #search input { width: 110px; }
52
+ .frames #nav { display: block; }
53
+
54
+ #full_list.insearch li { display: none; }
55
+ #full_list.insearch li.found { display: list-item; padding-left: 10px; }
56
+ #full_list.insearch li a.toggle { display: none; }
57
+ #full_list.insearch li small.search_info { display: block; }