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

Extract AppData class from TemplateDir class.

It takes care of the creation of data.js file.
parent a3cbccfd
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ require 'jsduck/lint'
require 'jsduck/template_dir'
require 'jsduck/class_writer'
require 'jsduck/source_writer'
require 'jsduck/app_data'
require 'fileutils'

module JsDuck
@@ -65,10 +66,14 @@ module JsDuck
        template.welcome = @welcome
        template.categories = @categories
        template.guides = @guides
        template.videos = @videos
        template.examples = @examples
        template.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")

        # class-formatting is done in parallel which breaks the links
        # between source files and classes. Therefore it MUST to be done
        # after writing sources which needs the links to work.

lib/jsduck/app_data.rb

0 → 100644
+34 −0
Original line number Diff line number Diff line
require 'jsduck/json_duck'
require 'jsduck/icons'
require 'jsduck/search_data'
require 'jsduck/stats'

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)
      @relations = relations
      @opts = opts
    end

    # Writes classes, guides, videos, and search data to one big .js file
    def write(filename)
      js = "Docs.data = " + JsonDuck.generate({
        :classes => Icons.new.create(@relations.classes),
        :guides => @guides.to_array,
        :videos => @videos.to_array,
        :examples => @examples.to_array,
        :search => SearchData.new.create(@relations.classes),
        :stats => @opts.stats ? Stats.new.create(@relations.classes) : [],
      }) + ";\n"
      File.open(filename, 'w') {|f| f.write(js) }
    end

  end

end
+0 −22
Original line number Diff line number Diff line
require 'jsduck/class_writer'
require 'jsduck/logger'
require 'jsduck/source_writer'
require 'jsduck/json_duck'
require 'jsduck/icons'
require 'jsduck/search_data'
require 'jsduck/stats'
require 'fileutils'

module JsDuck
@@ -14,8 +9,6 @@ module JsDuck
    attr_accessor :welcome
    attr_accessor :categories
    attr_accessor :guides
    attr_accessor :videos
    attr_accessor :examples

    def initialize(relations, opts)
      @relations = relations
@@ -41,8 +34,6 @@ module JsDuck
        FileUtils.rm(@opts.output_dir+"/eg-iframe.html")
        FileUtils.cp(@opts.eg_iframe, @opts.output_dir+"/eg-iframe.html")
      end

      write_app_data
    end

    def copy_template
@@ -95,19 +86,6 @@ module JsDuck
      File.open(out_file, 'w') {|f| f.write(html) }
    end

    # Writes classes, guides, videos, and search data to one big .js file
    def write_app_data
      js = "Docs.data = " + JsonDuck.generate({
        :classes => Icons.new.create(@relations.classes),
        :guides => @guides.to_array,
        :videos => @videos.to_array,
        :examples => @examples.to_array,
        :search => SearchData.new.create(@relations.classes),
        :stats => @opts.stats ? Stats.new.create(@relations.classes) : [],
      }) + ";\n"
      File.open(@opts.output_dir+"/data.js", 'w') {|f| f.write(js) }
    end

  end

end