diff --git a/Rakefile b/Rakefile index 9cc3e9f8055ef11a414ace6ec8abcfc2f77e56a8..8028c52b66d2b0c03482c006da67eb534a310749 100644 --- a/Rakefile +++ b/Rakefile @@ -232,7 +232,6 @@ class JsDuckRunner head_html = <<-EOHTML <script type="text/javascript"> - Docs.exampleBaseUrl = "#{relative_touch_path}examples/"; if (Ext.is.Phone) { window.location = "#{relative_touch_path}examples/"; } </script> EOHTML @@ -240,7 +239,8 @@ class JsDuckRunner @options += [ "--body-html", head_html, "--welcome", "template-min/welcome.html", - "--eg-iframe", "template-min/eg-iframe.html" + "--eg-iframe", "template-min/eg-iframe.html", + "--examples-base-url", "#{relative_touch_path}examples/", ] end diff --git a/lib/jsduck/app.rb b/lib/jsduck/app.rb index 2bc8332f5feeedfa24ea4673790353ba33e56ed5..23ce01310d593aecccff9466320e23a790c7427d 100644 --- a/lib/jsduck/app.rb +++ b/lib/jsduck/app.rb @@ -52,7 +52,7 @@ module JsDuck @welcome = Welcome.create(@opts.welcome) @guides = Guides.create(@opts.guides, DocFormatter.new(@relations, @opts)) @videos = Videos.create(@opts.videos) - @examples = Examples.create(@opts.examples) + @examples = Examples.create(@opts.examples, @opts) @categories = Categories.create(@opts.categories_path, DocFormatter.new(@relations, @opts), @relations) if @opts.export diff --git a/lib/jsduck/examples.rb b/lib/jsduck/examples.rb index b6678738dd13e419996bdb1d859a85cee97958c0..3970ca2ab036973d712c2a503f581778bd272e6d 100644 --- a/lib/jsduck/examples.rb +++ b/lib/jsduck/examples.rb @@ -6,17 +6,30 @@ module JsDuck # Reads in examples JSON file class Examples # Creates Examples object from filename. - def self.create(filename) + def self.create(filename, opts) if filename - Examples.new(filename) + Examples.new(filename, opts) else NullObject.new(:to_array => []) end end # Parses examples config file - def initialize(filename) + def initialize(filename, opts) @examples = JsonDuck.read(filename) + @opts = opts + prefix_urls + end + + # Prefix all relative URL-s in examples list with path given in --examples-base-url + def prefix_urls + @examples.each do |group| + group["items"].each do |ex| + unless ex["url"] =~ /^https?:\/\// + ex["url"] = @opts.examples_base_url + ex["url"] + end + end + end end # Writes examples JSON file to dir diff --git a/lib/jsduck/options.rb b/lib/jsduck/options.rb index 67be4ac9ed8d2fed4b6a70d108f2a243e38e106a..011c5fe5865182be7e4f2f1dbb17283323cfdec3 100644 --- a/lib/jsduck/options.rb +++ b/lib/jsduck/options.rb @@ -31,6 +31,7 @@ module JsDuck attr_accessor :export attr_accessor :seo attr_accessor :eg_iframe + attr_accessor :examples_base_url # Debugging attr_accessor :processes @@ -94,6 +95,7 @@ module JsDuck @export = nil @seo = false @eg_iframe = nil + @examples_base_url = "extjs/examples/" # Debugging # Turn multiprocessing off by default in Windows @@ -276,6 +278,11 @@ module JsDuck @eg_iframe = canonical(path) end + opts.on('--examples_base_url=URL', + "Base URL for examples with relative URL-s.", " ") do |path| + @examples_base_url = path + end + opts.separator "Debugging:" opts.separator "" diff --git a/template/app/controller/Examples.js b/template/app/controller/Examples.js index f19279166b2e946d48b73d7220a978a5568a0cf6..1ff40dab21d08e481c34de1c85dbb0560df62afe 100644 --- a/template/app/controller/Examples.js +++ b/template/app/controller/Examples.js @@ -131,7 +131,6 @@ Ext.define('Docs.controller.Examples', { }, openInNewWindow: function() { - var example = this.getExample(this.activeUrl); - window.open((Docs.exampleBaseUrl || "touch/examples/") + example.url); + window.open(this.getExample(this.activeUrl).url); } }); diff --git a/template/app/view/examples/Container.js b/template/app/view/examples/Container.js index 1fa3cace89cc473fbb9e373460350b7c7888e9d3..cf03f69c1b847e7f4e0e7b3782e763e717a4ba40 100644 --- a/template/app/view/examples/Container.js +++ b/template/app/view/examples/Container.js @@ -8,17 +8,11 @@ Ext.define('Docs.view.examples.Container', { alias: 'widget.examplecontainer', layout: 'fit', - exampleBaseUrl: "extjs/examples/", - initComponent: function() { this.tpl = new Ext.XTemplate( - '<iframe style="width: 100%; height: 100%; border: 0;" src="{baseUrl}{url}"></iframe>' + '<iframe style="width: 100%; height: 100%; border: 0;" src="{url}"></iframe>' ); - if (Docs.exampleBaseUrl) { - this.exampleBaseUrl = Docs.exampleBaseUrl; - } - this.callParent(arguments); }, @@ -27,7 +21,6 @@ Ext.define('Docs.view.examples.Container', { * @param {Object} example Example object */ load: function(example) { - example.baseUrl = this.exampleBaseUrl; this.update(this.tpl.apply(example)); }, diff --git a/template/app/view/examples/TouchContainer.js b/template/app/view/examples/TouchContainer.js index 103e023a7a03feae958be4bcf423ab754359c33c..cf712a144bc5702d7638125f32263fa62da9c114 100644 --- a/template/app/view/examples/TouchContainer.js +++ b/template/app/view/examples/TouchContainer.js @@ -14,7 +14,6 @@ Ext.define('Docs.view.examples.TouchContainer', { cls: 'example-container iScroll', autoScroll: true, bodyPadding: '10 0 5 0', - exampleBaseUrl: "touch/examples/", initComponent: function() { this.dockedItems = [{ @@ -40,10 +39,6 @@ Ext.define('Docs.view.examples.TouchContainer', { ].join('') }]; - if (Docs.exampleBaseUrl) { - this.exampleBaseUrl = Docs.exampleBaseUrl; - } - this.callParent(arguments); }, @@ -52,10 +47,9 @@ Ext.define('Docs.view.examples.TouchContainer', { * @param {Object} example Example object */ load: function(example) { - var url = example.externalUrl || (this.exampleBaseUrl + example.url); this.title = example.text + " Example"; this.device = Ext.create('Docs.view.examples.Device', { - url: url, + url: example.url, device: example.device || "phone", orientation: example.orientation || "landscape" });