-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCHANGES
450 lines (439 loc) · 26.8 KB
/
CHANGES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
1.8.0 2025xxxx
BF: Review: Corrections and optimization
BF: Test: Correction for the output of messages with timestamp
BF: Test: Correction of Assert.assertSame(), incorrect implementation
BF: Composite: Correction of partial rendering of iterate
CR: Composite: Validation works strictly by default
The validation must explicitly return true so that the input data from the
HTML elements is synchronized to the models. The behavior can be
deactivated with the declaration: validate="optional", which was the
previous default behavior. In the markup, the attribute strict is therefore
omitted.
CR: Composite: Validation message is shown by default as native browser tooltip
In the markup, the attribute notification is therefore omitted.
CR: Composite: Validation message added redirection to an attribute
If a message begin with @<attribute>:, which includes the return values of
express, these are redirected to the attribute declared in this way.
CR: Composite: Added Composite.lookup(selector)
Determines the corresponding meta-object for the passed selector.
CR: Composite: Conversion from acceptors to interceptors
CR: Composite: Conversion to a separate scope page for expression variables
Variables are set by expressions, which includes the variables from the
attribute iterate, now use their own scope page and are no longer global.
CR: Extension: Review, corrections and optimization
- Renamed window.location.pathcontext in window.location.contextPath
CR: Release: Review, corrections and optimization
- Added eslint for ES6 check
- Omission of the micro version without routing
This unnecessarily inflated the number of release (channels).
- Reworked file structure:
- aspect-js.js
Deployment version, ES6 optimized, minimized and without testing API
- aspect-js-debug.js
Debugging version, ES6 optimized, minimized and without testing API
- aspect-js-debug-max.js
Debugging version, ES6 optimized and without testing API
- aspect-js-debug-testing.js
Debugging version, ES6 optimized, minimized and with testing API
- aspect-js-debug-testing-max.js
Debugging version, ES6 optimized and with testing API
- aspect-js-max.js
Deployment version, ES6 optimized and without testing API
- aspect-js-source.js
Source version without testing API
- aspect-js-source-testing.js
Source version with testing API
- aspect-js-testing.js
Testing version, ES6 optimized, minimized and with testing API
- aspect-js-testing-max.js
Testing version, ES6 optimized and with testing API
CR: Review: Corrections and optimization
- Compatibility with "use strict"
- Compatibility with ES6
CR: SiteMap: Review, refactoring, corrections and optimization
- Renaming to routing
- Change to activation of routing to the attribute boolean route in the body
tag; values are not supported
- Omission of predefined paths like SiteMap.customize(...), replaced by
dynamic paths based on the nested composites
- Omission of functional paths, the existing acceptors is the better way
- Omission of variable path, becomes obsolete with the new dynamic routing
- Optimization of the path for routing
- Conversion from acceptors to interceptors
CR: Test: Change the start to ant -f development/build.xml run
1.7.0 20241228
BF: Composite: Correction from mounting (dock/undock) composites with namespace
BF: Composite: Correction when inserting markup into composites
If the markup for a composite was removed from the DOM,
content was not inserted when the composite was reinserted into the DOM.
BF: Composite: Correction when loading CSS modules
If a module is first requested programmatically by name, the CSS was not
loaded when the module was later loaded as an element.
BF: Composite: Correction of the view model binding
Initial values of modules were not set in the corresponding HTML elements.
BF: Composite Mount Events: Correction of the unwanted assignment of child elements
BF: Reactive: Correction of incorrect creation of proxies for HTML elements
BF: Reactive: Correction of unwanted rendering when docking modules
CR: Composite: Omission of the attribute namespace
Replaced by extended composite ID name@namespace (separated by colon).
e.g. model@a:b:c -> ./modules/a/b/c/model.js -> a.b.c.model
The approach with the attribute namespace was not practical.
CR: Composite: Omission of attributes strict in combination with composite
The combination of the attribute strict was not practicable for namespaces.
The notation for the module files is now used 1:1.
CR: Composite: Added EVENT_MODULE_LOAD when a module is loaded
Is called once per module.
CR: Composite: Added EVENT_MODULE_DOCK/EVENT_MODULE_READY/EVENT_MODULE_UNDOCK
CR: Composite Render Iterate: Optimization for updating markup
If the array does not change in length, the existing markup is only updated
without replacing it completely.
CR: Composite Render Iterate: Optimization of the error output in the view
CR: Composite Render Condition: Optimization of the error output in the view
CR: Composite Render: Optimization of IDs before rendering
Possible expressions at initial IDs are already resolved before rendering.
CR: Datasource: Optimization of language selection
Alternatively, the languages of the browser without tags are considered.
RFC 5646: lang-tag-tag-... -> lang
CR: Documentation: Reduction to English
CR: Expression: Optimization of the return of errors
Errors are returned as error objects instead of text.
CR: Expression: Extension of the element expression by //...// for embedding logic
e.g. {{#[element://index+1//]}} when index is a variable
CR: Expression: Optimization when interpreting in combination with text
e.g. <input id="file_{{index +1}}"/> previously brackets had to be used
CR: Messages: Change in case of multiple keys, the first one wins
Overwriting messages at runtime is generally not possible.
CR: Messages: Added locales/messages for modules
Locales/messages are loaded with the module from the module directory.
Modules can extend messages but not change/overwrite them. Locales/messages
for modules are used as global locales/messages, no difference in use.
CR: Test: Update web server to version 5.7.1
1.6.1 20230410
BF: Composite: Added recursion detection for include of composite markup
If a recursion is detected when the module is included, an error is output.
BF: Composite: Correction of validation with message and notification without model
BF: Composite: Correction of mounting of child elements in a condition
BF: Composite: Correction of the queue during rendering when a lock exists
BF: Expression: Unification of the suppressed output
Only the value undefined but not the string "undefined" suppresses the output.
False and comparable non-true values are now output.
BF: Reactive: Correction for the use of arrays
The data type incorrectly changed from array to object.
BF: Reactive: Correction/optimization for elements with iterate
The renderer always updates the top element with iterate in the DOM so that
temporary variables are available in the expressions.
BF: Reactive: Correction of recursive triggered updates
BF: Review: Optimization and corrections
Added detection of future incompatibilities.
Reduce the size of the releases.
BF: Test: Correction of wrong output of Element.prototype.toPlainString()
CR: Reactive: Optimization of object-model-view decoupling
CR: Reactive: Refactoring to distinguish from frameworks with similar name
CR: SiteMap: Inactive by default
Attribute static is then not required for composites.
Simplifies micro frontends without face-flow.
SiteMap becomes active with the call of the method SiteMap.customize(...).
CR: Expression: Extension of the syntax for elements and variables
- support of the underscore at the beginning
- support of complex element syntax #[...]
CR: Expression: Optimization (consequent new implementation)
- complete new approach for parser and interpreter
CR: Expression: Omission of automatic use of get and is methods for fields
- since getters and setters are available in JavaScript
CR: Expression: omission of tolerance for undefined parts in object chains (like JSP EL)
- is too extensive in JavaScript with ReferenceError/TypeError/undefined/false/null/...
- is replaced by (?...), in case of error this syntax in the brackets will return false
CR: Composite: Errors during rendering are output in the view
- Rendering does not abort
- Errors are also logged as errors on the console
- Errors can also be subscribed as a composite event
CR: Composite: Renamed method Object.using(...) in Object.use(...)
CR: Composite: Optimization when loading module resources
- change of sequence to: JS, CSS, HTML (markup)
- JavaScript for modules is only loaded if no JavaScript model exists
- CSS for modules is only loaded if HTML is also loaded
- omission of the HEAD request
Minimizes HTTP requests in the background and when loading the page.
CR: Composite: Extension of the element ID with a unique identifier
format: name:qualifier...#identifier@namespace...:model
The unique identifier is for the view and business logic, but has no effect on composite.
CR: Composite: Added @-attributes as attribute templates for elements
Creates corresponding attributes, which is convenient if they use expressions as value.
CR: Composite: Changing the behavior of the validation
Synchronization and function execution are no longer blocked by violations.
For the previous strict behavior, the attributes validate and strict must be combined.
CR: Scripting: Outsourcing and isolating the execution of Composite JavaScript
CR: Scripting: Optimization macros for Composite JavaScript
- can now be used anywhere in the code, also in combination with conditions
- can now also be separated from the next command with a semicolon
CR: Scripting: Added macro #export for Composite JavaScript
Makes local variables and constants from modules usable in the global namespace.
CR: Scripting: Added macro #use for Composite JavaScript
Creates namespaces if they do not already exist.
CR: Scripting: Added macro (?...) for Composite JavaScript
In case of an error the value of the enclosed logic is equivalent to false
without throwing an error, except for syntax errors.
except for syntax errors.
CR: Datasource: Optimization when loading module resources
- Omission of the HEAD request
- Omission of XML error when the request receives an error page
- Minimizes HTTP requests in the background and when loading the page.
CR: Messages: Added messages as alternative object tree for associative array Messages
CR: Messages: Added Messages.customize(label, ...values) to fill placeholders with values
CR: Namespace: Renamed method Namespace.using(...) in Namespace.use(...)
CR: Extension: Math.unique(...) replaces Math.uniqueId(...)
CR: Extension: Math.serial() replaces Math.uniqueSerialId(...)
The method is now completely time-based and independent of Math.unique().
The serial is still unique and as text chronologically sortable.
CR: Release: Added the manual (de/en) to the release package (zip)
CR: Release: Channels with major number are omitted
CR: Release: Revision of the release channels
- standard: contains all minimized
for test and deployment
- standard-max: contains all
not minimized and with comments
for development and testing
- core: contains all minimized, except the Test API
for deployment
- core-max: contains all minimized, except the Test API
not minimized and with comments
for development and testing
- micro: contains all minimized, except SiteMap, minimized
for development and testing and deployment of micro frontends without face-flow
- micro-max: contains all minimized, except SiteMap
not minimized and with comments
for development and testing of micro frontends without face-flow
- micro-core: contains all minimized, except the Test API and SiteMap
for deployment of micro frontends without face-flow
- micro-core-max: contains all minimized, except the test API and SiteMap
not minimized and with comments
for development and testing of micro frontends without face-flow
1.6.0 00000000
NT: Unwanted version in registry.npmjs.org :-|
Therefore there is no official version 1.6.0.
1.5.1 20230107
BF: Release: Correction of the missing release directory for jsDelivr
CR: Release: New channel for lite version
Lite is a version without test module/extension.
1.5.0 20230105
BF: Review: Optimization and corrections
BF: Documentation: Correction of encoding
BF: Build: Optimization / correction of the release process
BF: Composite Events: Correction of the missing selector
for: EVENT_RENDER_START, EVENT_MOUNT_START, EVENT_RENDER_NEXT, EVENT_MOUNT_NEXT
BF: Test: Correction of the output of failed assertions
CR: Reactive: Added for a reactivity rendering
Rendering can be reactive to changes in data objects and trigger partial
rendering at consumers
CR: Composite: Added a domain concept based on namespaces
In the markup, the parent composite elements that use the attribute namespace
define the namespace to be used for the model and modules.
CR: Composite: Aligned to the syntax for: COMPOSITE_ID / ELEMENT_ID / CUSTOMIZE_SCOPE
ELEMENT_ID characters : and @ can only be used correctly
COMPOSITE_ID / ELEMENT_ID character - is omitted, analogous to the syntax for CSS and variables in JavaScript
CUSTOMIZE_SCOPE must start with _ a-z A-Z according to the W3C standard
CR: Composite: Extension of the element id for an optional reference
The reference to a module in the namespace is added at the end of the ID syntax,
after qualifiers and separated by the @ character:
e.g. buttonSend:...@Imprint:Contact
As with qualifiers, the : character can be used to separate object levels.
CR: Composite Events: Extended of EVENT_RENDER_NEXT for generated text nodes
If text nodes contain expressions, they are split and reassembled from a
sequence of new static and dynamic text nodes. EVENT_RENDER_NEXT now also
captures the and text nodes thus created during rendering.
CR: NPM: Change to a package with scope (is also already in 1.4.0)
The change was made afterwards of the 1.4.0 release.
CR: Build: Releases are now only available on the release page
CR: Build: Switch to UglifyJS
CR: Server: Added Ant task to start and stop the web server
CR: Playground: Added as a playground for development
Develop with the current sources without build.
CR: Test: Update web server to version 5.5.x
CR: Test: Added Assert.assertUndefined(...) / Assert.assertNotUndefined(...)
1.4.0 20211210
BF: Composite: Correction in the use of attributes
If numbers are used as value could cause errors during rendering.
BF: Composite Expression Language: Line breaks in the expressions are supported
Multiline expressions are now possible.
BF: Composite: Correction for a URL without a file
The paths of the modules were composed incorrectly.
BF: DataSource: Correction for a URL without a file
The paths of the data files were composed incorrectly.
BF: MVC SiteMap: Correction of the method customize when using variable paths
BF: Review: Correction/optimization JavaScript (no functional change)
BF: Test: Correction in determining the browser engine for WebKit and Blink
CR: Composite Expression Language: Added keywords eeq (===), nee (!==)
CR: Composite: Added attribute strict for loading of modules/composites
New default behavior without attribute:
The names of the resources to be loaded always start with lower case.
With the attribute strict, the actual spelling of the composite ID is used.
Example:
<div id="SmallExample" composite> loads smallExample.css/smallExample.js/smallExample.html
<div id="SmallExample" composite strict> loads SmallExample.css/SmallExample.js/SmallExample.html
CR: Extension Namespace: Added method create
Creates a namespace to pass string with a initial value.
It is a small extension to the method using.
CR: Extension: Added method window.location.combine to combine paths
CR: License: Changed to Apache License Version 2.0
CR: Test: Integration of a web server
CR: Test: Removal of the Edge engine after switching to Chromium
CR: Test: Removal of the distinction between MacOS and iOS
1.3.1 20200202
BF: DataSource: Correction for loading and caching
Affects mainly MS Edge.
1.3.0 20200202
BF: Composite Expression Parse: Correction in the detection/processing of escape sequences
Error example: {{'abc\'123'}}
BF: DataSource Collect: Correction of the cache usage with a collector
Error example: DataSource.collect("data", ["xml://a", "xml://b", "xml://c"]);
BF: DataSource Fetch: Correction of the pattern of schema switching
BF: DataSource Fetch: Optimization of the language determination
BF: MVC SiteMap: Optimization to focus from the current target after changing the path
BF: Modules: Optimization of JavaScript processing to support import and export
BF: Composite Render: Optimization of JavaScript processing to support import and export
BF: Composite Events: Correction of the callback of HTTP events
BF: Composite Mount: Correction to find event methods also in prototypes
BF: Composite Modules: Correction of the script processing of the #import macro
BF: Composite MutationObserver: Correction for recognition of expressions in text nodes
CR: MVC Path: Simplification of the syntax restrictions
The syntax is more consistently based on XML entities (DOM).
A path can now begin with any word character (_ a-z A-Z 0-9).
CR: DataSource Locator: Simplification of the syntax restrictions
The syntax is more consistently based on URL syntax.
A locator can use any word characters (_ a-z A-Z 0-9) and additionally the - character.
This means that the DataSource can also be used better for mandators and detailed locales (e.g. en_us).
CR: Composite Render Condition: Added console error output for faulty expression
The behaviour of the function remains unchanged.
CR: Composite Render Condition: Added console error output for faulty expression
CR: Composite Render: Optimization in the detection and validation of expressions
CR: Composite Render: Simplification of the syntax restrictions for variable expressions
The variable name is based on a word (_ a-z A-Z 0-9) and additionally - characters
and can now begin with any word character (_ a-z A-Z 0-9).
CR: Composite Render: Simplification of the syntax restrictions for composite IDs
The composite ID is based on a word (_ a-z A-Z 0-9) and additionally - characters
and can now begin with any word character (_ a-z A-Z 0-9).
CR: Composite Render: Simplification of the syntax restrictions for element IDs
The element ID is based on words (_ a-z A-Z 0-9) and additionally - characters
and can now begin with any word character (_ a-z A-Z 0-9).
CR: Composite Render: Simplification of the syntax restrictions for custom tags
The custom tag is based on a word (_ a-z A-Z 0-9) and additionally - characters
and can now begin with any word character (_ a-z A-Z 0-9).
CR: Composite Modules: Change so that the common composite is now loaded before the first rendering
CR: Composite Modules: Added the macro #import to import additional composites/modules
Macros can be used only at the beginning of the Composite JavaScript.
The meta-section ends with the first comment or JavaScript line.
CR: Composite Events: Renaming of EVENT_AJAX... in EVENT_HTTP...
CR: DataSource Fetch: Omission of the parameter raw
When using the transformation a NodeList is always returned.
CR: DataSource Fetch: Added optional parameters for the transformation
The parameters are passed to the XSLTProcessor as meta-object or map.
CR: DataSource Transform: Omission of the parameter raw
When using the transformation a NodeList is always returned.
CR: DataSource Transform: Added optional parameters for the transformation
The parameters are passed to the XSLTProcessor as meta-object or map.
CR: DataSource Transform: Change of return value from NodeList to DocumentFragment
1.2.0 20191231
BF: Composite: Wrapper of XMLHttpRequest.open correction for using all passed arguments
BF: Composite Asynchron: Corection of passed arguments
BF: Composite Events: Composite.EVENT_RENDER_END now includes the mounting of models
BF: Composite Mount Synchronization: Correction for the input-elements: select, radio, checkbox
BF: Composite Render Condition: Exclusive use of the placeholder
Output now delegates consistently to the placeholder.
BF: Composite Render Include: Optimization/correction of the strategy
When importing modules in combination with conditions (placeholder/template)
BF: Composite Render Include: Loading and inserting HTML content for elements
Is now done directly and is no longer delegated to the renderer via the IMPORT attribute.
BF: Composite Expression Parse: Correction of the detection of value- and method-expressions
BF: Composite Lock Managment: Queue progress only after release functionality
BF: Extension Capitalize: Correction for use with empty strings
BF: MVC: Correction of the embedded use of SiteMap.accept(path)
BF: MVC: Correction of initial forwarding from / to /#
CR: Test: (Re)Move of Assert.assertEqualsTo as Assert.assertSameTo in /test/modules/common.js
CR: Test: Enhancement of console output monitoring
CR: Test: Optimization of console forwarding
CR: Test: Extension of console forwarding by listeners
CR: Test: Extension for passing events (Test + Console) to the enclosing object when using frames
CR: Test: Extension for central catching of errors with activated Test-AP
CR: Test: Optimization for using readonly meta-objects for return values
CR: Test Suite: Optimization of error output
CR: Test: Omission of the method Test.configure(...), function is taken over by Test.start(...)
CR: Composite Object Lookup: Added support now for arrays (also associative)
In additional ':' is accepted as separator, so that the syntax is more understandable
e.g. model.array:1 / model.object:property
CR: Composite Render: Extension with the attribute 'release' as an indicator that an element was rendered.
Can be used to control visibility so that only final rendered output/content is visible.
CSS: *[release] {display:none;}
CR: Composite Render: Support of expressions for all composite / render attributes (new ID and EVENTS)
CR: Composite Render Iterate: Correction/Optimization in general
CR: Composite Render Iterate: Optimization for using readonly meta-object
CR: Composite Render Attributes: undefined as return value of an expression deletes an attribute
The deletion is only temporary, the renderer still knows the attribute and checks it again in each render cycle.
CR: Composite Scan: Omission of the intermediate step between render and mount
CR: Composite Mount: Revision of the view model binding
CR: Composite Mount: Stricter use of the hierarchy of IDs in the DOM
CR: Composite Mount Validation: Change to two-phase validation (HTML5 + model-based validation)
CR: Composite Mount Validation: Has a direct effect on synchronization, action and default action of the browser
Everyone expects a valid validation if a validation exists.
CR: Composite Mount Validation: Enhancement with the attribute message for error output
The message can have pipe-separated directives to control output for title and report.
e.g. T|R:Mandatory in the numerical range from 1 to 100.
CR: Composite Mount Validation: Relocation to own method Composite.validate(selector)
Can be (re)used to implement own validation methods in the models.
CR: Composite Mount Synchronization: Optimization
CR: Composite Mount Action: The return value false can cancel the default action of the browser
CR: Composite Mount Locate: Stricter use of the hierarchy of IDs in the DOM
The hierarchy of IDs in the DOM defines the model and sub-models.
Absolute and relative IDs in the markup are completely omitted.
CR: Composite Mount Locate: Stricter use of property and qualifier (name)
CR: Composite Mount Lookup: Stricter use of property and qualifier (name)
CR: Composite Mount Synchronization: Extension by the detection and use of setter (object accessors)
CR: Composite Release: Addition of the CSS rule when the page is loaded
CR: Composite Hardening: Added optional hardening from markup
Hardening makes it difficult to manipulate the attributes in the markup.
CR: Composite Include: Modules with a condition are only reloaded if the condition is true
CR: MVC Path: Support paths with beginning numbers
Any word character (alphanumeric character) and underscore can be used.
CR: MVC SiteMap: Omission of autofocus, since the use scrollIntoView can be too individual
The own implementation is very simple and much flexible.
window.addEventListener("hashchange", (event) => {
var path = Path.normalize(event.newURL || "#");
var target = SiteMap.lookup(path);
if (target) {
target = target.facet || target.face;
if (target) {
target = target.replace(/(?!=#)#/, " #");
target = document.querySelector(target);
if (target) {
target.scrollIntoView(true);
target.focus();
}
}
}
});
CR: MVC SiteMap: Added variable paths for faces and facets
The character sequence ... at the end of a facet in the SiteMap configuration defines a variable path for a face(t).
The path can be of any length and can be used to pass parameters and is comparable to PATH_INFO in CGI.
CR: MVC SiteMap: Added the forward method
In difference to navigate, forwarding is executed directly and without triggers.
CR: DataSource Locales: As standard marked are at the beginning
CR: Extension Uncapitalize: Adds a uncapitalize function to the String objects
CR: Extension: Added Math.uniqueSerialId to create serial (U)UIDs
CR: Extension: Optimization for using readonly meta-objects for return values
CR: Extension Namespace: Optimization and extension
- new methods: Namespace.lookup(...), Namespace.exists(...)
- strict use of the dot, alternative slash is omitted
- additional support of arrays
- more tolerant use of word characters
CR: Messages: Update to use constant key/value pairs
CR: Build: Optimization of target 'changes'
CR: Build: Additional compression via javascript-minifier.com
Less than 64kB are reached
1.1.0 20190530
BF: Build: Optimization/correction when creating releases
BF: DataSource: Correction if no DataSource exists
BF: Messages: Correction if no DataSource exists
CR: DataSource: Added the changing of localization via DataSource.localize(locale)
CR: Messages: Added the changing of localization via DataSource.localize(locale)
CR: Project: Added support for jsdelivr.com
1.0.0 20190515
NT: Release is available