jsduck 5.3.4 → 6.0.0beta

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 (105) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/bin/jsduck +3 -3
  4. data/lib/jsduck/app.rb +1 -1
  5. data/lib/jsduck/assets.rb +3 -3
  6. data/lib/jsduck/base_type.rb +2 -2
  7. data/lib/jsduck/batch_processor.rb +3 -1
  8. data/lib/jsduck/categories/file.rb +2 -2
  9. data/lib/jsduck/class_doc_expander.rb +1 -1
  10. data/lib/jsduck/css/parser.rb +59 -90
  11. data/lib/jsduck/css/type.rb +55 -0
  12. data/lib/jsduck/doc/parser.rb +1 -1
  13. data/lib/jsduck/doc/scanner.rb +2 -2
  14. data/lib/jsduck/doc/subproperties.rb +1 -1
  15. data/lib/jsduck/export_writer.rb +4 -4
  16. data/lib/jsduck/exporter/app.rb +2 -1
  17. data/lib/jsduck/exporter/full.rb +5 -3
  18. data/lib/jsduck/external_classes.rb +337 -5
  19. data/lib/jsduck/format/class.rb +3 -3
  20. data/lib/jsduck/format/doc.rb +6 -5
  21. data/lib/jsduck/format/subproperties.rb +1 -1
  22. data/lib/jsduck/guide_toc.rb +45 -27
  23. data/lib/jsduck/guide_toc_entry.rb +54 -0
  24. data/lib/jsduck/guides.rb +9 -5
  25. data/lib/jsduck/img/dir.rb +1 -1
  26. data/lib/jsduck/inline/example.rb +3 -1
  27. data/lib/jsduck/inline/img.rb +3 -3
  28. data/lib/jsduck/inline/link.rb +2 -2
  29. data/lib/jsduck/inline/link_renderer.rb +3 -2
  30. data/lib/jsduck/inline/video.rb +2 -1
  31. data/lib/jsduck/js/class.rb +6 -11
  32. data/lib/jsduck/js/ext_define.rb +46 -0
  33. data/lib/jsduck/js/ext_patterns.rb +7 -2
  34. data/lib/jsduck/js/rkelly_adapter.rb +16 -2
  35. data/lib/jsduck/logger.rb +40 -25
  36. data/lib/jsduck/member_registry.rb +41 -0
  37. data/lib/jsduck/news.rb +18 -5
  38. data/lib/jsduck/options/config.rb +35 -0
  39. data/lib/jsduck/options/helpful_parser.rb +111 -0
  40. data/lib/jsduck/options/input_files.rb +60 -0
  41. data/lib/jsduck/options/jsb.rb +25 -0
  42. data/lib/jsduck/{options.rb → options/parser.rb} +436 -484
  43. data/lib/jsduck/options/processor.rb +47 -0
  44. data/lib/jsduck/options/record.rb +51 -0
  45. data/lib/jsduck/output_dir.rb +4 -4
  46. data/lib/jsduck/parser.rb +5 -5
  47. data/lib/jsduck/process/components.rb +19 -0
  48. data/lib/jsduck/process/ext4_events.rb +4 -2
  49. data/lib/jsduck/process/importer.rb +5 -2
  50. data/lib/jsduck/process/inherit_members.rb +2 -0
  51. data/lib/jsduck/process/lint.rb +3 -3
  52. data/lib/jsduck/process/no_doc.rb +1 -1
  53. data/lib/jsduck/process/overrides.rb +4 -3
  54. data/lib/jsduck/process/versions.rb +86 -51
  55. data/lib/jsduck/render/class.rb +3 -2
  56. data/lib/jsduck/render/subproperties.rb +18 -0
  57. data/lib/jsduck/render/tags.rb +13 -1
  58. data/lib/jsduck/source/file.rb +2 -2
  59. data/lib/jsduck/tag/class.rb +6 -0
  60. data/lib/jsduck/tag/component.rb +19 -0
  61. data/lib/jsduck/tag/css_mixin.rb +10 -0
  62. data/lib/jsduck/tag/deprecated.rb +1 -1
  63. data/{template-min/resources/images/class-m.png → lib/jsduck/tag/icons/class-large.png} +0 -0
  64. data/lib/jsduck/tag/icons/class-redirect.png +0 -0
  65. data/lib/jsduck/tag/icons/class.png +0 -0
  66. data/{template-min/resources/images/component-m.png → lib/jsduck/tag/icons/component-large.png} +0 -0
  67. data/lib/jsduck/tag/icons/component-redirect.png +0 -0
  68. data/lib/jsduck/tag/icons/component.png +0 -0
  69. data/{template-min/resources/images/singleton-m.png → lib/jsduck/tag/icons/singleton-large.png} +0 -0
  70. data/lib/jsduck/tag/icons/singleton-redirect.png +0 -0
  71. data/lib/jsduck/tag/icons/singleton.png +0 -0
  72. data/lib/jsduck/tag/inheritdoc.rb +2 -2
  73. data/lib/jsduck/tag/new.rb +13 -0
  74. data/lib/jsduck/tag/since.rb +2 -2
  75. data/lib/jsduck/tag/singleton.rb +13 -0
  76. data/lib/jsduck/tag/tag.rb +19 -0
  77. data/lib/jsduck/tag_registry.rb +20 -81
  78. data/lib/jsduck/util/io.rb +5 -0
  79. data/lib/jsduck/util/json.rb +3 -3
  80. data/lib/jsduck/util/null_object.rb +14 -1
  81. data/lib/jsduck/util/parallel.rb +7 -3
  82. data/lib/jsduck/version.rb +1 -1
  83. data/lib/jsduck/warning/registry.rb +4 -2
  84. data/lib/jsduck/warning/tag.rb +57 -0
  85. data/lib/jsduck/web/class_icons.rb +76 -0
  86. data/lib/jsduck/web/css.rb +12 -1
  87. data/lib/jsduck/web/data.rb +4 -3
  88. data/lib/jsduck/web/index_html.rb +26 -10
  89. data/lib/jsduck/web/member_icons.rb +3 -3
  90. data/lib/jsduck/web/search.rb +4 -4
  91. data/lib/jsduck/web/source.rb +1 -1
  92. data/lib/jsduck/web/template.rb +6 -6
  93. data/lib/jsduck/web/tree.rb +22 -0
  94. data/lib/jsduck/web/writer.rb +11 -9
  95. data/template-min/app-0f524ddd276c4019a11a6128932a9c96.js +1 -0
  96. data/template-min/index-template.html +1 -1
  97. data/template-min/print-template.html +1 -1
  98. data/template-min/resources/css/{app-4689d2a5522dcd3c9e9923ca59c33f27.css → app-de670120f43fdad3091a0cc2c10daadb.css} +1 -1
  99. data/template-min/resources/images/icons.xcf +0 -0
  100. data/template-min/template.html +2 -2
  101. metadata +46 -13
  102. data/lib/jsduck/css/lexer.rb +0 -203
  103. data/lib/jsduck/option_parser.rb +0 -109
  104. data/lib/jsduck/web/icons.rb +0 -31
  105. data/template-min/app-0c945a27f43452df695771ddb60b3d14.js +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 08d1a9118d609f1035882ef597e139b4de6655a8
