unpoly-rails 2.3.0 → 2.4.0
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.
Potentially problematic release.
This version of unpoly-rails might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/assets/unpoly/unpoly.es5.js +151 -66
- data/assets/unpoly/unpoly.es5.min.js +1 -1
- data/assets/unpoly/unpoly.js +151 -65
- data/assets/unpoly/unpoly.min.js +1 -1
- data/lib/unpoly/rails/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: beba0d8578cac674b4e6cda8f8a062eae1217198fdc6e1f6e0a525b6bb61c395
|
4
|
+
data.tar.gz: 6b962622c193cd2c3910c0dba3830a092dbfb6c7b02ea58ce47d15765dc488a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00ce246b00f89e57b7996c42489e72ba249d2976747d8a46bb21a5ebd35dd3575f29acb1b00bbd012b44c25633c1d3cb41c67be4748fe0feb6044b349475eede
|
7
|
+
data.tar.gz: c07e6975fe87448e624eb5be7d90a862a9abdb9a4f07a970acee59dd106d0499adec32a884a18b341e38c1de1d2cb35df336ef9ef3194f7eb0ffb0a796eb3491
|
data/assets/unpoly/unpoly.es5.js
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
@module up
|
9
9
|
*/
|
10
10
|
window.up = {
|
11
|
-
version: '2.
|
11
|
+
version: '2.4.0'
|
12
12
|
};
|
13
13
|
|
14
14
|
|
@@ -105,27 +105,63 @@ up.util = (function () {
|
|
105
105
|
}
|
106
106
|
var NORMALIZE_URL_DEFAULTS = {
|
107
107
|
host: 'cross-domain',
|
108
|
-
stripTrailingSlash: false,
|
109
|
-
search: true,
|
110
|
-
hash: false
|
111
108
|
};
|
112
109
|
/*-
|
113
|
-
|
110
|
+
Returns a normalized version of the given URL string.
|
111
|
+
|
112
|
+
Two URLs that point to the same resource should normalize to the same string.
|
113
|
+
|
114
|
+
### Comparing normalized URLs
|
115
|
+
|
116
|
+
The main purpose of this function is to normalize two URLs for string comparison:
|
117
|
+
|
118
|
+
```js
|
119
|
+
up.util.normalizeURL('http://current-host/path') === up.util.normalizeURL('/path') // => true
|
120
|
+
```
|
121
|
+
|
122
|
+
By default the hostname is only included if it points to a different origin:
|
123
|
+
|
124
|
+
```js
|
125
|
+
up.util.normalizeURL('http://current-host/path') // => '/path'
|
126
|
+
up.util.normalizeURL('http://other-host/path') // => 'http://other-host/path'
|
127
|
+
```
|
128
|
+
|
129
|
+
Relative paths are normalized to absolute paths:
|
130
|
+
|
131
|
+
```js
|
132
|
+
up.util.normalizeURL('index.html') // => '/path/index.html'
|
133
|
+
```
|
134
|
+
|
135
|
+
### Excluding URL components
|
136
|
+
|
137
|
+
You may pass options to exclude URL components from the normalized string:
|
138
|
+
|
139
|
+
```js
|
140
|
+
up.util.normalizeURL('/foo?query=bar', { query: false }) => '/foo'
|
141
|
+
up.util.normalizeURL('/bar#hash', { hash: false }) => '/bar'
|
142
|
+
```
|
143
|
+
|
144
|
+
### Limitations
|
145
|
+
|
146
|
+
- Username and password are always omitted from the normalized URL.
|
147
|
+
- Only `http` and `https` schemes are supported.
|
114
148
|
|
115
149
|
@function up.util.normalizeURL
|
116
150
|
@param {boolean} [options.host='cross-domain']
|
117
151
|
Whether to include protocol, hostname and port in the normalized URL.
|
118
152
|
|
119
|
-
|
120
|
-
|
121
|
-
|
153
|
+
When set to `'cross-domain'` (the default), the host is only included if it differ's from the page's hostname.
|
154
|
+
|
155
|
+
The port is omitted if the port is the standard port for the given protocol, e.g. `:443` for `https://`.
|
156
|
+
@param {boolean} [options.hash=true]
|
157
|
+
Whether to include an `#hash` anchor in the normalized URL.
|
122
158
|
@param {boolean} [options.search=true]
|
123
|
-
Whether to include a `?query` string in the normalized URL
|
124
|
-
@param {boolean} [options.
|
125
|
-
Whether to
|
159
|
+
Whether to include a `?query` string in the normalized URL.
|
160
|
+
@param {boolean} [options.trailingSlash=true]
|
161
|
+
Whether to include a trailing slash from the pathname.
|
126
162
|
@return {string}
|
127
163
|
The normalized URL.
|
128
|
-
@
|
164
|
+
@experimental
|
129
165
|
*/
|
130
166
|
function normalizeURL(urlOrAnchor, options) {
|
131
167
|
options = newOptions(options, NORMALIZE_URL_DEFAULTS);
|
@@ -144,21 +180,18 @@ up.util = (function () {
|
|
144
180
|
}
|
145
181
|
}
|
146
182
|
var pathname = parts.pathname;
|
147
|
-
if (options.
|
183
|
+
if (options.trailingSlash === false && pathname !== '/') {
|
148
184
|
pathname = pathname.replace(/\/$/, '');
|
149
185
|
}
|
150
186
|
normalized += pathname;
|
151
|
-
if (options.search) {
|
187
|
+
if (options.search !== false) {
|
152
188
|
normalized += parts.search;
|
153
189
|
}
|
154
|
-
if (options.hash) {
|
190
|
+
if (options.hash !== false) {
|
155
191
|
normalized += parts.hash;
|
156
192
|
}
|
157
193
|
return normalized;
|
158
194
|
}
|
159
|
-
function urlWithoutHost(url) {
|
160
|
-
return normalizeURL(url, { host: false });
|
161
|
-
}
|
162
195
|
function matchURLs(leftURL, rightURL) {
|
163
196
|
return normalizeURL(leftURL) === normalizeURL(rightURL);
|
164
197
|
}
|
@@ -1961,7 +1994,6 @@ up.util = (function () {
|
|
1961
1994
|
return {
|
1962
1995
|
parseURL: parseURL,
|
1963
1996
|
normalizeURL: normalizeURL,
|
1964
|
-
urlWithoutHost: urlWithoutHost,
|
1965
1997
|
matchURLs: matchURLs,
|
1966
1998
|
normalizeMethod: normalizeMethod,
|
1967
1999
|
methodAllowsPayload: methodAllowsPayload,
|
@@ -4035,7 +4067,7 @@ up.Change.Addition = /** @class */ (function (_super) {
|
|
4035
4067
|
// (1) Don't set a source if { false } is passed.
|
4036
4068
|
// (2) Don't set a source if the element HTML already has an [up-source] attribute.
|
4037
4069
|
if (source) {
|
4038
|
-
e.setMissingAttr(newElement, 'up-source', u.normalizeURL(source));
|
4070
|
+
e.setMissingAttr(newElement, 'up-source', u.normalizeURL(source, { hash: false }));
|
4039
4071
|
}
|
4040
4072
|
};
|
4041
4073
|
return Addition;
|
@@ -14447,7 +14479,7 @@ up.history = (function () {
|
|
14447
14479
|
/*-
|
14448
14480
|
Returns a normalized URL for the previous history entry.
|
14449
14481
|
|
14450
|
-
Only history entries
|
14482
|
+
Only history entries added by Unpoly functions will be considered.
|
14451
14483
|
|
14452
14484
|
@property up.history.previousLocation
|
14453
14485
|
@param {string} previousLocation
|
@@ -14461,14 +14493,20 @@ up.history = (function () {
|
|
14461
14493
|
nextPreviousLocation = undefined;
|
14462
14494
|
trackCurrentLocation();
|
14463
14495
|
}
|
14464
|
-
|
14465
|
-
|
14466
|
-
|
14467
|
-
|
14496
|
+
var DEFAULT_NORMALIZE_OPTIONS = { hash: true };
|
14497
|
+
function normalizeURL(url, options) {
|
14498
|
+
// The reason why we this takes an { options } object is that
|
14499
|
+
// isCurrentLocation() ignores a trailing slash. This is used to check whether
|
14500
|
+
// we're already at the given URL before pushing a history state.
|
14501
|
+
options = u.merge(DEFAULT_NORMALIZE_OPTIONS, options);
|
14502
|
+
return u.normalizeURL(url, options);
|
14468
14503
|
}
|
14469
14504
|
/*-
|
14470
14505
|
Returns a normalized URL for the current browser location.
|
14471
14506
|
|
14507
|
+
The returned URL is an absolute pathname like `"/path"` without a hostname or port.
|
14508
|
+
It will include a `#hash` fragment and query string, if present.
|
14509
|
+
|
14472
14510
|
Note that if the current [layer](/up.layer) does not have [visible history](/up.Layer.prototype.history),
|
14473
14511
|
the browser's address bar will show the location of an ancestor layer.
|
14474
14512
|
To get the location of the current layer, use `up.layer.location`.
|
@@ -14494,11 +14532,51 @@ up.history = (function () {
|
|
14494
14532
|
}
|
14495
14533
|
}
|
14496
14534
|
trackCurrentLocation();
|
14497
|
-
|
14498
|
-
|
14499
|
-
|
14500
|
-
|
14501
|
-
|
14535
|
+
// Some web frameworks care about a trailing slash, some consider it optional.
|
14536
|
+
// Only for the equality test ("is this the current URL?") we consider it optional.
|
14537
|
+
// Note that we inherit { hash: true } from DEFAULT_NORMALIZE_OPTIONS.
|
14538
|
+
var ADDITIONAL_NORMALIZE_OPTIONS_FOR_COMPARISON = { trailingSlash: false };
|
14539
|
+
/*-
|
14540
|
+
Returns whether the given URL matches the [current browser location](/up.history.location).
|
14541
|
+
|
14542
|
+
### Examples
|
14543
|
+
|
14544
|
+
```js
|
14545
|
+
location.hostname // => '/path'
|
14546
|
+
|
14547
|
+
up.history.isLocation('/path') // => true
|
14548
|
+
up.history.isLocation('/path?query') // => false
|
14549
|
+
up.history.isLocation('/path#hash') // => false
|
14550
|
+
up.history.isLocation('/other') // => false
|
14551
|
+
```
|
14552
|
+
|
14553
|
+
The given URL is [normalized](/up.util.normalizeURL), so any URL string pointing to the browser location
|
14554
|
+
will match:
|
14555
|
+
|
14556
|
+
```js
|
14557
|
+
location.hostname // => '/current-host'
|
14558
|
+
location.pathname // => '/foo'
|
14559
|
+
|
14560
|
+
up.history.isLocation('/foo') // => true
|
14561
|
+
up.history.isLocation('http://current-host/foo') // => true
|
14562
|
+
up.history.isLocation('http://otgher-host/foo') // => false
|
14563
|
+
```
|
14564
|
+
|
14565
|
+
@function up.history.isLocation
|
14566
|
+
@param {string} url
|
14567
|
+
The URL to compare against the current browser location.
|
14568
|
+
|
14569
|
+
This can be a either an absolute pathname (`/path`), a relative filename (`index.html`) or a fully qualified URL (`https://...`).
|
14570
|
+
@param {boolean} [options.hash=true]
|
14571
|
+
Whether to consider `#hash` fragments in the given or current URLs.
|
14572
|
+
|
14573
|
+
When set to `false` this function will consider the URLs `/foo#one` and `/foo#two` to be equal.
|
14574
|
+
@return {boolean}
|
14575
|
+
@experimental
|
14576
|
+
*/
|
14577
|
+
function isLocation(url, options) {
|
14578
|
+
options = u.merge(ADDITIONAL_NORMALIZE_OPTIONS_FOR_COMPARISON, options);
|
14579
|
+
return normalizeURL(url, options) === currentLocation(options);
|
14502
14580
|
}
|
14503
14581
|
/*-
|
14504
14582
|
Replaces the current history entry and updates the
|
@@ -14518,8 +14596,9 @@ up.history = (function () {
|
|
14518
14596
|
*/
|
14519
14597
|
function replace(url, options) {
|
14520
14598
|
if (options === void 0) { options = {}; }
|
14599
|
+
url = normalizeURL(url);
|
14521
14600
|
if (manipulate('replaceState', url) && (options.event !== false)) {
|
14522
|
-
emit('up:location:changed', { url: url, reason: 'replace', log: "Replaced state for " +
|
14601
|
+
emit('up:location:changed', { url: url, reason: 'replace', log: "Replaced state for " + url });
|
14523
14602
|
}
|
14524
14603
|
}
|
14525
14604
|
/*-
|
@@ -14532,6 +14611,8 @@ up.history = (function () {
|
|
14532
14611
|
Note that [fragment navigation](/navigation) will automatically update the
|
14533
14612
|
browser's location bar for you.
|
14534
14613
|
|
14614
|
+
Does not add a history entry if the the given URL is already the current browser location.
|
14615
|
+
|
14535
14616
|
Emits event `up:location:changed`.
|
14536
14617
|
|
14537
14618
|
@function up.history.push
|
@@ -14541,8 +14622,8 @@ up.history = (function () {
|
|
14541
14622
|
*/
|
14542
14623
|
function push(url) {
|
14543
14624
|
url = normalizeURL(url);
|
14544
|
-
if (!
|
14545
|
-
up.emit('up:location:changed', { url: url, reason: 'push', log: "Advanced to location " +
|
14625
|
+
if (!isLocation(url) && manipulate('pushState', url)) {
|
14626
|
+
up.emit('up:location:changed', { url: url, reason: 'push', log: "Advanced to location " + url });
|
14546
14627
|
}
|
14547
14628
|
}
|
14548
14629
|
/*-
|
@@ -14705,8 +14786,8 @@ up.history = (function () {
|
|
14705
14786
|
replace: replace,
|
14706
14787
|
get location() { return currentLocation(); },
|
14707
14788
|
get previousLocation() { return previousLocation; },
|
14708
|
-
|
14709
|
-
|
14789
|
+
normalizeURL: normalizeURL,
|
14790
|
+
isLocation: isLocation
|
14710
14791
|
};
|
14711
14792
|
})();
|
14712
14793
|
|
@@ -16507,7 +16588,7 @@ up.fragment = (function () {
|
|
16507
16588
|
}
|
16508
16589
|
up.on('up:framework:boot', function () {
|
16509
16590
|
var body = document.body;
|
16510
|
-
body.setAttribute('up-source',
|
16591
|
+
body.setAttribute('up-source', u.normalizeURL(location.href, { hash: false }));
|
16511
16592
|
hello(body);
|
16512
16593
|
if (!up.browser.canPushState()) {
|
16513
16594
|
return up.warn('Cannot push history changes. Next fragment update will load in a new page.');
|
@@ -17157,7 +17238,7 @@ up.viewport = (function () {
|
|
17157
17238
|
var _a = parseOptions(args), viewports = _a[0], options = _a[1];
|
17158
17239
|
var url = options.layer.location;
|
17159
17240
|
var scrollTopsForURL = options.layer.lastScrollTops.get(url) || {};
|
17160
|
-
up.puts('up.viewport.restoreScroll()', 'Restoring scroll positions for URL %s to %o',
|
17241
|
+
up.puts('up.viewport.restoreScroll()', 'Restoring scroll positions for URL %s to %o', url, scrollTopsForURL);
|
17161
17242
|
return setScrollTops(viewports, scrollTopsForURL);
|
17162
17243
|
}
|
17163
17244
|
function parseOptions(args) {
|
@@ -18678,20 +18759,11 @@ up.network = (function () {
|
|
18678
18759
|
}
|
18679
18760
|
var request = new up.Request(parseRequestOptions(args));
|
18680
18761
|
useCachedRequest(request) || queueRequest(request);
|
18681
|
-
|
18682
|
-
if (solo) {
|
18683
|
-
// The { solo } option may also contain a function.
|
18684
|
-
// This way users can excempt some requests from being solo-aborted
|
18685
|
-
// by configuring up.fragment.config.navigateOptions.
|
18686
|
-
queue.abortExcept(request, solo);
|
18687
|
-
}
|
18762
|
+
handleSolo(request);
|
18688
18763
|
return request;
|
18689
18764
|
}
|
18690
18765
|
function mimicLocalRequest(options) {
|
18691
|
-
|
18692
|
-
if (solo) {
|
18693
|
-
abortRequests(solo);
|
18694
|
-
}
|
18766
|
+
handleSolo(options);
|
18695
18767
|
// We cannot consult config.clearCache since there is no up.Request
|
18696
18768
|
// for a local update.
|
18697
18769
|
var clearCache = options.clearCache;
|
@@ -18699,6 +18771,21 @@ up.network = (function () {
|
|
18699
18771
|
cache.clear(clearCache);
|
18700
18772
|
}
|
18701
18773
|
}
|
18774
|
+
function handleSolo(requestOrOptions) {
|
18775
|
+
var solo = requestOrOptions.solo;
|
18776
|
+
if (solo && isBusy()) {
|
18777
|
+
up.puts('up.request()', 'Change with { solo } option will abort other requests');
|
18778
|
+
// The { solo } option may also contain a function.
|
18779
|
+
// This way users can excempt some requests from being solo-aborted
|
18780
|
+
// by configuring up.fragment.config.navigateOptions.
|
18781
|
+
if (requestOrOptions instanceof up.Request) {
|
18782
|
+
queue.abortExcept(requestOrOptions, solo);
|
18783
|
+
}
|
18784
|
+
else {
|
18785
|
+
abortRequests(solo);
|
18786
|
+
}
|
18787
|
+
}
|
18788
|
+
}
|
18702
18789
|
function parseRequestOptions(args) {
|
18703
18790
|
var _a, _b;
|
18704
18791
|
var options = u.extractOptions(args);
|
@@ -22905,10 +22992,11 @@ up.feedback = (function () {
|
|
22905
22992
|
*/
|
22906
22993
|
var config = new up.Config(function () { return ({
|
22907
22994
|
currentClasses: ['up-current'],
|
22908
|
-
navSelectors: ['[up-nav]', 'nav']
|
22995
|
+
navSelectors: ['[up-nav]', 'nav'],
|
22909
22996
|
}); });
|
22910
22997
|
function reset() {
|
22911
22998
|
config.reset();
|
22999
|
+
up.layer.root.feedbackLocation = null;
|
22912
23000
|
}
|
22913
23001
|
var CLASS_ACTIVE = 'up-active';
|
22914
23002
|
var SELECTOR_LINK = 'a, [up-href]';
|
@@ -22917,7 +23005,7 @@ up.feedback = (function () {
|
|
22917
23005
|
}
|
22918
23006
|
function normalizeURL(url) {
|
22919
23007
|
if (url) {
|
22920
|
-
return u.normalizeURL(url, {
|
23008
|
+
return u.normalizeURL(url, { trailingSlash: false, hash: false });
|
22921
23009
|
}
|
22922
23010
|
}
|
22923
23011
|
function linkURLs(link) {
|
@@ -22952,17 +23040,11 @@ up.feedback = (function () {
|
|
22952
23040
|
var links = u.flatMap(navs, function (nav) { return e.subtree(nav, SELECTOR_LINK); });
|
22953
23041
|
updateLinks(links, options);
|
22954
23042
|
}
|
22955
|
-
|
22956
|
-
//
|
22957
|
-
//
|
22958
|
-
|
22959
|
-
|
22960
|
-
// (1) The layer was opened without a location, e.g. if it was created from local HTML.
|
22961
|
-
// (2) The layer is the root layer and the location was never changed.
|
22962
|
-
// The initial page load does not emit an up:layer:location:changed event for
|
22963
|
-
// the root layer to be consistent with up:location:changed.
|
22964
|
-
return layer.feedbackLocation || layer.location;
|
22965
|
-
};
|
23043
|
+
function getNormalizedLayerLocation(layer) {
|
23044
|
+
// Don't re-use layer.feedbackLocation since the current layer returns
|
23045
|
+
// location.href in case someone changed the history using the pushState API.
|
23046
|
+
return layer.feedbackLocation || normalizeURL(layer.location);
|
23047
|
+
}
|
22966
23048
|
function updateLinks(links, options) {
|
22967
23049
|
if (options === void 0) { options = {}; }
|
22968
23050
|
if (!links.length) {
|
@@ -22971,7 +23053,7 @@ up.feedback = (function () {
|
|
22971
23053
|
var layer = options.layer || up.layer.get(links[0]);
|
22972
23054
|
// An overlay might not have a { location } property, e.g. if it was created
|
22973
23055
|
// from local { content }. In this case we do not set .up-current.
|
22974
|
-
var layerLocation =
|
23056
|
+
var layerLocation = getNormalizedLayerLocation(layer);
|
22975
23057
|
if (layerLocation) {
|
22976
23058
|
for (var _i = 0, links_1 = links; _i < links_1.length; _i++) {
|
22977
23059
|
var link = links_1[_i];
|
@@ -23188,6 +23270,8 @@ up.feedback = (function () {
|
|
23188
23270
|
- the link's `[up-href]` attribute
|
23189
23271
|
- the URL pattern in the link's [`[up-alias]`](/a-up-alias) attribute
|
23190
23272
|
|
23273
|
+
Any `#hash` fragments in the link's or current URLs will be ignored.
|
23274
|
+
|
23191
23275
|
@selector [up-nav]
|
23192
23276
|
@stable
|
23193
23277
|
*/
|
@@ -23222,13 +23306,14 @@ up.feedback = (function () {
|
|
23222
23306
|
*/
|
23223
23307
|
function updateLayerIfLocationChanged(layer) {
|
23224
23308
|
var processedLocation = layer.feedbackLocation;
|
23225
|
-
var
|
23309
|
+
var layerLocation = getNormalizedLayerLocation(layer.location);
|
23226
23310
|
// A history change might call this function multiple times,
|
23227
23311
|
// since we listen to both up:location:changed and up:layer:location:changed.
|
23312
|
+
// We also don't want to unnecessarily reprocess nav links, which is expensive.
|
23228
23313
|
// For this reason we check whether the current location differs from
|
23229
23314
|
// the last processed location.
|
23230
|
-
if (!processedLocation || (processedLocation !==
|
23231
|
-
layer.feedbackLocation =
|
23315
|
+
if (!processedLocation || (processedLocation !== layerLocation)) {
|
23316
|
+
layer.feedbackLocation = layerLocation;
|
23232
23317
|
updateLinksWithinNavs(layer.element, { layer: layer });
|
23233
23318
|
}
|
23234
23319
|
}
|
@@ -23258,7 +23343,7 @@ up.feedback = (function () {
|
|
23258
23343
|
stop: stop,
|
23259
23344
|
around: around,
|
23260
23345
|
aroundForOptions: aroundForOptions,
|
23261
|
-
normalizeURL: normalizeURL
|
23346
|
+
normalizeURL: normalizeURL,
|
23262
23347
|
};
|
23263
23348
|
})();
|
23264
23349
|
|