unpoly-rails 2.7.2.2 → 3.0.0.rc1
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.
- checksums.yaml +4 -4
- data/README.md +96 -52
- data/assets/unpoly/unpoly-bootstrap3.js +10 -8
- data/assets/unpoly/unpoly-bootstrap3.min.js +1 -1
- data/assets/unpoly/unpoly-bootstrap4.js +10 -8
- data/assets/unpoly/unpoly-bootstrap4.min.js +1 -1
- data/assets/unpoly/unpoly-bootstrap5.js +9 -7
- data/assets/unpoly/unpoly-bootstrap5.min.js +1 -1
- data/assets/unpoly/unpoly-migrate.js +448 -350
- data/assets/unpoly/unpoly-migrate.min.js +1 -1
- data/assets/unpoly/unpoly.es6.js +223 -337
- data/assets/unpoly/unpoly.es6.min.js +1 -1
- data/assets/unpoly/unpoly.js +3105 -2282
- data/assets/unpoly/unpoly.min.js +1 -1
- data/lib/unpoly/rails/change/cache.rb +14 -2
- data/lib/unpoly/rails/change/field.rb +52 -14
- data/lib/unpoly/rails/change/field_definition.rb +42 -4
- data/lib/unpoly/rails/change/layer.rb +3 -3
- data/lib/unpoly/rails/change.rb +106 -58
- data/lib/unpoly/rails/controller.rb +6 -4
- data/lib/unpoly/rails/engine.rb +1 -1
- data/lib/unpoly/rails/request_echo_headers.rb +2 -6
- data/lib/unpoly/rails/version.rb +1 -1
- data/lib/unpoly-rails.rb +0 -1
- metadata +4 -7
- data/assets/unpoly/unpoly.es5.js +0 -11181
- data/assets/unpoly/unpoly.es5.min.js +0 -1
- data/lib/unpoly/rails/util.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8dd03173a9608fd149bb8169aab86440421c0dc4ce3d3709857cf4196a35c817
|
4
|
+
data.tar.gz: a424e2dbb80879bd5d291a627e74b8b75e7c4bd31ca7708287e77792c7f0aead
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 993b1979ccff04c25fb4ea0b64ca071d25333e858723e560b5f9e9209dc2a4f4c1aa0c7bda6c76b2020c4edcf9f9672743d2f97608327be68e18005303cc2770
|
7
|
+
data.tar.gz: d85796e74cf2520c9e7d1f4aea33b14ee25002b5b92fd0d2671fb8d2b5c77ae1a1af4f29e2d3950f593d21e7fbee60c37aafa361d94e379b5116abb772f210a3
|
data/README.md
CHANGED
@@ -5,6 +5,10 @@ unpoly-rails: Ruby on Rails bindings for Unpoly
|
|
5
5
|
|
6
6
|
The `unpoly-rails` gem helps integrating Unpoly with [Ruby on Rails](https://rubyonrails.org/) applications.
|
7
7
|
|
8
|
+
This branch tracks the next major version, Unpoly **3.x**.\
|
9
|
+
If you're using Unpoly **2.x**, use the [`2.x-stable`](https://github.com/unpoly/unpoly-rails/tree/2.x-stable) branch.\
|
10
|
+
If you're using Unpoly **1.x** or **0.x**, use the [`1.x-stable`](https://github.com/unpoly/unpoly/tree/1.x-stable/lib/unpoly/rails) branch in the [`unpoly`](https://github.com/unpoly/unpoly-rails/tree/2.x-stable) repository.
|
11
|
+
|
8
12
|
|
9
13
|
Installing the gem
|
10
14
|
------------------
|
@@ -21,9 +25,9 @@ Now run `bundle install` and restart your development server.
|
|
21
25
|
Installing frontend assets
|
22
26
|
--------------------------
|
23
27
|
|
24
|
-
### With Webpacker
|
28
|
+
### With esbuild or Webpacker
|
25
29
|
|
26
|
-
If you're using [Webpacker](https://edgeguides.rubyonrails.org/webpacker.html), install the [`unpoly` npm package](https://unpoly.com/install/npm) to get Unpoly's frontend files.
|
30
|
+
If you're using [esbuild](https://esbuild.github.io/) or [Webpacker](https://edgeguides.rubyonrails.org/webpacker.html), install the [`unpoly` npm package](https://unpoly.com/install/npm) to get Unpoly's frontend files.
|
27
31
|
|
28
32
|
Now `import` Unpoly from your `application.js` pack:
|
29
33
|
|
@@ -109,7 +113,7 @@ The frontend will use the server-provided target for both successful (HTTP statu
|
|
109
113
|
|
110
114
|
Sometimes it's OK to render nothing, e.g. when you know that the current layer is to be closed.
|
111
115
|
|
112
|
-
In this case
|
116
|
+
In this case use `head(:no_content)`:
|
113
117
|
|
114
118
|
```ruby
|
115
119
|
class NotesController < ApplicationController
|
@@ -118,7 +122,7 @@ class NotesController < ApplicationController
|
|
118
122
|
if @note.save
|
119
123
|
if up.layer.overlay?
|
120
124
|
up.accept_layer(@note.id)
|
121
|
-
|
125
|
+
head :no_content
|
122
126
|
else
|
123
127
|
redirect_to @note
|
124
128
|
end
|
@@ -127,14 +131,6 @@ class NotesController < ApplicationController
|
|
127
131
|
end
|
128
132
|
```
|
129
133
|
|
130
|
-
This will render a 200 OK response with a header `X-Up-Target: none` and an empty body.
|
131
|
-
|
132
|
-
You may render nothing with a different HTTP status by passing a `:status` option:
|
133
|
-
|
134
|
-
```ruby
|
135
|
-
up.render_nothing(status: :bad_request)
|
136
|
-
```
|
137
|
-
|
138
134
|
|
139
135
|
### Pushing a document title to the client
|
140
136
|
|
@@ -205,41 +201,39 @@ class UsersController < ApplicationController
|
|
205
201
|
end
|
206
202
|
```
|
207
203
|
|
208
|
-
|
209
|
-
|
210
|
-
To test whether the current request was made to [reload](https://unpoly.com/up.reload) or [poll](https://unpoly.com/up-poll) a fragment:
|
204
|
+
You may also access the [names of the fields that triggered the validation request](https://unpoly.com/X-Up-Validate):
|
211
205
|
|
212
206
|
```ruby
|
213
|
-
up.
|
207
|
+
up.validate_names # => ['email', 'password']
|
214
208
|
```
|
215
209
|
|
216
|
-
You also retrieve the time when the fragment being reloaded was previously inserted into the DOM:
|
217
210
|
|
218
|
-
|
219
|
-
|
220
|
-
|
211
|
+
### Detecting a fragment reload
|
212
|
+
|
213
|
+
When Unpoly [reloads](https://unpoly.com/up.reload) or [polls](https://unpoly.com/up-poll) a fragment, the server will often render the same HTML. You can configure your controller actions to only render HTML if the underlying content changed since an earlier request.
|
214
|
+
|
215
|
+
Only rendering when needed saves <b>CPU time</b> on your server, which spends most of its response time rendering HTML. This also reduces the <b>bandwidth cost</b> for a request/response exchange to **~1 KB**.
|
216
|
+
|
217
|
+
When a fragment is reloaded, Unpoly sends an [`If-Modified-Since`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since) request header with the fragment's earlier [`Last-Modified`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified) time. It also sends an [`If-None-Match`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match) header with the fragment's earlier [`ETag`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag).
|
221
218
|
|
222
|
-
|
223
|
-
If no more recent data is available, the server can [render nothing](/X-Up-Target):
|
219
|
+
Rails' [conditional GET support](https://guides.rubyonrails.org/caching_with_rails.html#conditional-get-support) lets you compare and set modification times and ETags with methods like `#fresh_when` or `#stale?`:
|
224
220
|
|
225
221
|
```ruby
|
226
222
|
class MessagesController < ApplicationController
|
227
223
|
|
228
224
|
def index
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
225
|
+
@messages = current_user.messages.order(time: :desc)
|
226
|
+
|
227
|
+
# If the request's ETag and last modification time matches the given `@messages`,
|
228
|
+
# does not render and send a a `304 Not Modified` response.
|
229
|
+
# If the request's ETag or last modification time does not match, we will render
|
230
|
+
# the `index` view with fresh `ETag` and `Last-Modified` headers.
|
231
|
+
fresh_when(@messages)
|
235
232
|
end
|
236
233
|
|
237
234
|
end
|
238
235
|
```
|
239
236
|
|
240
|
-
Only rendering when needed saves <b>CPU time</b> on your server, which spends most of its response time rendering HTML.
|
241
|
-
|
242
|
-
This also reduces the <b>bandwidth cost</b> for a request/response exchange to **~1 KB**.
|
243
237
|
|
244
238
|
|
245
239
|
### Allowing callbacks with a strict CSP
|
@@ -374,36 +368,30 @@ Returns whether the layer targeted for a failed response is an overlay.
|
|
374
368
|
Returns the [context](https://unpoly.com/up.context) object of the layer targeted for a failed response.
|
375
369
|
|
376
370
|
|
377
|
-
###
|
371
|
+
### Expiring the client-side cache
|
378
372
|
|
379
|
-
The Unpoly frontend caches server responses for a few minutes, making requests to these URLs return instantly.
|
380
|
-
Only `GET` requests are cached. The
|
381
|
-
|
382
|
-
The server may override these defaults. For instance, the server can clear Unpoly's client-side response cache, even for `GET` requests:
|
383
|
-
|
384
|
-
```ruby
|
385
|
-
up.cache.clear
|
386
|
-
```
|
373
|
+
The Unpoly frontend [caches server responses](https://unpoly.com/caching) for a few minutes, making requests to these URLs return instantly.
|
374
|
+
Only `GET` requests are cached. The entire cache is expired after every non-`GET` request (like `POST` or `PUT`).
|
387
375
|
|
388
|
-
|
376
|
+
The server may override these defaults. For instance, the server can expire Unpoly's client-side response cache, even for `GET` requests:
|
389
377
|
|
390
378
|
```ruby
|
391
|
-
up.cache.
|
379
|
+
up.cache.expire
|
392
380
|
```
|
393
381
|
|
394
|
-
You may also
|
382
|
+
You may also expire a single URL or [URL pattern](https://unpoly.com/url-patterns):
|
395
383
|
|
396
384
|
```ruby
|
397
|
-
up.cache.
|
385
|
+
up.cache.expire('/notes/*')
|
398
386
|
```
|
399
387
|
|
400
|
-
You may also prevent cache
|
388
|
+
You may also prevent cache expiration for an unsafe request:
|
401
389
|
|
402
390
|
```ruby
|
403
|
-
up.cache.
|
391
|
+
up.cache.expire(false)
|
404
392
|
```
|
405
393
|
|
406
|
-
Here is an longer example where the server uses careful cache management to
|
394
|
+
Here is an longer example where the server uses careful cache management to avoid expiring too much of the client-side cache:
|
407
395
|
|
408
396
|
```ruby
|
409
397
|
def NotesController < ApplicationController
|
@@ -411,10 +399,10 @@ def NotesController < ApplicationController
|
|
411
399
|
def create
|
412
400
|
@note = Note.create!(params[:note].permit(...))
|
413
401
|
if @note.save
|
414
|
-
up.cache.
|
402
|
+
up.cache.expire('/notes/*') # Only expire affected entries
|
415
403
|
redirect_to(@note)
|
416
404
|
else
|
417
|
-
up.cache.
|
405
|
+
up.cache.expire(false) # Keep the cache fresh because we haven't saved
|
418
406
|
render 'new'
|
419
407
|
end
|
420
408
|
end
|
@@ -422,12 +410,68 @@ def NotesController < ApplicationController
|
|
422
410
|
end
|
423
411
|
```
|
424
412
|
|
413
|
+
### Evicting pages from the client-side cache
|
414
|
+
|
415
|
+
Instead of *expiring* pages from the cache you may also *evict*. The difference is that expired pages can still be rendered instantly and are then [revalidated](/caching#revalidation) with the server. Evicted pages are erased from the cache.
|
416
|
+
|
417
|
+
You may also expire all entries matching an [URL pattern](https://unpoly.com/url-patterns):
|
418
|
+
|
419
|
+
To evict the entire client-side cache:
|
420
|
+
|
421
|
+
```ruby
|
422
|
+
up.cache.evict
|
423
|
+
```
|
425
424
|
|
426
|
-
|
425
|
+
You may also evict a single URL or [URL pattern](https://unpoly.com/url-patterns):
|
426
|
+
|
427
|
+
```ruby
|
428
|
+
up.cache.evict('/notes/*')
|
429
|
+
```
|
430
|
+
|
431
|
+
|
432
|
+
### Unpoly headers are preserved through redirects
|
427
433
|
|
428
434
|
`unpoly-rails` patches [`redirect_to`](https://api.rubyonrails.org/classes/ActionController/Redirecting.html#method-i-redirect_to)
|
429
|
-
so Unpoly-related request
|
430
|
-
|
435
|
+
so [Unpoly-related request and response headers](https://unpoly.com/up.protocol) are preserved for the action you redirect to.
|
436
|
+
|
437
|
+
|
438
|
+
### Accessing Unpoly request headers automatically sets a `Vary` response header
|
439
|
+
|
440
|
+
Accessing [Unpoly-related request headers](https://unpoly.com/up.protocol) through helper methods like `up.target` will automatically add a [`Vary`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Vary) response header. This is to indicate that the request header influenced the response and the response should be cached separately for each request header value.
|
441
|
+
|
442
|
+
For example, a controller may access the request's `X-Up-Mode` through the `up.layer.mode` helper:
|
443
|
+
|
444
|
+
```ruby
|
445
|
+
def create
|
446
|
+
# ...
|
447
|
+
|
448
|
+
if up.layer.mode == 'modal' # Sets Vary header
|
449
|
+
up.layer.accept
|
450
|
+
else
|
451
|
+
redirect_to :show
|
452
|
+
end
|
453
|
+
end
|
454
|
+
```
|
455
|
+
|
456
|
+
`unpoly-rails` will automatically add a `Vary` header to the response:
|
457
|
+
|
458
|
+
```http
|
459
|
+
Vary: X-Up-Mode
|
460
|
+
```
|
461
|
+
|
462
|
+
There are cases when reading an Unpoly request header does not necessarily influence the response, e.g. for logging. In that cases no `Vary` header should be set. To do so, call the helper method inside an `up.no_vary` block:
|
463
|
+
|
464
|
+
```ruby
|
465
|
+
up.no_vary do
|
466
|
+
Rails.logger.info("Unpoly mode is " + up.layer.mode.inspect) # No Vary header is set
|
467
|
+
end
|
468
|
+
````
|
469
|
+
|
470
|
+
Note that accessing `response.headers[]` directly never sets a `Vary` header:
|
471
|
+
|
472
|
+
```ruby
|
473
|
+
Rails.logger.info("Unpoly mode is " + response.headers['X-Up-Mode']) # No Vary header is set
|
474
|
+
```
|
431
475
|
|
432
476
|
|
433
477
|
### Automatic redirect detection
|
@@ -1,8 +1,8 @@
|
|
1
|
-
/******/ (
|
1
|
+
/******/ (() => { // webpackBootstrap
|
2
2
|
/******/ var __webpack_modules__ = ([
|
3
3
|
/* 0 */,
|
4
4
|
/* 1 */
|
5
|
-
/***/ (
|
5
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
6
6
|
|
7
7
|
"use strict";
|
8
8
|
__webpack_require__.r(__webpack_exports__);
|
@@ -38,29 +38,31 @@ __webpack_require__.r(__webpack_exports__);
|
|
38
38
|
/******/
|
39
39
|
/************************************************************************/
|
40
40
|
/******/ /* webpack/runtime/make namespace object */
|
41
|
-
/******/
|
41
|
+
/******/ (() => {
|
42
42
|
/******/ // define __esModule on exports
|
43
|
-
/******/ __webpack_require__.r =
|
43
|
+
/******/ __webpack_require__.r = (exports) => {
|
44
44
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
45
45
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
46
46
|
/******/ }
|
47
47
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
48
48
|
/******/ };
|
49
|
-
/******/ }();
|
49
|
+
/******/ })();
|
50
50
|
/******/
|
51
51
|
/************************************************************************/
|
52
52
|
var __webpack_exports__ = {};
|
53
53
|
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
54
|
-
|
54
|
+
(() => {
|
55
55
|
up.feedback.config.currentClasses.push('active');
|
56
56
|
up.feedback.config.navSelectors.push('.nav', '.navbar');
|
57
|
-
up.form.config.
|
57
|
+
up.form.config.groupSelectors.unshift('.form-group');
|
58
58
|
up.viewport.config.fixedTop.push('.navbar-fixed-top');
|
59
59
|
up.viewport.config.fixedBottom.push('.navbar-fixed-bottom');
|
60
60
|
up.viewport.config.anchoredRight.push('.navbar-fixed-top', '.navbar-fixed-bottom');
|
61
61
|
up.fragment.config.badTargetClasses.push('row', /^col(-xs|-sm|-md|-lg)?(-\d+)?$/);
|
62
|
+
up.layer.config.foreignOverlaySelectors.push('.modal:not(up-modal)', '.popover:not(up-popup)', '.dropdown-menu:not(up-popup)');
|
62
63
|
__webpack_require__(1);
|
63
64
|
|
64
|
-
}();
|
65
|
+
})();
|
66
|
+
|
65
67
|
/******/ })()
|
66
68
|
;
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
(()=>{var o={303:(o,e,r)=>{"use strict";r.r(e)}},e={};function r(p){var t=e[p];if(void 0!==t)return t.exports;var n=e[p]={exports:{}};return o[p](n,n.exports,r),n.exports}r.r=o=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},up.feedback.config.currentClasses.push("active"),up.feedback.config.navSelectors.push(".nav",".navbar"),up.form.config.groupSelectors.unshift(".form-group"),up.viewport.config.fixedTop.push(".navbar-fixed-top"),up.viewport.config.fixedBottom.push(".navbar-fixed-bottom"),up.viewport.config.anchoredRight.push(".navbar-fixed-top",".navbar-fixed-bottom"),up.fragment.config.badTargetClasses.push("row",/^col(-xs|-sm|-md|-lg)?(-\d+)?$/),up.layer.config.foreignOverlaySelectors.push(".modal:not(up-modal)",".popover:not(up-popup)",".dropdown-menu:not(up-popup)"),r(303)})();
|
@@ -1,8 +1,8 @@
|
|
1
|
-
/******/ (
|
1
|
+
/******/ (() => { // webpackBootstrap
|
2
2
|
/******/ var __webpack_modules__ = ([
|
3
3
|
/* 0 */,
|
4
4
|
/* 1 */
|
5
|
-
/***/ (
|
5
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
6
6
|
|
7
7
|
"use strict";
|
8
8
|
__webpack_require__.r(__webpack_exports__);
|
@@ -38,29 +38,31 @@ __webpack_require__.r(__webpack_exports__);
|
|
38
38
|
/******/
|
39
39
|
/************************************************************************/
|
40
40
|
/******/ /* webpack/runtime/make namespace object */
|
41
|
-
/******/
|
41
|
+
/******/ (() => {
|
42
42
|
/******/ // define __esModule on exports
|
43
|
-
/******/ __webpack_require__.r =
|
43
|
+
/******/ __webpack_require__.r = (exports) => {
|
44
44
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
45
45
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
46
46
|
/******/ }
|
47
47
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
48
48
|
/******/ };
|
49
|
-
/******/ }();
|
49
|
+
/******/ })();
|
50
50
|
/******/
|
51
51
|
/************************************************************************/
|
52
52
|
var __webpack_exports__ = {};
|
53
53
|
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
54
|
-
|
54
|
+
(() => {
|
55
55
|
up.feedback.config.currentClasses.push('active');
|
56
56
|
up.feedback.config.navSelectors.push('.nav', '.navbar');
|
57
|
-
up.form.config.
|
57
|
+
up.form.config.groupSelectors.unshift('.form-group');
|
58
58
|
up.viewport.config.fixedTop.push('.navbar.fixed-top');
|
59
59
|
up.viewport.config.fixedBottom.push('.navbar.fixed-bottom');
|
60
60
|
up.viewport.config.anchoredRight.push('.navbar.fixed-top', '.navbar.fixed-bottom');
|
61
61
|
up.fragment.config.badTargetClasses.push('row', /^col(-xs|-sm|-md|-lg|-xl)?(-\d+)?$/, /^[mp][tblrxy]?-\d+$/);
|
62
|
+
up.layer.config.foreignOverlaySelectors.push('.modal:not(up-modal)', '.popover:not(up-popup)', '.dropdown-menu:not(up-popup)');
|
62
63
|
__webpack_require__(1);
|
63
64
|
|
64
|
-
}();
|
65
|
+
})();
|
66
|
+
|
65
67
|
/******/ })()
|
66
68
|
;
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
(()=>{var o={79:(o,e,r)=>{"use strict";r.r(e)}},e={};function r(p){var t=e[p];if(void 0!==t)return t.exports;var n=e[p]={exports:{}};return o[p](n,n.exports,r),n.exports}r.r=o=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},up.feedback.config.currentClasses.push("active"),up.feedback.config.navSelectors.push(".nav",".navbar"),up.form.config.groupSelectors.unshift(".form-group"),up.viewport.config.fixedTop.push(".navbar.fixed-top"),up.viewport.config.fixedBottom.push(".navbar.fixed-bottom"),up.viewport.config.anchoredRight.push(".navbar.fixed-top",".navbar.fixed-bottom"),up.fragment.config.badTargetClasses.push("row",/^col(-xs|-sm|-md|-lg|-xl)?(-\d+)?$/,/^[mp][tblrxy]?-\d+$/),up.layer.config.foreignOverlaySelectors.push(".modal:not(up-modal)",".popover:not(up-popup)",".dropdown-menu:not(up-popup)"),r(79)})();
|
@@ -1,8 +1,8 @@
|
|
1
|
-
/******/ (
|
1
|
+
/******/ (() => { // webpackBootstrap
|
2
2
|
/******/ var __webpack_modules__ = ([
|
3
3
|
/* 0 */,
|
4
4
|
/* 1 */
|
5
|
-
/***/ (
|
5
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
6
6
|
|
7
7
|
"use strict";
|
8
8
|
__webpack_require__.r(__webpack_exports__);
|
@@ -38,28 +38,30 @@ __webpack_require__.r(__webpack_exports__);
|
|
38
38
|
/******/
|
39
39
|
/************************************************************************/
|
40
40
|
/******/ /* webpack/runtime/make namespace object */
|
41
|
-
/******/
|
41
|
+
/******/ (() => {
|
42
42
|
/******/ // define __esModule on exports
|
43
|
-
/******/ __webpack_require__.r =
|
43
|
+
/******/ __webpack_require__.r = (exports) => {
|
44
44
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
45
45
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
46
46
|
/******/ }
|
47
47
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
48
48
|
/******/ };
|
49
|
-
/******/ }();
|
49
|
+
/******/ })();
|
50
50
|
/******/
|
51
51
|
/************************************************************************/
|
52
52
|
var __webpack_exports__ = {};
|
53
53
|
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
54
|
-
|
54
|
+
(() => {
|
55
55
|
up.feedback.config.currentClasses.push('active');
|
56
56
|
up.feedback.config.navSelectors.push('.nav', '.navbar');
|
57
57
|
up.viewport.config.fixedTop.push('.navbar.fixed-top');
|
58
58
|
up.viewport.config.fixedBottom.push('.navbar.fixed-bottom');
|
59
59
|
up.viewport.config.anchoredRight.push('.navbar.fixed-top', '.navbar.fixed-bottom');
|
60
60
|
up.fragment.config.badTargetClasses.push('row', /^col(-xs|-sm|-md|-lg|-xl|-xxl)?(-\d+)?$/, /^[mp][tbsexy]?-\d+$/);
|
61
|
+
up.layer.config.foreignOverlaySelectors.push('.modal:not(up-modal)', '.popover:not(up-popup)', '.dropdown-menu:not(up-popup)');
|
61
62
|
__webpack_require__(1);
|
62
63
|
|
63
|
-
}();
|
64
|
+
})();
|
65
|
+
|
64
66
|
/******/ })()
|
65
67
|
;
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
(()=>{var e={313:(e,o,r)=>{"use strict";r.r(o)}},o={};function r(p){var t=o[p];if(void 0!==t)return t.exports;var n=o[p]={exports:{}};return e[p](n,n.exports,r),n.exports}r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},up.feedback.config.currentClasses.push("active"),up.feedback.config.navSelectors.push(".nav",".navbar"),up.viewport.config.fixedTop.push(".navbar.fixed-top"),up.viewport.config.fixedBottom.push(".navbar.fixed-bottom"),up.viewport.config.anchoredRight.push(".navbar.fixed-top",".navbar.fixed-bottom"),up.fragment.config.badTargetClasses.push("row",/^col(-xs|-sm|-md|-lg|-xl|-xxl)?(-\d+)?$/,/^[mp][tbsexy]?-\d+$/),up.layer.config.foreignOverlaySelectors.push(".modal:not(up-modal)",".popover:not(up-popup)",".dropdown-menu:not(up-popup)"),r(313)})();
|