class JsDuck::News
Public Class Methods
create(relations, doc_formatter, opts)
click to toggle source
Creates News
object from relations data when –import option specified.
# File lib/jsduck/news.rb, line 9 def self.create(relations, doc_formatter, opts) if opts.import.length > 0 News.new(relations, doc_formatter) else Util::NullObject.new(:to_html => "") end end
new(relations, doc_formatter)
click to toggle source
Generates list of new classes & members in this version.
# File lib/jsduck/news.rb, line 18 def initialize(relations, doc_formatter) @doc_formatter = doc_formatter @columns = Columns.new(:members) @new_items = filter_new_items(relations) end
Public Instance Methods
to_html(style="")
click to toggle source
Returns the HTML
# File lib/jsduck/news.rb, line 25 def to_html(style="") return [ "<div id='news-content' style='#{style}'>", "<div class='section'>", "<h1>New in this version</h1>", render_news(@new_items), "<div style='clear:both'></div>", "</div>", "</div>", ].flatten.join("\n") end
Private Instance Methods
discard_accessors(members)
click to toggle source
# File lib/jsduck/news.rb, line 84 def discard_accessors(members) accessors = {} members.find_all {|m| m[:accessor] }.each do |cfg| accessors["set" + upcase_first(cfg[:name])] = true accessors["get" + upcase_first(cfg[:name])] = true accessors[cfg[:name].downcase + "change"] = true if cfg[:evented] end members.reject {|m| accessors[m[:name]] } end
filter_new_items(relations)
click to toggle source
# File lib/jsduck/news.rb, line 39 def filter_new_items(relations) classes = [] new_items = [] relations.each do |cls| if !cls[:private] if cls[:new] classes << cls else members = filter_new_members(cls) if members.length > 0 new_items << {:name => cls[:name], :members => members} end end end end new_items.sort! {|a, b| a[:name] <=> b[:name] } # Place the new classes section at the beginning if classes.length > 0 new_items.unshift({:name => "New classes", :members => classes}) end new_items end
filter_new_members(cls)
click to toggle source
Returns all members of a class that have been marked as new, or have parameters marked as new.
# File lib/jsduck/news.rb, line 68 def filter_new_members(cls) members = cls.all_local_members.find_all do |m| visible?(m) && (m[:new] || new_params?(m)) end members = discard_accessors(members) members.sort! {|a, b| a[:name] <=> b[:name] } end
link(m)
click to toggle source
# File lib/jsduck/news.rb, line 131 def link(m) if m[:tagname] == :class @doc_formatter.link(m[:name], nil, m[:name]) else @doc_formatter.link(m[:owner], m[:name], m[:name], m[:tagname], m[:static]) + params_note(m) end end
new_params?(member)
click to toggle source
# File lib/jsduck/news.rb, line 80 def new_params?(member) Array(member[:params]).any? {|p| p[:new] } end
params_note(m)
click to toggle source
# File lib/jsduck/news.rb, line 139 def params_note(m) if !m[:new] && new_params?(m) " <small>+parameters</small>" else "" end end
render_col(col)
click to toggle source
# File lib/jsduck/news.rb, line 120 def render_col(col) return col.map do |item| [ "<h3>#{item[:name]}</h3>", "<ul class='links'>", item[:members].map {|m| "<li>" + link(m) + "</li>" }, "</ul>", ] end end
render_columns(new_items)
click to toggle source
# File lib/jsduck/news.rb, line 107 def render_columns(new_items) align = ["left-column", "middle-column", "right-column"] i = -1 return @columns.split(new_items, 3).map do |col| i += 1 [ "<div class='#{align[i]}'>", render_col(col), "</div>", ] end end
render_news(new_items)
click to toggle source
# File lib/jsduck/news.rb, line 99 def render_news(new_items) if new_items.length > 0 render_columns(new_items) else "<h3>Nothing new.</h3>" end end
upcase_first(str)
click to toggle source
# File lib/jsduck/news.rb, line 95 def upcase_first(str) str[0,1].upcase + str[1..-1] end
visible?(member)
click to toggle source
# File lib/jsduck/news.rb, line 76 def visible?(member) !member[:private] && !member[:hide] end