i18n-js 3.9.2 → 4.0.0.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/CODEOWNERS +4 -0
- data/.github/FUNDING.yml +1 -1
- data/.github/ISSUE_TEMPLATE/bug_report.md +41 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +38 -0
- data/.github/dependabot.yml +15 -0
- data/.github/workflows/ruby-tests.yml +61 -0
- data/.gitignore +11 -7
- data/.rubocop.yml +12 -0
- data/CHANGELOG.md +12 -571
- data/CODE_OF_CONDUCT.md +74 -0
- data/CONTRIBUTING.md +79 -0
- data/Gemfile +3 -0
- data/LICENSE.md +20 -0
- data/README.md +86 -1043
- data/Rakefile +10 -20
- data/exe/i18n +5 -0
- data/i18n-js.gemspec +47 -29
- data/lib/guard/i18n-js/templates/Guardfile +10 -0
- data/lib/guard/i18n-js/version.rb +13 -0
- data/lib/guard/i18n-js.rb +78 -0
- data/lib/i18n-js/cli/command.rb +43 -0
- data/lib/i18n-js/cli/export_command.rb +108 -0
- data/lib/i18n-js/cli/init_command.rb +50 -0
- data/lib/i18n-js/cli/ui.rb +30 -0
- data/lib/i18n-js/cli/version_command.rb +18 -0
- data/lib/i18n-js/cli.rb +47 -0
- data/lib/i18n-js/listen.rb +80 -0
- data/lib/i18n-js/schema.rb +92 -0
- data/lib/i18n-js/version.rb +5 -0
- data/lib/i18n-js.rb +66 -1
- metadata +125 -201
- data/.editorconfig +0 -24
- data/.github/workflows/tests.yaml +0 -106
- data/.npmignore +0 -27
- data/Appraisals +0 -52
- data/app/assets/javascripts/i18n/filtered.js.erb +0 -23
- data/app/assets/javascripts/i18n/shims.js +0 -240
- data/app/assets/javascripts/i18n/translations.js +0 -3
- data/app/assets/javascripts/i18n.js +0 -1095
- data/gemfiles/i18n_0_6.gemfile +0 -7
- data/gemfiles/i18n_0_7.gemfile +0 -7
- data/gemfiles/i18n_0_8.gemfile +0 -7
- data/gemfiles/i18n_0_9.gemfile +0 -7
- data/gemfiles/i18n_1_0.gemfile +0 -7
- data/gemfiles/i18n_1_1.gemfile +0 -7
- data/gemfiles/i18n_1_10.gemfile +0 -7
- data/gemfiles/i18n_1_2.gemfile +0 -7
- data/gemfiles/i18n_1_3.gemfile +0 -7
- data/gemfiles/i18n_1_4.gemfile +0 -7
- data/gemfiles/i18n_1_5.gemfile +0 -7
- data/gemfiles/i18n_1_6.gemfile +0 -7
- data/gemfiles/i18n_1_7.gemfile +0 -7
- data/gemfiles/i18n_1_8.gemfile +0 -7
- data/gemfiles/i18n_1_9.gemfile +0 -7
- data/i18njs.png +0 -0
- data/lib/i18n/js/dependencies.rb +0 -67
- data/lib/i18n/js/engine.rb +0 -87
- data/lib/i18n/js/fallback_locales.rb +0 -70
- data/lib/i18n/js/formatters/base.rb +0 -25
- data/lib/i18n/js/formatters/js.rb +0 -39
- data/lib/i18n/js/formatters/json.rb +0 -13
- data/lib/i18n/js/middleware.rb +0 -82
- data/lib/i18n/js/private/config_store.rb +0 -31
- data/lib/i18n/js/private/hash_with_symbol_keys.rb +0 -36
- data/lib/i18n/js/segment.rb +0 -81
- data/lib/i18n/js/utils.rb +0 -91
- data/lib/i18n/js/version.rb +0 -7
- data/lib/i18n/js.rb +0 -274
- data/lib/rails/generators/i18n/js/config/config_generator.rb +0 -19
- data/lib/rails/generators/i18n/js/config/templates/i18n-js.yml +0 -27
- data/lib/tasks/export.rake +0 -8
- data/package.json +0 -25
- data/spec/fixtures/custom_path.yml +0 -5
- data/spec/fixtures/default.yml +0 -5
- data/spec/fixtures/erb.yml +0 -5
- data/spec/fixtures/except_condition.yml +0 -7
- data/spec/fixtures/js_available_locales_custom.yml +0 -1
- data/spec/fixtures/js_export_dir_custom.yml +0 -7
- data/spec/fixtures/js_export_dir_none.yml +0 -6
- data/spec/fixtures/js_extend_parent.yml +0 -6
- data/spec/fixtures/js_extend_segment.yml +0 -6
- data/spec/fixtures/js_file_per_locale.yml +0 -7
- data/spec/fixtures/js_file_per_locale_with_fallbacks_as_default_locale_symbol.yml +0 -4
- data/spec/fixtures/js_file_per_locale_with_fallbacks_as_hash.yml +0 -6
- data/spec/fixtures/js_file_per_locale_with_fallbacks_as_locale.yml +0 -4
- data/spec/fixtures/js_file_per_locale_with_fallbacks_as_locale_without_fallback_translations.yml +0 -4
- data/spec/fixtures/js_file_per_locale_with_fallbacks_enabled.yml +0 -4
- data/spec/fixtures/js_file_per_locale_without_fallbacks.yml +0 -4
- data/spec/fixtures/js_file_with_namespace_prefix_and_pretty_print.yml +0 -9
- data/spec/fixtures/js_sort_translation_keys_false.yml +0 -6
- data/spec/fixtures/js_sort_translation_keys_true.yml +0 -6
- data/spec/fixtures/json_only.yml +0 -18
- data/spec/fixtures/locales.yml +0 -133
- data/spec/fixtures/merge_plurals.yml +0 -6
- data/spec/fixtures/merge_plurals_with_no_overrides.yml +0 -4
- data/spec/fixtures/merge_plurals_with_partial_overrides.yml +0 -4
- data/spec/fixtures/millions.yml +0 -4
- data/spec/fixtures/multiple_conditions.yml +0 -7
- data/spec/fixtures/multiple_conditions_per_locale.yml +0 -7
- data/spec/fixtures/multiple_files.yml +0 -7
- data/spec/fixtures/no_config.yml +0 -2
- data/spec/fixtures/no_scope.yml +0 -4
- data/spec/fixtures/simple_scope.yml +0 -5
- data/spec/js/currency.spec.js +0 -62
- data/spec/js/current_locale.spec.js +0 -19
- data/spec/js/dates.spec.js +0 -276
- data/spec/js/defaults.spec.js +0 -31
- data/spec/js/extend.spec.js +0 -110
- data/spec/js/interpolation.spec.js +0 -124
- data/spec/js/jasmine/MIT.LICENSE +0 -20
- data/spec/js/jasmine/jasmine-html.js +0 -190
- data/spec/js/jasmine/jasmine.css +0 -166
- data/spec/js/jasmine/jasmine.js +0 -2476
- data/spec/js/jasmine/jasmine_favicon.png +0 -0
- data/spec/js/json_parsable.spec.js +0 -14
- data/spec/js/locales.spec.js +0 -31
- data/spec/js/localization.spec.js +0 -78
- data/spec/js/numbers.spec.js +0 -174
- data/spec/js/placeholder.spec.js +0 -24
- data/spec/js/pluralization.spec.js +0 -228
- data/spec/js/prepare_options.spec.js +0 -41
- data/spec/js/require.js +0 -2083
- data/spec/js/specs.html +0 -49
- data/spec/js/specs_requirejs.html +0 -72
- data/spec/js/translate.spec.js +0 -304
- data/spec/js/translations.js +0 -188
- data/spec/js/utility_functions.spec.js +0 -20
- data/spec/ruby/i18n/js/fallback_locales_spec.rb +0 -84
- data/spec/ruby/i18n/js/segment_spec.rb +0 -286
- data/spec/ruby/i18n/js/utils_spec.rb +0 -138
- data/spec/ruby/i18n/js_spec.rb +0 -797
- data/spec/spec_helper.rb +0 -80
- data/yarn.lock +0 -138
@@ -1,106 +0,0 @@
|
|
1
|
-
name: Tests
|
2
|
-
|
3
|
-
on:
|
4
|
-
pull_request:
|
5
|
-
branches:
|
6
|
-
- main
|
7
|
-
- v3
|
8
|
-
paths-ignore:
|
9
|
-
- 'README.md'
|
10
|
-
push:
|
11
|
-
branches:
|
12
|
-
- main
|
13
|
-
- v3
|
14
|
-
paths-ignore:
|
15
|
-
- 'README.md'
|
16
|
-
|
17
|
-
jobs:
|
18
|
-
ruby_unit_tests:
|
19
|
-
name: Ruby Unit Tests
|
20
|
-
if: "contains(github.event.commits[0].message, '[ci skip]') == false"
|
21
|
-
strategy:
|
22
|
-
fail-fast: false
|
23
|
-
matrix:
|
24
|
-
os:
|
25
|
-
- ubuntu
|
26
|
-
ruby:
|
27
|
-
- 2.4
|
28
|
-
- 2.5
|
29
|
-
- 2.6
|
30
|
-
- 2.7
|
31
|
-
- '3.0'
|
32
|
-
- 3.1
|
33
|
-
gemfile:
|
34
|
-
- gemfiles/i18n_0_6.gemfile
|
35
|
-
- gemfiles/i18n_0_7.gemfile
|
36
|
-
- gemfiles/i18n_0_8.gemfile
|
37
|
-
- gemfiles/i18n_0_9.gemfile
|
38
|
-
- gemfiles/i18n_1_0.gemfile
|
39
|
-
- gemfiles/i18n_1_1.gemfile
|
40
|
-
- gemfiles/i18n_1_2.gemfile
|
41
|
-
- gemfiles/i18n_1_3.gemfile
|
42
|
-
- gemfiles/i18n_1_4.gemfile
|
43
|
-
- gemfiles/i18n_1_5.gemfile
|
44
|
-
- gemfiles/i18n_1_6.gemfile
|
45
|
-
- gemfiles/i18n_1_7.gemfile
|
46
|
-
- gemfiles/i18n_1_8.gemfile
|
47
|
-
- gemfiles/i18n_1_9.gemfile
|
48
|
-
- gemfiles/i18n_1_10.gemfile
|
49
|
-
allow_failures:
|
50
|
-
- false
|
51
|
-
include:
|
52
|
-
- os: ubuntu
|
53
|
-
ruby: ruby-head
|
54
|
-
gemfile: gemfiles/i18n_1_8.gemfile
|
55
|
-
allow_failures: true
|
56
|
-
env:
|
57
|
-
BUNDLE_GEMFILE: "${{ matrix.gemfile }}"
|
58
|
-
ALLOW_FAILURES: "${{ matrix.allow_failures }}"
|
59
|
-
runs-on: ${{ matrix.os }}-latest
|
60
|
-
continue-on-error: ${{ endsWith(matrix.ruby, 'head') || matrix.ruby == 'debug' }}
|
61
|
-
steps:
|
62
|
-
- name: Checkout
|
63
|
-
uses: actions/checkout@v2
|
64
|
-
- name: Setup Ruby
|
65
|
-
uses: ruby/setup-ruby@v1
|
66
|
-
with:
|
67
|
-
ruby-version: ${{ matrix.ruby }}
|
68
|
-
bundler-cache: true
|
69
|
-
- name: Test
|
70
|
-
run: bundle exec rake spec:ruby || $ALLOW_FAILURES
|
71
|
-
|
72
|
-
js_unit_tests:
|
73
|
-
name: JS Unit Tests
|
74
|
-
if: "contains(github.event.commits[0].message, '[ci skip]') == false"
|
75
|
-
strategy:
|
76
|
-
fail-fast: false
|
77
|
-
matrix:
|
78
|
-
os:
|
79
|
-
- ubuntu
|
80
|
-
node:
|
81
|
-
- 10
|
82
|
-
- 12
|
83
|
-
- 14
|
84
|
-
runs-on: ${{ matrix.os }}-latest
|
85
|
-
steps:
|
86
|
-
- name: Checkout
|
87
|
-
uses: actions/checkout@v2
|
88
|
-
- name: Setup node
|
89
|
-
uses: actions/setup-node@v1
|
90
|
-
with:
|
91
|
-
node-version: ${{ matrix.node }}
|
92
|
-
- name: Get yarn cache directory path
|
93
|
-
id: yarn-cache-dir-path
|
94
|
-
run: echo "::set-output name=dir::$(yarn cache dir)"
|
95
|
-
- uses: actions/cache@v2
|
96
|
-
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
97
|
-
with:
|
98
|
-
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
99
|
-
key: ${{ runner.os }}-yarn-${{ github.ref }}-${{ github.sha }}
|
100
|
-
restore-keys: |
|
101
|
-
${{ runner.os }}-yarn-${{ github.ref }}-
|
102
|
-
${{ runner.os }}-yarn-
|
103
|
-
- name: Install JS Dependencies
|
104
|
-
run: yarn install
|
105
|
-
- name: Test
|
106
|
-
run: npm test
|
data/.npmignore
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package
|
2
|
-
|
3
|
-
# tests
|
4
|
-
spec
|
5
|
-
coverage
|
6
|
-
|
7
|
-
# build tools
|
8
|
-
.travis.yml
|
9
|
-
|
10
|
-
# linters
|
11
|
-
.jscsrc
|
12
|
-
.jshintrc
|
13
|
-
.eslintrc*
|
14
|
-
|
15
|
-
# editor settings
|
16
|
-
.idea
|
17
|
-
.editorconfig
|
18
|
-
|
19
|
-
# Ruby code
|
20
|
-
app/assets/javascripts/i18n/
|
21
|
-
gemfiles
|
22
|
-
lib
|
23
|
-
Gemfile*
|
24
|
-
*.gemspec
|
25
|
-
Rakefile
|
26
|
-
Appraisals
|
27
|
-
|
data/Appraisals
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
|
2
|
-
appraise "i18n_0_8" do
|
3
|
-
gem "i18n", "~> 0.8.0"
|
4
|
-
end
|
5
|
-
|
6
|
-
appraise "i18n_0_9" do
|
7
|
-
gem "i18n", "~> 0.9.0"
|
8
|
-
end
|
9
|
-
|
10
|
-
appraise "i18n_1_0" do
|
11
|
-
gem "i18n", "~> 1.0.0"
|
12
|
-
end
|
13
|
-
|
14
|
-
appraise "i18n_1_1" do
|
15
|
-
gem "i18n", "~> 1.1.0"
|
16
|
-
end
|
17
|
-
|
18
|
-
appraise "i18n_1_2" do
|
19
|
-
gem "i18n", "~> 1.2.0"
|
20
|
-
end
|
21
|
-
|
22
|
-
appraise "i18n_1_3" do
|
23
|
-
gem "i18n", "~> 1.3.0"
|
24
|
-
end
|
25
|
-
|
26
|
-
appraise "i18n_1_4" do
|
27
|
-
gem "i18n", "~> 1.4.0"
|
28
|
-
end
|
29
|
-
|
30
|
-
appraise "i18n_1_5" do
|
31
|
-
gem "i18n", "~> 1.5.1"
|
32
|
-
end
|
33
|
-
|
34
|
-
appraise "i18n_1_6" do
|
35
|
-
gem "i18n", "~> 1.6.0"
|
36
|
-
end
|
37
|
-
|
38
|
-
appraise "i18n_1_7" do
|
39
|
-
gem "i18n", "~> 1.7.0"
|
40
|
-
end
|
41
|
-
|
42
|
-
appraise "i18n_1_8" do
|
43
|
-
gem "i18n", "~> 1.8.0"
|
44
|
-
end
|
45
|
-
|
46
|
-
appraise "i18n_1_9" do
|
47
|
-
gem "i18n", "~> 1.9.0"
|
48
|
-
end
|
49
|
-
|
50
|
-
appraise "i18n_1_10" do
|
51
|
-
gem "i18n", "~> 1.10.0"
|
52
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
<%# encoding: utf-8 %>
|
2
|
-
|
3
|
-
// Using UMD pattern from
|
4
|
-
// https://github.com/umdjs/umd#regular-module
|
5
|
-
// `returnExports.js` version
|
6
|
-
;(function (root, factory) {
|
7
|
-
if (typeof define === 'function' && define.amd) {
|
8
|
-
// AMD. Register as an anonymous module.
|
9
|
-
define(["i18n"], factory);
|
10
|
-
} else if (typeof module === 'object' && module.exports) {
|
11
|
-
// Node. Does not work with strict CommonJS, but
|
12
|
-
// only CommonJS-like environments that support module.exports,
|
13
|
-
// like Node.
|
14
|
-
factory(require("i18n"));
|
15
|
-
} else {
|
16
|
-
// Browser globals (root is window)
|
17
|
-
factory(root.I18n);
|
18
|
-
}
|
19
|
-
}(this, function(I18n) {
|
20
|
-
"use strict";
|
21
|
-
|
22
|
-
I18n.translations = <%= I18n::JS.filtered_translations.to_json %>;
|
23
|
-
}));
|
@@ -1,240 +0,0 @@
|
|
1
|
-
// https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf
|
2
|
-
if (!Array.prototype.indexOf) {
|
3
|
-
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
|
4
|
-
"use strict";
|
5
|
-
if (this == null) {
|
6
|
-
throw new TypeError();
|
7
|
-
}
|
8
|
-
var t = Object(this);
|
9
|
-
var len = t.length >>> 0;
|
10
|
-
if (len === 0) {
|
11
|
-
return -1;
|
12
|
-
}
|
13
|
-
var n = 0;
|
14
|
-
if (arguments.length > 1) {
|
15
|
-
n = Number(arguments[1]);
|
16
|
-
if (n != n) { // shortcut for verifying if it's NaN
|
17
|
-
n = 0;
|
18
|
-
} else if (n != 0 && n != Infinity && n != -Infinity) {
|
19
|
-
n = (n > 0 || -1) * Math.floor(Math.abs(n));
|
20
|
-
}
|
21
|
-
}
|
22
|
-
if (n >= len) {
|
23
|
-
return -1;
|
24
|
-
}
|
25
|
-
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
|
26
|
-
for (; k < len; k++) {
|
27
|
-
if (k in t && t[k] === searchElement) {
|
28
|
-
return k;
|
29
|
-
}
|
30
|
-
}
|
31
|
-
return -1;
|
32
|
-
}
|
33
|
-
}
|
34
|
-
|
35
|
-
// Production steps of ECMA-262, Edition 5, 15.4.4.18
|
36
|
-
// Reference: https://es5.github.com/#x15.4.4.18
|
37
|
-
// https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach
|
38
|
-
if ( !Array.prototype.forEach ) {
|
39
|
-
|
40
|
-
Array.prototype.forEach = function forEach( callback, thisArg ) {
|
41
|
-
|
42
|
-
var T, k;
|
43
|
-
|
44
|
-
if ( this == null ) {
|
45
|
-
throw new TypeError( "this is null or not defined" );
|
46
|
-
}
|
47
|
-
|
48
|
-
// 1. Let O be the result of calling ToObject passing the |this| value as the argument.
|
49
|
-
var O = Object(this);
|
50
|
-
|
51
|
-
// 2. Let lenValue be the result of calling the Get internal method of O with the argument "length".
|
52
|
-
// 3. Let len be ToUint32(lenValue).
|
53
|
-
var len = O.length >>> 0; // Hack to convert O.length to a UInt32
|
54
|
-
|
55
|
-
// 4. If IsCallable(callback) is false, throw a TypeError exception.
|
56
|
-
// See: https://es5.github.com/#x9.11
|
57
|
-
if ( {}.toString.call(callback) !== "[object Function]" ) {
|
58
|
-
throw new TypeError( callback + " is not a function" );
|
59
|
-
}
|
60
|
-
|
61
|
-
// 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
|
62
|
-
if ( thisArg ) {
|
63
|
-
T = thisArg;
|
64
|
-
}
|
65
|
-
|
66
|
-
// 6. Let k be 0
|
67
|
-
k = 0;
|
68
|
-
|
69
|
-
// 7. Repeat, while k < len
|
70
|
-
while( k < len ) {
|
71
|
-
|
72
|
-
var kValue;
|
73
|
-
|
74
|
-
// a. Let Pk be ToString(k).
|
75
|
-
// This is implicit for LHS operands of the in operator
|
76
|
-
// b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk.
|
77
|
-
// This step can be combined with c
|
78
|
-
// c. If kPresent is true, then
|
79
|
-
if ( Object.prototype.hasOwnProperty.call(O, k) ) {
|
80
|
-
|
81
|
-
// i. Let kValue be the result of calling the Get internal method of O with argument Pk.
|
82
|
-
kValue = O[ k ];
|
83
|
-
|
84
|
-
// ii. Call the Call internal method of callback with T as the this value and
|
85
|
-
// argument list containing kValue, k, and O.
|
86
|
-
callback.call( T, kValue, k, O );
|
87
|
-
}
|
88
|
-
// d. Increase k by 1.
|
89
|
-
k++;
|
90
|
-
}
|
91
|
-
// 8. return undefined
|
92
|
-
};
|
93
|
-
}
|
94
|
-
|
95
|
-
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
|
96
|
-
if (!Array.prototype.some)
|
97
|
-
{
|
98
|
-
Array.prototype.some = function(fun /*, thisArg */)
|
99
|
-
{
|
100
|
-
'use strict';
|
101
|
-
|
102
|
-
if (this === void 0 || this === null)
|
103
|
-
throw new TypeError();
|
104
|
-
|
105
|
-
var t = Object(this);
|
106
|
-
var len = t.length >>> 0;
|
107
|
-
if (typeof fun !== 'function')
|
108
|
-
throw new TypeError();
|
109
|
-
|
110
|
-
var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
|
111
|
-
for (var i = 0; i < len; i++)
|
112
|
-
{
|
113
|
-
if (i in t && fun.call(thisArg, t[i], i, t))
|
114
|
-
return true;
|
115
|
-
}
|
116
|
-
|
117
|
-
return false;
|
118
|
-
};
|
119
|
-
}
|
120
|
-
|
121
|
-
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
|
122
|
-
if (!Array.prototype.map) {
|
123
|
-
|
124
|
-
Array.prototype.map = function(callback/*, thisArg*/) {
|
125
|
-
|
126
|
-
var T, A, k;
|
127
|
-
|
128
|
-
if (this == null) {
|
129
|
-
throw new TypeError('this is null or not defined');
|
130
|
-
}
|
131
|
-
|
132
|
-
// 1. Let O be the result of calling ToObject passing the |this|
|
133
|
-
// value as the argument.
|
134
|
-
var O = Object(this);
|
135
|
-
|
136
|
-
// 2. Let lenValue be the result of calling the Get internal
|
137
|
-
// method of O with the argument "length".
|
138
|
-
// 3. Let len be ToUint32(lenValue).
|
139
|
-
var len = O.length >>> 0;
|
140
|
-
|
141
|
-
// 4. If IsCallable(callback) is false, throw a TypeError exception.
|
142
|
-
// See: https://es5.github.com/#x9.11
|
143
|
-
if (typeof callback !== 'function') {
|
144
|
-
throw new TypeError(callback + ' is not a function');
|
145
|
-
}
|
146
|
-
|
147
|
-
// 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
|
148
|
-
if (arguments.length > 1) {
|
149
|
-
T = arguments[1];
|
150
|
-
}
|
151
|
-
|
152
|
-
// 6. Let A be a new array created as if by the expression new Array(len)
|
153
|
-
// where Array is the standard built-in constructor with that name and
|
154
|
-
// len is the value of len.
|
155
|
-
A = new Array(len);
|
156
|
-
|
157
|
-
// 7. Let k be 0
|
158
|
-
k = 0;
|
159
|
-
|
160
|
-
// 8. Repeat, while k < len
|
161
|
-
while (k < len) {
|
162
|
-
|
163
|
-
var kValue, mappedValue;
|
164
|
-
|
165
|
-
// a. Let Pk be ToString(k).
|
166
|
-
// This is implicit for LHS operands of the in operator
|
167
|
-
// b. Let kPresent be the result of calling the HasProperty internal
|
168
|
-
// method of O with argument Pk.
|
169
|
-
// This step can be combined with c
|
170
|
-
// c. If kPresent is true, then
|
171
|
-
if (k in O) {
|
172
|
-
|
173
|
-
// i. Let kValue be the result of calling the Get internal
|
174
|
-
// method of O with argument Pk.
|
175
|
-
kValue = O[k];
|
176
|
-
|
177
|
-
// ii. Let mappedValue be the result of calling the Call internal
|
178
|
-
// method of callback with T as the this value and argument
|
179
|
-
// list containing kValue, k, and O.
|
180
|
-
mappedValue = callback.call(T, kValue, k, O);
|
181
|
-
|
182
|
-
// iii. Call the DefineOwnProperty internal method of A with arguments
|
183
|
-
// Pk, Property Descriptor
|
184
|
-
// { Value: mappedValue,
|
185
|
-
// Writable: true,
|
186
|
-
// Enumerable: true,
|
187
|
-
// Configurable: true },
|
188
|
-
// and false.
|
189
|
-
|
190
|
-
// In browsers that support Object.defineProperty, use the following:
|
191
|
-
// Object.defineProperty(A, k, {
|
192
|
-
// value: mappedValue,
|
193
|
-
// writable: true,
|
194
|
-
// enumerable: true,
|
195
|
-
// configurable: true
|
196
|
-
// });
|
197
|
-
|
198
|
-
// For best browser support, use the following:
|
199
|
-
A[k] = mappedValue;
|
200
|
-
}
|
201
|
-
// d. Increase k by 1.
|
202
|
-
k++;
|
203
|
-
}
|
204
|
-
|
205
|
-
// 9. return A
|
206
|
-
return A;
|
207
|
-
};
|
208
|
-
}
|
209
|
-
|
210
|
-
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind
|
211
|
-
if (!Function.prototype.bind) (function(){
|
212
|
-
var ArrayPrototypeSlice = Array.prototype.slice;
|
213
|
-
Function.prototype.bind = function(otherThis) {
|
214
|
-
if (typeof this !== 'function') {
|
215
|
-
// closest thing possible to the ECMAScript 5
|
216
|
-
// internal IsCallable function
|
217
|
-
throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
|
218
|
-
}
|
219
|
-
|
220
|
-
var baseArgs= ArrayPrototypeSlice .call(arguments, 1),
|
221
|
-
baseArgsLength = baseArgs.length,
|
222
|
-
fToBind = this,
|
223
|
-
fNOP = function() {},
|
224
|
-
fBound = function() {
|
225
|
-
baseArgs.length = baseArgsLength; // reset to default base arguments
|
226
|
-
baseArgs.push.apply(baseArgs, arguments);
|
227
|
-
return fToBind.apply(
|
228
|
-
fNOP.prototype.isPrototypeOf(this) ? this : otherThis, baseArgs
|
229
|
-
);
|
230
|
-
};
|
231
|
-
|
232
|
-
if (this.prototype) {
|
233
|
-
// Function.prototype doesn't have a prototype property
|
234
|
-
fNOP.prototype = this.prototype;
|
235
|
-
}
|
236
|
-
fBound.prototype = new fNOP();
|
237
|
-
|
238
|
-
return fBound;
|
239
|
-
};
|
240
|
-
})();
|