haplo 2.4.2-java → 2.5.2-java

Sign up to get free protection for your applications and to get access to all the features.
Binary file
@@ -0,0 +1,46 @@
1
+
2
+ module PluginTool
3
+
4
+ def self.i18n_extract_text(plugins)
5
+ text = {}
6
+
7
+ # Get text from templates. This is exact, because each template is parsed.
8
+ parser_config = TemplateParserConfiguration.new
9
+ plugins.each do |plugin|
10
+ Dir.glob("#{plugin.plugin_dir}/template/**/*.hsvt").sort.each do |template|
11
+ template = Java::OrgHaploTemplateHtml::Parser.new(File.read(template), "extract", parser_config).parse()
12
+ template.extractTranslatedStrings().each do |string|
13
+ text[string] = string
14
+ end
15
+ end
16
+ end
17
+
18
+ # Get text from JS files, which isn't exact, because it just relies on convention and hopes for the best.
19
+ plugins.each do |plugin|
20
+ Dir.glob("#{plugin.plugin_dir}/js/**/*.js").sort.each do |js_file|
21
+ js = File.read(js_file)
22
+ [/\bi\['([^']+)'\]/, /\bi\["([^"]+)"\]/].each do |regexp|
23
+ js.scan(regexp) do
24
+ text[$1] = $1
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ # Last, add in any of the default locale's text, so where text is looked up by symbol, the translation is included.
31
+ plugins.each do |plugin|
32
+ ['global','local'].each do |scope|
33
+ maybe_strings = "#{plugin.plugin_dir}/i18n/#{scope}/#{plugin.default_locale_id}.template.json"
34
+ if File.exist?(maybe_strings)
35
+ strings = JSON.parse(File.read(maybe_strings))
36
+ strings.each do |k,v|
37
+ text[k] = v
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ puts JSON.pretty_generate(text)
44
+ end
45
+
46
+ end
data/lib/manifest.rb CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  module PluginTool
9
9
 
10
- PLUGIN_ACCEPTABLE_FILENAME = /\A(js|static|template|test|file)\/([A-Za-z0-9_\.-]+\/)*[A-Za-z0-9_\.-]+\.[A-Za-z0-9]+\z/
10
+ PLUGIN_ACCEPTABLE_FILENAME = /\A(js|static|template|test|file|i18n)\/([A-Za-z0-9_\.-]+\/)*[A-Za-z0-9_\.-]+\.[A-Za-z0-9]+\z/
11
11
  PLUGIN_ACCEPTABLE_FILENAME_EXCEPTIONS = ['plugin.json', 'requirements.schema', 'global.js', 'certificates-temp-http-api.pem', 'developer.json', 'readme.txt']
12
12
  def self.plugin_filename_allowed?(filename)
13
13
  (filename =~ PLUGIN_ACCEPTABLE_FILENAME) || (PLUGIN_ACCEPTABLE_FILENAME_EXCEPTIONS.include?(filename))
data/lib/packing.rb CHANGED
@@ -50,7 +50,10 @@ module PluginTool
50
50
  end
51
51
  # Minimise file?
52
52
  unless filename =~ /\A(js|test)\//
53
- data = minimiser.process(data, filename)
53
+ # Is this file explicitly excluded from minimisation?
54
+ unless plugin.exclude_files_from_minimisation.include?(filename)
55
+ data = minimiser.process(data, filename)
56
+ end
54
57
  end
55
58
  hash = Digest::SHA256.hexdigest(data)
56
59
  # Make sure output directory exists, write file
data/lib/plugin.rb CHANGED
@@ -29,6 +29,11 @@ module PluginTool
29
29
  attr_accessor :depend
30
30
  attr_accessor :loaded_plugin_id
31
31
 
32
+ def default_locale_id
33
+ # TODO: Other default locales
34
+ 'en'
35
+ end
36
+
32
37
  # ---------------------------------------------------------------------------------------------------------
33
38
 
34
39
  @@pending_apply = []
@@ -97,6 +102,17 @@ module PluginTool
97
102
  end
