unpoly-rails 0.20.0 → 0.21.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0855a74f16d2c467f82f420c95189c404f8ff58b
4
- data.tar.gz: ef3b75b21bbb11b30346098c7cf3c69b345975a2
3
+ metadata.gz: 073e4830deaf5d1a5bcb5c021f12574b0667225b
4
+ data.tar.gz: ca7cefb937a6a874a1978991e7412dd125199ca4
5
5
  SHA512:
6
- metadata.gz: 483bd7b9c60f3a857404a80702246a9a9ce706b0c962147c295b84c8c2e92a0a9c4c335337d44d3c38a3ac239c02ac2e49ebe0575e9c5e9024313e8c14d0bc6f
7
- data.tar.gz: 15ac80da0478f761ea4bfdcb6d9a08f4d087829ef551d2fa825b0bf4be2cb724ea539c69706fc08a55f352a47483c66f14b87868ec852d9e3e2eb1c874a50818
6
+ metadata.gz: c7af376508ef0086147a8ea8227ac2b5d77fb7f86d40396237d9889942725c27984da000dc83317d831e1a931e6eeb328f05dfd88364bb4c370d923214cd46fe
7
+ data.tar.gz: f026aa47769d84312e78e50dae936c5cd1eb5e332942ab71dd8a1e0962446be16a5a4285f57b565394be9094e8b6bb9057ba713df151319946bef214d87846d9
data/CHANGELOG.md CHANGED
@@ -10,15 +10,43 @@ Unreleased
10
10
 
11
11
  ### Compatible changes
12
12
 
13
+
14
+ ### Breaking changes
15
+
16
+
17
+ 0.21.0
18
+ ------
19
+
20
+ ### Compatible changes
21
+
22
+ - New function `up.macro`. This registers a [compiler](/up.compiler) that is run before all other compilers.
23
+ - [`up.compiler`](/up.compiler) has a new options `{ priority }`. Compilers with higher priorities are run first.
24
+ - Fix a bug where trying to apply another transition on an element could throw a *Maximum call stack exceeded*
25
+ error if the element was already transitioning.
26
+
13
27
  ### Breaking changes
14
28
 
29
+ - `up-toggle` has been renamed to `up-switch`
30
+
15
31
 
16
32
  0.20.0
17
33
  ------
18
34
 
19
35
  - The project has been renamed to *Unpoly*.
36
+ - All functions remain in the `up` namespace, so e.g. `up.replace` is still called `up.replace`.
37
+ - All UJS functionality remains unchanged, so e.g. `up-target` is still called `up-target`.
20
38
  - The Bower package has been renamed to `unpoly`.
21
39
  - The Ruby gem for the Rails bindings has been renamed to `unpoly-rails`.