4
- data.tar.gz: 06595bf58bd8c1382dea7e3e01155909ed8c9e69
3
+ metadata.gz: 22b2eee9a27379a8bcb0c152fd6749ac45803aae
4
+ data.tar.gz: 19aca3cbd478c9b9c9dd917a50950580d461ad3c
5
5
  SHA512:
6
- metadata.gz: 6099cee44749de6f4070a0f8b3127f1aad85e1cca3f043e5096afeda5016461d494eb07a82efbda85b2d11be2b1a7de8d8f0cd20a6ffe62e125dcef8df329fcb
7
- data.tar.gz: db32d24569d9ed089ae9a5da09137b780e14c0d6ae15146ede2df077f30ba7ef6700505f72531e07e064a0de9bffcf18c101e3f50bcb093ff3a8b2189118bb4e
6
+ metadata.gz: 18f5f78668b4d1ccc721ab6e0c6fc4e2b07716a524269d6d87bbca2d02b87505e46cbc4f5e27e0c54f451bd40266bf09bbc60f7c9322033a732b9bf6797d0b0a
7
+ data.tar.gz: 8d73b981ebc7e1edaadb280b5bd59293ecdb91d54aa98be139c63f53286a8ca7cbcfaa1694e586efa624371cc03edd7d99c2f77f6c984976a23312205574eeb7
data/README.md CHANGED
@@ -98,7 +98,7 @@ Who's using JSDuck?
98
98
  - [CKEditor](http://docs.ckeditor.com)
99
99
  - [GeoExt 2](https://github.com/geoext/geoext2)
100
100
  - Rally Software [Rally App SDK](https://prod.help.rallydev.com/apps/2.0rc1/doc/)
101
- - Wikimedia Foundation [Mediawiki](https://doc.wikimedia.org/mediawiki-core/master/js/)
101
+ - Wikimedia Foundation [MediaWiki](https://doc.wikimedia.org/mediawiki-core/master/js/)
102
102
  and [VisualEditor](https://doc.wikimedia.org/VisualEditor/master/)
103
103
  - [Sencha](http://docs.sencha.com) - obviously :)
104
104
 
@@ -148,7 +148,7 @@ input.
148
148
  Changelog
149
149
  ---------
150
150
 
151
- See [the Releases page](https://github.com/senchalabs/jsduck/Releases).
151
+ See [the Releases page](https://github.com/senchalabs/jsduck/releases).
152
152
 
153
153
 
154
154
  More questions?
data/bin/jsduck CHANGED
@@ -18,10 +18,10 @@
18
18
  $:.unshift File.dirname(File.dirname(__FILE__)) + "/lib"
19
19
 
20
20
  require 'jsduck/app'
21
- require 'jsduck/options'
21
+ require 'jsduck/options/processor'
22
+
23
+ opts = JsDuck::Options::Processor.process(ARGV)
22
24
 
23
- opts = JsDuck::Options.new
24
- opts.parse!(ARGV)
25
25
  exit_code = JsDuck::App.new(opts).run
26
26
 
27
27
  exit exit_code
@@ -10,7 +10,7 @@ module JsDuck
10
10
 
11
11
  # The main application logic of jsduck
12
12
  class App
13
- # Initializes app with JsDuck::Options object
13
+ # Initializes app with JsDuck::OptionsRecord object
14
14
  def initialize(opts)
15
15
  @opts = opts
16
16
  end
@@ -36,7 +36,7 @@ module JsDuck
36
36
  @guides = Guides.create(@opts.guides, doc_formatter, @opts)
37
37
  @videos = Videos.create(@opts.videos)
38
38
  @examples = Examples.create(@opts.examples, @opts)
39
- @categories = Categories::Factory.create(@opts.categories_path, doc_formatter, @relations)
39
+ @categories = Categories::Factory.create(@opts.categories, doc_formatter, @relations)
40
40
  @news = News.create(@relations, doc_formatter, @opts)
41
41
  end
42
42
 
@@ -45,8 +45,8 @@ module JsDuck
45
45
  #
46
46
  # Welcome page and categories are written in JsDuck::IndexHtml
47
47
  def write
48
- @guides.write(@opts.output_dir+"/guides")
49
- Img::Writer.copy(@images.all_used, @opts.output_dir+"/images")
48
+ @guides.write(@opts.output+"/guides")
49
+ Img::Writer.copy(@images.all_used, @opts.output+"/images")
50
50
  end
51
51
 
52
52
  end
@@ -1,4 +1,4 @@
1
- require 'jsduck/tag_registry'
1
+ require 'jsduck/member_registry'
2
2
 
3
3
  module JsDuck
4
4
 
@@ -38,7 +38,7 @@ module JsDuck
38
38
  # Returns the detected member type on success.
39
39
  # Otherwise nil.
40
40
  def self.detect_member(doc_map)
41
- type = TagRegistry.member_type_names.find {|type| doc_map[type] }
41
+ type = MemberRegistry.names.find {|type| doc_map[type] }
42
42
 
43
43
  if type == :cfg
44
44
  # Only detect a single @cfg as a :cfg.
@@ -13,6 +13,7 @@ require 'jsduck/process/inherit_doc'
13
13
  require 'jsduck/process/versions'
14
14
  require 'jsduck/process/return_values'
15
15
  require 'jsduck/process/fires'
16
+ require 'jsduck/process/components'
16
17
  require 'jsduck/process/lint'
17
18
  require 'jsduck/process/no_doc'
18
19
  require 'jsduck/process/circular_deps'
@@ -61,7 +62,7 @@ module JsDuck
61
62
  # classes inside Relations container.
62
63
  def to_class_objects(docs, opts)
63
64
  classes = docs.map {|d| Class.new(d) }
64
- Relations.new(classes, opts.external_classes)
65
+ Relations.new(classes, opts.external)
65
66
  end
66
67
 
67
68
  # Do all kinds of post-processing on Relations object.
@@ -71,6 +72,7 @@ module JsDuck
71
72
  Process::Versions.new(relations, opts).process_all!
72
73
  Process::ReturnValues.new(relations).process_all!
73
74
  Process::Fires.new(relations).process_all!
75
+ Process::Components.new(relations).process_all!
74
76
  Process::Lint.new(relations).process_all!
75
77
  Process::NoDoc.new(relations).process_all!
76
78
  relations
@@ -38,7 +38,7 @@ module JsDuck
38
38
  end.map {|cls| cls[:name] }.sort
39
39
 
40
40
  if classes.length == 0
41
- Logger.warn(:cat_no_match, "No class found matching a pattern '#{name}' in categories file", @filename)
41
+ Logger.warn(:cat_no_match, "No class found matching a pattern '#{name}' in categories file", {:filename => @filename})
42
42
  end
43
43
  classes
44
44
  end
@@ -58,7 +58,7 @@ module JsDuck
58
58
  # Check that each existing non-private & non-deprecated class is listed
59
59
  @relations.each do |cls|
60
60
  unless listed_classes[cls[:name]] || cls[:private] || cls[:deprecated]
61
- Logger.warn(:cat_class_missing, "Class '#{cls[:name]}' not found in categories file", @filename)
61
+ Logger.warn(:cat_class_missing, "Class '#{cls[:name]}' not found in categories file", {:filename => @filename})
62
62
  end
63
63
  end
64
64
  end
@@ -50,7 +50,7 @@ module JsDuck
50
50
 
51
51
  if tagname == :cfg || tagname == :constructor
52
52
  group_name = tagname
53
- if tagname == :cfg && tag[:name] !~ /\./
53
+ if tagname == :cfg && (tag[:name] !~ /\./ || groups[:cfg].length == 0)
54
54
  groups[:cfg] << []
55
55
  end
56
56
  end
@@ -1,120 +1,89 @@
1
- require 'jsduck/css/lexer'
1
+ require 'sass'
2
+ require 'jsduck/css/type'
2
3
 
3
4
  module JsDuck
4
5
  module Css
5
6
 
7
+ # Parses SCSS using the official SASS parser.
6
8
  class Parser
9
+ TYPE = Css::Type.new
10
+
7
11
  def initialize(input, options = {})
8
- @lex = Css::Lexer.new(input)
12
+ @input = input
9
13
  @docs = []
10
14
  end
11
15
 
12
- # Parses the whole CSS block and returns same kind of structure
13
- # that JavaScript parser does.
16
+ # Returns an array of docsets like the Js::Parser does.
14
17
  def parse
15
- while !@lex.empty? do
16
- if look(:doc_comment)
17
- comment = @lex.next(true)
18
- @docs << {
19
- :comment => comment[:value],
20
- :linenr => comment[:linenr],
21
- :code => code_block,
22
- :type => :doc_comment,
23
- }
24
- else
25
- @lex.next
26
- end
27
- end
18
+ root = Sass::Engine.new(@input, :syntax => :scss).to_tree
19
+ find_doc_comments(root.children)
28
20
  @docs
29
21
  end
30
22
 
31
- # <code-block> := <mixin-declaration> | <var-declaration> | <property>
32
- def code_block
33
- if look("@mixin")
34
- mixin_declaration
35
- elsif look(:var, ":")
36
- var_declaration
37
- else
38
- # Default to property like in Js::Parser.
39
- {:tagname => :property}
23
+ private
24
+
25
+ def find_doc_comments(nodes)
26
+ prev_comment = nil
27
+
28
+ nodes.each do |node|
29
+ if prev_comment
30
+ @docs << make_docset(prev_comment, node)
31
+ prev_comment = nil
32
+ end
33
+
34
+ if node.class == Sass::Tree::CommentNode
35
+ if node.type == :normal && node.value[0] =~ /\A\/\*\*/
36
+ prev_comment = node
37
+ end
38
+ end
39
+
40
+ find_doc_comments(node.children)
40
41
  end
41
- end
42
42
 
43
- # <mixin-declaration> := "@mixin" <ident>
44
- def mixin_declaration
45
- match("@mixin")
46
- return {
47
- :tagname => :css_mixin,
48
- :name => look(:ident) ? match(:ident) : nil,
49
- }
43
+ if prev_comment
44
+ @docs << make_docset(prev_comment)
45
+ end
50
46
  end
51
47
 
52
- # <var-declaration> := <var> ":" <css-value>
53
- def var_declaration
54
- name = match(:var)
55
- match(":")
56
- value_list = css_value
48
+ def make_docset(prev_comment, node=nil)
57
49
  return {
58
- :tagname => :css_var,
59
- :name => name,
60
- :default => value_list.map {|v| v[:value] }.join(" "),
61
- :type => value_type(value_list),
50
+ :comment => prev_comment.value[0].sub(/\A\/\*\*/, "").sub(/\*\/\z/, ""),
51
+ :linenr => prev_comment.line,
52
+ :code => analyze_code(node),
53
+ :type => :doc_comment,
62
54
  }
63
55
  end
64
56
 
65
- # <css-value> := ...anything up to... [ ";" | "}" | "!default" ]
66
- def css_value
67
- val = []
68
- while !look(";") && !look("}") && !look("!", "default")
69
- val << @lex.next(true)
70
- end
71
- val
72
- end
73
-
74
- # Determines type of CSS value
75
- def value_type(val)
76
- case val[0][:type]
77
- when :number
78
- "number"
79
- when :dimension
80
- "length"
81
- when :percentage
82
- "percentage"
83
- when :string
84
- "string"
85
- when :hash
86
- "color"
87
- when :ident
88
- case val[0][:value]
89
- when "true", "false"
90
- return "boolean"
91
- when "rgb", "rgba", "hsl", "hsla"
92
- return "color"
93
- when "black", "silver", "gray", "white", "maroon",
94
- "red", "purple", "fuchsia", "green", "lime", "olive",
95
- "yellow", "navy", "blue", "teal", "aqua", "orange"
96
- return "color"
97
- when "transparent"
98
- return "color"
99
- end
57
+ def analyze_code(node)
58
+ if node.class == Sass::Tree::VariableNode
59
+ return {
60
+ :tagname => :css_var,
61
+ :name => "$" + node.name,
62
+ :default => node.expr.to_sass,
63
+ :type => TYPE.detect(node.expr),
64
+ }
65
+ elsif node.class == Sass::Tree::MixinDefNode
66
+ return {
67
+ :tagname => :css_mixin,
68
+ :name => node.name,
69
+ :params => build_params(node.args),
70
+ }
71
+ else
72
+ # Default to property like in Js::Parser.
73
+ return {:tagname => :property}
100
74
  end
101
75
  end
102
76
 
103
- # Matches all arguments, returns the value of last match
104
- # When the whole sequence doesn't match, throws exception
105
- def match(*args)
106
- if look(*args)
107
- last = nil
108
- args.length.times { last = @lex.next }
109
- last
110
- else
111
- throw "Expected: " + args.join(", ")
77
+ def build_params(mixin_args)
78
+ mixin_args.map do |arg|
79
+ {
80
+ :name => "$" + arg[0].name,
81
+ :default => arg[1] ? arg[1].to_s : nil,
82
+ :type => arg[1] ? TYPE.detect(arg[1]) : nil,
83
+ }
112
84
  end
113
85
  end
114
86
 
115
- def look(*args)
116
- @lex.look(*args)
117
- end
118
87
  end
119
88
 
120
89
  end
@@ -0,0 +1,55 @@
1
+ require 'sass'
2
+
3
+ module JsDuck
4
+ module Css
5
+
6
+ class Type
7
+ # Given SASS expression node, determines its type.
8
+ # When unknown, return nil.
9
+ def detect(node)
10
+ if LITERAL_TYPES[node.class]
11
+ LITERAL_TYPES[node.class]
12
+ elsif node.class == Sass::Script::Funcall && COLOR_FUNCTIONS[node.name]
13
+ "color"
14
+ else
15
+ nil
16
+ end
17
+ end
18
+
19
+ LITERAL_TYPES = {
20
+ Sass::Script::Number => "number",
21
+ Sass::Script::String => "string",
22
+ Sass::Script::Color => "color",
23
+ Sass::Script::Bool => "boolean",
24
+ Sass::Script::List => "list",
25
+ }
26
+
27
+ COLOR_FUNCTIONS = {
28
+ # CSS3 builtins
29
+ "rgb" => true,
30
+ "rgba" => true,
31
+ "hsl" => true,
32
+ "hsla" => true,
33
+ # SASS builtins
34
+ "mix" => true,
35
+ "adjust-hue" => true,
36
+ "lighten" => true,
37
+ "darken" => true,
38
+ "saturate" => true,
39
+ "desaturate" => true,
40
+ "grayscale" => true,
41
+ "complement" => true,
42
+ "invert" => true,
43
+ "opacify" => true,
44
+ "fade-in" => true,
45
+ "transparentize" => true,
46
+ "fade-out" => true,
47
+ "adjust-color" => true,
48
+ "scale-color" => true,
49
+ "change-color" => true,
50
+ }
51
+
52
+ end
53
+
54
+ end
55
+ end
@@ -102,7 +102,7 @@ module JsDuck
102
102
 
103
103
  skip_white
104
104
  else
105
- warn(:tag, "Unsupported tag: @#{name}")
105
+ warn(:tag, "Unsupported tag: @#{name}", [name.to_sym])
106
106
  @multiline_tag[:doc] += "@"
107
107
  end
108
108
  end
@@ -73,8 +73,8 @@ module JsDuck
73
73
  end
74
74
 
75
75
  # Prints a warning message
76
- def warn(type, msg)
77
- Logger.warn(type, msg, @position)
76
+ def warn(type, msg, params=[])
77
+ Logger.warn(type, msg, @position, params)
78
78
  end
79
79
 
80
80
  end
@@ -61,7 +61,7 @@ module JsDuck
61
61
 
62
62
  def warn(name, pos)
63
63
  parent = name.sub(/\.[^.]*$/, '')
64
- msg = "Ignoring subproperty '#{name}' not parent found with name '#{parent}'."
64
+ msg = "Ignoring subproperty '#{name}' no parent found with name '#{parent}'."
65
65
  Logger.warn(:subproperty, msg, pos)
66
66
  end
67
67
 
@@ -20,19 +20,19 @@ module JsDuck
20
20
  def write
21
21
  format_classes
22
22
 
23
- clean_output_dir unless @opts.output_dir == :stdout
23
+ clean_output_dir unless @opts.output == :stdout
24
24
 
25
25
  export_classes
26
26
  export_examples_in_guides if @opts.export == :examples
27
27
 
28
- Util::Stdout.flush if @opts.output_dir == :stdout
28
+ Util::Stdout.flush if @opts.output == :stdout
29
29
  end
30
30
 
31
31
  private
32
32
 
33
33
  def export_classes
34
34
  cw = ClassWriter.new(get_exporter, @relations, @opts)
35
- cw.write(@opts.output_dir, ".json")
35
+ cw.write(@opts.output, ".json")
36
36
  end
37
37
 
38
38
  def get_exporter
@@ -45,7 +45,7 @@ module JsDuck
45
45
 
46
46
  def export_examples_in_guides
47
47
  gw = GuideWriter.new(Exporter::Examples, @assets.guides, @opts)
48
- gw.write(@opts.output_dir, ".json")
48
+ gw.write(@opts.output, ".json")
49
49
  end
50
50
 
51
51
  # -- util routines --
@@ -1,6 +1,7 @@
1
1
  require 'jsduck/render/class'
2
2
  require 'jsduck/exporter/full'
3
3
  require 'jsduck/tag_registry'
4
+ require 'jsduck/web/class_icons'
4
5
 
5
6
  module JsDuck
6
7
  module Exporter
@@ -18,7 +19,7 @@ module JsDuck
18
19
  def export(cls)
19
20
  data = @full_exporter.export(cls)
20
21
 
21
- data[:component] = cls.inherits_from?("Ext.Component")
22
+ data[:classIcon] = Web::ClassIcons.get(cls)
22
23
  data[:superclasses] = cls.superclasses.collect {|c| c[:name] }
23
24
  data[:subclasses] = @relations.subclasses(cls).collect {|c| c[:name] }.sort
24
25
  data[:mixedInto] = @relations.mixed_into(cls).collect {|c| c[:name] }.sort