ymdp 0.1.10 → 0.1.11
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/Gemfile +8 -1
- data/History.txt +13 -2
- data/Rakefile +7 -0
- data/VERSION +1 -1
- data/features/data/app/assets/yrb/en-US/keys_en-US.pres +1 -0
- data/features/data/app/javascripts/application.js +7 -0
- data/features/data/app/stylesheets/application.css +3 -0
- data/features/data/app/views/layouts/application.html.haml +25 -0
- data/features/data/app/views/page.html.haml +2 -0
- data/{spec → features}/data/config/config.yml +5 -6
- data/features/data/config/content.yml +2 -0
- data/features/data/config/jslint.js +1 -0
- data/features/data/config/servers.yml +10 -0
- data/features/step_definitions/ymdp_steps.rb +54 -0
- data/features/support/env.rb +40 -0
- data/features/ymdp.feature +61 -0
- data/lib/ymdp.rb +7 -12
- data/lib/ymdp/base.rb +16 -65
- data/lib/ymdp/commands/generate.rb +2 -4
- data/lib/ymdp/compiler/base.rb +10 -8
- data/lib/ymdp/compiler/domains.rb +2 -1
- data/lib/ymdp/compiler/template.rb +29 -18
- data/lib/ymdp/{processor → compressor}/compressor.rb +6 -1
- data/{spec/data/script → lib/ymdp/compressor}/yuicompressor-2.4.2.jar +0 -0
- data/lib/ymdp/configuration/config.rb +3 -4
- data/lib/ymdp/configuration/constants.rb +22 -19
- data/lib/ymdp/tasks/ymdp.rake +0 -2
- data/{spec/data/script → lib/ymdp/validator}/jslint.js +0 -0
- data/lib/ymdp/{processor → validator}/validator.rb +30 -38
- data/lib/ymdp/{application.rb → view/application.rb} +0 -0
- data/lib/ymdp/{application_view.rb → view/application_view.rb} +4 -4
- data/lib/ymdp/{asset_tag_helper.rb → view/asset_tag_helper.rb} +0 -0
- data/lib/ymdp/{tag_helper.rb → view/tag_helper.rb} +0 -0
- data/spec/application_spec.rb +2 -0
- data/spec/application_view_spec.rb +6 -6
- data/spec/compiler_template_spec.rb +4 -4
- data/spec/compressor_spec.rb +11 -7
- data/spec/configuration_spec.rb +3 -0
- data/spec/default_settings.rb +1 -1
- data/spec/domains_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/stubs.rb +4 -1
- data/spec/validator_spec.rb +45 -40
- data/spec/ymdp_base_spec.rb +10 -7
- data/ymdp.gemspec +25 -76
- metadata +32 -76
- data/lib/ymdp/processor/form_post.rb +0 -62
- data/lib/ymdp/processor/w3c.rb +0 -24
- data/spec/data/Rakefile +0 -3
- data/spec/data/VERSION +0 -1
- data/spec/data/app/.gitignore +0 -1
- data/spec/data/app/assets/images/lightbox/lightbox_bg.png +0 -0
- data/spec/data/app/assets/javascripts/OpenMailIntl.js +0 -291
- data/spec/data/app/assets/javascripts/controls.js +0 -965
- data/spec/data/app/assets/javascripts/date.js +0 -104
- data/spec/data/app/assets/javascripts/dragdrop.js +0 -974
- data/spec/data/app/assets/javascripts/effects.js +0 -1123
- data/spec/data/app/assets/javascripts/lowpro.js +0 -320
- data/spec/data/app/assets/javascripts/prototype.js +0 -4874
- data/spec/data/app/assets/javascripts/scriptaculous.js +0 -68
- data/spec/data/app/assets/yrb/en-US/application_en-US.pres +0 -7
- data/spec/data/app/helpers/application_helper.rb +0 -3
- data/spec/data/app/javascripts/application.js +0 -580
- data/spec/data/app/javascripts/debug.js +0 -138
- data/spec/data/app/javascripts/flash.js +0 -96
- data/spec/data/app/javascripts/header.js +0 -13
- data/spec/data/app/javascripts/help.js +0 -76
- data/spec/data/app/javascripts/i18n.js +0 -235
- data/spec/data/app/javascripts/launcher.js +0 -159
- data/spec/data/app/javascripts/logger.js +0 -61
- data/spec/data/app/javascripts/tag_helper.js +0 -178
- data/spec/data/app/stylesheets/application.css +0 -0
- data/spec/data/app/stylesheets/ie.css +0 -0
- data/spec/data/app/stylesheets/ie6.css +0 -0
- data/spec/data/app/stylesheets/ie7.css +0 -0
- data/spec/data/app/stylesheets/ie8.css +0 -0
- data/spec/data/app/stylesheets/lightbox.css +0 -30
- data/spec/data/app/stylesheets/non_ie.css +0 -0
- data/spec/data/app/views/layouts/application.html.haml +0 -37
- data/spec/data/app/views/page.html.haml +0 -1
- data/spec/data/app/views/shared/_error.html.haml +0 -8
- data/spec/data/app/views/shared/_flash.html.haml +0 -2
- data/spec/data/app/views/shared/_javascripts.html.haml +0 -22
- data/spec/data/app/views/shared/_loading.html.haml +0 -13
- data/spec/data/app/views/shared/_stylesheets.html.haml +0 -23
- data/spec/data/config/categories.yml +0 -6
- data/spec/data/config/config.yml.example +0 -30
- data/spec/data/config/constants.rb +0 -52
- data/spec/data/config/content.yml +0 -2
- data/spec/data/config/servers.yml +0 -10
- data/spec/data/config/servers.yml.example +0 -10
- data/spec/data/lib/init.rb +0 -13
- data/spec/data/lib/tasks/environment.rake +0 -4
- data/spec/data/lib/tasks/keys.rake +0 -3
- data/spec/data/lib/tasks/setup.rake +0 -13
- data/spec/data/lib/tasks/ymdp.rake +0 -4
- data/spec/data/script/build +0 -9
- data/spec/data/script/config +0 -13
- data/spec/data/script/destroy +0 -18
- data/spec/data/script/generate +0 -4
- data/spec/data/script/gitrm +0 -17
- data/spec/data/script/growl +0 -6
- data/spec/data/script/images +0 -48
- data/spec/data/script/langs +0 -29
- data/spec/data/script/translate +0 -5
- data/spec/data/script/ymdt +0 -1895
- data/spec/data/script/ymdt.old +0 -1890
- data/test.rb +0 -46
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ymdp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Coleman
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-25 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -162,6 +162,16 @@ dependencies:
|
|
162
162
|
- !ruby/object:Gem::Version
|
163
163
|
version: "0"
|
164
164
|
version:
|
165
|
+
- !ruby/object:Gem::Dependency
|
166
|
+
name: w3c_validators
|
167
|
+
type: :runtime
|
168
|
+
version_requirement:
|
169
|
+
version_requirements: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: "0"
|
174
|
+
version:
|
165
175
|
description: Framework for developing applications in the Yahoo! Mail Development Platform.
|
166
176
|
email: progressions@gmail.com
|
167
177
|
executables: []
|
@@ -181,10 +191,19 @@ files:
|
|
181
191
|
- README.rdoc
|
182
192
|
- Rakefile
|
183
193
|
- VERSION
|
194
|
+
- features/data/app/assets/yrb/en-US/keys_en-US.pres
|
195
|
+
- features/data/app/javascripts/application.js
|
196
|
+
- features/data/app/stylesheets/application.css
|
197
|
+
- features/data/app/views/layouts/application.html.haml
|
198
|
+
- features/data/app/views/page.html.haml
|
199
|
+
- features/data/config/config.yml
|
200
|
+
- features/data/config/content.yml
|
201
|
+
- features/data/config/jslint.js
|
202
|
+
- features/data/config/servers.yml
|
203
|
+
- features/step_definitions/ymdp_steps.rb
|
204
|
+
- features/support/env.rb
|
205
|
+
- features/ymdp.feature
|
184
206
|
- lib/ymdp.rb
|
185
|
-
- lib/ymdp/application.rb
|
186
|
-
- lib/ymdp/application_view.rb
|
187
|
-
- lib/ymdp/asset_tag_helper.rb
|
188
207
|
- lib/ymdp/base.rb
|
189
208
|
- lib/ymdp/commands/build.rb
|
190
209
|
- lib/ymdp/commands/generate.rb
|
@@ -193,88 +212,29 @@ files:
|
|
193
212
|
- lib/ymdp/compiler/git_helper.rb
|
194
213
|
- lib/ymdp/compiler/options.rb
|
195
214
|
- lib/ymdp/compiler/template.rb
|
215
|
+
- lib/ymdp/compressor/compressor.rb
|
216
|
+
- lib/ymdp/compressor/yuicompressor-2.4.2.jar
|
196
217
|
- lib/ymdp/configuration/config.rb
|
197
218
|
- lib/ymdp/configuration/constants.rb
|
198
219
|
- lib/ymdp/generator/templates/javascript.js
|
199
220
|
- lib/ymdp/generator/templates/stylesheet.css
|
200
221
|
- lib/ymdp/generator/templates/translation.pres
|
201
222
|
- lib/ymdp/generator/templates/view.html.haml
|
202
|
-
- lib/ymdp/processor/compressor.rb
|
203
|
-
- lib/ymdp/processor/form_post.rb
|
204
|
-
- lib/ymdp/processor/validator.rb
|
205
|
-
- lib/ymdp/processor/w3c.rb
|
206
223
|
- lib/ymdp/support/file.rb
|
207
|
-
- lib/ymdp/tag_helper.rb
|
208
224
|
- lib/ymdp/tasks/keys.rake
|
209
225
|
- lib/ymdp/tasks/ymdp.rake
|
226
|
+
- lib/ymdp/validator/jslint.js
|
227
|
+
- lib/ymdp/validator/validator.rb
|
228
|
+
- lib/ymdp/view/application.rb
|
229
|
+
- lib/ymdp/view/application_view.rb
|
230
|
+
- lib/ymdp/view/asset_tag_helper.rb
|
231
|
+
- lib/ymdp/view/tag_helper.rb
|
210
232
|
- spec/application_spec.rb
|
211
233
|
- spec/application_view_spec.rb
|
212
234
|
- spec/compiler_spec.rb
|
213
235
|
- spec/compiler_template_spec.rb
|
214
236
|
- spec/compressor_spec.rb
|
215
237
|
- spec/configuration_spec.rb
|
216
|
-
- spec/data/Rakefile
|
217
|
-
- spec/data/VERSION
|
218
|
-
- spec/data/app/.gitignore
|
219
|
-
- spec/data/app/assets/images/lightbox/lightbox_bg.png
|
220
|
-
- spec/data/app/assets/javascripts/OpenMailIntl.js
|
221
|
-
- spec/data/app/assets/javascripts/controls.js
|
222
|
-
- spec/data/app/assets/javascripts/date.js
|
223
|
-
- spec/data/app/assets/javascripts/dragdrop.js
|
224
|
-
- spec/data/app/assets/javascripts/effects.js
|
225
|
-
- spec/data/app/assets/javascripts/lowpro.js
|
226
|
-
- spec/data/app/assets/javascripts/prototype.js
|
227
|
-
- spec/data/app/assets/javascripts/scriptaculous.js
|
228
|
-
- spec/data/app/assets/yrb/en-US/application_en-US.pres
|
229
|
-
- spec/data/app/helpers/application_helper.rb
|
230
|
-
- spec/data/app/javascripts/application.js
|
231
|
-
- spec/data/app/javascripts/debug.js
|
232
|
-
- spec/data/app/javascripts/flash.js
|
233
|
-
- spec/data/app/javascripts/header.js
|
234
|
-
- spec/data/app/javascripts/help.js
|
235
|
-
- spec/data/app/javascripts/i18n.js
|
236
|
-
- spec/data/app/javascripts/launcher.js
|
237
|
-
- spec/data/app/javascripts/logger.js
|
238
|
-
- spec/data/app/javascripts/tag_helper.js
|
239
|
-
- spec/data/app/stylesheets/application.css
|
240
|
-
- spec/data/app/stylesheets/ie.css
|
241
|
-
- spec/data/app/stylesheets/ie6.css
|
242
|
-
- spec/data/app/stylesheets/ie7.css
|
243
|
-
- spec/data/app/stylesheets/ie8.css
|
244
|
-
- spec/data/app/stylesheets/lightbox.css
|
245
|
-
- spec/data/app/stylesheets/non_ie.css
|
246
|
-
- spec/data/app/views/layouts/application.html.haml
|
247
|
-
- spec/data/app/views/page.html.haml
|
248
|
-
- spec/data/app/views/shared/_error.html.haml
|
249
|
-
- spec/data/app/views/shared/_flash.html.haml
|
250
|
-
- spec/data/app/views/shared/_javascripts.html.haml
|
251
|
-
- spec/data/app/views/shared/_loading.html.haml
|
252
|
-
- spec/data/app/views/shared/_stylesheets.html.haml
|
253
|
-
- spec/data/config/categories.yml
|
254
|
-
- spec/data/config/config.yml
|
255
|
-
- spec/data/config/config.yml.example
|
256
|
-
- spec/data/config/constants.rb
|
257
|
-
- spec/data/config/content.yml
|
258
|
-
- spec/data/config/servers.yml
|
259
|
-
- spec/data/config/servers.yml.example
|
260
|
-
- spec/data/lib/init.rb
|
261
|
-
- spec/data/lib/tasks/environment.rake
|
262
|
-
- spec/data/lib/tasks/keys.rake
|
263
|
-
- spec/data/lib/tasks/setup.rake
|
264
|
-
- spec/data/lib/tasks/ymdp.rake
|
265
|
-
- spec/data/script/build
|
266
|
-
- spec/data/script/config
|
267
|
-
- spec/data/script/destroy
|
268
|
-
- spec/data/script/generate
|
269
|
-
- spec/data/script/gitrm
|
270
|
-
- spec/data/script/growl
|
271
|
-
- spec/data/script/images
|
272
|
-
- spec/data/script/jslint.js
|
273
|
-
- spec/data/script/langs
|
274
|
-
- spec/data/script/translate
|
275
|
-
- spec/data/script/ymdt
|
276
|
-
- spec/data/script/ymdt.old
|
277
|
-
- spec/data/script/yuicompressor-2.4.2.jar
|
278
238
|
- spec/default_settings.rb
|
279
239
|
- spec/domains_spec.rb
|
280
240
|
- spec/file_spec.rb
|
@@ -285,7 +245,6 @@ files:
|
|
285
245
|
- spec/validator_spec.rb
|
286
246
|
- spec/ymdp_base_spec.rb
|
287
247
|
- spec/ymdp_spec.rb
|
288
|
-
- test.rb
|
289
248
|
- ymdp.gemspec
|
290
249
|
has_rdoc: true
|
291
250
|
homepage: http://github.com/progressions/ymdp
|
@@ -322,9 +281,6 @@ test_files:
|
|
322
281
|
- spec/compiler_template_spec.rb
|
323
282
|
- spec/compressor_spec.rb
|
324
283
|
- spec/configuration_spec.rb
|
325
|
-
- spec/data/app/helpers/application_helper.rb
|
326
|
-
- spec/data/config/constants.rb
|
327
|
-
- spec/data/lib/init.rb
|
328
284
|
- spec/default_settings.rb
|
329
285
|
- spec/domains_spec.rb
|
330
286
|
- spec/file_spec.rb
|
@@ -1,62 +0,0 @@
|
|
1
|
-
# from http://devlicio.us/blogs/sergio_pereira/archive/2008/04/02/xhtml-validation-script-using-ruby.aspx
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'mime/types'
|
5
|
-
require 'net/http'
|
6
|
-
begin
|
7
|
-
require 'CGI'
|
8
|
-
rescue StandardError => e
|
9
|
-
# puts e.message
|
10
|
-
end
|
11
|
-
|
12
|
-
class FormField
|
13
|
-
attr_accessor :name, :value
|
14
|
-
def initialize( name, value )
|
15
|
-
@name = name
|
16
|
-
@value = value
|
17
|
-
end
|
18
|
-
|
19
|
-
def to_form_data
|
20
|
-
field = CGI::escape(@name)
|
21
|
-
"Content-Disposition: form-data; name=\"#{field}\"" +
|
22
|
-
"\r\n\r\n#{@value}\r\n"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
class FileField
|
27
|
-
attr_accessor :name, :path, :content
|
28
|
-
def initialize( name, path, content )
|
29
|
-
@name = name
|
30
|
-
@path = "#{path}.html"
|
31
|
-
@content = content
|
32
|
-
end
|
33
|
-
|
34
|
-
def to_form_data
|
35
|
-
"Content-Disposition: form-data; " +
|
36
|
-
"name=\"#{CGI::escape(@name)}\"; " +
|
37
|
-
"filename=\"#{@path}\"\r\n" +
|
38
|
-
"Content-Transfer-Encoding: binary\r\n" +
|
39
|
-
"Content-Type: #{MIME::Types.type_for(@path)}" +
|
40
|
-
"\r\n\r\n#{@content}\r\n"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
class MultipartPost
|
45
|
-
SEPARATOR = 'willvalidate-aaaaaabbbb0000'
|
46
|
-
REQ_HEADER = {
|
47
|
-
"Content-type" => "multipart/form-data, boundary=#{SEPARATOR} "
|
48
|
-
}
|
49
|
-
|
50
|
-
def self.build_form_data ( form_fields )
|
51
|
-
fields = []
|
52
|
-
form_fields.each do |key, value|
|
53
|
-
if value.instance_of?(File)
|
54
|
-
fields << FileField.new(key.to_s, value.path, value.read)
|
55
|
-
else
|
56
|
-
fields << FormField.new(key.to_s, value)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
fields.collect {|f| "--#{SEPARATOR}\r\n#{f.to_form_data}" }.join("") +
|
60
|
-
"--#{SEPARATOR}--"
|
61
|
-
end
|
62
|
-
end
|
data/lib/ymdp/processor/w3c.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
class W3CPoster
|
2
|
-
def self.post_file_to_w3c_validator(file_path, doc_type)
|
3
|
-
query = MultipartPost.build_form_data(
|
4
|
-
:uploaded_file => File.new(file_path, 'r'),
|
5
|
-
:charset => '(detect automatically)',
|
6
|
-
:doctype => doc_type,
|
7
|
-
:group => '1'
|
8
|
-
)
|
9
|
-
|
10
|
-
Net::HTTP.start('validator.w3.org') do |http|
|
11
|
-
http.post2("/check", query, MultipartPost::REQ_HEADER)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.valid_response?(w3c_response)
|
16
|
-
html = w3c_response.read_body
|
17
|
-
html.include? "[Valid]"
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.w3c_valid?(file_path)
|
21
|
-
resp = post_file_to_w3c_validator(file_path, 'HTML 4.01 Strict')
|
22
|
-
valid_response?(resp)
|
23
|
-
end
|
24
|
-
end
|
data/spec/data/Rakefile
DELETED
data/spec/data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
6.0.0 Felucia
|
data/spec/data/app/.gitignore
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
assets.zip
|
Binary file
|
@@ -1,291 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* The OpenMailIntl class provides minimal internationalization
|
3
|
-
* support for OpenMail.
|
4
|
-
* @module openmailintl
|
5
|
-
*/
|
6
|
-
|
7
|
-
/**
|
8
|
-
* The OpenMailIntl class provides minimal internationalization
|
9
|
-
* support for OpenMail.
|
10
|
-
* @class OpenMailIntl
|
11
|
-
*/
|
12
|
-
|
13
|
-
/*global window, YAHOO, ActiveXObject, XMLHttpRequest */
|
14
|
-
|
15
|
-
var OpenMailIntl = function () {
|
16
|
-
|
17
|
-
var openmailintl = {};
|
18
|
-
|
19
|
-
/**
|
20
|
-
* Returns the user's preferred languages as a list of
|
21
|
-
* RFC 4646 language tags in decreasing priority order.
|
22
|
-
* @method getPreferredLanguages
|
23
|
-
* @private
|
24
|
-
* @return {String[]} A list of RFC 4646 language tags.
|
25
|
-
*/
|
26
|
-
var getPreferredLanguages = function () {
|
27
|
-
// this is a stub until OpenMail can synchronously provide
|
28
|
-
// a complete and accurate language list
|
29
|
-
var intl, match;
|
30
|
-
intl = "us";
|
31
|
-
match = window.location.href.match(/[\?&]\.intl=([a-z0-9]{2})/);
|
32
|
-
if (match) {
|
33
|
-
intl = match[1];
|
34
|
-
}
|
35
|
-
switch (intl) {
|
36
|
-
// only support Mail INTLs
|
37
|
-
case "aa": return ["en-AA"];
|
38
|
-
case "ar": return ["es-AR"];
|
39
|
-
case "au": return ["en-AU"];
|
40
|
-
case "br": return ["pt-BR"];
|
41
|
-
case "ca": return ["en-CA"];
|
42
|
-
case "cf": return ["fr-CA"];
|
43
|
-
case "cl": return ["es-CL"];
|
44
|
-
case "cn": return ["zh-Hans-CN"];
|
45
|
-
case "co": return ["es-CO"];
|
46
|
-
case "de": return ["de-DE"];
|
47
|
-
case "dk": return ["da-DK"];
|
48
|
-
case "e1": return ["es-US"];
|
49
|
-
case "es": return ["es-ES"];
|
50
|
-
case "fr": return ["fr-FR"];
|
51
|
-
case "hk": return ["zh-Hant-HK"];
|
52
|
-
case "cn": return ["zh-Hant-CN"];
|
53
|
-
case "in": return ["en-IN"];
|
54
|
-
case "it": return ["it-IT"];
|
55
|
-
case "jp": return ["ja-JP"];
|
56
|
-
case "kr": return ["ko-KR"];
|
57
|
-
case "mx": return ["es-MX"];
|
58
|
-
case "my": return ["en-MY"];
|
59
|
-
case "nl": return ["nl-NL"];
|
60
|
-
case "no": return ["nb-NO"];
|
61
|
-
case "nz": return ["en-NZ"];
|
62
|
-
case "pe": return ["es-PE"];
|
63
|
-
case "ph": return ["en-PH"];
|
64
|
-
case "pl": return ["pl-PL"];
|
65
|
-
case "ru": return ["ru-RU"];
|
66
|
-
case "se": return ["sv-SE"];
|
67
|
-
case "sg": return ["en-SG"];
|
68
|
-
case "th": return ["th-TH"];
|
69
|
-
case "tr": return ["tr-TR"];
|
70
|
-
case "tw": return ["zh-Hant-TW"];
|
71
|
-
case "uk": return ["en-GB"];
|
72
|
-
case "us": return ["en-US"];
|
73
|
-
case "ve": return ["es-VE"];
|
74
|
-
case "vn": return ["vi-VN"];
|
75
|
-
case "id": return ["id-ID"];
|
76
|
-
default: return ["en-US"];
|
77
|
-
}
|
78
|
-
};
|
79
|
-
|
80
|
-
/**
|
81
|
-
* Returns the language among those available that
|
82
|
-
* best matches the user's preferences, using the Lookup
|
83
|
-
* algorithm of RFC 4647.
|
84
|
-
* If none of the available languages meets the user's preferences,
|
85
|
-
* then <code>availableLanguages[0]</code> is returned.
|
86
|
-
* @method findBestLanguage
|
87
|
-
* @param {String[]} availableLanguages The list of languages
|
88
|
-
* that the application supports, represented as RFC 4646 language
|
89
|
-
* tags.
|
90
|
-
* @return {String} The available language that best matches the
|
91
|
-
* user's preferences.
|
92
|
-
*/
|
93
|
-
openmailintl.findBestLanguage = function (availableLanguages) {
|
94
|
-
|
95
|
-
var preferencesList, i, language, normalized, result, index, normalization;
|
96
|
-
|
97
|
-
preferencesList = getPreferredLanguages();
|
98
|
-
|
99
|
-
// check whether the list of available languages
|
100
|
-
// contains language; if so return it
|
101
|
-
function scan(language) {
|
102
|
-
var i;
|
103
|
-
for (i = 0; i < availableLanguages.length; i += 1) {
|
104
|
-
if (language.toLowerCase() === availableLanguages[i].toLowerCase()) {
|
105
|
-
return availableLanguages[i];
|
106
|
-
}
|
107
|
-
}
|
108
|
-
}
|
109
|
-
|
110
|
-
normalization = {
|
111
|
-
"zh-hk": "zh-Hant-TW",
|
112
|
-
"zh-cn": "zh-Hant-CN",
|
113
|
-
"zh-tw": "zh-Hant-TW",
|
114
|
-
"zh": "zh-Hant-CN",
|
115
|
-
"hk": "zh-Hant-TW",
|
116
|
-
"en": "en-US",
|
117
|
-
"es": "es-ES",
|
118
|
-
"fr": "fr-FR",
|
119
|
-
"hi": "hi-IN",
|
120
|
-
"id": "id-ID",
|
121
|
-
"it": "it-IT",
|
122
|
-
"ja": "ja-JP",
|
123
|
-
"kr": "ko-KR",
|
124
|
-
"nb": "nb-NO",
|
125
|
-
"nl": "nl-NL",
|
126
|
-
"pl": "pl-PL",
|
127
|
-
"pt": "pt-BR",
|
128
|
-
"ru": "ru-RU",
|
129
|
-
"sv": "sv-SE",
|
130
|
-
"th": "th-TH",
|
131
|
-
"tr": "tr-TR",
|
132
|
-
"vi": "vi-VN",
|
133
|
-
"zh": "zh-Hans-CN",
|
134
|
-
"zh-cn": "zh-Hans-CN",
|
135
|
-
"zh-hk": "zh-Hant-HK",
|
136
|
-
"zh-tw": "zh-Hant-TW"
|
137
|
-
};
|
138
|
-
if (YAHOO.lang.isString(preferencesList)) {
|
139
|
-
preferencesList = preferencesList.split(/[, ]/);
|
140
|
-
}
|
141
|
-
for (i = 0; i < preferencesList.length; i += 1) {
|
142
|
-
language = preferencesList[i];
|
143
|
-
if (!language) {
|
144
|
-
continue;
|
145
|
-
}
|
146
|
-
normalized = normalization[language.toLowerCase()];
|
147
|
-
if (normalized) {
|
148
|
-
language = normalized;
|
149
|
-
}
|
150
|
-
// check the fallback sequence for one language
|
151
|
-
while (language.length > 0) {
|
152
|
-
result = scan(language);
|
153
|
-
if (result) {
|
154
|
-
return result;
|
155
|
-
} else {
|
156
|
-
index = language.lastIndexOf("-");
|
157
|
-
if (index >= 0) {
|
158
|
-
language = language.substring(0, index);
|
159
|
-
// one-character subtags get cut along with the following subtag
|
160
|
-
if (index >= 2 && language.charAt(index - 2) === "-") {
|
161
|
-
language = language.substring(0, index - 2);
|
162
|
-
}
|
163
|
-
} else {
|
164
|
-
// nothing available for this language
|
165
|
-
break;
|
166
|
-
}
|
167
|
-
}
|
168
|
-
}
|
169
|
-
}
|
170
|
-
|
171
|
-
// we use the first available language as the default
|
172
|
-
return availableLanguages[0];
|
173
|
-
};
|
174
|
-
|
175
|
-
|
176
|
-
var getFile = function (url) {
|
177
|
-
var XHR;
|
178
|
-
if (window.XMLHttpRequest) {
|
179
|
-
XHR = new XMLHttpRequest();
|
180
|
-
} else {
|
181
|
-
XHR = new ActiveXObject("Microsoft.XMLHTTP");
|
182
|
-
}
|
183
|
-
if (XHR) {
|
184
|
-
XHR.open("GET", url, false);
|
185
|
-
XHR.send(null);
|
186
|
-
if (XHR.status === 200) {
|
187
|
-
return XHR.responseText;
|
188
|
-
}
|
189
|
-
}
|
190
|
-
};
|
191
|
-
|
192
|
-
/**
|
193
|
-
* Retrieves a language specific JSON file that's part of the application's assets,
|
194
|
-
* and returns the decoded JSON object.
|
195
|
-
* The method first looks for the asset with the name <code>assetPath + baseName + "_" + language + ".json"</code>.
|
196
|
-
* If that asset doesn't exist, it looks for the asset with the name <code>assetPath + baseName + ".json"</code>.
|
197
|
-
* @method getResources
|
198
|
-
* @param {String} assetPath The path to the assets of the application.
|
199
|
-
* @param {String} baseName The base name of a resource bundle.
|
200
|
-
* @param {String} language The language for which resources are needed, as an RFC 4646 language tag.
|
201
|
-
* @return {Object} The object decoded from the JSON file found.
|
202
|
-
*/
|
203
|
-
openmailintl.getResources = function (assetPath, baseName, language) {
|
204
|
-
var url, contents;
|
205
|
-
|
206
|
-
if (assetPath.charAt(assetPath.length - 1) !== "/") {
|
207
|
-
assetPath += "/";
|
208
|
-
}
|
209
|
-
if (language) {
|
210
|
-
url = assetPath + baseName + "_" + language + ".json";
|
211
|
-
} else {
|
212
|
-
url = assetPath + baseName + ".json";
|
213
|
-
}
|
214
|
-
|
215
|
-
contents = getFile(url);
|
216
|
-
if (contents) {
|
217
|
-
try {
|
218
|
-
return YAHOO.lang.JSON.parse(contents);
|
219
|
-
} catch (x) {
|
220
|
-
}
|
221
|
-
}
|
222
|
-
if (language) {
|
223
|
-
return this.getResources(assetPath, baseName);
|
224
|
-
} else {
|
225
|
-
throw new Error("bundle " + baseName + " for language " + language + " not found.");
|
226
|
-
}
|
227
|
-
};
|
228
|
-
|
229
|
-
/**
|
230
|
-
* Formats a string by substituting parameters into the pattern.
|
231
|
-
* The pattern syntax is similar to that of the Java
|
232
|
-
* <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/text/MessageFormat.html">MessageFormat class</a>,
|
233
|
-
* but currently only the following format elements are supported:
|
234
|
-
* <ul>
|
235
|
-
* <li>{ <i>ArgumentIndex</i> }
|
236
|
-
* <li>{ <i>ArgumentIndex</i> , number }
|
237
|
-
* <li>{ <i>ArgumentIndex</i> , date }
|
238
|
-
* </ul>
|
239
|
-
* Quote characters do not escape braces; if you want to use
|
240
|
-
* a literal brace, write it as &#x007b; or &#x007d;.
|
241
|
-
* @method formatMessage
|
242
|
-
* @param {String} pattern The pattern string into which the arguments are inserted.
|
243
|
-
* @param {Object[]} arguments The objects to insert into the pattern string.
|
244
|
-
* @param {String} language The language for which arguments such as numbers and dates
|
245
|
-
* should be formatted.
|
246
|
-
* @return {String} The pattern string with substituted parameters.
|
247
|
-
*/
|
248
|
-
openmailintl.formatMessage = function (pattern, args, language) {
|
249
|
-
var i, j, k, token, key, value, meta;
|
250
|
-
|
251
|
-
for (;;) {
|
252
|
-
i = pattern.lastIndexOf('{');
|
253
|
-
if (i < 0) {
|
254
|
-
break;
|
255
|
-
}
|
256
|
-
j = pattern.indexOf('}', i);
|
257
|
-
if (i + 1 >= j) {
|
258
|
-
break;
|
259
|
-
}
|
260
|
-
|
261
|
-
// extract format element information
|
262
|
-
token = pattern.substring(i + 1, j);
|
263
|
-
key = token;
|
264
|
-
meta = null;
|
265
|
-
k = key.indexOf(',');
|
266
|
-
if (k > -1) {
|
267
|
-
meta = key.substring(k + 1);
|
268
|
-
key = key.substring(0, k);
|
269
|
-
}
|
270
|
-
|
271
|
-
// lookup the value
|
272
|
-
value = args[key];
|
273
|
-
|
274
|
-
if (meta !== null) {
|
275
|
-
if (meta.indexOf("date") === 0 && value instanceof Date) {
|
276
|
-
value = value.toLocaleString();
|
277
|
-
} else if (meta.indexOf("number") === 0 && typeof value === "number") {
|
278
|
-
value = value.toLocaleString();
|
279
|
-
}
|
280
|
-
}
|
281
|
-
|
282
|
-
pattern = pattern.substring(0, i) + value + pattern.substring(j + 1);
|
283
|
-
}
|
284
|
-
|
285
|
-
return pattern;
|
286
|
-
};
|
287
|
-
|
288
|
-
return openmailintl;
|
289
|
-
|
290
|
-
}();
|
291
|
-
|