98
103
  end
99
104
 
105
+ def exclude_files_from_minimisation
106
+ @exclude_files_from_minimisation ||= begin
107
+ # developer.json file might specify files which should skip minimisation when packing
108
+ if developer_json['excludeFromMinimisation'].kind_of?(Array)
109
+ developer_json['excludeFromMinimisation']
110
+ else
111
+ []
112
+ end
113
+ end
114
+ end
115
+
100
116
  # ---------------------------------------------------------------------------------------------------------
101
117
 
102
118
  def command(cmd, errors)
@@ -175,11 +191,16 @@ module PluginTool
175
191
  hash = action
176
192
  # Minimise file before uploading?
177
193
  if @options.minimiser != nil && filename =~ /\A(static|template)\//
178
- size_before = data.length
179
- data = @options.minimiser.process(data, filename)
180
- size_after = data.length
181
- hash = Digest::SHA256.hexdigest(data)
182
- puts " minimisation: #{size_before} -> #{size_after} (#{(size_after * 100) / size_before}%)"
194
+ # Is this file explicitly excluded from minimisation?
195
+ unless exclude_files_from_minimisation.include?(filename)
196
+ size_before = data.length
197
+ data = @options.minimiser.process(data, filename)
198
+ size_after = data.length
199
+ hash = Digest::SHA256.hexdigest(data)
200
+ puts " minimisation: #{size_before} -> #{size_after} (#{(size_after * 100) / size_before}%)"
201
+ else
202
+ puts " minimisation: skipped by developer.json, unmodified file uploaded"
203
+ end
183
204
  end
184
205
  r = PluginTool.post_with_json_response("/api/development-plugin-loader/put-file/#{@loaded_plugin_id}", params, {:file => [filename, data]})
185
206
  if r["result"] == 'success'
data/lib/plugin_tool.rb CHANGED
@@ -17,7 +17,7 @@ end
17
17
  PluginTool.try_load_custom
18
18
 
19
19
  WORKSPACE_FILE = 'workspace.json'
20
- LOCAL_ONLY_COMMANDS = {"license-key" => true, "pack" => true, "check" => true, "new" => true, "list" => true}
20
+ LOCAL_ONLY_COMMANDS = {"license-key" => true, "pack" => true, "check" => true, "new" => true, "list" => true, "extract-text" => true}
21
21
  NO_DEPENDENCY_COMMANDS = {"reset-db" => true}.merge(LOCAL_ONLY_COMMANDS)
22
22
  NO_DEPENDENCY_COMMANDS.delete('list')
23
23
  PLUGIN_SEARCH_PATH = ['.']
@@ -144,7 +144,7 @@ unless LOCAL_ONLY_COMMANDS[PLUGIN_TOOL_COMMAND]
144
144
  PluginTool.setup_auth(options)
145
145
  PluginTool.check_for_certificate_file
146
146
  application_info = PluginTool.get_application_info
147
- puts "Remote application name: #{(application_info["name"]||'').to_s.strip.gsub(/\s+/,' ')}"
147
+ STDERR.puts "Remote application name: #{(application_info["name"]||'').to_s.strip.gsub(/\s+/,' ')}"
148
148
  end
149
149
 
150
150
  if PLUGIN_TOOL_COMMAND == 'devtools'
@@ -171,6 +171,18 @@ if PLUGIN_TOOL_COMMAND == 'template-debugging'
171
171
  end
172
172
  end
173
173
 
174
+ if PLUGIN_TOOL_COMMAND == 'i18n-debugging'
175
+ disable = (ARGV[0] == 'disable')
176
+ puts disable ? "Disabling i18n debugging..." : "Enabling i18n debugging..."
177
+ if 'OK' == PluginTool.post("/api/development-plugin-loader/i18n-debugging?enable=#{disable ? '0' : '1'}")
178
+ puts "Done"
179
+ exit 0
180
+ else
181
+ puts "Error updating server"
182
+ exit 1
183
+ end
184
+ end
185
+
174
186
  # If the user didn't requested a plugin, try to use the application info to select the root plugin
