upjs-rails 0.5.0 → 0.6.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.
- checksums.yaml +4 -4
- data/dist/up.js +166 -71
- data/dist/up.min.js +2 -2
- data/lib/assets/javascripts/up/flow.js.coffee +25 -7
- data/lib/assets/javascripts/up/form.js.coffee +8 -4
- data/lib/assets/javascripts/up/history.js.coffee +1 -2
- data/lib/assets/javascripts/up/link.js.coffee +4 -3
- data/lib/assets/javascripts/up/modal.js.coffee +3 -3
- data/lib/assets/javascripts/up/motion.js.coffee +51 -16
- data/lib/assets/javascripts/up/popup.js.coffee +3 -3
- data/lib/assets/javascripts/up/proxy.js.coffee +28 -13
- data/lib/assets/javascripts/up/slot.js.coffee +66 -0
- data/lib/assets/javascripts/up/util.js.coffee +5 -6
- data/lib/assets/javascripts/up.js.coffee +1 -1
- data/lib/upjs/rails/version.rb +1 -1
- data/spec_app/spec/javascripts/helpers/set_timer.js.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/to_be_around.js.coffee +5 -0
- data/spec_app/spec/javascripts/up/motion_spec.js.coffee +148 -4
- data/spec_app/spec/javascripts/up/{marker_spec.js.coffee → slot_spec.js.coffee} +3 -3
- data/spec_app/spec/javascripts/up/tooltip_spec.js.coffee +2 -2
- metadata +5 -3
- data/lib/assets/javascripts/up/marker.js.coffee +0 -39
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c2ccc0f23f73c4e313d6da1023c151416f390e65
         | 
| 4 | 
            +
              data.tar.gz: 5af51cde5c82b8c0166560269f9a85a151b29ee8
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 1d68bb1397e550830d90f5163f0cdaecedb479c3d311174b45062b3ef2b5054eff94ef6d049d82618f020ddfea6f96156a7ef1b3404930ecbd3ed768355839f3
         | 
| 7 | 
            +
              data.tar.gz: 4d389eb3cbe0ab518058375247df955f4abf32584480117c15c765aaefc348b6658aadfafafd60a85c07f8470f358fccf1b49965713d70dd2d9f8a3eca10e9df
         | 
    
        data/dist/up.js
    CHANGED
    
    | @@ -397,7 +397,7 @@ If you use them in your own code, you will get hurt. | |
| 397 397 | 
             
                    if (isFunction(value)) {
         | 
| 398 398 | 
             
                      value = value();
         | 
| 399 399 | 
             
                    }
         | 
