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

Read examples config from JSON file in SDK.

Re-introducing the --examples option, which now specifies path
to examples JSON file.

The JSON is included into data.js and the docs app accesses
examples data from Docs.data.examples.

Created a simple Examples class which currently does exactly the
same as Videos class.  Some refactoring in order...
parent 58cc0173
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ def run_jsduck(extra_options)
    "--external", "Error",
    "--guides", "#{SDK_DIR}/guides/guides.json",
    "--videos", "#{SDK_DIR}/guides/videos.json",
    "--examples", "#{SDK_DIR}/extjs/examples/examples.json",
    "--inline-examples", "#{SDK_DIR}/extjs/doc-resources",
    "--categories", "#{SDK_DIR}/extjs/doc-resources/categories.json",
    "--output", "#{OUT_DIR}",
+8 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ require 'jsduck/parallel_wrap'
require 'jsduck/logger'
require 'jsduck/guides'
require 'jsduck/videos'
require 'jsduck/examples'
require 'jsduck/categories'
require 'jsduck/json_duck'
require 'jsduck/lint'
@@ -56,6 +57,11 @@ module JsDuck
        @timer.time(:parsing) { @videos.parse(@opts.videos) }
      end

      @examples = Examples.new
      if @opts.examples
        @timer.time(:parsing) { @examples.parse(@opts.examples) }
      end

      @categories = Categories.new(get_doc_formatter, @relations)
      if @opts.categories_path
        @timer.time(:parsing) do
@@ -84,6 +90,7 @@ module JsDuck
        @timer.time(:generating) { write_classes }
        @timer.time(:generating) { @guides.write(@opts.output_dir+"/guides") }
        @timer.time(:generating) { @videos.write(@opts.output_dir+"/videos") }
        @timer.time(:generating) { @examples.write(@opts.output_dir+"/examples") }
      end

      @timer.report
@@ -137,6 +144,7 @@ module JsDuck
        :icons => icons,
        :guides => @guides.to_array,
        :videos => @videos.to_array,
        :examples => @examples.to_array,
        :search => SearchData.new.create(@relations.classes),
      }) + ";\n"
      File.open(@opts.output_dir+"/data.js", 'w') {|f| f.write(js) }

lib/jsduck/examples.rb

0 → 100644
+33 −0
Original line number Diff line number Diff line
require 'jsduck/json_duck'

module JsDuck

  # Reads in examples JSON file
  class Examples
    def initialize
      @examples = []
    end

    # Parses examples config file
    def parse(filename)
      @examples = JsonDuck.read(filename)
    end

    # Writes examples JSON file to dir
    def write(dir)
      return if @examples.length == 0

      FileUtils.mkdir(dir) unless File.exists?(dir)
      # Write the JSON to output dir, so it's available in released
      # version of docs and people can use it with JSDuck by themselves.
      JsonDuck.write_json(dir+"/examples.json", @examples)
    end

    # Returns all examples as array
    def to_array
      @examples
    end

  end

end
+7 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ module JsDuck
    attr_accessor :body_html
    attr_accessor :guides
    attr_accessor :videos
    attr_accessor :examples
    attr_accessor :categories_path
    attr_accessor :inline_examples_dir
    attr_accessor :pretty_json
@@ -51,6 +52,7 @@ module JsDuck
      @body_html = ""
      @guides = nil
      @videos = nil
      @examples = nil
      @categories_path = nil
      @inline_examples_dir = nil
      @pretty_json = false
@@ -143,6 +145,11 @@ module JsDuck
          @videos = path
        end

        opts.on('--examples=PATH',
          "Path JSON file describing the examples.", " ") do |path|
          @examples = path
        end

        opts.on('--categories=PATH',
          "Path to JSON file which defines categories for classes.", " ") do |path|
          @categories_path = path
+1 −1
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ Ext.define('Docs.view.examples.Index', {
                        '</h4><p>{desc}</p></div>',
                    '</dd>'
                ],
                data: Ext.samples.samplesCatalog
                data: Docs.data.examples
            })
        ];

Loading