175
187
  if requested_plugins.empty? && application_info
176
188
  application_root_plugin = application_info["config"]["applicationRootPlugin"]
@@ -291,7 +303,7 @@ if PLUGIN_TOOL_COMMAND == 'list'
291
303
  exit 0
292
304
  end
293
305
 
294
- puts "#{plugins.length} plugin#{plugins.length != 1 ? 's' : ''}"
306
+ STDERR.puts "#{plugins.length} plugin#{plugins.length != 1 ? 's' : ''}"
295
307
 
296
308
  # Custom behaviour for this repo?
297
309
  PluginTool.custom_behaviour.start(plugins, PLUGIN_TOOL_COMMAND, options, LOCAL_ONLY_COMMANDS[PLUGIN_TOOL_COMMAND])
@@ -304,6 +316,9 @@ when 'pack'
304
316
  when 'check'
305
317
  PluginTool.check_plugins(plugins)
306
318
  exit 0
319
+ when 'extract-text'
320
+ PluginTool.i18n_extract_text(plugins)
321
+ exit 0
307
322
  end
308
323
 
309
324
  # Set up local plugin objects against server
data/lib/run.rb CHANGED
@@ -70,4 +70,5 @@ require "#{PLUGIN_TOOL_ROOT_DIR}/lib/watchers.rb"
70
70
  require "#{PLUGIN_TOOL_ROOT_DIR}/lib/minimise.rb"
71
71
  require "#{PLUGIN_TOOL_ROOT_DIR}/lib/check.rb"
72
72
  require "#{PLUGIN_TOOL_ROOT_DIR}/lib/custom.rb"
73
+ require "#{PLUGIN_TOOL_ROOT_DIR}/lib/i18n_extract_text.rb"
73
74
  require "#{PLUGIN_TOOL_ROOT_DIR}/lib/plugin_tool.rb"
data/lib/server.rb CHANGED
@@ -50,6 +50,7 @@ module PluginTool
50
50
  http.use_ssl = true
51
51
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER
52
52
  http.cert_store = ssl_ca
53
+ http.read_timeout = 3600 # 1 hour, in case a test runs for a very long time
53
54
  http.start
54
55
  http
55
56
  end
data/lib/usage.txt CHANGED
@@ -68,6 +68,10 @@ Commands:
68
68
  Enable or disable template debugging, including adding comments in generated HTML
69
69
  to indicate which templates were used.
70
70
 
71
+ i18n-debugging [disable]
72
+ Enable or disable internationalisation debugging, including indicating which text
73
+ in the user interface is translated.
74
+
71
75
  auth [SERVER]
72
76
  Authorise with server. SERVER can optionally include a non-default port number.
73
77
 
@@ -93,6 +97,10 @@ Commands:
93
97
  check
94
98
  Perform checks on the plugin as a quick test before it's submitted for review.
95
99
 
100
+ extract-text
101
+ Extract translatable text from templates, and attempt to extract text from JavaScript
102
+ files, and output a JSON data structure suitable for translation.
103
+
96
104
  license-key <application-id>
97
105
  Generate a license key to allow plugin installation by a client. The numeric
98
106
  application ID is displayed during plugin installation.
data/lib/version.txt CHANGED
@@ -1 +1 @@
1
- ed77bab
1
+ 8864920
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haplo
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.2
4
+ version: 2.5.2
5
5
  platform: java
6
6
  authors:
7
7
  - Haplo Services
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-21 00:00:00.000000000 Z
11
+ date: 2021-05-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Development tools for developing Haplo plugins, see https://haplo.org
14
14
  email: client.services@haplo-services.com
@@ -27,6 +27,7 @@ files:
27
27
  - lib/haplo-templates.jar
28
28
  - lib/hmac.rb
29
29
  - lib/hsvt_parser_config.rb
30
+ - lib/i18n_extract_text.rb
30
31
  - lib/js.jar
31
32
  - lib/js_min.js
32
33
  - lib/js_syntax_test.js