Commit 51103712 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Create Assets class to bind together several things.

Assets combines: guides, videos, examples, images, welcome, categores.

This moves out bunch of logic from App class and simplifies
communication with IndexHtml and AppData which now only need to get
passed one param, instead of passing guides, videos, etc separately.
parent a76c07c1
Loading
Loading
Loading
Loading
+7 −27
Original line number Diff line number Diff line
@@ -8,12 +8,7 @@ require 'jsduck/relations'
require 'jsduck/inherit_doc'
require 'jsduck/parallel_wrap'
require 'jsduck/logger'
require 'jsduck/welcome'
require 'jsduck/guides'
require 'jsduck/videos'
require 'jsduck/examples'
require 'jsduck/categories'
require 'jsduck/images'
require 'jsduck/assets'
require 'jsduck/json_duck'
require 'jsduck/lint'
require 'jsduck/template_dir'
@@ -48,12 +43,8 @@ module JsDuck
      InheritDoc.new(@relations).resolve_all
      Lint.new(@relations).run

      @images = Images.new(@opts.images)
      @welcome = Welcome.create(@opts.welcome)
      @guides = Guides.create(@opts.guides, DocFormatter.new(@relations, @opts))
      @videos = Videos.create(@opts.videos)
      @examples = Examples.create(@opts.examples, @opts)
      @categories = Categories.create(@opts.categories_path, DocFormatter.new(@relations, @opts), @relations)
      # Initialize guides, videos, examples, ...
      @assets = Assets.new(@relations, @opts)

      if @opts.export
        format_classes
@@ -65,17 +56,9 @@ module JsDuck
        FileUtils.rm_rf(@opts.output_dir)
        TemplateDir.new(@opts).write

        index = IndexHtml.new(@opts)
        index.welcome = @welcome
        index.categories = @categories
        index.guides = @guides
        index.write
        IndexHtml.new(@assets, @opts).write

        app_data = AppData.new(@relations, @opts)
        app_data.guides = @guides
        app_data.videos = @videos
        app_data.examples = @examples
        app_data.write(@opts.output_dir+"/data.js")
        AppData.new(@relations, @assets, @opts).write(@opts.output_dir+"/data.js")

        # class-formatting is done in parallel which breaks the links
        # between source files and classes. Therefore it MUST to be done
@@ -87,10 +70,7 @@ module JsDuck
        cw = ClassWriter.new(AppExporter, @relations, @opts)
        cw.write(@opts.output_dir+"/output", ".js")

        @guides.write(@opts.output_dir+"/guides")
        @videos.write(@opts.output_dir+"/videos")
        @examples.write(@opts.output_dir+"/examples")
        @images.copy(@opts.output_dir+"/images")
        @assets.write
      end
    end

@@ -160,7 +140,7 @@ module JsDuck
      # Then merge the data back to classes sequentially
      formatted_classes.each do |cls|
        @relations[cls[:doc][:name]].internal_doc = cls[:doc]
        cls[:images].each {|img| @images.add(img) }
        cls[:images].each {|img| @assets.images.add(img) }
      end
    end

+5 −8
Original line number Diff line number Diff line
@@ -8,12 +8,9 @@ module JsDuck

  # Creates big JS file with data for Docs app.
  class AppData
    attr_accessor :guides
    attr_accessor :videos
    attr_accessor :examples

    def initialize(relations, opts)
    def initialize(relations, assets, opts)
      @relations = relations
      @assets = assets
      @opts = opts
    end

@@ -22,9 +19,9 @@ module JsDuck
      js = "Docs = " + JsonDuck.generate({
        :data => {
          :classes => Icons.new.create(@relations.classes),
          :guides => @guides.to_array,
          :videos => @videos.to_array,
          :examples => @examples.to_array,
          :guides => @assets.guides.to_array,
          :videos => @assets.videos.to_array,
          :examples => @assets.examples.to_array,
          :search => SearchData.new.create(@relations.classes),
          :stats => @opts.stats ? Stats.new.create(@relations.classes) : [],
          :signatures => signatures,

lib/jsduck/assets.rb

0 → 100644
+50 −0
Original line number Diff line number Diff line
require 'jsduck/images'
require 'jsduck/welcome'
require 'jsduck/guides'
require 'jsduck/videos'
require 'jsduck/examples'
require 'jsduck/categories'
require 'jsduck/doc_formatter'

module JsDuck

  # Binds together: Welcome page, Categories, Images, Guides, Videos,
  # Examples.
  #
  # Often we need to pass guides/videos/examples/... to several
  # classes. Having all these assets together in here, means we just
  # need to pass one value instead of 3 or more.
  class Assets
    attr_reader :images
    attr_reader :welcome
    attr_reader :guides
    attr_reader :videos
    attr_reader :examples
    attr_reader :categories

    def initialize(relations, opts)
      @relations = relations
      @opts = opts

      @images = Images.new(@opts.images)
      @welcome = Welcome.create(@opts.welcome)
      @guides = Guides.create(@opts.guides, DocFormatter.new(@relations, @opts))
      @videos = Videos.create(@opts.videos)
      @examples = Examples.create(@opts.examples, @opts)
      @categories = Categories.create(@opts.categories_path, DocFormatter.new(@relations, @opts), @relations)
    end

    # Writes out the assets that can be written out separately:
    # guides, videos, examples, images.
    #
    # Welcome page and categories are written in JsDuck::IndexHtml
    def write
      @guides.write(@opts.output_dir+"/guides")
      @videos.write(@opts.output_dir+"/videos")
      @examples.write(@opts.output_dir+"/examples")
      @images.copy(@opts.output_dir+"/images")
    end

  end

end
+5 −8
Original line number Diff line number Diff line
@@ -5,11 +5,8 @@ module JsDuck

  # Deals with creation of main HTML or PHP files.
  class IndexHtml
    attr_accessor :welcome
    attr_accessor :categories
    attr_accessor :guides

    def initialize(opts)
    def initialize(assets, opts)
      @assets = assets
      @opts = opts
    end

@@ -34,9 +31,9 @@ module JsDuck
        "{header}" => @opts.header,
        "{footer}" => "<div id='footer-content' style='display: none'>#{@opts.footer}</div>",
        "{extjs_path}" => @opts.extjs_path,
        "{welcome}" => @welcome.to_html,
        "{categories}" => @categories.to_html,
        "{guides}" => @guides.to_html,
        "{welcome}" => @assets.welcome.to_html,
        "{categories}" => @assets.categories.to_html,
        "{guides}" => @assets.guides.to_html,
        "{head_html}" => @opts.head_html,
        "{body_html}" => @opts.body_html,
      })