@knight-lab/timelinejs 3.8.21 → 3.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nvmrc +1 -1
- package/API_TEST.html +0 -5
- package/CHANGELOG.md +12 -0
- package/dist/css/fonts/font.amatic-andika.css +1 -1
- package/dist/css/fonts/font.bitter-raleway.css +4 -4
- package/dist/css/fonts/font.clicker-garamond.css +1 -1
- package/dist/css/fonts/font.dancing-ledger.css +2 -2
- package/dist/css/fonts/font.oldstandard.css +2 -2
- package/dist/css/fonts/font.opensans-gentiumbook.css +2 -2
- package/dist/css/fonts/font.playfair-faunaone.css +2 -2
- package/dist/css/fonts/font.playfair.css +2 -2
- package/dist/css/fonts/font.roboto-megrim.css +2 -2
- package/dist/css/fonts/font.unicaone-vollkorn.css +2 -2
- package/dist/css/icons/tl-icons.eot +0 -0
- package/dist/css/icons/tl-icons.svg +58 -55
- package/dist/css/icons/tl-icons.ttf +0 -0
- package/dist/css/icons/tl-icons.woff +0 -0
- package/dist/css/icons/tl-icons.woff2 +0 -0
- package/dist/css/themes/timeline.theme.contrast.css +157 -319
- package/dist/css/themes/timeline.theme.dark.css +146 -308
- package/dist/css/timeline.css +155 -317
- package/dist/css/timeline.css.map +1 -1
- package/dist/embed/compare.html +4 -4
- package/dist/embed/index.html +3 -6
- package/dist/embed/old-index.html +2 -5
- package/dist/embed/popular_timelines.json +5989 -1
- package/dist/js/locale/af.json +54 -56
- package/dist/js/locale/ar.json +54 -56
- package/dist/js/locale/be.json +71 -73
- package/dist/js/locale/bg.json +54 -56
- package/dist/js/locale/ca.json +54 -56
- package/dist/js/locale/cz.json +56 -63
- package/dist/js/locale/da.json +54 -56
- package/dist/js/locale/de.json +1 -3
- package/dist/js/locale/el.json +54 -56
- package/dist/js/locale/en-24hr.json +51 -57
- package/dist/js/locale/en-week.json +51 -57
- package/dist/js/locale/en.json +3 -8
- package/dist/js/locale/eo.json +54 -56
- package/dist/js/locale/es.json +55 -57
- package/dist/js/locale/et.json +54 -56
- package/dist/js/locale/eu.json +54 -56
- package/dist/js/locale/fa.json +52 -54
- package/dist/js/locale/fi.json +73 -75
- package/dist/js/locale/fo.json +54 -56
- package/dist/js/locale/fr.json +1 -8
- package/dist/js/locale/fy.json +71 -73
- package/dist/js/locale/ga.json +54 -56
- package/dist/js/locale/gl.json +54 -56
- package/dist/js/locale/he.json +54 -56
- package/dist/js/locale/hi.json +72 -74
- package/dist/js/locale/hr.json +54 -56
- package/dist/js/locale/hu.json +91 -93
- package/dist/js/locale/hy.json +54 -56
- package/dist/js/locale/id.json +54 -56
- package/dist/js/locale/is.json +54 -56
- package/dist/js/locale/it.json +18 -20
- package/dist/js/locale/iw.json +54 -56
- package/dist/js/locale/ja.json +54 -56
- package/dist/js/locale/ka.json +54 -56
- package/dist/js/locale/ko.json +54 -56
- package/dist/js/locale/lb.json +54 -56
- package/dist/js/locale/lt.json +54 -56
- package/dist/js/locale/lv.json +54 -56
- package/dist/js/locale/ms.json +54 -56
- package/dist/js/locale/my.json +31 -38
- package/dist/js/locale/nb.json +54 -56
- package/dist/js/locale/ne.json +54 -56
- package/dist/js/locale/nl.json +54 -56
- package/dist/js/locale/nn.json +54 -56
- package/dist/js/locale/no.json +54 -56
- package/dist/js/locale/pl.json +54 -56
- package/dist/js/locale/pt-br.json +45 -47
- package/dist/js/locale/pt.json +57 -59
- package/dist/js/locale/rm.json +54 -56
- package/dist/js/locale/ro.json +54 -56
- package/dist/js/locale/ru.json +54 -56
- package/dist/js/locale/si.json +53 -55
- package/dist/js/locale/sk.json +54 -56
- package/dist/js/locale/sl.json +54 -56
- package/dist/js/locale/sr-cy.json +54 -56
- package/dist/js/locale/sr.json +54 -56
- package/dist/js/locale/sv.json +11 -13
- package/dist/js/locale/ta.json +54 -56
- package/dist/js/locale/te.json +53 -55
- package/dist/js/locale/th.json +55 -62
- package/dist/js/locale/tl.json +54 -56
- package/dist/js/locale/tr.json +54 -56
- package/dist/js/locale/uk.json +54 -56
- package/dist/js/locale/ur.json +2 -9
- package/dist/js/locale/vi.json +33 -35
- package/dist/js/locale/zh-cn.json +1 -3
- package/dist/js/locale/zh-tw.json +54 -56
- package/dist/js/timeline.js +2 -3
- package/dist/js/timeline.js.LICENSE.txt +1 -0
- package/dist/js/timeline.js.map +1 -1
- package/package.json +20 -18
- package/src/css/icons/icons.html +49 -1
- package/src/css/icons/tl-icons.eot +0 -0
- package/src/css/icons/tl-icons.svg +58 -55
- package/src/css/icons/tl-icons.ttf +0 -0
- package/src/css/icons/tl-icons.woff +0 -0
- package/src/css/icons/tl-icons.woff2 +0 -0
- package/src/embed/compare.html +4 -4
- package/src/embed/index.html +3 -6
- package/src/embed/old-index.html +2 -5
- package/src/embed/popular_timelines.json +5989 -1
- package/src/js/core/TimelineConfig.js +0 -1
- package/src/js/date/TLDate.js +32 -1
- package/src/js/date/__tests__/TLDate.test.js +10 -0
- package/src/js/dom/DOMUtil.js +12 -12
- package/src/js/language/I18NMixins.js +13 -3
- package/src/js/language/Language.js +50 -23
- package/src/js/language/__tests__/Language.test.js +32 -0
- package/src/js/language/locale/af.json +54 -56
- package/src/js/language/locale/ar.json +54 -56
- package/src/js/language/locale/be.json +71 -73
- package/src/js/language/locale/bg.json +54 -56
- package/src/js/language/locale/ca.json +54 -56
- package/src/js/language/locale/cz.json +56 -63
- package/src/js/language/locale/da.json +54 -56
- package/src/js/language/locale/de.json +1 -3
- package/src/js/language/locale/el.json +54 -56
- package/src/js/language/locale/en-24hr.json +51 -57
- package/src/js/language/locale/en-week.json +51 -57
- package/src/js/language/locale/en.json +3 -8
- package/src/js/language/locale/eo.json +54 -56
- package/src/js/language/locale/es.json +55 -57
- package/src/js/language/locale/et.json +54 -56
- package/src/js/language/locale/eu.json +54 -56
- package/src/js/language/locale/fa.json +52 -54
- package/src/js/language/locale/fi.json +73 -75
- package/src/js/language/locale/fo.json +54 -56
- package/src/js/language/locale/fr.json +1 -8
- package/src/js/language/locale/fy.json +71 -73
- package/src/js/language/locale/ga.json +54 -56
- package/src/js/language/locale/gl.json +54 -56
- package/src/js/language/locale/he.json +54 -56
- package/src/js/language/locale/hi.json +72 -74
- package/src/js/language/locale/hr.json +54 -56
- package/src/js/language/locale/hu.json +91 -93
- package/src/js/language/locale/hy.json +54 -56
- package/src/js/language/locale/id.json +54 -56
- package/src/js/language/locale/is.json +54 -56
- package/src/js/language/locale/it.json +18 -20
- package/src/js/language/locale/iw.json +54 -56
- package/src/js/language/locale/ja.json +54 -56
- package/src/js/language/locale/ka.json +54 -56
- package/src/js/language/locale/ko.json +54 -56
- package/src/js/language/locale/lb.json +54 -56
- package/src/js/language/locale/lt.json +54 -56
- package/src/js/language/locale/lv.json +54 -56
- package/src/js/language/locale/ms.json +54 -56
- package/src/js/language/locale/my.json +31 -38
- package/src/js/language/locale/nb.json +54 -56
- package/src/js/language/locale/ne.json +54 -56
- package/src/js/language/locale/nl.json +54 -56
- package/src/js/language/locale/nn.json +54 -56
- package/src/js/language/locale/no.json +54 -56
- package/src/js/language/locale/pl.json +54 -56
- package/src/js/language/locale/pt-br.json +45 -47
- package/src/js/language/locale/pt.json +57 -59
- package/src/js/language/locale/rm.json +54 -56
- package/src/js/language/locale/ro.json +54 -56
- package/src/js/language/locale/ru.json +54 -56
- package/src/js/language/locale/si.json +53 -55
- package/src/js/language/locale/sk.json +54 -56
- package/src/js/language/locale/sl.json +54 -56
- package/src/js/language/locale/sr-cy.json +54 -56
- package/src/js/language/locale/sr.json +54 -56
- package/src/js/language/locale/sv.json +11 -13
- package/src/js/language/locale/ta.json +54 -56
- package/src/js/language/locale/te.json +53 -55
- package/src/js/language/locale/th.json +55 -62
- package/src/js/language/locale/tl.json +54 -56
- package/src/js/language/locale/tr.json +54 -56
- package/src/js/language/locale/uk.json +54 -56
- package/src/js/language/locale/ur.json +2 -9
- package/src/js/language/locale/vi.json +33 -35
- package/src/js/language/locale/zh-cn.json +1 -3
- package/src/js/language/locale/zh-tw.json +54 -56
- package/src/js/media/Media.js +6 -2
- package/src/js/media/MediaType.js +3 -3
- package/src/js/media/types/DailyMotion.js +9 -1
- package/src/js/media/types/Text.js +33 -31
- package/src/js/media/types/Vimeo.js +58 -57
- package/src/js/slider/Slide.js +17 -2
- package/src/js/slider/SlideNav.js +12 -7
- package/src/js/slider/StorySlider.js +8 -12
- package/src/js/timeline/Timeline.js +47 -13
- package/src/js/timenav/TimeAxis.js +20 -1
- package/src/js/timenav/TimeMarker.js +48 -3
- package/src/js/timenav/TimeNav.js +143 -16
- package/src/js/ui/MenuBar.js +202 -149
- package/src/js/ui/Swipable.js +1 -1
- package/src/less/TL.Timeline.Base.less +38 -1
- package/src/less/Typography.less +2 -3
- package/src/less/Variables.less +4 -1
- package/src/less/icons/Icons.less +9 -0
- package/src/less/media/types/TL.Media.Text.less +5 -0
- package/src/less/slider/TL.Slide.less +40 -45
- package/src/less/slider/TL.SlideNav.less +82 -55
- package/src/less/themes/contrast/Variables.less +7 -4
- package/src/less/themes/dark/TL.Theme.Dark.less +2 -2
- package/src/less/themes/dark/Variables.less +4 -1
- package/src/less/timenav/TL.TimeMarker.less +16 -10
- package/src/less/timenav/TL.TimeNav.less +2 -50
- package/src/less/ui/TL.MenuBar.Button.less +8 -6
- package/src/template/all-media-types.json +53 -3
- package/src/template/cosmo.json +113 -0
- package/src/template/index.html +5 -3
- package/webpack.common.js +13 -10
- package/webpack.dev.js +16 -6
- package/dist/js/timeline-min.js +0 -4
- package/dist/timeline3.zip +0 -0
- package/src/less/core/Reset.less +0 -115
package/src/js/date/TLDate.js
CHANGED
|
@@ -178,13 +178,24 @@ export const TLDate = TLClass.extend({
|
|
|
178
178
|
this._createDateObj();
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
+
if (data.format && !format) {
|
|
182
|
+
format = data.format
|
|
183
|
+
}
|
|
181
184
|
this._setFormat(format, format_short);
|
|
182
185
|
},
|
|
183
186
|
|
|
184
187
|
setDateFormat: function(format) {
|
|
185
188
|
this.data.format = format;
|
|
186
189
|
},
|
|
187
|
-
|
|
190
|
+
/**
|
|
191
|
+
* Return a string representation of this date. If this date has been created with a `display_date` property,
|
|
192
|
+
* that value is always returned, regardless of arguments to the method invocation. Otherwise,
|
|
193
|
+
* the given `Language` is asked to create a string representation based on this Date's data, passing through the provided
|
|
194
|
+
* `format` String, or, if that is undefined, this date's default format string.
|
|
195
|
+
* @param {Language} language
|
|
196
|
+
* @param {String} format
|
|
197
|
+
* @returns {String} formattedDate
|
|
198
|
+
*/
|
|
188
199
|
getDisplayDate: function(language, format) {
|
|
189
200
|
if (this.data.display_date) {
|
|
190
201
|
return this.data.display_date;
|
|
@@ -345,6 +356,14 @@ export const TLDate = TLClass.extend({
|
|
|
345
356
|
} else if (!this.data.format_short) {
|
|
346
357
|
this.data.format_short = this.findBestFormat(true);
|
|
347
358
|
}
|
|
359
|
+
},
|
|
360
|
+
/**
|
|
361
|
+
* Get the year-only representation of this date. Ticks need this to layout
|
|
362
|
+
* the time axis, and this needs to work isomorphically for TLDate and BigDate
|
|
363
|
+
* @returns {Number}
|
|
364
|
+
*/
|
|
365
|
+
getFullYear: function() {
|
|
366
|
+
return this.data.date_obj.getFullYear()
|
|
348
367
|
}
|
|
349
368
|
});
|
|
350
369
|
|
|
@@ -477,6 +496,10 @@ export const BigDate = TLDate.extend({
|
|
|
477
496
|
this._createDateObj();
|
|
478
497
|
}
|
|
479
498
|
|
|
499
|
+
if (data.format && !format) {
|
|
500
|
+
format = data.format
|
|
501
|
+
}
|
|
502
|
+
|
|
480
503
|
this._setFormat(format, format_short);
|
|
481
504
|
},
|
|
482
505
|
|
|
@@ -497,5 +520,13 @@ export const BigDate = TLDate.extend({
|
|
|
497
520
|
}
|
|
498
521
|
|
|
499
522
|
throw new TLError("invalid_scale_err", scale);
|
|
523
|
+
},
|
|
524
|
+
/**
|
|
525
|
+
* Get the year-only representation of this date. Ticks need this to layout
|
|
526
|
+
* the time axis, and this needs to work isomorphically for TLDate and BigDate
|
|
527
|
+
* @returns {Number}
|
|
528
|
+
*/
|
|
529
|
+
getFullYear: function() {
|
|
530
|
+
return this.data.date_obj.getTime()
|
|
500
531
|
}
|
|
501
532
|
});
|
|
@@ -55,6 +55,16 @@ test("display_text overrides other formatting", () => {
|
|
|
55
55
|
|
|
56
56
|
})
|
|
57
57
|
|
|
58
|
+
test("date constructor format overrides other formatting", () => {
|
|
59
|
+
var cdate = new TLDate({ year: 2014, month: 12 }, 'yyyy')
|
|
60
|
+
expect(cdate.getDisplayDate()).toBe('2014')
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
test("format in constructor data param overrides other formatting", () => {
|
|
64
|
+
var cdate = new TLDate({ year: 2014, month: 12, format: 'yyyy' })
|
|
65
|
+
expect(cdate.getDisplayDate()).toBe('2014')
|
|
66
|
+
})
|
|
67
|
+
|
|
58
68
|
test("handle years in the first century CE correctly", () => {
|
|
59
69
|
var date = makeDate({ year: 75 });
|
|
60
70
|
expect(date.getDisplayDate()).toBe("75")
|
package/src/js/dom/DOMUtil.js
CHANGED
|
@@ -5,21 +5,21 @@
|
|
|
5
5
|
================================================== */
|
|
6
6
|
|
|
7
7
|
function hasClass(el, name) {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
return (el.className.length > 0) &&
|
|
9
|
+
new RegExp("(^|\\s)" + name + "(\\s|$)").test(el.className);
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export function addClass(el, name) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
if (!hasClass(el, name)) {
|
|
14
|
+
el.className += (el.className ? ' ' : '') + name;
|
|
15
|
+
}
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
export function removeClass(el, name) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
19
|
+
el.className = el.className.replace(/(\S+)\s*/g, function(w, match) {
|
|
20
|
+
if (match === name) {
|
|
21
|
+
return '';
|
|
22
|
+
}
|
|
23
|
+
return w;
|
|
24
|
+
}).replace(/^\s+/, '');
|
|
25
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* I18NMixins
|
|
2
|
-
assumes that its class has an
|
|
2
|
+
assumes that its class has an attribute `language` with a Language instance
|
|
3
3
|
================================================== */
|
|
4
4
|
import { trace } from "../core/Util"
|
|
5
5
|
import { fallback } from "../language/Language"
|
|
@@ -24,8 +24,18 @@ class I18NMixins {
|
|
|
24
24
|
return fallback;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Look up a localized version of a standard message using the Language instance
|
|
29
|
+
* that was previously set with {@link setLanguage}.
|
|
30
|
+
*
|
|
31
|
+
* @see {@link Language#_}
|
|
32
|
+
* @param {string} msg - a message key
|
|
33
|
+
* @param {Object} [context] - a dictionary with string keys appropriate to message `k`
|
|
34
|
+
* and string values which will be interpolated into the message.
|
|
35
|
+
* @returns {string} - a localized string appropriate to the message key
|
|
36
|
+
*/
|
|
37
|
+
_(msg, context) {
|
|
38
|
+
return this.getLanguage()._(msg, context);
|
|
29
39
|
}
|
|
30
40
|
}
|
|
31
41
|
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
import { mergeData, pad, trace } from "../core/Util"
|
|
2
2
|
import { fetchJSON } from "../net/Net"
|
|
3
3
|
import { BigYear } from "../date/TLDate"
|
|
4
|
+
import TLError from "../core/TLError";
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
6
|
+
const MESSAGE_VARIABLE_PATTERN = new RegExp(/\$\{(.+?)\}/g)
|
|
7
|
+
/**
|
|
8
|
+
* Instantiate a Language object to manage I18N.
|
|
9
|
+
* WARNING: In general, this should not be called directly, because it doesn't block while
|
|
10
|
+
* the language file is loaded, which can lead to race conditions in some cases. In most
|
|
11
|
+
* cases, language objects other than the fallback should be gotten by calling the
|
|
12
|
+
* async function loadLanguage defined elsewhere in this file.
|
|
13
|
+
*
|
|
14
|
+
* @param {String} [language=en] - a language code or a URL to a
|
|
15
|
+
* translation file
|
|
16
|
+
* @param {string} [script_path] - if `language` is not a URL, this is used
|
|
17
|
+
* to construct a fully-qualified URL to load a translation file.
|
|
18
|
+
*/
|
|
17
19
|
class Language {
|
|
18
20
|
constructor(language, script_path) {
|
|
19
21
|
// borrowed from http://stackoverflow.com/a/14446414/102476
|
|
@@ -73,8 +75,28 @@ class Language {
|
|
|
73
75
|
}
|
|
74
76
|
}
|
|
75
77
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Look up a localized version of a standard message. While using `_` for the
|
|
80
|
+
* method name is not exactly idiomatic javascript, it was inspired by Python's
|
|
81
|
+
* {@link https://docs.python.org/3/library/gettext.html|gettext} module, with
|
|
82
|
+
* the intention of reducing clutter in places where, in a non-I18N'd app, you'd
|
|
83
|
+
* simply have a quoted string.
|
|
84
|
+
*
|
|
85
|
+
* @param {string} k - a message key
|
|
86
|
+
* @param {Object} [context] - a dictionary with string keys appropriate to message `k`
|
|
87
|
+
* and string values which will be interpolated into the message.
|
|
88
|
+
* @returns {string} - a localized string appropriate to the message key
|
|
89
|
+
*/
|
|
90
|
+
_(k, context) {
|
|
91
|
+
let msg = this.messages[k] || Language.fallback.messages[k] || k;
|
|
92
|
+
if (msg.match(MESSAGE_VARIABLE_PATTERN)) {
|
|
93
|
+
if (!context) throw new TLError("template_message_without_context")
|
|
94
|
+
for (let match of msg.matchAll(MESSAGE_VARIABLE_PATTERN)) {
|
|
95
|
+
if (!(match[1] in context)) throw new TLError("template_message_without_context")
|
|
96
|
+
msg = msg.replace(match[0], context[match[1]])
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return msg
|
|
78
100
|
}
|
|
79
101
|
|
|
80
102
|
formatDate(date, format_name) {
|
|
@@ -267,19 +289,17 @@ var LANGUAGES = {
|
|
|
267
289
|
loading: "Loading",
|
|
268
290
|
wikipedia: "From Wikipedia, the free encyclopedia",
|
|
269
291
|
error: "Error",
|
|
270
|
-
contract_timeline: "Contract Timeline",
|
|
271
292
|
return_to_title: "Return to Title",
|
|
293
|
+
go_to_end: "Go to the last slide",
|
|
272
294
|
loading_content: "Loading Content",
|
|
273
|
-
expand_timeline: "Expand Timeline",
|
|
274
295
|
loading_timeline: "Loading Timeline... ",
|
|
275
296
|
swipe_to_navigate: "Swipe to Navigate<br><span class='tl-button'>OK</span>",
|
|
297
|
+
zoom_in: "Zoom in",
|
|
298
|
+
zoom_out: "Zoom out",
|
|
276
299
|
unknown_read_err: "An unexpected error occurred trying to read your spreadsheet data",
|
|
277
300
|
invalid_url_err: "Unable to read Timeline data. Make sure your URL is for a Google Spreadsheet or a Timeline JSON file.",
|
|
278
|
-
invalid_url_share_required: "Because of unexpected changes to Google's data access API, the creator of this timeline must enable 'anyone with the url can read' access for this spreadsheet. See timeline.knightlab.com for more information.",
|
|
279
301
|
network_err: "Unable to read your Google Spreadsheet. Make sure you have published it to the web.",
|
|
280
|
-
empty_feed_err: "No data entries found",
|
|
281
302
|
missing_start_date_err: "Missing start_date",
|
|
282
|
-
invalid_data_format_err: "Header row has been modified.",
|
|
283
303
|
invalid_start_time_without_date: "Invalid configuration: time cannot be used without date.",
|
|
284
304
|
invalid_end_time_without_date: "Invalid configuration: end time cannot be used without end date.",
|
|
285
305
|
date_compare_err: "Can't compare timeline date objects on different scales",
|
|
@@ -295,19 +315,26 @@ var LANGUAGES = {
|
|
|
295
315
|
flickr_notfound_err: "Photo not found or private",
|
|
296
316
|
flickr_invalidurl_err: "Invalid Flickr URL",
|
|
297
317
|
imgur_invalidurl_err: "Invalid Imgur URL",
|
|
298
|
-
twitter_invalidurl_err: "Invalid Twitter URL",
|
|
299
318
|
twitter_load_err: "Unable to load Tweet",
|
|
300
319
|
twitterembed_invalidurl_err: "Invalid Twitter Embed url",
|
|
301
320
|
wikipedia_load_err: "Unable to load Wikipedia entry",
|
|
302
|
-
youtube_invalidurl_err: "Invalid YouTube URL",
|
|
303
321
|
spotify_invalid_url: "Invalid Spotify URL",
|
|
304
|
-
template_value_err: "No value provided for variable",
|
|
305
322
|
invalid_rgb_err: "Invalid RGB argument",
|
|
306
323
|
time_scale_scale_err: "Don't know how to get date from time for scale",
|
|
307
324
|
axis_helper_no_options_err: "Axis helper must be configured with options",
|
|
308
325
|
axis_helper_scale_err: "No AxisHelper available for scale",
|
|
309
326
|
invalid_integer_option: "Invalid option value—must be a whole number.",
|
|
310
|
-
instagram_bad_request: "Invalid or private Instagram URL"
|
|
327
|
+
instagram_bad_request: "Invalid or private Instagram URL",
|
|
328
|
+
template_message_without_context: "Required variables not provided for template translation message",
|
|
329
|
+
aria_label_timeline: "Timeline",
|
|
330
|
+
aria_label_timeline_navigation: "Timeline navigation",
|
|
331
|
+
aria_label_timeline_content: "Timeline content",
|
|
332
|
+
// The following message keys are pseudo-template literal.
|
|
333
|
+
// Do not surround with backticks (`) since evaluation is deferred
|
|
334
|
+
// (and backticks wouldn't be allowed in JSON localization files)
|
|
335
|
+
// for each, document typical values for variable components
|
|
336
|
+
aria_label_zoomin: "Show less than ${start} to ${end}", // 'start' and 'end' should be numeric years
|
|
337
|
+
aria_label_zoomout: "Show more than ${start} to ${end}" // 'start' and 'end' should be numeric years
|
|
311
338
|
},
|
|
312
339
|
date: {
|
|
313
340
|
month: [
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { fallback } from "../Language"
|
|
2
|
+
import { classMixin } from "../../core/Util"
|
|
3
|
+
import { I18NMixins } from "../I18NMixins"
|
|
4
|
+
class MixinTest {
|
|
5
|
+
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
classMixin(MixinTest, I18NMixins)
|
|
9
|
+
|
|
10
|
+
test("Test variable interpolation", () => {
|
|
11
|
+
let msg = fallback._("aria_label_zoomin", { start: 1900, end: 2000 })
|
|
12
|
+
expect(msg).toBe('Show less than 1900 to 2000')
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
test("Test variable interpolation error checking with no context", () => {
|
|
16
|
+
expect(() => {
|
|
17
|
+
let msg = fallback._("aria_label_zoomin")
|
|
18
|
+
}).toThrow()
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
test("Test variable interpolation error checking with partial context", () => {
|
|
22
|
+
expect(() => {
|
|
23
|
+
let msg = fallback._("aria_label_zoomin", { start: 1900 })
|
|
24
|
+
}).toThrow()
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
test("Test interpolation through a mixin", () => {
|
|
28
|
+
let mixin = new MixinTest()
|
|
29
|
+
mixin.setLanguage(fallback)
|
|
30
|
+
let msg = mixin._("aria_label_zoomin", { start: 1900, end: 2000 })
|
|
31
|
+
expect(msg).toBe('Show less than 1900 to 2000')
|
|
32
|
+
})
|
|
@@ -1,75 +1,73 @@
|
|
|
1
1
|
{
|
|
2
|
-
"lang": "af",
|
|
2
|
+
"lang": "af",
|
|
3
3
|
"date": {
|
|
4
4
|
"month_abbr": [
|
|
5
|
-
"Jan.",
|
|
6
|
-
"Feb.",
|
|
7
|
-
"Maart",
|
|
8
|
-
"April",
|
|
9
|
-
"Mei",
|
|
10
|
-
"Junei",
|
|
11
|
-
"Julie",
|
|
12
|
-
"Aug.",
|
|
13
|
-
"Sept.",
|
|
14
|
-
"Okt.",
|
|
15
|
-
"Nov.",
|
|
5
|
+
"Jan.",
|
|
6
|
+
"Feb.",
|
|
7
|
+
"Maart",
|
|
8
|
+
"April",
|
|
9
|
+
"Mei",
|
|
10
|
+
"Junei",
|
|
11
|
+
"Julie",
|
|
12
|
+
"Aug.",
|
|
13
|
+
"Sept.",
|
|
14
|
+
"Okt.",
|
|
15
|
+
"Nov.",
|
|
16
16
|
"Des."
|
|
17
|
-
],
|
|
17
|
+
],
|
|
18
18
|
"day_abbr": [
|
|
19
|
-
"Son.",
|
|
20
|
-
"Maan.",
|
|
21
|
-
"Dins.",
|
|
22
|
-
"Woen.",
|
|
23
|
-
"Don.",
|
|
24
|
-
"Vry.",
|
|
19
|
+
"Son.",
|
|
20
|
+
"Maan.",
|
|
21
|
+
"Dins.",
|
|
22
|
+
"Woen.",
|
|
23
|
+
"Don.",
|
|
24
|
+
"Vry.",
|
|
25
25
|
"Sat."
|
|
26
|
-
],
|
|
26
|
+
],
|
|
27
27
|
"day": [
|
|
28
|
-
"Sondag",
|
|
29
|
-
"Maandag",
|
|
30
|
-
"Dinsdag",
|
|
31
|
-
"Woensdag",
|
|
32
|
-
"Donderdag",
|
|
33
|
-
"Vrydag",
|
|
28
|
+
"Sondag",
|
|
29
|
+
"Maandag",
|
|
30
|
+
"Dinsdag",
|
|
31
|
+
"Woensdag",
|
|
32
|
+
"Donderdag",
|
|
33
|
+
"Vrydag",
|
|
34
34
|
"Saterdag"
|
|
35
|
-
],
|
|
35
|
+
],
|
|
36
36
|
"month": [
|
|
37
|
-
"Januarie",
|
|
38
|
-
"Februarie",
|
|
39
|
-
"Maart",
|
|
40
|
-
"April",
|
|
41
|
-
"Mei",
|
|
42
|
-
"Junie",
|
|
43
|
-
"Julie",
|
|
44
|
-
"Augustus",
|
|
45
|
-
"September",
|
|
46
|
-
"Oktober",
|
|
47
|
-
"November",
|
|
37
|
+
"Januarie",
|
|
38
|
+
"Februarie",
|
|
39
|
+
"Maart",
|
|
40
|
+
"April",
|
|
41
|
+
"Mei",
|
|
42
|
+
"Junie",
|
|
43
|
+
"Julie",
|
|
44
|
+
"Augustus",
|
|
45
|
+
"September",
|
|
46
|
+
"Oktober",
|
|
47
|
+
"November",
|
|
48
48
|
"Desember"
|
|
49
49
|
]
|
|
50
|
-
},
|
|
50
|
+
},
|
|
51
51
|
"api": {
|
|
52
52
|
"wikipedia": "af"
|
|
53
|
-
},
|
|
53
|
+
},
|
|
54
54
|
"messages": {
|
|
55
|
-
"loading": "Aan't laai",
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"loading_content": "Die inhoud laai",
|
|
60
|
-
"expand_timeline": "Rek die tydlyn",
|
|
55
|
+
"loading": "Aan't laai",
|
|
56
|
+
"return_to_title": "Begin voor",
|
|
57
|
+
"wikipedia": "Van Wikipedia, die gratis ensiklopedie",
|
|
58
|
+
"loading_content": "Die inhoud laai",
|
|
61
59
|
"loading_timeline": "Die tydlyn laai... "
|
|
62
|
-
},
|
|
60
|
+
},
|
|
63
61
|
"dateformats": {
|
|
64
|
-
"full_long": "d mmm',' yyyy 'om' HH:MM",
|
|
65
|
-
"full_short": "d mmm",
|
|
66
|
-
"full": "d mmmm yyyy",
|
|
67
|
-
"month_short": "mmm",
|
|
68
|
-
"time_no_seconds_small_date": "HH:MM'<br/><small>'d mmmm yyyy'</small>'",
|
|
69
|
-
"month": "mmmm yyyy",
|
|
70
|
-
"time_no_seconds_short": "HH:MM",
|
|
71
|
-
"time_short": "HH:MM:ss",
|
|
72
|
-
"year": "yyyy",
|
|
62
|
+
"full_long": "d mmm',' yyyy 'om' HH:MM",
|
|
63
|
+
"full_short": "d mmm",
|
|
64
|
+
"full": "d mmmm yyyy",
|
|
65
|
+
"month_short": "mmm",
|
|
66
|
+
"time_no_seconds_small_date": "HH:MM'<br/><small>'d mmmm yyyy'</small>'",
|
|
67
|
+
"month": "mmmm yyyy",
|
|
68
|
+
"time_no_seconds_short": "HH:MM",
|
|
69
|
+
"time_short": "HH:MM:ss",
|
|
70
|
+
"year": "yyyy",
|
|
73
71
|
"full_long_small_date": "HH:MM'<br/><small>d mmm yyyy'</small>'"
|
|
74
72
|
}
|
|
75
73
|
}
|
|
@@ -1,76 +1,74 @@
|
|
|
1
1
|
{
|
|
2
|
-
"lang": "ar",
|
|
2
|
+
"lang": "ar",
|
|
3
3
|
"direction": "rtl",
|
|
4
4
|
"messages": {
|
|
5
|
-
"loading": "تحميل",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"loading_content": "تحميل المحتوى",
|
|
10
|
-
"expand_timeline": "تكبير العرض",
|
|
5
|
+
"loading": "تحميل",
|
|
6
|
+
"return_to_title": "العودة",
|
|
7
|
+
"wikipedia": "من ويكيبيديا, الموسوعة الحرة",
|
|
8
|
+
"loading_content": "تحميل المحتوى",
|
|
11
9
|
"loading_timeline": "جاري التحميل... "
|
|
12
|
-
},
|
|
10
|
+
},
|
|
13
11
|
"api": {
|
|
14
12
|
"wikipedia": "ar"
|
|
15
|
-
},
|
|
13
|
+
},
|
|
16
14
|
"date": {
|
|
17
15
|
"month_abbr": [
|
|
18
|
-
"كانون الثاني",
|
|
19
|
-
"شباط",
|
|
20
|
-
"آذار",
|
|
21
|
-
"نيسان",
|
|
22
|
-
"أيار",
|
|
23
|
-
"حزيران",
|
|
24
|
-
"تموز",
|
|
25
|
-
"آب",
|
|
26
|
-
"أيلول",
|
|
27
|
-
"تشرين الأول",
|
|
28
|
-
"تشرين الثاني",
|
|
16
|
+
"كانون الثاني",
|
|
17
|
+
"شباط",
|
|
18
|
+
"آذار",
|
|
19
|
+
"نيسان",
|
|
20
|
+
"أيار",
|
|
21
|
+
"حزيران",
|
|
22
|
+
"تموز",
|
|
23
|
+
"آب",
|
|
24
|
+
"أيلول",
|
|
25
|
+
"تشرين الأول",
|
|
26
|
+
"تشرين الثاني",
|
|
29
27
|
"كانون الأول"
|
|
30
|
-
],
|
|
28
|
+
],
|
|
31
29
|
"day_abbr": [
|
|
32
|
-
"الأحد",
|
|
33
|
-
"الإثنين",
|
|
34
|
-
"الثلاثاء",
|
|
35
|
-
"الأربعاء",
|
|
36
|
-
"الخميس",
|
|
37
|
-
"الجمعة",
|
|
30
|
+
"الأحد",
|
|
31
|
+
"الإثنين",
|
|
32
|
+
"الثلاثاء",
|
|
33
|
+
"الأربعاء",
|
|
34
|
+
"الخميس",
|
|
35
|
+
"الجمعة",
|
|
38
36
|
"السبت"
|
|
39
|
-
],
|
|
37
|
+
],
|
|
40
38
|
"day": [
|
|
41
|
-
"الأحد",
|
|
42
|
-
"الإثنين",
|
|
43
|
-
"الثلاثاء",
|
|
44
|
-
"الأربعاء",
|
|
45
|
-
"الخميس",
|
|
46
|
-
"الجمعة",
|
|
39
|
+
"الأحد",
|
|
40
|
+
"الإثنين",
|
|
41
|
+
"الثلاثاء",
|
|
42
|
+
"الأربعاء",
|
|
43
|
+
"الخميس",
|
|
44
|
+
"الجمعة",
|
|
47
45
|
"السبت"
|
|
48
|
-
],
|
|
46
|
+
],
|
|
49
47
|
"month": [
|
|
50
|
-
"كانون الثاني",
|
|
51
|
-
"شباط",
|
|
52
|
-
"آذار",
|
|
53
|
-
"نيسان",
|
|
54
|
-
"أيار",
|
|
55
|
-
"حزيران",
|
|
56
|
-
"تموز",
|
|
57
|
-
"آب",
|
|
58
|
-
"أيلول",
|
|
59
|
-
"تشرين الأول",
|
|
60
|
-
"تشرين الثاني",
|
|
48
|
+
"كانون الثاني",
|
|
49
|
+
"شباط",
|
|
50
|
+
"آذار",
|
|
51
|
+
"نيسان",
|
|
52
|
+
"أيار",
|
|
53
|
+
"حزيران",
|
|
54
|
+
"تموز",
|
|
55
|
+
"آب",
|
|
56
|
+
"أيلول",
|
|
57
|
+
"تشرين الأول",
|
|
58
|
+
"تشرين الثاني",
|
|
61
59
|
"كانون الأول"
|
|
62
60
|
]
|
|
63
|
-
},
|
|
61
|
+
},
|
|
64
62
|
"dateformats": {
|
|
65
|
-
"full_long": "mmm d',' yyyy 'at' hh:MM TT",
|
|
66
|
-
"full_short": "mmm d",
|
|
67
|
-
"full": "mmmm d',' yyyy",
|
|
68
|
-
"month_short": "mmm",
|
|
69
|
-
"time_no_seconds_small_date": "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
|
|
70
|
-
"month": "mmmm yyyy",
|
|
71
|
-
"time_no_seconds_short": "h:MM TT",
|
|
72
|
-
"time_short": "h:MM:ss TT",
|
|
73
|
-
"year": "yyyy",
|
|
63
|
+
"full_long": "mmm d',' yyyy 'at' hh:MM TT",
|
|
64
|
+
"full_short": "mmm d",
|
|
65
|
+
"full": "mmmm d',' yyyy",
|
|
66
|
+
"month_short": "mmm",
|
|
67
|
+
"time_no_seconds_small_date": "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
|
|
68
|
+
"month": "mmmm yyyy",
|
|
69
|
+
"time_no_seconds_short": "h:MM TT",
|
|
70
|
+
"time_short": "h:MM:ss TT",
|
|
71
|
+
"year": "yyyy",
|
|
74
72
|
"full_long_small_date": "hh:MM TT'<br/><small>mmm d',' yyyy'</small>'"
|
|
75
73
|
}
|
|
76
74
|
}
|