You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by mw...@apache.org on 2014/06/10 01:21:55 UTC
[3/3] docs commit: [lib] Improve version menu rendering performance.
[lib] Improve version menu rendering performance.
Project: http://git-wip-us.apache.org/repos/asf/cordova-docs/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-docs/commit/1fcfb55b
Tree: http://git-wip-us.apache.org/repos/asf/cordova-docs/tree/1fcfb55b
Diff: http://git-wip-us.apache.org/repos/asf/cordova-docs/diff/1fcfb55b
Branch: refs/heads/master
Commit: 1fcfb55b639aa7f0ac634f0ead9acc31cad6b1bc
Parents: 1193c42
Author: Michael Brooks <mi...@michaelbrooks.ca>
Authored: Mon Jun 9 16:06:56 2014 -0700
Committer: Michael Brooks <mi...@michaelbrooks.ca>
Committed: Mon Jun 9 16:21:33 2014 -0700
----------------------------------------------------------------------
lib/cordova/version_menu.rb | 68 +++++++++++++++++++++++-----------------
1 file changed, 40 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-docs/blob/1fcfb55b/lib/cordova/version_menu.rb
----------------------------------------------------------------------
diff --git a/lib/cordova/version_menu.rb b/lib/cordova/version_menu.rb
index 3c6f613..3cd95b7 100644
--- a/lib/cordova/version_menu.rb
+++ b/lib/cordova/version_menu.rb
@@ -21,6 +21,9 @@ require 'nokogiri'
require 'fileutils'
class VersionMenu
+ @@versions = nil
+ @@optgroup_set = nil
+
def initialize(options = {})
@version = options[:version]
@language = options[:lang]
@@ -40,44 +43,53 @@ class VersionMenu
private
def generate_set doc
- optgroup_set = Nokogiri::XML::NodeSet.new doc
docs_path = File.expand_path File.join(__FILE__, '..', '..', '..', 'docs')
glob_exp = File.join(docs_path, '*', '*', 'config.json')
- versions = {}
languages = {}
html = []
- # build hash of languages and versions
- Dir.glob(glob_exp).each do |file|
- version = File.basename(File.dirname file)
- lang = File.basename(File.dirname(File.dirname file))
- language = JSON.parse(IO.read(file))['language']
-
- if language
- versions[language] ||= []
- versions[language].push version
- languages[language] = lang
- else
- puts "Warning: The key 'language' was not defined in #{file}"
+ # only build versions once for performance
+ if @@versions.nil?
+ puts "building menu list"
+ @@versions = {}
+
+ # build hash of languages and versions
+ Dir.glob(glob_exp).each do |file|
+ version = File.basename(File.dirname file)
+ lang = File.basename(File.dirname(File.dirname file))
+ language = JSON.parse(IO.read(file))['language']
+
+ if language
+ @@versions[language] ||= []
+ @@versions[language].push version
+ languages[language] = lang
+ else
+ puts "Warning: The key 'language' was not defined in #{file}"
+ end
end
end
- # generate HTML <select> output
- versions.keys.sort.each do |language|
- optgroup = Nokogiri::XML::Node.new 'optgroup', doc
- optgroup['label'] = language
- optgroup['value'] = languages[language]
- optgroup_set.push optgroup
-
- versions[language].sort.reverse.each do |v|
- option = Nokogiri::XML::Node.new 'option', doc
- option['selected'] = 'selected' if @version == v && @language == languages[language]
- option['value'] = v;
- option.content = v
- optgroup.add_child option
+ if @@optgroup_set.nil?
+ puts "building opt group"
+ @@optgroup_set = Nokogiri::XML::NodeSet.new doc
+
+ # generate HTML <select> output
+ @@versions.keys.sort.each do |language|
+ optgroup = Nokogiri::XML::Node.new 'optgroup', doc
+ optgroup['label'] = language
+ optgroup['value'] = languages[language]
+ @@optgroup_set.push optgroup
+
+ @@versions[language].sort.reverse.each do |v|
+ option = Nokogiri::XML::Node.new 'option', doc
+ option['selected'] = 'selected' if @version == v && @language == languages[language]
+ option['value'] = v;
+ option.content = v
+ optgroup.add_child option
+ end
end
end
- return optgroup_set
+ return @@optgroup_set
end
end