diff --git a/lib/jsduck/tag/cfg.rb b/lib/jsduck/tag/cfg.rb index a0b587316a2c8c8c38e95e7de3c73b66eee33669..9e917ff177332c9f64538ba57f56add0f70a4cef 100644 --- a/lib/jsduck/tag/cfg.rb +++ b/lib/jsduck/tag/cfg.rb @@ -12,6 +12,7 @@ module JsDuck::Tag :title => "Config options", :toolbar_title => "Configs", :position => MEMBER_POS_CFG, + :icon => File.dirname(__FILE__) + "/icons/cfg.png", :subsections => [ {:title => "Required config options", :filter => {:required => true}}, {:title => "Optional config options", :filter => {:required => false}, :default => true}, diff --git a/lib/jsduck/tag/css_mixin.rb b/lib/jsduck/tag/css_mixin.rb index 2cbab67cf5b4f3197b70467c5f9883ab8f08ffd6..b1dda7aa45c27cceebe6eb17bb87af0b49f644e3 100644 --- a/lib/jsduck/tag/css_mixin.rb +++ b/lib/jsduck/tag/css_mixin.rb @@ -11,6 +11,7 @@ module JsDuck::Tag @member_type = { :title => "CSS Mixins", :position => MEMBER_POS_CSS_MIXIN, + :icon => File.dirname(__FILE__) + "/icons/css_mixin.png" } end diff --git a/lib/jsduck/tag/css_var.rb b/lib/jsduck/tag/css_var.rb index b4f73292627b20e452b78ba8ec0f6d8c62eb6d69..ce8e5190f6c1ede8c04bfd0262d992333b5f323a 100644 --- a/lib/jsduck/tag/css_var.rb +++ b/lib/jsduck/tag/css_var.rb @@ -10,6 +10,7 @@ module JsDuck::Tag :title => "CSS Variables", :toolbar_title => "CSS Vars", :position => MEMBER_POS_CSS_VAR, + :icon => File.dirname(__FILE__) + "/icons/css_var.png" } end diff --git a/lib/jsduck/tag/event.rb b/lib/jsduck/tag/event.rb index 32253aab4fa634957ec1012f87f235996a5f024f..07081819aa7deb92dbe3f19b78d834027d9feb53 100644 --- a/lib/jsduck/tag/event.rb +++ b/lib/jsduck/tag/event.rb @@ -10,6 +10,7 @@ module JsDuck::Tag @member_type = { :title => "Events", :position => MEMBER_POS_EVENT, + :icon => File.dirname(__FILE__) + "/icons/event.png" } end diff --git a/template/resources/images/members/cfg.png b/lib/jsduck/tag/icons/cfg.png similarity index 100% rename from template/resources/images/members/cfg.png rename to lib/jsduck/tag/icons/cfg.png diff --git a/template/resources/images/members/css_mixin.png b/lib/jsduck/tag/icons/css_mixin.png similarity index 100% rename from template/resources/images/members/css_mixin.png rename to lib/jsduck/tag/icons/css_mixin.png diff --git a/template/resources/images/members/css_var.png b/lib/jsduck/tag/icons/css_var.png similarity index 100% rename from template/resources/images/members/css_var.png rename to lib/jsduck/tag/icons/css_var.png diff --git a/template/resources/images/members/event.png b/lib/jsduck/tag/icons/event.png similarity index 100% rename from template/resources/images/members/event.png rename to lib/jsduck/tag/icons/event.png diff --git a/template/resources/images/members/method.png b/lib/jsduck/tag/icons/method.png similarity index 100% rename from template/resources/images/members/method.png rename to lib/jsduck/tag/icons/method.png diff --git a/template/resources/images/members/property.png b/lib/jsduck/tag/icons/property.png similarity index 100% rename from template/resources/images/members/property.png rename to lib/jsduck/tag/icons/property.png diff --git a/lib/jsduck/tag/member_tag.rb b/lib/jsduck/tag/member_tag.rb index 6aa6f1e07aef4189f7167f1f281356ce5f5cd68a..75a6f886db6ba3ba39103047b4922ba950b6352f 100644 --- a/lib/jsduck/tag/member_tag.rb +++ b/lib/jsduck/tag/member_tag.rb @@ -11,6 +11,7 @@ module JsDuck::Tag # :position => MEMBER_POS_EVENT, # # The following are optional # :toolbar_title => "Events", + # :icon => File.dirname(__FILE__) + "/icons/event.png", # :subsections => [ # {:title => "Static events", # :filter => {:static => false}, @@ -27,6 +28,9 @@ module JsDuck::Tag # label on Docs app toolbar button unless :toolbar_title is # specified. # + # Icon defines a file to be used as member icon in various places + # of the docs app. + # # Subsections allows splitting the list of members to several # subgroups. For example methods get split into static and # instance methods. diff --git a/lib/jsduck/tag/method.rb b/lib/jsduck/tag/method.rb index eb44625b69d1e51a16434782508f7c8b55d11054..63ac8fd8f3dbdc6222d897fcf8d48f1bf3d82661 100644 --- a/lib/jsduck/tag/method.rb +++ b/lib/jsduck/tag/method.rb @@ -11,6 +11,7 @@ module JsDuck::Tag @member_type = { :title => "Methods", :position => MEMBER_POS_METHOD, + :icon => File.dirname(__FILE__) + "/icons/method.png", :subsections => [ {:title => "Instance methods", :filter => {:static => false}, :default => true}, {:title => "Static methods", :filter => {:static => true}}, diff --git a/lib/jsduck/tag/property.rb b/lib/jsduck/tag/property.rb index 2e332650dbc0a413f04e25fb1994c456076c9b2c..98b892c0f038dff1e5407f7acc5306bd105126f2 100644 --- a/lib/jsduck/tag/property.rb +++ b/lib/jsduck/tag/property.rb @@ -11,6 +11,7 @@ module JsDuck::Tag @member_type = { :title => "Properties", :position => MEMBER_POS_PROPERTY, + :icon => File.dirname(__FILE__) + "/icons/property.png", :subsections => [ {:title => "Instance properties", :filter => {:static => false}, :default => true}, {:title => "Static properties", :filter => {:static => true}}, diff --git a/lib/jsduck/web/css.rb b/lib/jsduck/web/css.rb index 266e415e2027dd865ff5056696a4d0927d728fdd..9db0449a67755f5f9e113cf3951dd372a456c0d8 100644 --- a/lib/jsduck/web/css.rb +++ b/lib/jsduck/web/css.rb @@ -1,5 +1,6 @@ require 'jsduck/tag_registry' require 'jsduck/util/md5' +require 'jsduck/web/member_icons' module JsDuck module Web @@ -13,9 +14,15 @@ module JsDuck end def write(filename) - File.open(filename, 'w') {|f| f.write(TagRegistry.css + @opts.css) } + File.open(filename, 'w') {|f| f.write(all_css) } Util::MD5.rename(filename) end + + private + + def all_css + TagRegistry.css + Web::MemberIcons.css + @opts.css + end end end diff --git a/lib/jsduck/web/member_icons.rb b/lib/jsduck/web/member_icons.rb new file mode 100644 index 0000000000000000000000000000000000000000..bb886de37d3f8d8a35d90c621c89b432290a5676 --- /dev/null +++ b/lib/jsduck/web/member_icons.rb @@ -0,0 +1,43 @@ +require 'jsduck/tag_registry' +require 'fileutils' + +module JsDuck + module Web + + # Manages member icons. + # Generating CSS for them and coping the image files over to output dir. + class MemberIcons + # Generates CSS for member icons + def self.css + css = [] + members_with_icons.each do |m| + name = m[:name] + rule = ".icon-#{name} { background: url(member-icons/#{name}.png) no-repeat; }" + css << "#search-dropdown #{rule}" + css << ".members .members-section #{rule}" + css << ".members .comments-section #{rule}" + css << ".class-overview .x-toolbar.member-links #{rule}" + end + css.join("\n") + end + + # Copies all member icons to given destination dir. + def self.write(dir) + FileUtils.mkdir(dir) + + members_with_icons.each do |m| + if File.exists?(m[:icon]) + FileUtils.cp(m[:icon], "#{dir}/#{m[:name]}.png") + else + Logger.log(nil, "Member icon file not found", m[:icon]) + end + end + end + + def self.members_with_icons + TagRegistry.member_types.find_all {|m| m[:icon] } + end + end + + end +end diff --git a/lib/jsduck/web/writer.rb b/lib/jsduck/web/writer.rb index 2409c18f7532d932ef9ee3f170b902ba7729f81f..8c96073361fbe353a925b3906796fa6a26c55a30 100644 --- a/lib/jsduck/web/writer.rb +++ b/lib/jsduck/web/writer.rb @@ -7,6 +7,7 @@ require 'jsduck/web/index_html' require 'jsduck/web/data' require 'jsduck/web/css' require 'jsduck/web/source' +require 'jsduck/web/member_icons' require 'fileutils' module JsDuck @@ -24,6 +25,8 @@ module JsDuck def write write_template_files + write_member_icons + write_html_files # class-formatting is done in parallel which breaks the links @@ -45,6 +48,11 @@ module JsDuck Web::Template.new(@opts).write end + # Copy over member icons + def write_member_icons + Web::MemberIcons.write(@opts.output_dir+"/member-icons") + end + # Generate data.js and styles.css. # Then generate HTML files, linking to the data.js and styles.css from them. def write_html_files diff --git a/template/resources/sass/_class_overview.scss b/template/resources/sass/_class_overview.scss index c39a0a793cd408b543ff95b9219569da1033a243..2a6d0deb289b3f2b10d98b3df3ae3e3daf60d6fa 100644 --- a/template/resources/sass/_class_overview.scss +++ b/template/resources/sass/_class_overview.scss @@ -104,7 +104,6 @@ padding: 0 0 0 25px; font-size: 1.3em; font-weight: bold; } - @include member-icons; h4.members-subtitle { padding-left: 25px; margin: 10px 0 7px 0; } diff --git a/template/resources/sass/_header.scss b/template/resources/sass/_header.scss index 29d99520c6f2d9b1191b07a23702995554e49c5f..a48b7de4a719133d51d335a4c6bf0992d80c0d65 100644 --- a/template/resources/sass/_header.scss +++ b/template/resources/sass/_header.scss @@ -122,7 +122,6 @@ height: 18px; } @include icons; - @include member-icons; .meta { position: absolute; diff --git a/template/resources/sass/_mixins.scss b/template/resources/sass/_mixins.scss index c722fbbccfd15a8b29e14c508b8678e75f7dd82e..496bcbc199d855764893d92626ee724e97181097 100644 --- a/template/resources/sass/_mixins.scss +++ b/template/resources/sass/_mixins.scss @@ -40,20 +40,6 @@ .icon-component-redirect { background: url(../images/icons.png) no-repeat 0 -640px; } } -@mixin member-icons { - .icon-cfg { - background: url(../images/members/cfg.png) no-repeat; } - .icon-property { - background: url(../images/members/property.png) no-repeat; } - .icon-method { - background: url(../images/members/method.png) no-repeat; } - .icon-event { - background: url(../images/members/event.png) no-repeat; } - .icon-css_var { - background: url(../images/members/css_var.png) no-repeat; } - .icon-css_mixin { - background: url(../images/members/css_mixin.png) no-repeat; } } - @mixin green-button { @include box-shadow(#b3f33d 0 1px 0 0 inset); color: #fff; diff --git a/template/resources/sass/_toolbar.scss b/template/resources/sass/_toolbar.scss index 8a1bd24790ebc33ab0b3af1efd1ef9181f0845d1..6a3e94be540ae2890259cf6b02cf2d696e815752 100644 --- a/template/resources/sass/_toolbar.scss +++ b/template/resources/sass/_toolbar.scss @@ -1,5 +1,4 @@ // Styles for class documentation toolbar -@import "mixins"; // softer rounded corners on the toolbar .class-overview .x-toolbar.member-links { @@ -8,8 +7,7 @@ padding: 5px; // ExtJS styles hide the border using !important. // So to override it we need to use !important too. - border-width: 1px !important; - @include member-icons; } + border-width: 1px !important; } // The reset (X) button in filter-class-members text box