yard-sketchup 1.4.0 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
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 -75
  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 -56
  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 -16
  32. data/lib/yard-sketchup.rb +37 -37
  33. data/yard-sketchup.gemspec +26 -26
  34. metadata +7 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba3b58511db88c8363d6326064105946ffd5616f3715adc1c89b64a089115822
4
- data.tar.gz: 849642f30038e9988315338017156dccf8674375eb44eb648f59c189b6089f44
3
+ metadata.gz: 3979def1e3596fe3fc383b4e78e1fac58b7e78cc4ea4e74d63889d10f6c0568b
4
+ data.tar.gz: 7fc768e9ce3ad8cf58e075f031451a4ef943dd058e7d63b790dde11386e38ceb
5
5
  SHA512:
6
- metadata.gz: e75eaad788549e5fe02cda3e18c96ad2817ade732793ab93b54773237fd0607e139b1dc9395784df9e014fb90fcf860efc08e23814ef43599969d49e8e160784
7
- data.tar.gz: 2e7d4255004bef6051bd2408d306ac9fa8cfa4a630dde19088c5a7bc751dae91f5b77ecb3fd4f69ca2a5549e1f55a9f489a2fd235b3a2a7203272aee042d132d
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}