40
+ - The new Javascript and stylesheet assets are:
41
+ - [`unpoly.js`](https://raw.githubusercontent.com/unpoly/unpoly/master/dist/unpoly.js)
42
+ - [`unpoly.min.js`](https://raw.githubusercontent.com/unpoly/unpoly/master/dist/unpoly.min.js)
43
+ - [`unpoly.css`](https://raw.githubusercontent.com/unpoly/unpoly/master/dist/unpoly.css)
44
+ - [`unpoly.min.css`](https://raw.githubusercontent.com/unpoly/unpoly/master/dist/unpoly.min.css)
45
+ - If you're using the Bootstrap integration the new assets are:
46
+ - [`unpoly-bootstrap3.js`](https://raw.githubusercontent.com/unpoly/unpoly/master/dist/unpoly-bootstrap3.js)
47
+ - [`unpoly-bootstrap3.min.js`](https://raw.githubusercontent.com/unpoly/unpoly/master/dist/unpoly-bootstrap3.min.js)
48
+ - [`unpoly-bootstrap3.css`](https://raw.githubusercontent.com/unpoly/unpoly/master/dist/unpoly-bootstrap3.css)
49
+ - [`unpoly-bootstrap3.min.css`](https://raw.githubusercontent.com/unpoly/unpoly/master/dist/unpoly-bootstrap3.min.css)
22
50
 
23
51
 
24
52
  0.19.0
data/README.md CHANGED
@@ -71,5 +71,5 @@ Always run `rake assets:compile` before `rake release` so the git tag points to
71
71
  Credits
72
72
  -------
73
73
 
74
- - [Henning Koch](mailto:henning.koch@makandra.de) from ([makandra](http://www.makandra.com) ([@triskweline](https://twitter.com/triskweline) on Twitter)
74
+ - [Henning Koch](mailto:henning.koch@makandra.de) from [makandra](http://www.makandra.com) ([@triskweline](https://twitter.com/triskweline) on Twitter)
75
75
 
data/dist/unpoly.js CHANGED
@@ -27,7 +27,7 @@ that might save you from loading something like [Underscore.js](http://underscor
27
27
  @function up.util.memoize
28
28
  @internal
29
29
  */
30
- var $createElementFromSelector, $createPlaceholder, ANIMATION_PROMISE_KEY, all, any, cache, castedAttr, clientSize, compact, config, contains, copy, copyAttributes, createElement, createElementFromHtml, cssAnimate, detect, each, error, escapePressed, except, extend, findWithSelf, finishCssAnimate, fixedToAbsolute, forceCompositing, intersect, isArray, isBlank, isDeferred, isDefined, isElement, isFunction, isGiven, isHash, isJQuery, isMissing, isNull, isNumber, isObject, isPresent, isPromise, isStandardPort, isString, isUndefined, isUnmodifiedKeyEvent, isUnmodifiedMouseEvent, last, locationFromXhr, map, measure, memoize, merge, methodFromXhr, multiSelector, nextFrame, nonUpClasses, normalizeMethod, normalizeUrl, nullJQuery, offsetParent, once, only, option, options, parseUrl, presence, presentAttr, reject, remove, requestDataAsArray, requestDataAsQuery, resolvableWhen, resolvedDeferred, resolvedPromise, scrollbarWidth, select, selectorForElement, setMissingAttrs, temporaryCss, times, titleFromXhr, toArray, trim, unJQuery, uniq, unresolvableDeferred, unresolvablePromise, unwrapElement;
30
+ var $createElementFromSelector, $createPlaceholder, ANIMATION_DEFERRED_KEY, all, any, cache, castedAttr, clientSize, compact, config, contains, copy, copyAttributes, createElement, createElementFromHtml, cssAnimate, detect, each, error, escapePressed, except, extend, findWithSelf, finishCssAnimate, fixedToAbsolute, forceCompositing, intersect, isArray, isBlank, isDeferred, isDefined, isElement, isFunction, isGiven, isHash, isJQuery, isMissing, isNull, isNumber, isObject, isPresent, isPromise, isStandardPort, isString, isUndefined, isUnmodifiedKeyEvent, isUnmodifiedMouseEvent, last, locationFromXhr, map, measure, memoize, merge, methodFromXhr, multiSelector, nextFrame, nonUpClasses, normalizeMethod, normalizeUrl, nullJQuery, offsetParent, once, only, option, options, parseUrl, pluckData, presence, presentAttr, reject, remove, requestDataAsArray, requestDataAsQuery, resolvableWhen, resolvedDeferred, resolvedPromise, scrollbarWidth, select, selectorForElement, setMissingAttrs, temporaryCss, times, titleFromXhr, toArray, trim, unJQuery, uniq, unresolvableDeferred, unresolvablePromise, unwrapElement;
31
31
  memoize = function(func) {
32
32
  var cache, cached;
33
33
  cache = void 0;
@@ -1067,9 +1067,9 @@ that might save you from loading something like [Underscore.js](http://underscor
1067
1067
  $element.css(lastFrame);
1068
1068
  deferred.then(withoutCompositing);
1069
1069
  deferred.then(withoutTransition);
1070
- $element.data(ANIMATION_PROMISE_KEY, deferred);
1070
+ $element.data(ANIMATION_DEFERRED_KEY, deferred);
1071
1071
  deferred.then(function() {
1072
- return $element.removeData(ANIMATION_PROMISE_KEY);
1072
+ return $element.removeData(ANIMATION_DEFERRED_KEY);
1073
1073
  });
1074
1074
  endTimeout = setTimeout((function() {
1075
1075
  return deferred.resolve();
@@ -1079,7 +1079,7 @@ that might save you from loading something like [Underscore.js](http://underscor
1079
1079
  });
1080
1080
  return deferred;
1081
1081
  };
1082
- ANIMATION_PROMISE_KEY = 'up-animation-promise';
1082
+ ANIMATION_DEFERRED_KEY = 'up-animation-deferred';
1083
1083
 
1084
1084
  /**
1085
1085
  Completes the animation for the given element by jumping
@@ -1097,7 +1097,7 @@ that might save you from loading something like [Underscore.js](http://underscor
1097
1097
  finishCssAnimate = function(elementOrSelector) {
1098
1098
  return $(elementOrSelector).each(function() {
1099
1099
  var existingAnimation;
1100
- if (existingAnimation = $(this).data(ANIMATION_PROMISE_KEY)) {
1100
+ if (existingAnimation = pluckData(this, ANIMATION_DEFERRED_KEY)) {
1101
1101
  return existingAnimation.resolve();
1102
1102
  }
1103
1103
  });
@@ -1380,12 +1380,12 @@ that might save you from loading something like [Underscore.js](http://underscor
1380
1380
  resolvableWhen = function() {
1381
1381
  var deferreds, joined;
1382
1382
  deferreds = 1 <= arguments.length ? slice.call(arguments, 0) : [];
1383
- joined = $.when.apply($, deferreds);
1384
- joined.resolve = function() {
1383
+ joined = $.when.apply($, [resolvedDeferred()].concat(slice.call(deferreds)));
1384
+ joined.resolve = memoize(function() {
1385
1385
  return each(deferreds, function(deferred) {
1386
- return typeof deferred.resolve === "function" ? deferred.resolve() : void 0;
1386
+ return deferred.resolve();
1387
1387
  });
1388
- };
1388
+ });
1389
1389
  return joined;
1390
1390
  };
1391
1391
 
@@ -1790,6 +1790,13 @@ that might save you from loading something like [Underscore.js](http://underscor
1790
1790
  $error.text(asString);
1791
1791
  throw new Error(asString);
1792
1792
  };
1793
+ pluckData = function(elementOrSelector, key) {
1794
+ var $element, value;
1795
+ $element = $(elementOrSelector);
1796
+ value = $element.data(key);
1797
+ $element.removeData(key);
1798
+ return value;
1799
+ };
1793
1800
  return {
1794
1801
  requestDataAsArray: requestDataAsArray,
1795
1802
  requestDataAsQuery: requestDataAsQuery,
@@ -1875,7 +1882,8 @@ that might save you from loading something like [Underscore.js](http://underscor
1875
1882
  cache: cache,
1876
1883
  unwrapElement: unwrapElement,
1877
1884
  multiSelector: multiSelector,
1878
- error: error
1885
+ error: error,
1886
+ pluckData: pluckData
1879
1887
  };
1880
1888
  })($);
1881
1889
 
@@ -2750,10 +2758,12 @@ later.
2750
2758
  var slice = [].slice;
2751
2759
 
2752
2760
  up.syntax = (function($) {
2753
- var DESTROYABLE_CLASS, DESTROYER_KEY, applyCompiler, clean, compile, compiler, compilers, data, reset, snapshot, u;
2761
+ var DESTROYABLE_CLASS, DESTROYER_KEY, applyCompiler, buildCompiler, clean, compile, compiler, compilers, data, insertCompiler, macro, macros, reset, snapshot, u;
2754
2762
  u = up.util;
2755
2763
  DESTROYABLE_CLASS = 'up-destroyable';
2756
2764
  DESTROYER_KEY = 'up-destroyer';
2765
+ compilers = [];
2766
+ macros = [];
2757
2767
 
2758
2768
  /**
2759
2769
  Registers a function to be called whenever an element with
@@ -2892,6 +2902,10 @@ later.
2892
2902
  @function up.compiler
2893
2903
  @param {String} selector
2894
2904
  The selector to match.
2905
+ @param {Number} [options.priority=0]
2906
+ The priority of this compilers.
2907
+ Compilers with a higher priority are run first.
2908
+ Two compilers with the same priority are run in the order they were registered.
2895
2909
  @param {Boolean} [options.batch=false]
2896
2910
  If set to `true` and a fragment insertion contains multiple
2897
2911
  elements matching the selector, `compiler` is only called once
@@ -2914,21 +2928,84 @@ later.
2914
2928
  is already handled by [`up.destroy`](/up.destroy).
2915
2929
  @stable
2916
2930
  */
2917
- compilers = [];
2918
2931
  compiler = function() {
2919
- var args, options, selector;
2932
+ var args;
2933
+ args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
2934
+ return insertCompiler.apply(null, [compilers].concat(slice.call(args)));
2935
+ };
2936
+
2937
+ /**
2938
+ Registers a [compiler](/up.compiler) that is run before all other compilers.
2939
+
2940
+ You can use `up.macro` to register a compiler that sets other UJS attributes.
2941
+
2942
+ \#\#\#\# Example
2943
+
2944
+ You will sometimes find yourself setting the same combination of UJS attributes again and again:
2945
+
2946
+ <a href="/page1" up-target=".content" up-transition="cross-fade" up-duration="300">Page 1</a>
2947
+ <a href="/page2" up-target=".content" up-transition="cross-fade" up-duration="300">Page 2</a>
2948
+ <a href="/page3" up-target=".content" up-transition="cross-fade" up-duration="300">Page 3</a>
2949
+
2950
+ We would much rather define a new `content-link` attribute that let's us
2951
+ write the same links like this:
2952
+
2953
+ <a href="/page1" content-link>Page 1</a>
2954
+ <a href="/page2" content-link>Page 2</a>
2955
+ <a href="/page3" content-link>Page 3</a>
2956
+
2957
+ We can define the `content-link` attribute by registering a macro that
2958
+ sets the `up-target`, `up-transition` and `up-duration` attributes for us:
2959
+
2960
+ up.macro('[content-link]', function($link) {
2961
+ $link.attr('up-target', '.content');
2962
+ $link.attr('up-transition', 'cross-fade');
2963
+ $link.attr('up-duration', '300');
2964
+ });
2965
+
2966
+ Examples for built-in macros are [`up-dash`](/up-dash) and [`up-expand`](/up-expand).
2967
+
2968
+ @param {String} selector
2969
+ The selector to match.
2970
+ @param {Object} options
2971
+ See options for [`up.compiler`](/up.compiler).
2972
+ @param {Function($element, data)} compiler
2973
+ The function to call when a matching element is inserted.
2974
+ See [`up.compiler`](/up.compiler) for details.
2975
+ @stable
2976
+ */
2977
+ macro = function() {
2978
+ var args;
2979
+ args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
2980
+ return insertCompiler.apply(null, [macros].concat(slice.call(args)));
2981
+ };
2982
+ buildCompiler = function() {
2983
+ var args, callback, options, selector;
2920
2984
  selector = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
2921
- if (!up.browser.isSupported()) {
2922
- return;
2923
- }
2924
- compiler = args.pop();
2925
- options = u.options(args[0]);
2926
- return compilers.push({
2985
+ callback = args.pop();
2986
+ options = u.options(args[0], {
2987
+ priority: 0
2988
+ });
2989
+ return {
2927
2990
  selector: selector,
2928
- callback: compiler,
2991
+ callback: callback,
2992
+ priority: options.priority,
2929
2993
  batch: options.batch,
2930
2994
  keep: options.keep
2931
- });
2995
+ };
2996
+ };
2997
+ insertCompiler = function() {
2998
+ var args, index, newCompiler, oldCompiler, queue;
2999
+ queue = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
3000
+ if (!up.browser.isSupported()) {
3001
+ return;
3002
+ }
3003
+ newCompiler = buildCompiler.apply(null, args);
3004
+ index = 0;
3005
+ while ((oldCompiler = queue[index]) && (oldCompiler.priority <= newCompiler.priority)) {
3006
+ index += 1;
3007
+ }
3008
+ return queue.splice(index, 0, newCompiler);
2932
3009
  };
2933
3010
  applyCompiler = function(compiler, $jqueryElement, nativeElement) {
2934
3011
  var destroyer, value;
@@ -2958,31 +3035,40 @@ later.
2958
3035
  options = u.options(options);
2959
3036
  $skipSubtrees = $(options.skip);
2960
3037
  return up.log.group("Compiling fragment %o", $fragment.get(0), function() {
2961
- var $matches, i, len, results;
3038
+ var $matches, i, len, queue, ref, results;
3039
+ ref = [macros, compilers];
2962
3040
  results = [];
2963
- for (i = 0, len = compilers.length; i < len; i++) {
2964
- compiler = compilers[i];
2965
- $matches = u.findWithSelf($fragment, compiler.selector);
2966
- $matches = $matches.filter(function() {
2967
- var $match;
2968
- $match = $(this);
2969
- return u.all($skipSubtrees, function(element) {
2970
- return $match.closest(element).length === 0;
2971
- });
2972
- });
2973
- if ($matches.length) {
2974
- results.push(up.log.group((!compiler.isDefault ? "Compiling '%s' on %d element(s)" : void 0), compiler.selector, $matches.length, function() {
2975
- if (compiler.batch) {
2976
- return applyCompiler(compiler, $matches, $matches.get());
2977
- } else {
2978
- return $matches.each(function() {
2979
- return applyCompiler(compiler, $(this), this);
3041
+ for (i = 0, len = ref.length; i < len; i++) {
3042
+ queue = ref[i];
3043
+ results.push((function() {
3044
+ var j, len1, results1;
3045
+ results1 = [];
3046
+ for (j = 0, len1 = queue.length; j < len1; j++) {
3047
+ compiler = queue[j];
3048
+ $matches = u.findWithSelf($fragment, compiler.selector);
3049
+ $matches = $matches.filter(function() {
3050
+ var $match;
3051
+ $match = $(this);
3052
+ return u.all($skipSubtrees, function(element) {
3053
+ return $match.closest(element).length === 0;
2980
3054
  });
3055
+ });
3056
+ if ($matches.length) {
3057
+ results1.push(up.log.group((!compiler.isDefault ? "Compiling '%s' on %d element(s)" : void 0), compiler.selector, $matches.length, function() {
3058
+ if (compiler.batch) {
3059
+ return applyCompiler(compiler, $matches, $matches.get());
3060
+ } else {
3061
+ return $matches.each(function() {
3062
+ return applyCompiler(compiler, $(this), this);
3063
+ });
3064
+ }
3065
+ }));
3066
+ } else {
3067
+ results1.push(void 0);
2981
3068
  }
2982
- }));
2983
- } else {
2984
- results.push(void 0);
2985
- }
3069
+ }
3070
+ return results1;
3071
+ })());
2986
3072
  }
2987
3073
  return results;
2988
3074
  });
@@ -3076,6 +3162,7 @@ later.
3076
3162
  up.on('up:framework:reset', reset);
3077
3163
  return {
3078
3164
  compiler: compiler,
3165
+ macro: macro,
3079
3166
  compile: compile,
3080
3167
  clean: clean,
3081
3168
  data: data
@@ -3084,6 +3171,8 @@ later.
3084
3171
 
3085
3172
  up.compiler = up.syntax.compiler;
3086
3173
 
3174
+ up.macro = up.syntax.macro;
3175
+
3087
3176
  up.ready = function() {
3088
3177
  return up.util.error('up.ready no longer exists. Please use up.hello instead.');
3089
3178
  };
@@ -3894,6 +3983,21 @@ This modules contains functions to scroll the viewport and reveal contained elem
3894
3983
  <div class="bottom-nav" up-fixed="bottom">...</div>
3895
3984
 
3896
3985
  @selector [up-fixed=bottom]
3986
+ @stable
3987
+ */
3988
+
3989
+ /**
3990
+ Marks this element as a navigation anchored to the right edge of the screen
3991
+ using `position: fixed` or `position:absolute`.
3992
+
3993
+ [`up.modal`](/up.modal) will move anchored elements to the left so they
3994
+ don't appear to move when a modal dialog is opened or closed.
3995
+
3996
+ \#\#\#\# Example
3997
+
3998
+ <div class="bottom-nav" up-fixed="bottom">...</div>
3999
+
4000
+ @selector [up-anchored=right]
3897
4001
  @stable
3898
4002
  */
3899
4003
  up.on('up:framework:reset', reset);
@@ -4851,7 +4955,7 @@ or [transitions](/up.transition) using Javascript or CSS.
4851
4955
 
4852
4956
  (function() {
4853
4957
  up.motion = (function($) {
4854
- var GHOSTING_PROMISE_KEY, animate, animateOptions, animation, animations, assertIsDeferred, config, defaultAnimations, defaultTransitions, ensureMorphable, findAnimation, finish, finishGhosting, isEnabled, morph, none, prependCopy, reset, resolvableWhen, skipMorph, snapshot, transition, transitions, u, withGhosts;
4958
+ var GHOSTING_DEFERRED_KEY, animate, animateOptions, animation, animations, assertIsDeferred, config, defaultAnimations, defaultTransitions, ensureMorphable, findAnimation, finish, finishGhosting, isEnabled, morph, none, prependCopy, reset, resolvableWhen, skipMorph, snapshot, transition, transitions, u, withGhosts;
4855
4959
  u = up.util;
4856
4960
  animations = {};
4857
4961
  defaultAnimations = {};
@@ -5019,9 +5123,9 @@ or [transitions](/up.transition) using Javascript or CSS.
5019
5123
  findAnimation = function(name) {
5020
5124
  return animations[name] || u.error("Unknown animation %o", name);
5021
5125
  };
5022
- GHOSTING_PROMISE_KEY = 'up-ghosting-promise';
5126
+ GHOSTING_DEFERRED_KEY = 'up-ghosting-deferred';
5023
5127
  withGhosts = function($old, $new, options, block) {
5024
- var $viewport, newCopy, newScrollTop, oldCopy, oldScrollTop, promise, showNew;
5128
+ var $viewport, deferred, newCopy, newScrollTop, oldCopy, oldScrollTop, showNew;
5025
5129
  oldCopy = void 0;
5026
5130
  newCopy = void 0;
5027
5131
  oldScrollTop = void 0;
@@ -5031,8 +5135,6 @@ or [transitions](/up.transition) using Javascript or CSS.
5031
5135
  display: 'none'
5032
5136
  }, function() {
5033
5137
  oldCopy = prependCopy($old, $viewport);
5034
- oldCopy.$ghost.addClass('up-destroying');
5035
- oldCopy.$bounds.addClass('up-destroying');
5036
5138
  return oldScrollTop = $viewport.scrollTop();
5037
5139
  });
5038
5140
  u.temporaryCss($old, {
@@ -5047,17 +5149,17 @@ or [transitions](/up.transition) using Javascript or CSS.
5047
5149
  showNew = u.temporaryCss($new, {
5048
5150
  opacity: '0'
5049
5151
  });
5050
- promise = block(oldCopy.$ghost, newCopy.$ghost);
5051
- $old.data(GHOSTING_PROMISE_KEY, promise);
5052
- $new.data(GHOSTING_PROMISE_KEY, promise);
5053
- promise.then(function() {
5054
- $old.removeData(GHOSTING_PROMISE_KEY);
5055
- $new.removeData(GHOSTING_PROMISE_KEY);
5152
+ deferred = block(oldCopy.$ghost, newCopy.$ghost);
5153
+ $old.data(GHOSTING_DEFERRED_KEY, deferred);
5154
+ $new.data(GHOSTING_DEFERRED_KEY, deferred);
5155
+ deferred.then(function() {
5156
+ $old.removeData(GHOSTING_DEFERRED_KEY);
5157
+ $new.removeData(GHOSTING_DEFERRED_KEY);
5056
5158
  showNew();
5057
5159
  oldCopy.$bounds.remove();
5058
5160
  return newCopy.$bounds.remove();
5059
5161
  });
5060
- return promise;
5162
+ return deferred;
5061
5163
  };
5062
5164
 
5063
5165
  /**
@@ -5073,20 +5175,20 @@ or [transitions](/up.transition) using Javascript or CSS.
5073
5175
  @stable
5074
5176
  */
5075
5177
  finish = function(elementOrSelector) {
5076
- return $(elementOrSelector).each(function() {
5077
- var $element;
5178
+ var $element;
5179
+ $element = $(elementOrSelector);
5180
+ u.finishCssAnimate($element);
5181
+ return finishGhosting($element);
5182
+ };
5183
+ finishGhosting = function($collection) {
5184
+ return $collection.each(function() {
5185
+ var $element, existingGhosting;
5078
5186
  $element = $(this);
5079
- u.finishCssAnimate($element);
5080
- return finishGhosting($element);
5187
+ if (existingGhosting = u.pluckData($element, GHOSTING_DEFERRED_KEY)) {
5188
+ return existingGhosting.resolve();
5189
+ }
5081
5190
  });
5082
5191
  };
5083
- finishGhosting = function($element) {
5084
- var existingGhosting;
5085
- if (existingGhosting = $element.data(GHOSTING_PROMISE_KEY)) {
5086
- up.puts('Canceling existing ghosting on %o', $element);
5087
- return typeof existingGhosting.resolve === "function" ? existingGhosting.resolve() : void 0;
5088
- }
5089
- };
5090
5192
  assertIsDeferred = function(object, source) {
5091
5193
  if (u.isDeferred(object)) {
5092
5194
  return object;
@@ -5167,7 +5269,7 @@ or [transitions](/up.transition) using Javascript or CSS.
5167
5269
  $new = $(target);
5168
5270
  ensureMorphable($old, transitionOrName);
5169
5271
  ensureMorphable($new, transitionOrName);
5170
- return up.log.group((transitionOrName ? 'Morphing %o to %o (using %o)' : void 0), source, target, transitionOrName, function() {
5272
+ return up.log.group((transitionOrName ? 'Morphing %o to %o (using %s)' : void 0), $old.get(0), $new.get(0), transitionOrName, function() {
5171
5273
  var animation, parsedOptions, parts, transition;
5172
5274
  parsedOptions = u.only(options, 'reveal', 'restoreScroll', 'source');
5173
5275
  parsedOptions = u.extend(parsedOptions, animateOptions(options));
@@ -6533,7 +6635,7 @@ Read on
6533
6635
  If omitted, the first contained link will be expanded.
6534
6636
  @stable
6535
6637
  */
6536
- up.compiler('[up-expand]', function($area) {
6638
+ up.macro('[up-expand]', function($area) {
6537
6639
  var $childLinks, attribute, i, len, link, name, newAttrs, ref, selector, upAttributePattern;
6538
6640
  $childLinks = $area.find('a, [up-href]');
6539
6641
  if (selector = $area.attr('up-expand')) {
@@ -6576,7 +6678,7 @@ Read on
6576
6678
  @selector [up-dash]
6577
6679
  @stable
6578
6680
  */
6579
- up.compiler('[up-dash]', function($element) {
6681
+ up.macro('[up-dash]', function($element) {
6580
6682
  var newAttrs, target;
6581
6683
  target = u.castedAttr($element, 'up-dash');
6582
6684
  newAttrs = {
@@ -6624,7 +6726,7 @@ open dialogs with sub-forms, etc. all without losing form state.
6624
6726
  var slice = [].slice;
6625
6727
 
6626
6728
  up.form = (function($) {
6627
- var autosubmit, config, currentValuesForToggle, observe, observeForm, reset, resolveValidateTarget, submit, toggleTargets, u, validate;
6729
+ var autosubmit, config, currentValuesForSwitch, observe, observeForm, reset, resolveValidateTarget, submit, switchTargets, u, validate;
6628
6730
  u = up.util;
6629
6731
 
6630
6732
  /**
@@ -7005,7 +7107,7 @@ open dialogs with sub-forms, etc. all without losing form state.
7005
7107
  promise = up.submit($form, options);
7006
7108
  return promise;
7007
7109
  };
7008
- currentValuesForToggle = function($field) {
7110
+ currentValuesForSwitch = function($field) {
7009
7111
  var $checkedButton, value, values;
7010
7112
  values = void 0;
7011
7113
  if ($field.is('input[type=checkbox]')) {
@@ -7031,7 +7133,7 @@ open dialogs with sub-forms, etc. all without losing form state.
7031
7133
  }
7032
7134
  return values;
7033
7135
  };
7034
- currentValuesForToggle = function($field) {
7136
+ currentValuesForSwitch = function($field) {
7035
7137
  var $checkedButton, meta, value, values;
7036
7138
  if ($field.is('input[type=checkbox]')) {
7037
7139
  if ($field.is(':checked')) {
@@ -7067,26 +7169,26 @@ open dialogs with sub-forms, etc. all without losing form state.
7067
7169
  /**
7068
7170
  Shows or hides a target selector depending on the value.
7069
7171
 
7070
- See [`[up-toggle]`](/up-toggle) for more documentation and examples.
7172
+ See [`[up-switch]`](/up-switch) for more documentation and examples.
7071
7173
 
7072
7174
  This function does not currently have a very useful API outside
7073
- of our use for `up-toggle`'s UJS behavior, that's why it's currently
7175
+ of our use for `up-switch`'s UJS behavior, that's why it's currently
7074
7176
  still marked `@internal`.
7075
7177
 
7076
- @function up.form.toggle
7178
+ @function up.form.switchTargets
7077
7179
  @param {String|Element|jQuery} fieldOrSelector
7078
7180
  @param {String} [options.target]
7079
- The target selectors to toggle.
7080
- Defaults to an `up-toggle` attribute on the given field.
7181
+ The target selectors to switch.
7182
+ Defaults to an `up-switch` attribute on the given field.
7081
7183
  @internal
7082
7184
  */
7083
- toggleTargets = function(fieldOrSelector, options) {
7185
+ switchTargets = function(fieldOrSelector, options) {
7084
7186
  var $field, fieldValues, targets;
7085
7187
  $field = $(fieldOrSelector);
7086
7188
  options = u.options(options);
7087
- targets = u.option(options.target, $field.attr('up-toggle'));
7088
- u.isPresent(targets) || u.error("No toggle target given for %o", $field.get(0));
7089
- fieldValues = currentValuesForToggle($field);
7189
+ targets = u.option(options.target, $field.attr('up-switch'));
7190
+ u.isPresent(targets) || u.error("No switch target given for %o", $field.get(0));
7191
+ fieldValues = currentValuesForSwitch($field);
7090
7192
  return $(targets).each(function() {
7091
7193
  var $target, hideValues, show, showValues;
7092
7194
  $target = $(this);
@@ -7359,9 +7461,9 @@ open dialogs with sub-forms, etc. all without losing form state.
7359
7461
 
7360
7462
  \#\#\#\# Example
7361
7463
 
7362
- The triggering input gets an `up-toggle` attribute with a selector for the elements to show or hide:
7464
+ The triggering input gets an `up-switch` attribute with a selector for the elements to show or hide:
7363
7465
 
7364
- <select name="advancedness" up-toggle=".target">
7466
+ <select name="advancedness" up-switch=".target">
7365
7467
  <option value="basic">Basic parts</option>
7366
7468
  <option value="advanced">Advanced parts</option>
7367
7469
  <option value="very-advanced">Very advanced parts</option>
@@ -7383,7 +7485,7 @@ open dialogs with sub-forms, etc. all without losing form state.
7383
7485
 
7384
7486
  For checkboxes you can also use the pseudo-values `:checked` or `:unchecked` like so:
7385
7487
 
7386
- <input type="checkbox" name="flag" up-toggle=".target">
7488
+ <input type="checkbox" name="flag" up-switch=".target">
7387
7489
 
7388
7490
  <div class="target" up-show-for=":checked">
7389
7491
  only shown when checkbox is checked
@@ -7392,20 +7494,20 @@ open dialogs with sub-forms, etc. all without losing form state.
7392
7494
  You can also use the pseudo-values `:blank` to match an empty input value,
7393
7495
  or `:present` to match a non-empty input value:
7394
7496
 
7395
- <input type="text" name="email" up-toggle=".target">
7497
+ <input type="text" name="email" up-switch=".target">
7396
7498
 
7397
7499
  <div class="target" up-show-for=":blank">
7398
7500
  please enter an email address
7399
7501
  </div>
7400
7502
 
7401
- @selector [up-toggle]
7503
+ @selector [up-switch]
7402
7504
  @stable
7403
7505
  */
7404
7506
 
7405
7507
  /**
7406
7508
  Show this element only if a form field has a given value.
7407
7509
 
7408
- See [`[up-toggle]`](/up-toggle) for more documentation and examples.
7510
+ See [`[up-switch]`](/up-switch) for more documentation and examples.
7409
7511
 
7410
7512
  @selector [up-show-for]
7411
7513
  @param up-show-for
@@ -7416,19 +7518,18 @@ open dialogs with sub-forms, etc. all without losing form state.
7416
7518
  /**
7417
7519
  Hide this element if a form field has a given value.
7418
7520
 
7419
- See [`[up-toggle]`](/up-toggle) for more documentation and examples.
7521
+ See [`[up-switch]`](/up-switch) for more documentation and examples.
7420
7522
 
7421
7523
  @selector [up-hide-for]
7422
7524
  @param up-hide-for
7423
7525
  A space-separated list of values for which to hide this element.
7424
7526
  @stable
7425
7527
  */
7426
- up.on('change', '[up-toggle]', function(event, $field) {
7427
- console.log("CHANGE EVENT");
7428
- return toggleTargets($field);
7528
+ up.on('change', '[up-switch]', function(event, $field) {
7529
+ return switchTargets($field);
7429
7530
  });
7430
- up.compiler('[up-toggle]', function($field) {
7431
- return toggleTargets($field);
7531
+ up.compiler('[up-switch]', function($field) {
7532
+ return switchTargets($field);
7432
7533
  });
7433
7534
 
7434
7535
  /**
@@ -7500,7 +7601,7 @@ open dialogs with sub-forms, etc. all without losing form state.
7500
7601
  submit: submit,
7501
7602
  observe: observe,
7502
7603
  validate: validate,
7503
- toggleTargets: toggleTargets
7604
+ switchTargets: switchTargets
7504
7605
  };
7505
7606
  })(jQuery);
7506
7607