| 400 | 
            -
                    if ( | 
| 400 | 
            +
                    if (isGiven(value)) {
         | 
| 401 401 | 
             
                      match = value;
         | 
| 402 402 | 
             
                      break;
         | 
| 403 403 | 
             
                    }
         | 
| @@ -499,11 +499,11 @@ If you use them in your own code, you will get hurt. | |
| 499 499 | 
             
                  The element to animate.
         | 
| 500 500 | 
             
                @param {Object} lastFrame
         | 
| 501 501 | 
             
                  The CSS properties that should be transitioned to.
         | 
| 502 | 
            -
                @param {Number} [ | 
| 502 | 
            +
                @param {Number} [options.duration=300]
         | 
| 503 503 | 
             
                  The duration of the animation, in milliseconds.
         | 
| 504 | 
            -
                @param {Number} [ | 
| 504 | 
            +
                @param {Number} [options.delay=0]
         | 
| 505 505 | 
             
                  The delay before the animation starts, in milliseconds.
         | 
| 506 | 
            -
                @param {String} [ | 
| 506 | 
            +
                @param {String} [options.easing='ease']
         | 
| 507 507 | 
             
                  The timing function that controls the animation's acceleration.
         | 
| 508 508 | 
             
                  See [W3C documentation](http://www.w3.org/TR/css3-transitions/#transition-timing-function)
         | 
| 509 509 | 
             
                  for a list of pre-defined timing functions.
         | 
| @@ -1233,15 +1233,17 @@ We need to work on this page: | |
| 1233 1233 | 
             
                  here, in which case a selector will be inferred from the element's class and ID.
         | 
| 1234 1234 | 
             
                @param {String} url
         | 
| 1235 1235 | 
             
                  The URL to fetch from the server.
         | 
| 1236 | 
            -
                @param {String} [options.title]
         | 
| 1237 1236 | 
             
                @param {String} [options.method='get']
         | 
| 1237 | 
            +
                @param {String} [options.title]
         | 
| 1238 | 
            +
                @param {String} [options.transition='none']
         | 
| 1238 1239 | 
             
                @param {String|Boolean} [options.history=true]
         | 
| 1239 1240 | 
             
                  If a `String` is given, it is used as the URL the browser's location bar and history.
         | 
| 1240 1241 | 
             
                  If omitted or true, the `url` argument will be used.
         | 
| 1241 1242 | 
             
                  If set to `false`, the history will remain unchanged.
         | 
| 1242 1243 | 
             
                @param {String|Boolean} [options.source=true]
         | 
| 1243 | 
            -
                @param {String} [options.transition]
         | 
| 1244 1244 | 
             
                @param {String} [options.scroll='body']
         | 
| 1245 | 
            +
                @param {Boolean} [options.cache]
         | 
| 1246 | 
            +
                  Whether to use a [cached response](/up.proxy) if available.
         | 
| 1245 1247 | 
             
                @param {String} [options.historyMethod='push']
         | 
| 1246 1248 | 
             
                @return {Promise}
         | 
| 1247 1249 | 
             
                  A promise that will be resolved when the page has been updated.
         | 
| @@ -1259,7 +1261,8 @@ We need to work on this page: | |
| 1259 1261 | 
             
                  request = {
         | 
| 1260 1262 | 
             
                    url: url,
         | 
| 1261 1263 | 
             
                    method: options.method,
         | 
| 1262 | 
            -
                    selector: selector
         | 
| 1264 | 
            +
                    selector: selector,
         | 
| 1265 | 
            +
                    cache: options.cache
         | 
| 1263 1266 | 
             
                  };
         | 
| 1264 1267 | 
             
                  promise = up.proxy.ajax(request);
         | 
| 1265 1268 | 
             
                  promise.done(function(html, textStatus, xhr) {
         | 
| @@ -1434,19 +1437,28 @@ We need to work on this page: | |
| 1434 1437 | 
             
                /**
         | 
| 1435 1438 | 
             
                Destroys the given element or selector.
         | 
| 1436 1439 | 
             
                Takes care that all destructors, if any, are called.
         | 
| 1440 | 
            +
                The element is removed from the DOM.
         | 
| 1437 1441 |  | 
| 1438 1442 | 
             
                @method up.destroy
         | 
| 1439 1443 | 
             
                @param {String|Element|jQuery} selectorOrElement 
         | 
| 1440 | 
            -
                @param {String|Function|Object} [options.animation]
         | 
| 1441 1444 | 
             
                @param {String} [options.url]
         | 
| 1442 1445 | 
             
                @param {String} [options.title]
         | 
| 1446 | 
            +
                @param {String} [options.animation='none']
         | 
| 1447 | 
            +
                  The animation to use before the element is removed from the DOM.
         | 
| 1448 | 
            +
                @param {Number} [options.duration]
         | 
| 1449 | 
            +
                  The duration of the animation. See [`up.animate`](/up.motion#up.animate).
         | 
| 1450 | 
            +
                @param {Number} [options.delay]
         | 
| 1451 | 
            +
                  The delay before the animation starts. See [`up.animate`](/up.motion#up.animate).
         | 
| 1452 | 
            +
                @param {String} [options.easing]
         | 
| 1453 | 
            +
                  The timing function that controls the animation's acceleration. [`up.animate`](/up.motion#up.animate).
         | 
| 1443 1454 | 
             
                 */
         | 
| 1444 1455 | 
             
                destroy = function(selectorOrElement, options) {
         | 
| 1445 | 
            -
                  var $element, animationPromise;
         | 
| 1456 | 
            +
                  var $element, animateOptions, animationPromise;
         | 
| 1446 1457 | 
             
                  $element = $(selectorOrElement);
         | 
| 1447 1458 | 
             
                  options = u.options(options, {
         | 
| 1448 1459 | 
             
                    animation: 'none'
         | 
| 1449 1460 | 
             
                  });
         | 
| 1461 | 
            +
                  animateOptions = up.motion.animateOptions(options);
         | 
| 1450 1462 | 
             
                  $element.addClass('up-destroying');
         | 
| 1451 1463 | 
             
                  if (u.isPresent(options.url)) {
         | 
| 1452 1464 | 
             
                    up.history.push(options.url);
         | 
| @@ -1455,7 +1467,7 @@ We need to work on this page: | |
| 1455 1467 | 
             
                    document.title = options.title;
         | 
| 1456 1468 | 
             
                  }
         | 
| 1457 1469 | 
             
                  up.bus.emit('fragment:destroy', $element);
         | 
| 1458 | 
            -
                  animationPromise = u.presence(options.animation, u.isPromise) || up.motion.animate($element, options.animation);
         | 
| 1470 | 
            +
                  animationPromise = u.presence(options.animation, u.isPromise) || up.motion.animate($element, options.animation, animateOptions);
         | 
| 1459 1471 | 
             
                  return animationPromise.then(function() {
         | 
| 1460 1472 | 
             
                    return $element.remove();
         | 
| 1461 1473 | 
             
                  });
         | 
| @@ -1465,13 +1477,21 @@ We need to work on this page: | |
| 1465 1477 | 
             
                Replaces the given selector or element with a fresh copy
         | 
| 1466 1478 | 
             
                fetched from the server.
         | 
| 1467 1479 |  | 
| 1480 | 
            +
                Up.js remembers the URL from which a fragment was loaded, so you
         | 
| 1481 | 
            +
                don't usually need to give an URL when reloading.
         | 
| 1482 | 
            +
                
         | 
| 1468 1483 | 
             
                @method up.reload
         | 
| 1469 1484 | 
             
                @param {String|Element|jQuery} selectorOrElement
         | 
| 1485 | 
            +
                @param {Object} [options]
         | 
| 1486 | 
            +
                  See options for [`up.replace`](#up.replace)
         | 
| 1470 1487 | 
             
                 */
         | 
| 1471 | 
            -
                reload = function(selectorOrElement) {
         | 
| 1488 | 
            +
                reload = function(selectorOrElement, options) {
         | 
| 1472 1489 | 
             
                  var sourceUrl;
         | 
| 1473 | 
            -
                   | 
| 1474 | 
            -
             | 
| 1490 | 
            +
                  options = u.options(options, {
         | 
| 1491 | 
            +
                    cache: false
         | 
| 1492 | 
            +
                  });
         | 
| 1493 | 
            +
                  sourceUrl = options.url || source(selectorOrElement);
         | 
| 1494 | 
            +
                  return replace(selectorOrElement, sourceUrl, options);
         | 
| 1475 1495 | 
             
                };
         | 
| 1476 1496 |  | 
| 1477 1497 | 
             
                /**
         | 
| @@ -1921,8 +1941,7 @@ We need to work on this page: | |
| 1921 1941 | 
             
            - Explain how the other modules manipulate history
         | 
| 1922 1942 | 
             
            - Decide whether we want to expose these methods as public API
         | 
| 1923 1943 | 
             
            - Document methods and parameters
         | 
| 1924 | 
            -
             | 
| 1925 | 
            -
                
         | 
| 1944 | 
            +
             | 
| 1926 1945 | 
             
            @class up.history
         | 
| 1927 1946 | 
             
             */
         | 
| 1928 1947 |  | 
| @@ -2005,6 +2024,13 @@ Animation and transitions | |
| 2005 2024 | 
             
            =========================
         | 
| 2006 2025 |  | 
| 2007 2026 | 
             
            Any fragment change in Up.js can be animated.
         | 
| 2027 | 
            +
             | 
| 2028 | 
            +
                <a href="/users" data-target=".list" up-transition="cross-fade">Show users</a>
         | 
| 2029 | 
            +
             | 
| 2030 | 
            +
            Or a dialog open:
         | 
| 2031 | 
            +
             | 
| 2032 | 
            +
                <a href="/users" up-modal=".list" up-animation="move-from-top">Show users</a>
         | 
| 2033 | 
            +
             | 
| 2008 2034 | 
             
            Up.js ships with a number of predefined animations and transitions,
         | 
| 2009 2035 | 
             
            and you can easily define your own using Javascript or CSS. 
         | 
| 2010 2036 |  | 
| @@ -2015,9 +2041,7 @@ We need to work on this page: | |
| 2015 2041 |  | 
| 2016 2042 | 
             
            - Explain the difference between transitions and animations
         | 
| 2017 2043 | 
             
            - Demo the built-in animations and transitions
         | 
| 2018 | 
            -
            - Examples for defining your own animations and transitions
         | 
| 2019 2044 | 
             
            - Explain ghosting
         | 
| 2020 | 
            -
            - Explain how many elements accept arguments for animation.
         | 
| 2021 2045 |  | 
| 2022 2046 |  | 
| 2023 2047 | 
             
            @class up.motion
         | 
| @@ -2038,10 +2062,10 @@ We need to work on this page: | |
| 2038 2062 | 
             
                };
         | 
| 2039 2063 |  | 
| 2040 2064 | 
             
                /**
         | 
| 2041 | 
            -
                @method up. | 
| 2042 | 
            -
                @param {Number} [options.duration]
         | 
| 2043 | 
            -
                @param {Number} [options.delay]
         | 
| 2044 | 
            -
                @param {String} [options.easing]
         | 
| 2065 | 
            +
                @method up.motion.defaults
         | 
| 2066 | 
            +
                @param {Number} [options.duration=300]
         | 
| 2067 | 
            +
                @param {Number} [options.delay=0]
         | 
| 2068 | 
            +
                @param {String} [options.easing='ease']
         | 
| 2045 2069 | 
             
                 */
         | 
| 2046 2070 | 
             
                defaults = function(options) {
         | 
| 2047 2071 | 
             
                  return u.extend(config, options);
         | 
| @@ -2103,11 +2127,11 @@ We need to work on this page: | |
| 2103 2127 | 
             
                  - The animation's name
         | 
| 2104 2128 | 
             
                  - A function performing the animation
         | 
| 2105 2129 | 
             
                  - An object of CSS attributes describing the last frame of the animation
         | 
| 2106 | 
            -
                @param {Number} [ | 
| 2130 | 
            +
                @param {Number} [options.duration=300]
         | 
| 2107 2131 | 
             
                  The duration of the animation, in milliseconds.
         | 
| 2108 | 
            -
                @param {Number} [ | 
| 2132 | 
            +
                @param {Number} [options.delay=0]
         | 
| 2109 2133 | 
             
                  The delay before the animation starts, in milliseconds.
         | 
| 2110 | 
            -
                @param {String} [ | 
| 2134 | 
            +
                @param {String} [options.easing='ease']
         | 
| 2111 2135 | 
             
                  The timing function that controls the animation's acceleration.
         | 
| 2112 2136 | 
             
                  See [W3C documentation](http://www.w3.org/TR/css3-transitions/#transition-timing-function)
         | 
| 2113 2137 | 
             
                  for a list of pre-defined timing functions.
         | 
| @@ -2228,6 +2252,9 @@ We need to work on this page: | |
| 2228 2252 | 
             
                Transitions are implement by performing two animations in parallel,
         | 
| 2229 2253 | 
             
                causing one element to disappear and the other to appear.
         | 
| 2230 2254 |  | 
| 2255 | 
            +
                Note that the transition does not remove any elements from the DOM.
         | 
| 2256 | 
            +
                The first element will remain in the DOM, albeit hidden using `display: none`.
         | 
| 2257 | 
            +
                
         | 
| 2231 2258 | 
             
                \#\#\#\# Named transitions
         | 
| 2232 2259 |  | 
| 2233 2260 | 
             
                The following transitions are pre-defined:
         | 
| @@ -2251,11 +2278,11 @@ We need to work on this page: | |
| 2251 2278 | 
             
                @param {Element|jQuery|String} source
         | 
| 2252 2279 | 
             
                @param {Element|jQuery|String} target
         | 
| 2253 2280 | 
             
                @param {Function|String} transitionOrName
         | 
| 2254 | 
            -
                @param {Number} [ | 
| 2281 | 
            +
                @param {Number} [options.duration=300]
         | 
| 2255 2282 | 
             
                  The duration of the animation, in milliseconds.
         | 
| 2256 | 
            -
                @param {Number} [ | 
| 2283 | 
            +
                @param {Number} [options.delay=0]
         | 
| 2257 2284 | 
             
                  The delay before the animation starts, in milliseconds.
         | 
| 2258 | 
            -
                @param {String} [ | 
| 2285 | 
            +
                @param {String} [options.easing='ease']
         | 
| 2259 2286 | 
             
                  The timing function that controls the transition's acceleration.
         | 
| 2260 2287 | 
             
                  See [W3C documentation](http://www.w3.org/TR/css3-transitions/#transition-timing-function)
         | 
| 2261 2288 | 
             
                  for a list of pre-defined timing functions.
         | 
| @@ -2296,6 +2323,30 @@ We need to work on this page: | |
| 2296 2323 | 
             
                /**
         | 
| 2297 2324 | 
             
                Defines a named transition.
         | 
| 2298 2325 |  | 
| 2326 | 
            +
                Here is the definition of the pre-defined `cross-fade` animation:
         | 
| 2327 | 
            +
                
         | 
| 2328 | 
            +
                    up.transition('cross-fade', ($old, $new, options) ->
         | 
| 2329 | 
            +
                      up.motion.when(
         | 
| 2330 | 
            +
                        animate($old, 'fade-out', options),
         | 
| 2331 | 
            +
                        animate($new, 'fade-in', options)
         | 
| 2332 | 
            +
                      )
         | 
| 2333 | 
            +
                    )
         | 
| 2334 | 
            +
                
         | 
| 2335 | 
            +
                It is recommended that your transitions use [`up.animate`](#up.animate),
         | 
| 2336 | 
            +
                passing along the `options` that were passed to you.
         | 
| 2337 | 
            +
                
         | 
| 2338 | 
            +
                If you choose to *not* use `up.animate` and roll your own
         | 
| 2339 | 
            +
                logic instead, your code must honor the following contract:
         | 
| 2340 | 
            +
                
         | 
| 2341 | 
            +
                1. It must honor the passed options.
         | 
| 2342 | 
            +
                2. It must *not* remove any of the given elements from the DOM.
         | 
| 2343 | 
            +
                3. It returns a promise that is resolved when the transition ends
         | 
| 2344 | 
            +
                4. The returned promise responds to a `resolve()` function that
         | 
| 2345 | 
            +
                   instantly jumps to the last transition frame and resolves the promise.
         | 
| 2346 | 
            +
                
         | 
| 2347 | 
            +
                Calling [`up.animate`](#up.animate) with an object argument
         | 
| 2348 | 
            +
                will take care of all these points.
         | 
| 2349 | 
            +
                
         | 
| 2299 2350 | 
             
                @method up.transition
         | 
| 2300 2351 | 
             
                @param {String} name
         | 
| 2301 2352 | 
             
                @param {Function} transition
         | 
| @@ -2309,7 +2360,7 @@ We need to work on this page: | |
| 2309 2360 |  | 
| 2310 2361 | 
             
                Here is the definition of the pre-defined `fade-in` animation:
         | 
| 2311 2362 |  | 
| 2312 | 
            -
                    animation('fade-in', ($ghost, options) ->
         | 
| 2363 | 
            +
                    up.animation('fade-in', ($ghost, options) ->
         | 
| 2313 2364 | 
             
                      $ghost.css(opacity: 0)
         | 
| 2314 2365 | 
             
                      animate($ghost, { opacity: 1 }, options)
         | 
| 2315 2366 | 
             
                    )
         | 
| @@ -2322,7 +2373,7 @@ We need to work on this page: | |
| 2322 2373 | 
             
                animation code instead, your code must honor the following contract:
         | 
| 2323 2374 |  | 
| 2324 2375 | 
             
                1. It must honor the passed options.
         | 
| 2325 | 
            -
                2. It must not remove the passed element from the DOM.
         | 
| 2376 | 
            +
                2. It must *not* remove the passed element from the DOM.
         | 
| 2326 2377 | 
             
                3. It returns a promise that is resolved when the animation ends
         | 
| 2327 2378 | 
             
                4. The returned promise responds to a `resolve()` function that
         | 
| 2328 2379 | 
             
                   instantly jumps to the last animation frame and resolves the promise.
         | 
| @@ -2347,11 +2398,14 @@ We need to work on this page: | |
| 2347 2398 | 
             
                };
         | 
| 2348 2399 |  | 
| 2349 2400 | 
             
                /**
         | 
| 2350 | 
            -
                Returns a new promise that resolves once all promises in  | 
| 2351 | 
            -
                 | 
| 2401 | 
            +
                Returns a new promise that resolves once all promises in arguments resolve.
         | 
| 2402 | 
            +
                
         | 
| 2403 | 
            +
                Other then [`$.when` from jQuery](https://api.jquery.com/jquery.when/),
         | 
| 2404 | 
            +
                the combined promise will have a `resolve` method.
         | 
| 2352 2405 |  | 
| 2353 2406 | 
             
                @method up.motion.when
         | 
| 2354 2407 | 
             
                @param promises...
         | 
| 2408 | 
            +
                @return A new promise.
         | 
| 2355 2409 | 
             
                 */
         | 
| 2356 2410 | 
             
                resolvableWhen = u.resolvableWhen;
         | 
| 2357 2411 |  | 
| @@ -2543,7 +2597,7 @@ response will already be cached when the user performs the click. | |
| 2543 2597 |  | 
| 2544 2598 | 
             
            (function() {
         | 
| 2545 2599 | 
             
              up.proxy = (function() {
         | 
| 2546 | 
            -
                var $waitingLink, SAFE_HTTP_METHODS, ajax, alias, cache, cacheKey, cancelDelay, checkPreload, clear, config, defaults, delayTimer, ensureIsIdempotent, get, isFresh, isIdempotent, normalizeRequest, preload, remove, reset, set, startDelay, timestamp,  | 
| 2600 | 
            +
                var $waitingLink, SAFE_HTTP_METHODS, ajax, alias, cache, cacheKey, cancelDelay, checkPreload, clear, config, defaults, delayTimer, ensureIsIdempotent, get, isFresh, isIdempotent, normalizeRequest, preload, remove, reset, set, startDelay, timestamp, trim, u;
         | 
| 2547 2601 | 
             
                config = {
         | 
| 2548 2602 | 
             
                  preloadDelay: 75,
         | 
| 2549 2603 | 
             
                  cacheSize: 70,
         | 
| @@ -2552,10 +2606,15 @@ response will already be cached when the user performs the click. | |
| 2552 2606 |  | 
| 2553 2607 | 
             
                /**
         | 
| 2554 2608 | 
             
                @method up.proxy.defaults
         | 
| 2555 | 
            -
                @param {Number} [options.preloadDelay]
         | 
| 2556 | 
            -
             | 
| 2557 | 
            -
             | 
| 2609 | 
            +
                @param {Number} [options.preloadDelay=75]
         | 
| 2610 | 
            +
                  The number of milliseconds to wait before [`[up-preload]`](#up-preload)
         | 
| 2611 | 
            +
                  starts preloading.
         | 
| 2612 | 
            +
                @param {Number} [options.cacheSize=70]
         | 
| 2613 | 
            +
                  The maximum number of responses to cache.
         | 
| 2614 | 
            +
                  If the size is exceeded, the oldest items will be dropped from the cache.
         | 
| 2615 | 
            +
                @param {Number} [options.cacheExpiry=300000]
         | 
| 2558 2616 | 
             
                  The number of milliseconds until a cache entry expires.
         | 
| 2617 | 
            +
                  Defaults to 5 minutes.
         | 
| 2559 2618 | 
             
                 */
         | 
| 2560 2619 | 
             
                defaults = function(options) {
         | 
| 2561 2620 | 
             
                  return u.extend(config, options);
         | 
| @@ -2626,14 +2685,20 @@ response will already be cached when the user performs the click. | |
| 2626 2685 | 
             
                @param {String} request.url
         | 
| 2627 2686 | 
             
                @param {String} [request.method='GET']
         | 
| 2628 2687 | 
             
                @param {String} [request.selector]
         | 
| 2688 | 
            +
                @param {Boolean} [request.cache]
         | 
| 2689 | 
            +
                  Whether to use a cached response, if available.
         | 
| 2690 | 
            +
                  If set to `false` a network connection will always be attempted.
         | 
| 2629 2691 | 
             
                 */
         | 
| 2630 | 
            -
                ajax = function( | 
| 2631 | 
            -
                  var promise;
         | 
| 2632 | 
            -
                   | 
| 2692 | 
            +
                ajax = function(options) {
         | 
| 2693 | 
            +
                  var forceCache, ignoreCache, promise, request;
         | 
| 2694 | 
            +
                  forceCache = u.castsToTrue(options.cache);
         | 
| 2695 | 
            +
                  ignoreCache = u.castsToFalse(options.cache);
         | 
| 2696 | 
            +
                  request = u.only(options, 'url', 'method', 'selector');
         | 
| 2697 | 
            +
                  if (!isIdempotent(request) && !forceCache) {
         | 
| 2633 2698 | 
             
                    clear();
         | 
| 2634 2699 | 
             
                    promise = u.ajax(request);
         | 
| 2635 | 
            -
                  } else if (promise = get(request)) {
         | 
| 2636 | 
            -
                     | 
| 2700 | 
            +
                  } else if (promise = get(request) && !ignoreCache) {
         | 
| 2701 | 
            +
                    promise;
         | 
| 2637 2702 | 
             
                  } else {
         | 
| 2638 2703 | 
             
                    promise = u.ajax(request);
         | 
| 2639 2704 | 
             
                    set(request, promise);
         | 
| @@ -2653,9 +2718,6 @@ response will already be cached when the user performs the click. | |
| 2653 2718 | 
             
                  timeSinceTouch = timestamp() - promise.timestamp;
         | 
| 2654 2719 | 
             
                  return timeSinceTouch < config.cacheExpiry;
         | 
| 2655 2720 | 
             
                };
         | 
| 2656 | 
            -
                touch = function(promise) {
         | 
| 2657 | 
            -
                  return promise.timestamp = timestamp();
         | 
| 2658 | 
            -
                };
         | 
| 2659 2721 | 
             
                get = function(request) {
         | 
| 2660 2722 | 
             
                  var key, promise;
         | 
| 2661 2723 | 
             
                  key = cacheKey(request);
         | 
| @@ -2677,8 +2739,8 @@ response will already be cached when the user performs the click. | |
| 2677 2739 | 
             
                  var key;
         | 
| 2678 2740 | 
             
                  trim();
         | 
| 2679 2741 | 
             
                  key = cacheKey(request);
         | 
| 2742 | 
            +
                  promise.timestamp = timestamp();
         | 
| 2680 2743 | 
             
                  cache[key] = promise;
         | 
| 2681 | 
            -
                  touch(promise);
         | 
| 2682 2744 | 
             
                  return promise;
         | 
| 2683 2745 | 
             
                };
         | 
| 2684 2746 | 
             
                remove = function(request) {
         | 
| @@ -2747,6 +2809,7 @@ response will already be cached when the user performs the click. | |
| 2747 2809 | 
             
                  set: set,
         | 
| 2748 2810 | 
             
                  alias: alias,
         | 
| 2749 2811 | 
             
                  clear: clear,
         | 
| 2812 | 
            +
                  remove: remove,
         | 
| 2750 2813 | 
             
                  defaults: defaults
         | 
| 2751 2814 | 
             
                };
         | 
| 2752 2815 | 
             
              })();
         | 
| @@ -2888,11 +2951,11 @@ Read on | |
| 2888 2951 | 
             
                @param {Element|jQuery|String} [options.scroll]
         | 
| 2889 2952 | 
             
                  An element or selector that will be scrolled to the top in
         | 
| 2890 2953 | 
             
                  case the replaced element is not visible in the viewport.
         | 
| 2891 | 
            -
                @param {Number} [ | 
| 2954 | 
            +
                @param {Number} [options.duration]
         | 
| 2892 2955 | 
             
                  The duration of the transition. See [`up.morph`](/up.motion#up.morph).
         | 
| 2893 | 
            -
                @param {Number} [ | 
| 2956 | 
            +
                @param {Number} [options.delay]
         | 
| 2894 2957 | 
             
                  The delay before the transition starts. See [`up.morph`](/up.motion#up.morph).
         | 
| 2895 | 
            -
                @param {String} [ | 
| 2958 | 
            +
                @param {String} [options.easing]
         | 
| 2896 2959 | 
             
                  The timing function that controls the transition's acceleration. [`up.morph`](/up.motion#up.morph).
         | 
| 2897 2960 | 
             
                 */
         | 
| 2898 2961 | 
             
                follow = function(link, options) {
         | 
| @@ -2904,6 +2967,7 @@ Read on | |
| 2904 2967 | 
             
                  options.transition = u.option(options.transition, $link.attr('up-transition'), $link.attr('up-animation'));
         | 
| 2905 2968 | 
             
                  options.history = u.option(options.history, $link.attr('up-history'));
         | 
| 2906 2969 | 
             
                  options.scroll = u.option(options.scroll, $link.attr('up-scroll'), 'body');
         | 
| 2970 | 
            +
                  options.cache = u.option(options.cache, $link.attr('up-cache'));
         | 
| 2907 2971 | 
             
                  options = u.merge(options, up.motion.animateOptions(options, $link));
         | 
| 2908 2972 | 
             
                  return up.replace(selector, url, options);
         | 
| 2909 2973 | 
             
                };
         | 
| @@ -3179,17 +3243,19 @@ We need to work on this page: | |
| 3179 3243 | 
             
                @param {String} [options.failTransition='none']
         | 
| 3180 3244 | 
             
                  The transition to use when a failed form submission updates the `options.failTarget` selector.
         | 
| 3181 3245 | 
             
                  Defaults to the form's `up-fail-transition` attribute, or to `options.transition`, or to `'none'`.
         | 
| 3182 | 
            -
                @param {Number} [ | 
| 3246 | 
            +
                @param {Number} [options.duration]
         | 
| 3183 3247 | 
             
                  The duration of the transition. See [`up.morph`](/up.motion#up.morph).
         | 
| 3184 | 
            -
                @param {Number} [ | 
| 3248 | 
            +
                @param {Number} [options.delay]
         | 
| 3185 3249 | 
             
                  The delay before the transition starts. See [`up.morph`](/up.motion#up.morph).
         | 
| 3186 | 
            -
                @param {String} [ | 
| 3250 | 
            +
                @param {String} [options.easing]
         | 
| 3187 3251 | 
             
                  The timing function that controls the transition's acceleration. [`up.morph`](/up.motion#up.morph).
         | 
| 3252 | 
            +
                @param {Boolean} [options.cache]
         | 
| 3253 | 
            +
                  Whether to accept a cached response.
         | 
| 3188 3254 | 
             
                @return {Promise}
         | 
| 3189 3255 | 
             
                  A promise for the AJAX response
         | 
| 3190 3256 | 
             
                 */
         | 
| 3191 3257 | 
             
                submit = function(formOrSelector, options) {
         | 
| 3192 | 
            -
                  var $form, animateOptions, failureSelector, failureTransition, historyOption, httpMethod, request, successSelector, successTransition, successUrl, url;
         | 
| 3258 | 
            +
                  var $form, animateOptions, failureSelector, failureTransition, historyOption, httpMethod, request, successSelector, successTransition, successUrl, url, useCache;
         | 
| 3193 3259 | 
             
                  $form = $(formOrSelector).closest('form');
         | 
| 3194 3260 | 
             
                  options = u.options(options);
         | 
| 3195 3261 | 
             
                  successSelector = u.option(options.target, $form.attr('up-target'), 'body');
         | 
| @@ -3201,6 +3267,7 @@ We need to work on this page: | |
| 3201 3267 | 
             
                  failureTransition = u.option(options.failTransition, $form.attr('up-fail-transition'), successTransition);
         | 
| 3202 3268 | 
             
                  httpMethod = u.option(options.method, $form.attr('up-method'), $form.attr('data-method'), $form.attr('method'), 'post').toUpperCase();
         | 
| 3203 3269 | 
             
                  animateOptions = up.motion.animateOptions(options, $form);
         | 
| 3270 | 
            +
                  useCache = u.option(options.cache, $form.attr('up-cache'));
         | 
| 3204 3271 | 
             
                  url = u.option(options.url, $form.attr('action'), up.browser.url());
         | 
| 3205 3272 | 
             
                  $form.addClass('up-active');
         | 
| 3206 3273 | 
             
                  if (!up.browser.canPushState() && !u.castsToFalse(historyOption)) {
         | 
| @@ -3211,7 +3278,8 @@ We need to work on this page: | |
| 3211 3278 | 
             
                    url: url,
         | 
| 3212 3279 | 
             
                    type: httpMethod,
         | 
| 3213 3280 | 
             
                    data: $form.serialize(),
         | 
| 3214 | 
            -
                    selector: successSelector
         | 
| 3281 | 
            +
                    selector: successSelector,
         | 
| 3282 | 
            +
                    cache: useCache
         | 
| 3215 3283 | 
             
                  };
         | 
| 3216 3284 | 
             
                  successUrl = function(xhr) {
         | 
| 3217 3285 | 
             
                    var currentLocation;
         | 
| @@ -3530,11 +3598,11 @@ We need to work on this page: | |
| 3530 3598 | 
             
                @param {String} [options.origin='bottom-right']
         | 
| 3531 3599 | 
             
                @param {String} [options.animation]
         | 
| 3532 3600 | 
             
                  The animation to use when opening the popup.
         | 
| 3533 | 
            -
                @param {Number} [ | 
| 3601 | 
            +
                @param {Number} [options.duration]
         | 
| 3534 3602 | 
             
                  The duration of the animation. See [`up.animate`](/up.motion#up.animate).
         | 
| 3535 | 
            -
                @param {Number} [ | 
| 3603 | 
            +
                @param {Number} [options.delay]
         | 
| 3536 3604 | 
             
                  The delay before the animation starts. See [`up.animate`](/up.motion#up.animate).
         | 
| 3537 | 
            -
                @param {String} [ | 
| 3605 | 
            +
                @param {String} [options.easing]
         | 
| 3538 3606 | 
             
                  The timing function that controls the animation's acceleration. [`up.animate`](/up.motion#up.animate).
         | 
| 3539 3607 | 
             
                @param {Boolean} [options.sticky=false]
         | 
| 3540 3608 | 
             
                  If set to `true`, the popup remains
         | 
| @@ -3800,11 +3868,11 @@ For small popup overlays ("dropdowns") see [up.popup](/up.popup) instead. | |
| 3800 3868 | 
             
                @param {Object} [options.history=true]
         | 
| 3801 3869 | 
             
                @param {String} [options.animation]
         | 
| 3802 3870 | 
             
                  The animation to use when opening the modal.
         | 
| 3803 | 
            -
                @param {Number} [ | 
| 3871 | 
            +
                @param {Number} [options.duration]
         | 
| 3804 3872 | 
             
                  The duration of the animation. See [`up.animate`](/up.motion#up.animate).
         | 
| 3805 | 
            -
                @param {Number} [ | 
| 3873 | 
            +
                @param {Number} [options.delay]
         | 
| 3806 3874 | 
             
                  The delay before the animation starts. See [`up.animate`](/up.motion#up.animate).
         | 
| 3807 | 
            -
                @param {String} [ | 
| 3875 | 
            +
                @param {String} [options.easing]
         | 
| 3808 3876 | 
             
                  The timing function that controls the animation's acceleration. [`up.animate`](/up.motion#up.animate).
         | 
| 3809 3877 | 
             
                @return {Promise}
         | 
| 3810 3878 | 
             
                  A promise that will be resolved when the modal has finished loading.
         | 
| @@ -4236,27 +4304,54 @@ From Up's point of view the "current" location is either: | |
| 4236 4304 | 
             
            }).call(this);
         | 
| 4237 4305 |  | 
| 4238 4306 | 
             
            /**
         | 
| 4239 | 
            -
             | 
| 4240 | 
            -
             | 
| 4241 | 
            -
             | 
| 4307 | 
            +
            Content slots
         | 
| 4308 | 
            +
            =============
         | 
| 4309 | 
            +
             | 
| 4310 | 
            +
            It can be useful to mark "slots" in your page layout where you expect
         | 
| 4311 | 
            +
            content to appear in the future.
         | 
| 4312 | 
            +
             | 
| 4313 | 
            +
            For example, you might have
         | 
| 4314 | 
            +
             | 
| 4315 | 
            +
                <div up-slot class="alerts"></div>
         | 
| 4316 | 
            +
             | 
| 4317 | 
            +
                <script>
         | 
| 4318 | 
            +
                  up.awaken('.alerts', function ($element) {
         | 
| 4319 | 
            +
             | 
| 4320 | 
            +
                    RELOAD SHOULD NOT CACHE
         | 
| 4321 | 
            +
             | 
| 4322 | 
            +
                    setInterval(3000, function() { up.reload('.alerts') });
         | 
| 4323 | 
            +
                  });
         | 
| 4324 | 
            +
                </script>
         | 
| 4325 | 
            +
             | 
| 4326 | 
            +
            Seeing that the `.alerts` container is empty, Up.js will hide it:
         | 
| 4327 | 
            +
             | 
| 4328 | 
            +
                <div class="alerts" up-slot style="display: none"></div>
         | 
| 4329 | 
            +
             | 
| 4330 | 
            +
            As soon as you
         | 
| 4331 | 
            +
             | 
| 4332 | 
            +
                <div class="alerts" up-slot>
         | 
| 4333 | 
            +
                  Meeting at 11:30 AM
         | 
| 4334 | 
            +
                </div>
         | 
| 4335 | 
            +
             | 
| 4336 | 
            +
             | 
| 4242 4337 | 
             
            TODO: Write some documentation
         | 
| 4243 4338 |  | 
| 4244 | 
            -
            @class up. | 
| 4339 | 
            +
            @class up.slot
         | 
| 4245 4340 | 
             
             */
         | 
| 4246 4341 |  | 
| 4247 4342 | 
             
            (function() {
         | 
| 4248 | 
            -
              up. | 
| 4343 | 
            +
              up.slot = (function() {
         | 
| 4249 4344 | 
             
                var check, hasContent, u;
         | 
| 4250 4345 | 
             
                u = up.util;
         | 
| 4251 | 
            -
                hasContent = function($ | 
| 4252 | 
            -
                  return u.trim($ | 
| 4346 | 
            +
                hasContent = function($slot) {
         | 
| 4347 | 
            +
                  return u.trim($slot.html()) !== '';
         | 
| 4253 4348 | 
             
                };
         | 
| 4254 4349 | 
             
                check = function($element) {
         | 
| 4255 | 
            -
                  return u.findWithSelf($element, '[up- | 
| 4256 | 
            -
                    var $ | 
| 4257 | 
            -
                    $ | 
| 4258 | 
            -
                    if (!hasContent($ | 
| 4259 | 
            -
                      return $ | 
| 4350 | 
            +
                  return u.findWithSelf($element, '[up-slot]').each(function() {
         | 
| 4351 | 
            +
                    var $slot;
         | 
| 4352 | 
            +
                    $slot = $(this);
         | 
| 4353 | 
            +
                    if (!hasContent($slot)) {
         | 
| 4354 | 
            +
                      return $slot.hide();
         | 
| 4260 4355 | 
             
                    }
         | 
| 4261 4356 | 
             
                  });
         | 
| 4262 4357 | 
             
                };
         | 
| @@ -4272,7 +4367,7 @@ TODO: Write some documentation | |
| 4272 4367 | 
             
                This is useful to prevent the element from applying unwanted
         | 
| 4273 4368 | 
             
                margins to the surrounding page flow.
         | 
| 4274 4369 |  | 
| 4275 | 
            -
                @method [up- | 
| 4370 | 
            +
                @method [up-slot]
         | 
| 4276 4371 | 
             
                @ujs
         | 
| 4277 4372 | 
             
                 */
         | 
| 4278 4373 | 
             
                return up.bus.on('fragment:ready', check);
         |