Loading lib/jsduck/categories.rb +3 −44 Original line number Diff line number Diff line require 'jsduck/logger' require 'jsduck/file_categories' require 'jsduck/auto_categories' require 'jsduck/categories_class_name' module JsDuck Loading @@ -17,8 +18,7 @@ module JsDuck def initialize(categories, doc_formatter, relations={}) @categories = categories @doc_formatter = doc_formatter @relations = relations @class_name = CategoriesClassName.new(doc_formatter, relations) end # Returns HTML listing of classes divided into categories Loading Loading @@ -58,53 +58,12 @@ module JsDuck [ "<h3>#{g['name']}</h3>", "<ul class='links'>", g["classes"].map {|cls| "<li>" + render_class_name(cls) + "</li>" }, g["classes"].map {|cls| "<li>" + @class_name.render(cls) + "</li>" }, "</ul>", ] end end def render_class_name(name) cls = @relations[name] if cls @doc_formatter.link(name, nil, name) + render_new_label(cls) else name end end # Adds small star to new classes in the current version. def render_new_label(cls) if cls[:meta][:new] " <span class='new-class' title='New class'>#{stars(1)}</span>" else n = new_members_count(cls) if n > 0 " <span class='new-members' title='#{n} new members'>#{stars(n)}</span>" else "" end end end # Produces string of n stars. # First 3 stars are rendered as "<unicode-star>", the following as "+". # At max 15 stars are rendered. def stars(n) if n > 15 stars(3) + ("+" * (15-3)) elsif n > 3 stars(3) + ("+" * (n-3)) else "★" * n end end # Returns number of new members the class has in the current version def new_members_count(cls) cls.find_members(:local => true).find_all {|m| m[:meta][:new] && !m[:private] }.length end # Splits the array of items into n chunks so that the sum of # largest chunk is as small as possible. # Loading lib/jsduck/categories_class_name.rb 0 → 100644 +60 −0 Original line number Diff line number Diff line module JsDuck # Renders class names for class categories page. class CategoriesClassName def initialize(doc_formatter, relations={}) @doc_formatter = doc_formatter @relations = relations end # Renders the class name as a link or plain text. # # For new classes appends a star behind class name. For classes # with new members appends list n small stars behind class name # (reflecting the number of new members). def render(name) cls = @relations[name] if cls @doc_formatter.link(name, nil, name) + render_new_label(cls) else name end end private # Adds small star to new classes in the current version. def render_new_label(cls) if cls[:meta][:new] " <span class='new-class' title='New class'>#{stars(1)}</span>" else n = new_members_count(cls) if n > 0 " <span class='new-members' title='#{n} new members'>#{stars(n)}</span>" else "" end end end # Produces string of n stars. # First 3 stars are rendered as "<unicode-star>", the following as "+". # At max 15 stars are rendered. def stars(n) if n > 15 stars(3) + ("+" * (15-3)) elsif n > 3 stars(3) + ("+" * (n-3)) else "★" * n end end # Returns number of new members the class has in the current version def new_members_count(cls) cls.find_members(:local => true).find_all {|m| m[:meta][:new] && !m[:private] }.length end end end Loading
lib/jsduck/categories.rb +3 −44 Original line number Diff line number Diff line require 'jsduck/logger' require 'jsduck/file_categories' require 'jsduck/auto_categories' require 'jsduck/categories_class_name' module JsDuck Loading @@ -17,8 +18,7 @@ module JsDuck def initialize(categories, doc_formatter, relations={}) @categories = categories @doc_formatter = doc_formatter @relations = relations @class_name = CategoriesClassName.new(doc_formatter, relations) end # Returns HTML listing of classes divided into categories Loading Loading @@ -58,53 +58,12 @@ module JsDuck [ "<h3>#{g['name']}</h3>", "<ul class='links'>", g["classes"].map {|cls| "<li>" + render_class_name(cls) + "</li>" }, g["classes"].map {|cls| "<li>" + @class_name.render(cls) + "</li>" }, "</ul>", ] end end def render_class_name(name) cls = @relations[name] if cls @doc_formatter.link(name, nil, name) + render_new_label(cls) else name end end # Adds small star to new classes in the current version. def render_new_label(cls) if cls[:meta][:new] " <span class='new-class' title='New class'>#{stars(1)}</span>" else n = new_members_count(cls) if n > 0 " <span class='new-members' title='#{n} new members'>#{stars(n)}</span>" else "" end end end # Produces string of n stars. # First 3 stars are rendered as "<unicode-star>", the following as "+". # At max 15 stars are rendered. def stars(n) if n > 15 stars(3) + ("+" * (15-3)) elsif n > 3 stars(3) + ("+" * (n-3)) else "★" * n end end # Returns number of new members the class has in the current version def new_members_count(cls) cls.find_members(:local => true).find_all {|m| m[:meta][:new] && !m[:private] }.length end # Splits the array of items into n chunks so that the sum of # largest chunk is as small as possible. # Loading
lib/jsduck/categories_class_name.rb 0 → 100644 +60 −0 Original line number Diff line number Diff line module JsDuck # Renders class names for class categories page. class CategoriesClassName def initialize(doc_formatter, relations={}) @doc_formatter = doc_formatter @relations = relations end # Renders the class name as a link or plain text. # # For new classes appends a star behind class name. For classes # with new members appends list n small stars behind class name # (reflecting the number of new members). def render(name) cls = @relations[name] if cls @doc_formatter.link(name, nil, name) + render_new_label(cls) else name end end private # Adds small star to new classes in the current version. def render_new_label(cls) if cls[:meta][:new] " <span class='new-class' title='New class'>#{stars(1)}</span>" else n = new_members_count(cls) if n > 0 " <span class='new-members' title='#{n} new members'>#{stars(n)}</span>" else "" end end end # Produces string of n stars. # First 3 stars are rendered as "<unicode-star>", the following as "+". # At max 15 stars are rendered. def stars(n) if n > 15 stars(3) + ("+" * (15-3)) elsif n > 3 stars(3) + ("+" * (n-3)) else "★" * n end end # Returns number of new members the class has in the current version def new_members_count(cls) cls.find_members(:local => true).find_all {|m| m[:meta][:new] && !m[:private] }.length end end end