yard-sketchup 1.3.0 → 1.4.1

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 (34) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +15 -15
  3. data/lib/yard-sketchup/patches/c_base_handler.rb +52 -52
  4. data/lib/yard-sketchup/stubs/autoload.rb +134 -134
  5. data/lib/yard-sketchup/templates/changelog/fulldoc/text/setup.rb +44 -44
  6. data/lib/yard-sketchup/templates/coverage/fulldoc/text/setup.rb +41 -41
  7. data/lib/yard-sketchup/templates/default/fulldoc/html/css/rubyapi.css +10 -10
  8. data/lib/yard-sketchup/templates/default/fulldoc/html/css/sketchup.css +141 -141
  9. data/lib/yard-sketchup/templates/default/fulldoc/html/favicon.ico +0 -0
  10. data/lib/yard-sketchup/templates/default/fulldoc/html/full_list_object_types.erb +1 -1
  11. data/lib/yard-sketchup/templates/default/fulldoc/html/images/Ruby.svg +1 -1
  12. data/lib/yard-sketchup/templates/default/fulldoc/html/images/sketchup-logo.svg +19 -19
  13. data/lib/yard-sketchup/templates/default/fulldoc/html/images/trimble-logo-white.svg +29 -29
  14. data/lib/yard-sketchup/templates/default/fulldoc/html/js/sketchup.js +37 -37
  15. data/lib/yard-sketchup/templates/default/fulldoc/html/setup.rb +75 -67
  16. data/lib/yard-sketchup/templates/default/layout/html/embed_meta.erb +78 -78
  17. data/lib/yard-sketchup/templates/default/layout/html/footer.erb +4 -4
  18. data/lib/yard-sketchup/templates/default/layout/html/headers.erb +15 -15
  19. data/lib/yard-sketchup/templates/default/layout/html/layout.erb +56 -55
  20. data/lib/yard-sketchup/templates/default/layout/html/navbar.erb +36 -36
  21. data/lib/yard-sketchup/templates/default/layout/html/setup.rb +25 -25
  22. data/lib/yard-sketchup/templates/default/method_details/html/method_signature.erb +25 -25
  23. data/lib/yard-sketchup/templates/default/method_details/setup.rb +11 -11
  24. data/lib/yard-sketchup/templates/default/module/html/box_info.erb +37 -37
  25. data/lib/yard-sketchup/templates/default/module/html/constant_summary.erb +17 -17
  26. data/lib/yard-sketchup/templates/default/module/html/method_summary.erb +18 -18
  27. data/lib/yard-sketchup/templates/inheritance/fulldoc/text/setup.rb +54 -54
  28. data/lib/yard-sketchup/templates/stubs/fulldoc/text/setup.rb +372 -361
  29. data/lib/yard-sketchup/templates/versions/fulldoc/text/setup.rb +25 -25
  30. data/lib/yard-sketchup/version.rb +3 -3
  31. data/lib/yard-sketchup/yard/html_helper.rb +16 -0
  32. data/lib/yard-sketchup.rb +37 -36
  33. data/yard-sketchup.gemspec +26 -25
  34. metadata +22 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 49c358aed3c27eb2e36e560ef16ee89eb0c60730352f5d5eba690586d0279fd2
4
- data.tar.gz: 8e378ec48eb89428cccb35521b3cc695584320b2e85d34f3926e3a7b4e45c694
3
+ metadata.gz: 3979def1e3596fe3fc383b4e78e1fac58b7e78cc4ea4e74d63889d10f6c0568b
4
+ data.tar.gz: 7fc768e9ce3ad8cf58e075f031451a4ef943dd058e7d63b790dde11386e38ceb
5
5
  SHA512:
6
- metadata.gz: c061e454e88e79ff23561b1f849666ef9b44622fb56c2d7288be1f8c69485df621d59d8b0f4b258854866ec9864659c676e9cf62046e1dac8ae1b2d812918cf3
7
- data.tar.gz: 9a26afb8e48a959dd86a9bf1c376f4d2ea1f9bc0668b350ef8ede27d1eb910d99f1bda9e7451666cca8f7282f2c4355cace35236ae6ac642bcc4a3c1e592e34a
6
+ metadata.gz: '0649c7a08f7df3c3a7e816e0ab0dd0a8fa17d1d421b0bfb3db6a5f3a9b17631f02563a0a972da54c569cd0c6b914b2d356983588535dedfde4d3e310c7f78962'
7
+ data.tar.gz: 95d05a25af4be851bed01cfa15e7a2fac1d56961f9932928621295565c96f3950a586fe0310de815c5d95d0e53d6f07422a0d99561fd59caaf29f68773a3a829
data/Gemfile CHANGED
@@ -1,15 +1,15 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gemspec
6
-
7
- gem 'rake', '~> 12.0', require: false
8
-
9
- group :tools do
10
- gem 'colorize', '~> 0.0', require: false
11
- gem 'git', '~> 1.3', require: false
12
- gem 'git_diff_parser', '~> 2.3', require: false
13
- gem 'thor', '~> 0.19', require: false
14
- end
15
-
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
6
+
7
+ gem 'rake', '~> 12.0', require: false
8
+
9
+ group :tools do
10
+ gem 'colorize', '~> 0.0', require: false
11
+ gem 'git', '~> 1.3', require: false
12
+ gem 'git_diff_parser', '~> 2.3', require: false
13
+ gem 'thor', '~> 0.19', require: false
14
+ end
15
+
@@ -1,52 +1,52 @@
1
- # frozen_string_literal: true
2
- module YARD
3
- module Handlers
4
- module C
5
- class Base < Handlers::Base
6
-
7
- # Temporary workaround until a proper fix can be applied to YARD master.
8
- alias_method :namespace_for_variable_original, :namespace_for_variable
9
- def namespace_for_variable(var)
10
- patch_namespace_for_variable(var) ||
11
- namespace_for_variable_original(var)
12
- end
13
-
14
- private
15
-
16
- def patch_namespace_for_variable(var)
17
- name = PATCH_ERROR_NAME[var]
18
- # $stderr.puts "Mapped #{var} to #{name}" if name
19
- name.nil? ? nil : P(name)
20
- end
21
-
22
- # Generated by update_error_map.rb (Copy+past results)
23
- PATCH_ERROR_NAME = {
24
- 'rb_eException' => 'Exception',
25
- 'rb_eSystemExit' => 'SystemExit',
26
- 'rb_eFatal' => 'fatal',
27
- 'rb_eSignal' => 'SignalException',
28
- 'rb_eInterrupt' => 'Interrupt',
29
- 'rb_eStandardError' => 'StandardError',
30
- 'rb_eTypeError' => 'TypeError',
31
- 'rb_eArgError' => 'ArgumentError',
32
- 'rb_eIndexError' => 'IndexError',
33
- 'rb_eKeyError' => 'KeyError',
34
- 'rb_eRangeError' => 'RangeError',
35
- 'rb_eScriptError' => 'ScriptError',
36
- 'rb_eSyntaxError' => 'SyntaxError',
37
- 'rb_eLoadError' => 'LoadError',
38
- 'rb_eNotImpError' => 'NotImplementedError',
39
- 'rb_eNameError' => 'NameError',
40
- 'rb_eNoMethodError' => 'NoMethodError',
41
- 'rb_eRuntimeError' => 'RuntimeError',
42
- 'rb_eFrozenError' => 'FrozenError',
43
- 'rb_eSecurityError' => 'SecurityError',
44
- 'rb_eNoMemError' => 'NoMemoryError',
45
- 'rb_eEncodingError' => 'EncodingError',
46
- 'rb_eSystemCallError' => 'SystemCallError',
47
- }
48
-
49
- end
50
- end
51
- end
52
- end
1
+ # frozen_string_literal: true
2
+ module YARD
3
+ module Handlers
4
+ module C
5
+ class Base < Handlers::Base
6
+
7
+ # Temporary workaround until a proper fix can be applied to YARD master.
8
+ alias_method :namespace_for_variable_original, :namespace_for_variable
9
+ def namespace_for_variable(var)
10
+ patch_namespace_for_variable(var) ||
11
+ namespace_for_variable_original(var)
12
+ end
13
+
14
+ private
15
+
16
+ def patch_namespace_for_variable(var)
17
+ name = PATCH_ERROR_NAME[var]
18
+ # $stderr.puts "Mapped #{var} to #{name}" if name
19
+ name.nil? ? nil : P(name)
20
+ end
21
+
22
+ # Generated by update_error_map.rb (Copy+past results)
23
+ PATCH_ERROR_NAME = {
24
+ 'rb_eException' => 'Exception',
25
+ 'rb_eSystemExit' => 'SystemExit',
26
+ 'rb_eFatal' => 'fatal',
27
+ 'rb_eSignal' => 'SignalException',
28
+ 'rb_eInterrupt' => 'Interrupt',
29
+ 'rb_eStandardError' => 'StandardError',
30
+ 'rb_eTypeError' => 'TypeError',
31
+ 'rb_eArgError' => 'ArgumentError',
32
+ 'rb_eIndexError' => 'IndexError',
33
+ 'rb_eKeyError' => 'KeyError',
34
+ 'rb_eRangeError' => 'RangeError',
35
+ 'rb_eScriptError' => 'ScriptError',
36
+ 'rb_eSyntaxError' => 'SyntaxError',
37
+ 'rb_eLoadError' => 'LoadError',
38
+ 'rb_eNotImpError' => 'NotImplementedError',
39
+ 'rb_eNameError' => 'NameError',
40
+ 'rb_eNoMethodError' => 'NoMethodError',
41
+ 'rb_eRuntimeError' => 'RuntimeError',
42
+ 'rb_eFrozenError' => 'FrozenError',
43
+ 'rb_eSecurityError' => 'SecurityError',
44
+ 'rb_eNoMemError' => 'NoMemoryError',
45
+ 'rb_eEncodingError' => 'EncodingError',
46
+ 'rb_eSystemCallError' => 'SystemCallError',
47
+ }
48
+
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,134 +1,134 @@
1
- module SketchUpYARD
2
- module Stubs
3
- class AutoLoadGenerator
4
-
5
- # @param [YARD::CodeObject::Base] namespace_objects
6
- # @param [IO] out
7
- def generate(namespace_objects, out)
8
- dependencies = resolve_dependencies(namespace_objects)
9
- out.puts "# This file is auto-generated by the `thor stubs` command."
10
- required = Set.new
11
- # Top level is special case.
12
- top_level_path = File.join(sketchup_stubs_path, '_top_level.rb')
13
- out.puts "require '#{top_level_path}'"
14
- # The rest is resolved recursively.
15
- dependencies.each { |object|
16
- recurse_require(object, required, out)
17
- }
18
- end
19
-
20
- private
21
-
22
- class Node
23
-
24
- attr_reader :object
25
- attr_reader :dependencies
26
-
27
- def initialize(object)
28
- @object = object
29
- @dependencies = SortedSet.new
30
- end
31
-
32
- def root?
33
- @object.namespace.root?
34
- end
35
-
36
- def path
37
- @object.path
38
- end
39
-
40
- def namespace
41
- @object.namespace
42
- end
43
-
44
- def <<(object)
45
- @dependencies << object
46
- end
47
-
48
- def <=>(other)
49
- @object.path <=> other.path
50
- end
51
-
52
- def hash
53
- @object.path.hash
54
- end
55
-
56
- end
57
-
58
-
59
- class NodeFactory
60
-
61
- def initialize
62
- @dependencies = {}
63
- end
64
-
65
- def node(yard_object)
66
- item = @dependencies[yard_object.path]
67
- return item if item
68
- item = Node.new(yard_object)
69
- @dependencies[yard_object.path] = item
70
- item
71
- end
72
-
73
- end
74
-
75
-
76
- def resolve_dependencies(yard_objects)
77
- factory = NodeFactory.new
78
- dependencies = SortedSet.new
79
-
80
- yard_objects.each { |yard_object|
81
- object = factory.node(yard_object)
82
-
83
- if yard_object.type == :class && yard_object.superclass.name != :Object
84
- object << factory.node(yard_object.superclass)
85
- end
86
-
87
- unless yard_object.namespace.path.empty?
88
- object << factory.node(yard_object.namespace)
89
- end
90
-
91
- dependencies << object
92
- }
93
- dependencies
94
- end
95
-
96
- def print_dependencies(object, indent = 0)
97
- indent_space = ' ' * indent
98
- puts "#{indent_space}#{object.path}"
99
- object.dependencies.each { |dependency|
100
- print_dependencies(dependency, indent + 1)
101
- }
102
- end
103
-
104
- def sketchup_stubs_path
105
- File.join('sketchup-api-stubs', 'stubs')
106
- end
107
-
108
- def stub_filename(object)
109
- basename = object.path.gsub('::', '/')
110
- basename = '_top_level' if basename.empty?
111
- File.join(sketchup_stubs_path, "#{basename}.rb")
112
- end
113
-
114
- def recurse_require(object, required, out, indent = 0)
115
- return if required.include?(object.path)
116
- # If a class inherit from a core Ruby class we might get a Proxy code
117
- # object here. We don't generate stubs for those and thus we don't want
118
- # to create a require for them either.
119
- return if object.object.is_a?(YARD::CodeObjects::Proxy)
120
- # First require the dependencies.
121
- object.dependencies.each { |dependency|
122
- recurse_require(dependency, required, out, indent + 1)
123
- }
124
- # Then we're good to require this object.
125
- require_path = stub_filename(object)
126
- # indent_space = ' ' * indent
127
- # out.puts "#{indent_space}require '#{require_path}'"
128
- out.puts "require '#{require_path}'"
129
- required << object.path
130
- end
131
-
132
- end
133
- end
134
- end
1
+ module SketchUpYARD
2
+ module Stubs
3
+ class AutoLoadGenerator
4
+
5
+ # @param [YARD::CodeObject::Base] namespace_objects
6
+ # @param [IO] out
7
+ def generate(namespace_objects, out)
8
+ dependencies = resolve_dependencies(namespace_objects)
9
+ out.puts "# This file is auto-generated by the `thor stubs` command."
10
+ required = Set.new
11
+ # Top level is special case.
12
+ top_level_path = File.join(sketchup_stubs_path, '_top_level.rb')
13
+ out.puts "require '#{top_level_path}'"
14
+ # The rest is resolved recursively.
15
+ dependencies.each { |object|
16
+ recurse_require(object, required, out)
17
+ }
18
+ end
19
+
20
+ private
21
+
22
+ class Node
23
+
24
+ attr_reader :object
25
+ attr_reader :dependencies
26
+
27
+ def initialize(object)
28
+ @object = object
29
+ @dependencies = SortedSet.new
30
+ end
31
+
32
+ def root?
33
+ @object.namespace.root?
34
+ end
35
+
36
+ def path
37
+ @object.path
38
+ end
39
+
40
+ def namespace
41
+ @object.namespace
42
+ end
43
+
44
+ def <<(object)
45
+ @dependencies << object
46
+ end
47
+
48
+ def <=>(other)
49
+ @object.path <=> other.path
50
+ end
51
+
52
+ def hash
53
+ @object.path.hash
54
+ end
55
+
56
+ end
57
+
58
+
59
+ class NodeFactory
60
+
61
+ def initialize
62
+ @dependencies = {}
63
+ end
64
+
65
+ def node(yard_object)
66
+ item = @dependencies[yard_object.path]
67
+ return item if item
68
+ item = Node.new(yard_object)
69
+ @dependencies[yard_object.path] = item
70
+ item
71
+ end
72
+
73
+ end
74
+
75
+
76
+ def resolve_dependencies(yard_objects)
77
+ factory = NodeFactory.new
78
+ dependencies = SortedSet.new
79
+
80
+ yard_objects.each { |yard_object|
81
+ object = factory.node(yard_object)
82
+
83
+ if yard_object.type == :class && yard_object.superclass.name != :Object
84
+ object << factory.node(yard_object.superclass)
85
+ end
86
+
87
+ unless yard_object.namespace.path.empty?
88
+ object << factory.node(yard_object.namespace)
89
+ end
90
+
91
+ dependencies << object
92
+ }
93
+ dependencies
94
+ end
95
+
96
+ def print_dependencies(object, indent = 0)
97
+ indent_space = ' ' * indent
98
+ puts "#{indent_space}#{object.path}"
99
+ object.dependencies.each { |dependency|
100
+ print_dependencies(dependency, indent + 1)
101
+ }
102
+ end
103
+
104
+ def sketchup_stubs_path
105
+ File.join('sketchup-api-stubs', 'stubs')
106
+ end
107
+
108
+ def stub_filename(object)
109
+ basename = object.path.gsub('::', '/')
110
+ basename = '_top_level' if basename.empty?
111
+ File.join(sketchup_stubs_path, "#{basename}.rb")
112
+ end
113
+
114
+ def recurse_require(object, required, out, indent = 0)
115
+ return if required.include?(object.path)
116
+ # If a class inherit from a core Ruby class we might get a Proxy code
117
+ # object here. We don't generate stubs for those and thus we don't want
118
+ # to create a require for them either.
119
+ return if object.object.is_a?(YARD::CodeObjects::Proxy)
120
+ # First require the dependencies.
121
+ object.dependencies.each { |dependency|
122
+ recurse_require(dependency, required, out, indent + 1)
123
+ }
124
+ # Then we're good to require this object.
125
+ require_path = stub_filename(object)
126
+ # indent_space = ' ' * indent
127
+ # out.puts "#{indent_space}require '#{require_path}'"
128
+ out.puts "require '#{require_path}'"
129
+ required << object.path
130
+ end
131
+
132
+ end
133
+ end
134
+ end
@@ -1,44 +1,44 @@
1
- require 'fileutils'
2
- require 'set'
3
- require 'stringio'
4
-
5
- include Helpers::ModuleHelper
6
-
7
- def init
8
- generate_changelog
9
- end
10
-
11
-
12
- def all_objects
13
- run_verifier(Registry.all())
14
- end
15
-
16
- def namespace_objects
17
- run_verifier(Registry.all(:class, :module))
18
- end
19
-
20
-
21
- def output_path
22
- options.serializer.options[:basepath] || Dir.pwd
23
- end
24
-
25
-
26
- def changelog_filename
27
- 'Changelog SU201x.log'
28
- end
29
-
30
- def generate_changelog
31
- #p (methods - Object.instance_methods).sort
32
- #p ARGV
33
- puts "Generating #{changelog_filename}..."
34
- output = StringIO.new
35
- new_objects = all_objects.sort { |a, b| a.path <=> b.path }
36
- new_objects.each do |object|
37
- #object.meths.each { |method|
38
- #methods << "#{method.namespace}##{method.name}"
39
- #}
40
- output.puts "Added #{object.type} #{object.path}"
41
- end
42
- changelog_path = File.join(output_path, changelog_filename)
43
- File.write(changelog_path, output.string)
44
- end
1
+ require 'fileutils'
2
+ require 'set'
3
+ require 'stringio'
4
+
5
+ include Helpers::ModuleHelper
6
+
7
+ def init
8
+ generate_changelog
9
+ end
10
+
11
+
12
+ def all_objects
13
+ run_verifier(Registry.all())
14
+ end
15
+
16
+ def namespace_objects
17
+ run_verifier(Registry.all(:class, :module))
18
+ end
19
+
20
+
21
+ def output_path
22
+ options.serializer.options[:basepath] || Dir.pwd
23
+ end
24
+
25
+
26
+ def changelog_filename
27
+ 'Changelog SU201x.log'
28
+ end
29
+
30
+ def generate_changelog
31
+ #p (methods - Object.instance_methods).sort
32
+ #p ARGV
33
+ puts "Generating #{changelog_filename}..."
34
+ output = StringIO.new
35
+ new_objects = all_objects.sort { |a, b| a.path <=> b.path }
36
+ new_objects.each do |object|
37
+ #object.meths.each { |method|
38
+ #methods << "#{method.namespace}##{method.name}"
39
+ #}
40
+ output.puts "Added #{object.type} #{object.path}"
41
+ end
42
+ changelog_path = File.join(output_path, changelog_filename)
43
+ File.write(changelog_path, output.string)
44
+ end
@@ -1,41 +1,41 @@
1
- require 'fileutils'
2
- require 'set'
3
-
4
- include Helpers::ModuleHelper
5
-
6
- MANIFEST_FILENAME = 'coverage.manifest'.freeze
7
-
8
- def init
9
- generate_manifest
10
- end
11
-
12
-
13
- def namespace_objects
14
- run_verifier(Registry.all(:class, :module))
15
- end
16
-
17
-
18
- def output_path
19
- options.serializer.options[:basepath] || Dir.pwd
20
- end
21
-
22
-
23
- def generate_manifest
24
- puts "Generating #{MANIFEST_FILENAME}..."
25
- methods = Set.new
26
- namespace_objects.each do |object|
27
- run_verifier(object.meths).each { |method|
28
- # TODO(thomthom): Currently the manifest doesn't distinguish between
29
- # class and instance methods. This should be addressed, but we need to
30
- # update TestUp to handle this first.
31
- # TODO(thomthom): Make this a configurable filter.
32
- # Layout has its own tests - and should be isolated so its own suite.
33
- next if method.namespace.to_s.start_with?('Layout')
34
- methods << "#{method.namespace}.#{method.name}"
35
- }
36
- end
37
- manifest = methods.sort.join("\n")
38
- manifest_path = File.join(output_path, MANIFEST_FILENAME)
39
- puts manifest_path
40
- File.write(manifest_path, manifest)
41
- end
1
+ require 'fileutils'
2
+ require 'set'
3
+
4
+ include Helpers::ModuleHelper
5
+
6
+ MANIFEST_FILENAME = 'coverage.manifest'.freeze
7
+
8
+ def init
9
+ generate_manifest
10
+ end
11
+
12
+
13
+ def namespace_objects
14
+ run_verifier(Registry.all(:class, :module))
15
+ end
16
+
17
+
18
+ def output_path
19
+ options.serializer.options[:basepath] || Dir.pwd
20
+ end
21
+
22
+
23
+ def generate_manifest
24
+ puts "Generating #{MANIFEST_FILENAME}..."
25
+ methods = Set.new
26
+ namespace_objects.each do |object|
27
+ run_verifier(object.meths).each { |method|
28
+ # TODO(thomthom): Currently the manifest doesn't distinguish between
29
+ # class and instance methods. This should be addressed, but we need to
30
+ # update TestUp to handle this first.
31
+ # TODO(thomthom): Make this a configurable filter.
32
+ # Layout has its own tests - and should be isolated so its own suite.
33
+ next if method.namespace.to_s.start_with?('Layout')
34
+ methods << "#{method.namespace}.#{method.name}"
35
+ }
36
+ end
37
+ manifest = methods.sort.join("\n")
38
+ manifest_path = File.join(output_path, MANIFEST_FILENAME)
39
+ puts manifest_path
40
+ File.write(manifest_path, manifest)
41
+ end
@@ -1,11 +1,11 @@
1
- @charset "UTF-8";/*!
2
- * Bootstrap v3.3.5 (http://getbootstrap.com)
3
- * Copyright 2011-2015 Twitter, Inc.
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
- *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */.sr-only,img{border:0}.caret,img{vertical-align:middle}.dropdown-menu,.nav,ul li.expanded,ul li.leaf{list-style:none}header,nav{display:block}a:active,a:hover{outline:0}button{color:inherit;font:inherit;margin:0;overflow:visible;text-transform:none;-webkit-appearance:button;cursor:pointer}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}img{page-break-inside:avoid;max-width:100%!important}.navbar{display:none}}.nav>li>a:focus,.nav>li>a:hover,.navbar-brand:focus,.navbar-brand:hover,a,a:focus,a:hover{text-decoration:none}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;font-size:10px;-webkit-tap-highlight-color:transparent}body{margin:0;font-size:16px;line-height:1.42857}button{font-family:inherit;font-size:inherit;line-height:inherit}a{background-color:transparent;color:#e72b2d}a:focus,a:hover{color:#b11416}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.dropdown-toggle:focus,.navbar-toggle:focus{outline:0}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0)}ul{margin-top:0;margin-bottom:11px}ul ul{margin-bottom:0}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.collapse{display:none}.collapse.in{display:block}.caret{display:inline-block;width:0;height:0;margin-left:2px;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:16px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{color:#fff}.nav{margin-bottom:0;padding-left:0}.nav:after,.nav:before{content:" ";display:table}.nav>li,.nav>li>a{display:block;position:relative}.nav:after{clear:both}.nav>li>a{padding:10px 15px}.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before{content:" ";display:table}.nav>li>a:focus,.nav>li>a:hover{background-color:#eee}.nav>li>a>img{max-width:none}.navbar{position:relative;min-height:50px;margin-bottom:22px;border:1px solid transparent}.navbar:after{clear:both}.navbar-header:after{clear:both}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:0}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse{padding-left:0;padding-right:0}.navbar-fixed-top{border-radius:0}}.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse{max-height:200px}}.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030;top:0;border-width:0 0 1px}.navbar-toggle,body{position:relative}.navbar-brand{float:left;padding:14px 15px;font-size:20px;line-height:22px;height:50px}.navbar-toggle{float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:0;background-image:none}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:22px}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:14px;padding-bottom:14px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-btn{margin-top:7px;margin-bottom:7px}.navbar-inverse{background-color:#363545;border-color:#000;box-shadow:1px 1px 6px #35393e}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#D4D5D1;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse{border-color:#262531}.pull-left{float:left!important}@-ms-viewport{width:device-width}.navbar .logo{margin-right:-15px;padding-left:15px;padding-right:15px}@media screen and (min-width:768px){.navbar .logo{margin-right:0;padding-left:0}.navbar-collapse{float:right}}@font-face{font-family:fontello;src:url(/sites/all/themes/sketch/fonts/fontello/font/fontello.eot?93575470);src:url(/sites/all/themes/sketch/fonts/fontello/font/fontello.eot?93575470#iefix) format("embedded-opentype"),url(/sites/all/themes/sketch/fonts/fontello/font/fontello.woff?93575470) format("woff"),url(/sites/all/themes/sketch/fonts/fontello/font/fontello.ttf?93575470) format("truetype"),url(/sites/all/themes/sketch/fonts/fontello/font/fontello.svg?93575470#fontello) format("svg");font-weight:400;font-style:normal}[class^=icon-]:before{font-family:fontello;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.navbar-brand,.navbar-nav .caret{display:none}/*!
6
- Animate.css - http://daneden.me/animate
7
- Version - 3.4.0
8
- Licensed under the MIT license - http://opensource.org/licenses/MIT
9
-
10
- Copyright (c) 2015 Daniel Eden
1
+ @charset "UTF-8";/*!
2
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
3
+ * Copyright 2011-2015 Twitter, Inc.
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */.sr-only,img{border:0}.caret,img{vertical-align:middle}.dropdown-menu,.nav,ul li.expanded,ul li.leaf{list-style:none}header,nav{display:block}a:active,a:hover{outline:0}button{color:inherit;font:inherit;margin:0;overflow:visible;text-transform:none;-webkit-appearance:button;cursor:pointer}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}img{page-break-inside:avoid;max-width:100%!important}.navbar{display:none}}.nav>li>a:focus,.nav>li>a:hover,.navbar-brand:focus,.navbar-brand:hover,a,a:focus,a:hover{text-decoration:none}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;font-size:10px;-webkit-tap-highlight-color:transparent}body{margin:0;font-size:16px;line-height:1.42857}button{font-family:inherit;font-size:inherit;line-height:inherit}a{background-color:transparent;color:#e72b2d}a:focus,a:hover{color:#b11416}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.dropdown-toggle:focus,.navbar-toggle:focus{outline:0}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0)}ul{margin-top:0;margin-bottom:11px}ul ul{margin-bottom:0}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.collapse{display:none}.collapse.in{display:block}.caret{display:inline-block;width:0;height:0;margin-left:2px;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:16px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{color:#fff}.nav{margin-bottom:0;padding-left:0}.nav:after,.nav:before{content:" ";display:table}.nav>li,.nav>li>a{display:block;position:relative}.nav:after{clear:both}.nav>li>a{padding:10px 15px}.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before{content:" ";display:table}.nav>li>a:focus,.nav>li>a:hover{background-color:#eee}.nav>li>a>img{max-width:none}.navbar{position:relative;min-height:50px;margin-bottom:22px;border:1px solid transparent}.navbar:after{clear:both}.navbar-header:after{clear:both}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:0}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse{padding-left:0;padding-right:0}.navbar-fixed-top{border-radius:0}}.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse{max-height:200px}}.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030;top:0;border-width:0 0 1px}.navbar-toggle,body{position:relative}.navbar-brand{float:left;padding:14px 15px;font-size:20px;line-height:22px;height:50px}.navbar-toggle{float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:0;background-image:none}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:22px}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:14px;padding-bottom:14px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-btn{margin-top:7px;margin-bottom:7px}.navbar-inverse{background-color:#363545;border-color:#000;box-shadow:1px 1px 6px #35393e}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#D4D5D1;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse{border-color:#262531}.pull-left{float:left!important}@-ms-viewport{width:device-width}.navbar .logo{margin-right:-15px;padding-left:15px;padding-right:15px}@media screen and (min-width:768px){.navbar .logo{margin-right:0;padding-left:0}.navbar-collapse{float:right}}@font-face{font-family:fontello;src:url(/sites/all/themes/sketch/fonts/fontello/font/fontello.eot?93575470);src:url(/sites/all/themes/sketch/fonts/fontello/font/fontello.eot?93575470#iefix) format("embedded-opentype"),url(/sites/all/themes/sketch/fonts/fontello/font/fontello.woff?93575470) format("woff"),url(/sites/all/themes/sketch/fonts/fontello/font/fontello.ttf?93575470) format("truetype"),url(/sites/all/themes/sketch/fonts/fontello/font/fontello.svg?93575470#fontello) format("svg");font-weight:400;font-style:normal}[class^=icon-]:before{font-family:fontello;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.navbar-brand,.navbar-nav .caret{display:none}/*!
6
+ Animate.css - http://daneden.me/animate
7
+ Version - 3.4.0
8
+ Licensed under the MIT license - http://opensource.org/licenses/MIT
9
+
10
+ Copyright (c) 2015 Daniel Eden
11
11
  */body,html{background-color:#363545;color:#4d5259;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif}.navbar-inverse .navbar-nav>li>a{font-size:14px;padding:22px 25px 10px}li.dropdown{border-bottom:2px solid transparent}.dropdown-menu>li>a{font-size:14px}.logo{margin:0;padding:11px 7px 12px 0}.logo img{height:33px}.icon-bar{transition:all .1s}.trimble-top-menu-item+ul.dropdown-menu{background-color:#005596}.trimble-top-menu-item+ul li>a{color:#fff}.trimble-top-menu-item img{width:65px;vertical-align:-2px}.navbar-inverse .navbar-nav>li>a.top-menu--download-button{font-size:14px!important;margin-top:0!important;margin-bottom:0!important;display:none;color:#fff;background-color:#e72b2d;border:1px solid #e72b2d;border-radius:0;font-weight:400;white-space:normal}.navbar-inverse .navbar-nav>li>a.top-menu--download-button:hover{background-color:#9b1113;border:1px solid #9b1113;box-shadow:#9b1113 0 0 0 4px inset;color:#fff}.navbar-inverse .navbar-nav>li>a.top-menu--download-button:active,.navbar-inverse .navbar-nav>li>a.top-menu--download-button:focus,.navbar-inverse .navbar-nav>li>a.top-menu--download-button:hover{color:#fff;text-decoration:none}