react-source 0.3.0 → 0.3.2
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.
- data/build/JSXTransformer.js +469 -473
- data/build/react.js +507 -507
- data/build/react.min.js +2 -2
- metadata +2 -2
data/build/react.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* React v0.3.
|
2
|
+
* React v0.3.2
|
3
3
|
*/
|
4
4
|
(function(e){if("function"==typeof bootstrap)bootstrap("react",e);else if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else if("undefined"!=typeof ses){if(!ses.ok())return;ses.makeReact=e}else"undefined"!=typeof window?window.React=e():global.React=e()})(function(){var define,ses,bootstrap,module,exports;
|
5
5
|
return (function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error("Cannot find module '"+n+"'")}var u=t[n]={exports:{}};e[n][0].call(u.exports,function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require=="function"&&require;for(var s=0;s<n.length;s++)i(n[s]);return i})({1:[function(require,module,exports){
|
@@ -2990,7 +2990,7 @@ mixInto(ReactNativeComponent, ReactMultiChild.Mixin);
|
|
2990
2990
|
|
2991
2991
|
module.exports = ReactNativeComponent;
|
2992
2992
|
|
2993
|
-
},{"./
|
2993
|
+
},{"./CSSPropertyOperations":32,"./DOMPropertyOperations":34,"./ReactComponent":3,"./ReactEvent":20,"./ReactMultiChild":41,"./escapeTextForBrowser":42,"./flattenChildren":43,"./invariant":10,"./keyOf":44,"./merge":12,"./mixInto":13}],18:[function(require,module,exports){
|
2994
2994
|
/**
|
2995
2995
|
* Copyright 2013 Facebook, Inc.
|
2996
2996
|
*
|
@@ -3360,7 +3360,7 @@ var ReactEvent = {
|
|
3360
3360
|
|
3361
3361
|
module.exports = ReactEvent;
|
3362
3362
|
|
3363
|
-
},{"./BrowserEnv":46,"./EventConstants":47,"./EventPluginHub":27,"./ExecutionEnvironment":14,"./
|
3363
|
+
},{"./BrowserEnv":46,"./EventConstants":47,"./EventPluginHub":27,"./ExecutionEnvironment":14,"./NormalizedEventListener":48,"./invariant":10,"./isEventSupported":49}],21:[function(require,module,exports){
|
3364
3364
|
/**
|
3365
3365
|
* Copyright 2013 Facebook, Inc.
|
3366
3366
|
*
|
@@ -3688,7 +3688,7 @@ var ReactInstanceHandles = {
|
|
3688
3688
|
|
3689
3689
|
module.exports = ReactInstanceHandles;
|
3690
3690
|
|
3691
|
-
},{"./
|
3691
|
+
},{"./getDOMNodeID":50,"./invariant":10}],22:[function(require,module,exports){
|
3692
3692
|
(function(){/**
|
3693
3693
|
* Copyright 2013 Facebook, Inc.
|
3694
3694
|
*
|
@@ -4341,7 +4341,7 @@ if (ExecutionEnvironment.canUseDOM) {
|
|
4341
4341
|
module.exports = EventPluginHub;
|
4342
4342
|
|
4343
4343
|
})()
|
4344
|
-
},{"./AbstractEvent":53,"./CallbackRegistry":54,"./EventPluginUtils":55,"./EventPropagators":52,"./ExecutionEnvironment":14,"./accumulate":56,"./forEachAccumulated":57,"./keyMirror":11,"./
|
4344
|
+
},{"./AbstractEvent":53,"./CallbackRegistry":54,"./EventPluginUtils":55,"./EventPropagators":52,"./ExecutionEnvironment":14,"./accumulate":56,"./forEachAccumulated":57,"./keyMirror":11,"./merge":12,"./throwIf":31}],28:[function(require,module,exports){
|
4345
4345
|
/**
|
4346
4346
|
* Copyright 2013 Facebook, Inc.
|
4347
4347
|
*
|
@@ -6073,69 +6073,6 @@ var Transaction = {
|
|
6073
6073
|
module.exports = Transaction;
|
6074
6074
|
|
6075
6075
|
})()
|
6076
|
-
},{"./throwIf":31}],42:[function(require,module,exports){
|
6077
|
-
/**
|
6078
|
-
* Copyright 2013 Facebook, Inc.
|
6079
|
-
*
|
6080
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
6081
|
-
* you may not use this file except in compliance with the License.
|
6082
|
-
* You may obtain a copy of the License at
|
6083
|
-
*
|
6084
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
6085
|
-
*
|
6086
|
-
* Unless required by applicable law or agreed to in writing, software
|
6087
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
6088
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
6089
|
-
* See the License for the specific language governing permissions and
|
6090
|
-
* limitations under the License.
|
6091
|
-
*
|
6092
|
-
* @providesModule escapeTextForBrowser
|
6093
|
-
*/
|
6094
|
-
|
6095
|
-
"use strict";
|
6096
|
-
|
6097
|
-
var throwIf = require("./throwIf");
|
6098
|
-
|
6099
|
-
var ESCAPE_TYPE_ERR;
|
6100
|
-
|
6101
|
-
if (true) {
|
6102
|
-
ESCAPE_TYPE_ERR =
|
6103
|
-
'The React core has attempted to escape content that is of a ' +
|
6104
|
-
'mysterious type (object etc) Escaping only works on numbers and strings';
|
6105
|
-
}
|
6106
|
-
|
6107
|
-
var ESCAPE_LOOKUP = {
|
6108
|
-
"&": "&",
|
6109
|
-
">": ">",
|
6110
|
-
"<": "<",
|
6111
|
-
"\"": """,
|
6112
|
-
"'": "'",
|
6113
|
-
"/": "/"
|
6114
|
-
};
|
6115
|
-
|
6116
|
-
function escaper(match) {
|
6117
|
-
return ESCAPE_LOOKUP[match];
|
6118
|
-
}
|
6119
|
-
|
6120
|
-
var escapeTextForBrowser = function (text) {
|
6121
|
-
var type = typeof text;
|
6122
|
-
var invalid = type === 'object';
|
6123
|
-
if (true) {
|
6124
|
-
throwIf(invalid, ESCAPE_TYPE_ERR);
|
6125
|
-
}
|
6126
|
-
if (text === '' || invalid) {
|
6127
|
-
return '';
|
6128
|
-
} else {
|
6129
|
-
if (type === 'string') {
|
6130
|
-
return text.replace(/[&><"'\/]/g, escaper);
|
6131
|
-
} else {
|
6132
|
-
return (''+text).replace(/[&><"'\/]/g, escaper);
|
6133
|
-
}
|
6134
|
-
}
|
6135
|
-
};
|
6136
|
-
|
6137
|
-
module.exports = escapeTextForBrowser;
|
6138
|
-
|
6139
6076
|
},{"./throwIf":31}],41:[function(require,module,exports){
|
6140
6077
|
(function(){/**
|
6141
6078
|
* Copyright 2013 Facebook, Inc.
|
@@ -6347,7 +6284,70 @@ var ReactMultiChild = {
|
|
6347
6284
|
module.exports = ReactMultiChild;
|
6348
6285
|
|
6349
6286
|
})()
|
6350
|
-
},{"./ReactComponent":3}],
|
6287
|
+
},{"./ReactComponent":3}],42:[function(require,module,exports){
|
6288
|
+
/**
|
6289
|
+
* Copyright 2013 Facebook, Inc.
|
6290
|
+
*
|
6291
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6292
|
+
* you may not use this file except in compliance with the License.
|
6293
|
+
* You may obtain a copy of the License at
|
6294
|
+
*
|
6295
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
6296
|
+
*
|
6297
|
+
* Unless required by applicable law or agreed to in writing, software
|
6298
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
6299
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
6300
|
+
* See the License for the specific language governing permissions and
|
6301
|
+
* limitations under the License.
|
6302
|
+
*
|
6303
|
+
* @providesModule escapeTextForBrowser
|
6304
|
+
*/
|
6305
|
+
|
6306
|
+
"use strict";
|
6307
|
+
|
6308
|
+
var throwIf = require("./throwIf");
|
6309
|
+
|
6310
|
+
var ESCAPE_TYPE_ERR;
|
6311
|
+
|
6312
|
+
if (true) {
|
6313
|
+
ESCAPE_TYPE_ERR =
|
6314
|
+
'The React core has attempted to escape content that is of a ' +
|
6315
|
+
'mysterious type (object etc) Escaping only works on numbers and strings';
|
6316
|
+
}
|
6317
|
+
|
6318
|
+
var ESCAPE_LOOKUP = {
|
6319
|
+
"&": "&",
|
6320
|
+
">": ">",
|
6321
|
+
"<": "<",
|
6322
|
+
"\"": """,
|
6323
|
+
"'": "'",
|
6324
|
+
"/": "/"
|
6325
|
+
};
|
6326
|
+
|
6327
|
+
function escaper(match) {
|
6328
|
+
return ESCAPE_LOOKUP[match];
|
6329
|
+
}
|
6330
|
+
|
6331
|
+
var escapeTextForBrowser = function (text) {
|
6332
|
+
var type = typeof text;
|
6333
|
+
var invalid = type === 'object';
|
6334
|
+
if (true) {
|
6335
|
+
throwIf(invalid, ESCAPE_TYPE_ERR);
|
6336
|
+
}
|
6337
|
+
if (text === '' || invalid) {
|
6338
|
+
return '';
|
6339
|
+
} else {
|
6340
|
+
if (type === 'string') {
|
6341
|
+
return text.replace(/[&><"'\/]/g, escaper);
|
6342
|
+
} else {
|
6343
|
+
return (''+text).replace(/[&><"'\/]/g, escaper);
|
6344
|
+
}
|
6345
|
+
}
|
6346
|
+
};
|
6347
|
+
|
6348
|
+
module.exports = escapeTextForBrowser;
|
6349
|
+
|
6350
|
+
},{"./throwIf":31}],43:[function(require,module,exports){
|
6351
6351
|
/**
|
6352
6352
|
* Copyright 2013 Facebook, Inc.
|
6353
6353
|
*
|
@@ -7001,7 +7001,7 @@ var EventPropagators = {
|
|
7001
7001
|
|
7002
7002
|
module.exports = EventPropagators;
|
7003
7003
|
|
7004
|
-
},{"./CallbackRegistry":54,"./EventConstants":47,"./accumulate":56,"./forEachAccumulated":57}],
|
7004
|
+
},{"./CallbackRegistry":54,"./EventConstants":47,"./accumulate":56,"./forEachAccumulated":57}],53:[function(require,module,exports){
|
7005
7005
|
/**
|
7006
7006
|
* Copyright 2013 Facebook, Inc.
|
7007
7007
|
*
|
@@ -7017,199 +7017,269 @@ module.exports = EventPropagators;
|
|
7017
7017
|
* See the License for the specific language governing permissions and
|
7018
7018
|
* limitations under the License.
|
7019
7019
|
*
|
7020
|
-
* @providesModule
|
7020
|
+
* @providesModule AbstractEvent
|
7021
7021
|
*/
|
7022
7022
|
|
7023
7023
|
"use strict";
|
7024
7024
|
|
7025
|
-
var
|
7026
|
-
var
|
7025
|
+
var BrowserEnv = require("./BrowserEnv");
|
7026
|
+
var PooledClass = require("./PooledClass");
|
7027
|
+
var TouchEventUtils = require("./TouchEventUtils");
|
7027
7028
|
|
7028
|
-
var
|
7029
|
+
var throwIf = require("./throwIf");
|
7029
7030
|
|
7030
|
-
var topLevelTypes = EventConstants.topLevelTypes;
|
7031
7031
|
|
7032
|
-
|
7033
|
-
|
7034
|
-
|
7035
|
-
|
7032
|
+
// Only accessed in __DEV__
|
7033
|
+
var CLONE_TYPE_ERR;
|
7034
|
+
if (true) {
|
7035
|
+
CLONE_TYPE_ERR =
|
7036
|
+
'You may only clone instances of AbstractEvent for ' +
|
7037
|
+
'persistent references. Check yourself.';
|
7036
7038
|
}
|
7039
|
+
var MAX_POOL_SIZE = 20;
|
7037
7040
|
|
7038
|
-
|
7039
|
-
|
7040
|
-
|
7041
|
-
|
7042
|
-
|
7043
|
-
|
7044
|
-
|
7045
|
-
|
7041
|
+
/**
|
7042
|
+
* AbstractEvent copy constructor. @see `PooledClass`. Provides a single place
|
7043
|
+
* to define all cross browser normalization of DOM events. Does not attempt to
|
7044
|
+
* extend a native event, rather creates a completely new object that has a
|
7045
|
+
* reference to the nativeEvent through .nativeEvent member. The property .data
|
7046
|
+
* should hold all data that is extracted from the event in a cross browser
|
7047
|
+
* manner. Application code should use the data field when possible, not the
|
7048
|
+
* unreliable native event.
|
7049
|
+
*/
|
7050
|
+
function AbstractEvent(
|
7051
|
+
abstractEventType,
|
7052
|
+
abstractTargetID, // Allows the abstract target to differ from native.
|
7053
|
+
originatingTopLevelEventType,
|
7054
|
+
nativeEvent,
|
7055
|
+
data) {
|
7056
|
+
this.type = abstractEventType;
|
7057
|
+
this.abstractTargetID = abstractTargetID || '';
|
7058
|
+
this.originatingTopLevelEventType = originatingTopLevelEventType;
|
7059
|
+
this.nativeEvent = nativeEvent;
|
7060
|
+
this.data = data;
|
7061
|
+
// TODO: Deprecate storing target - doesn't always make sense for some types
|
7062
|
+
this.target = nativeEvent && nativeEvent.target;
|
7046
7063
|
|
7047
|
-
|
7048
|
-
|
7049
|
-
|
7050
|
-
|
7051
|
-
|
7052
|
-
|
7064
|
+
/**
|
7065
|
+
* As a performance optimization, we tag the existing event with the listeners
|
7066
|
+
* (or listener [singular] if only one). This avoids having to package up an
|
7067
|
+
* abstract event along with the set of listeners into a wrapping "dispatch"
|
7068
|
+
* object. No one should ever read this property except event system and
|
7069
|
+
* plugin/dispatcher code. We also tag the abstract event with a parallel
|
7070
|
+
* ID array. _dispatchListeners[i] is being dispatched to a DOM node at ID
|
7071
|
+
* _dispatchIDs[i]. The lengths should never, ever, ever be different.
|
7072
|
+
*/
|
7073
|
+
this._dispatchListeners = null;
|
7074
|
+
this._dispatchIDs = null;
|
7053
7075
|
|
7054
|
-
|
7055
|
-
var pageX = AbstractEvent.eventPageX(nativeEvent);
|
7056
|
-
var pageY = AbstractEvent.eventPageY(nativeEvent);
|
7057
|
-
return Math.pow(
|
7058
|
-
Math.pow(pageX - coords.pageX, 2) + Math.pow(pageY - coords.pageY, 2),
|
7059
|
-
0.5
|
7060
|
-
);
|
7076
|
+
this.isPropagationStopped = false;
|
7061
7077
|
}
|
7062
7078
|
|
7063
|
-
|
7064
|
-
|
7065
|
-
validateEventDispatches = function(abstractEvent) {
|
7066
|
-
var dispatchListeners = abstractEvent._dispatchListeners;
|
7067
|
-
var dispatchIDs = abstractEvent._dispatchIDs;
|
7068
|
-
|
7069
|
-
var listenersIsArr = Array.isArray(dispatchListeners);
|
7070
|
-
var idsIsArr = Array.isArray(dispatchIDs);
|
7071
|
-
var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0;
|
7072
|
-
var listenersLen = listenersIsArr ?
|
7073
|
-
dispatchListeners.length :
|
7074
|
-
dispatchListeners ? 1 : 0;
|
7075
|
-
|
7076
|
-
invariant(
|
7077
|
-
idsIsArr === listenersIsArr && IDsLen === listenersLen,
|
7078
|
-
'EventPluginUtils: Invalid `abstractEvent`.'
|
7079
|
-
);
|
7080
|
-
};
|
7081
|
-
}
|
7079
|
+
/** `PooledClass` looks for this. */
|
7080
|
+
AbstractEvent.poolSize = MAX_POOL_SIZE;
|
7082
7081
|
|
7083
7082
|
/**
|
7084
|
-
*
|
7085
|
-
*
|
7086
|
-
*
|
7083
|
+
* `PooledClass` looks for `destructor` on each instance it releases. We need to
|
7084
|
+
* ensure that we remove all references to listeners which could trap large
|
7085
|
+
* amounts of memory in their closures.
|
7087
7086
|
*/
|
7088
|
-
function
|
7089
|
-
|
7090
|
-
|
7091
|
-
|
7092
|
-
|
7093
|
-
}
|
7094
|
-
if (Array.isArray(dispatchListeners)) {
|
7095
|
-
var i;
|
7096
|
-
for (
|
7097
|
-
i = 0;
|
7098
|
-
i < dispatchListeners.length && !abstractEvent.isPropagationStopped;
|
7099
|
-
i++) {
|
7100
|
-
// Listeners and IDs are two parallel arrays that are always in sync.
|
7101
|
-
cb(abstractEvent, dispatchListeners[i], dispatchIDs[i]);
|
7102
|
-
}
|
7103
|
-
} else if (dispatchListeners) {
|
7104
|
-
cb(abstractEvent, dispatchListeners, dispatchIDs);
|
7105
|
-
}
|
7106
|
-
}
|
7087
|
+
AbstractEvent.prototype.destructor = function() {
|
7088
|
+
this.target = null;
|
7089
|
+
this._dispatchListeners = null;
|
7090
|
+
this._dispatchIDs = null;
|
7091
|
+
};
|
7107
7092
|
|
7108
7093
|
/**
|
7109
|
-
*
|
7110
|
-
*
|
7111
|
-
*
|
7112
|
-
|
7113
|
-
|
7114
|
-
|
7115
|
-
|
7116
|
-
|
7094
|
+
* Enhance the `AbstractEvent` class to have pooling abilities. We instruct
|
7095
|
+
* `PooledClass` that our copy constructor accepts five arguments (this is just
|
7096
|
+
* a performance optimization). These objects are instantiated frequently.
|
7097
|
+
*/
|
7098
|
+
PooledClass.addPoolingTo(AbstractEvent, PooledClass.fiveArgumentPooler);
|
7099
|
+
|
7100
|
+
AbstractEvent.prototype.stopPropagation = function() {
|
7101
|
+
this.isPropagationStopped = true;
|
7102
|
+
if (this.nativeEvent.stopPropagation) {
|
7103
|
+
this.nativeEvent.stopPropagation();
|
7104
|
+
}
|
7105
|
+
// IE8 only understands cancelBubble, not stopPropagation().
|
7106
|
+
this.nativeEvent.cancelBubble = true;
|
7107
|
+
};
|
7108
|
+
|
7109
|
+
AbstractEvent.prototype.preventDefault = function() {
|
7110
|
+
AbstractEvent.preventDefaultOnNativeEvent(this.nativeEvent);
|
7111
|
+
};
|
7117
7112
|
|
7118
7113
|
/**
|
7119
|
-
*
|
7114
|
+
* Utility function for preventing default in cross browser manner.
|
7120
7115
|
*/
|
7121
|
-
function
|
7122
|
-
|
7123
|
-
|
7124
|
-
|
7125
|
-
|
7116
|
+
AbstractEvent.preventDefaultOnNativeEvent = function(nativeEvent) {
|
7117
|
+
if (nativeEvent.preventDefault) {
|
7118
|
+
nativeEvent.preventDefault();
|
7119
|
+
} else {
|
7120
|
+
nativeEvent.returnValue = false;
|
7121
|
+
}
|
7122
|
+
};
|
7126
7123
|
|
7127
7124
|
/**
|
7128
|
-
*
|
7129
|
-
* at the first dispatch execution returning true, and returns that id.
|
7130
|
-
*
|
7131
|
-
* @returns id of the first dispatch execution who's listener returns true, or
|
7132
|
-
* null if no listener returned true.
|
7125
|
+
* @param {Element} target The target element.
|
7133
7126
|
*/
|
7134
|
-
function
|
7135
|
-
|
7136
|
-
|
7137
|
-
|
7138
|
-
|
7127
|
+
AbstractEvent.normalizeScrollDataFromTarget = function(target) {
|
7128
|
+
return {
|
7129
|
+
scrollTop: target.scrollTop,
|
7130
|
+
scrollLeft: target.scrollLeft,
|
7131
|
+
clientWidth: target.clientWidth,
|
7132
|
+
clientHeight: target.clientHeight,
|
7133
|
+
scrollHeight: target.scrollHeight,
|
7134
|
+
scrollWidth: target.scrollWidth
|
7135
|
+
};
|
7136
|
+
};
|
7137
|
+
|
7138
|
+
/*
|
7139
|
+
* There are some normalizations that need to happen for various browsers. In
|
7140
|
+
* addition to replacing the general event fixing with a framework such as
|
7141
|
+
* jquery, we need to normalize mouse events here. Code below is mostly borrowed
|
7142
|
+
* from: jScrollPane/script/jquery.mousewheel.js
|
7143
|
+
*/
|
7144
|
+
AbstractEvent.normalizeMouseWheelData = function(nativeEvent) {
|
7145
|
+
var delta = 0;
|
7146
|
+
var deltaX = 0;
|
7147
|
+
var deltaY = 0;
|
7148
|
+
|
7149
|
+
/* traditional scroll wheel data */
|
7150
|
+
if ( nativeEvent.wheelDelta ) { delta = nativeEvent.wheelDelta/120; }
|
7151
|
+
if ( nativeEvent.detail ) { delta = -nativeEvent.detail/3; }
|
7152
|
+
|
7153
|
+
/* Multidimensional scroll (touchpads) with deltas */
|
7154
|
+
deltaY = delta;
|
7155
|
+
|
7156
|
+
/* Gecko based browsers */
|
7157
|
+
if (nativeEvent.axis !== undefined &&
|
7158
|
+
nativeEvent.axis === nativeEvent.HORIZONTAL_AXIS ) {
|
7159
|
+
deltaY = 0;
|
7160
|
+
deltaX = -delta;
|
7139
7161
|
}
|
7140
|
-
|
7141
|
-
|
7142
|
-
|
7143
|
-
|
7144
|
-
|
7145
|
-
|
7146
|
-
|
7147
|
-
if (dispatchListeners[i](abstractEvent, dispatchIDs[i])) {
|
7148
|
-
return dispatchIDs[i];
|
7149
|
-
}
|
7150
|
-
}
|
7151
|
-
} else if (dispatchListeners) {
|
7152
|
-
if (dispatchListeners(abstractEvent, dispatchIDs)) {
|
7153
|
-
return dispatchIDs;
|
7154
|
-
}
|
7162
|
+
|
7163
|
+
/* Webkit based browsers */
|
7164
|
+
if (nativeEvent.wheelDeltaY !== undefined ) {
|
7165
|
+
deltaY = nativeEvent.wheelDeltaY/120;
|
7166
|
+
}
|
7167
|
+
if (nativeEvent.wheelDeltaX !== undefined ) {
|
7168
|
+
deltaX = -nativeEvent.wheelDeltaX/120;
|
7155
7169
|
}
|
7156
|
-
|
7157
|
-
}
|
7170
|
+
|
7171
|
+
return { delta: delta, deltaX: deltaX, deltaY: deltaY };
|
7172
|
+
};
|
7158
7173
|
|
7159
7174
|
/**
|
7160
|
-
*
|
7161
|
-
*
|
7162
|
-
|
7163
|
-
|
7164
|
-
|
7175
|
+
* I <3 Quirksmode.org:
|
7176
|
+
* http://www.quirksmode.org/js/events_properties.html
|
7177
|
+
*/
|
7178
|
+
AbstractEvent.isNativeClickEventRightClick = function(nativeEvent) {
|
7179
|
+
return nativeEvent.which ? nativeEvent.which === 3 :
|
7180
|
+
nativeEvent.button ? nativeEvent.button === 2 :
|
7181
|
+
false;
|
7182
|
+
};
|
7183
|
+
|
7184
|
+
AbstractEvent.normalizePointerData = function(nativeEvent) {
|
7185
|
+
return {
|
7186
|
+
globalX: AbstractEvent.eventPageX(nativeEvent),
|
7187
|
+
globalY: AbstractEvent.eventPageY(nativeEvent),
|
7188
|
+
rightMouseButton:
|
7189
|
+
AbstractEvent.isNativeClickEventRightClick(nativeEvent)
|
7190
|
+
};
|
7191
|
+
};
|
7192
|
+
|
7193
|
+
AbstractEvent.normalizeDragEventData =
|
7194
|
+
function(nativeEvent, globalX, globalY, startX, startY) {
|
7195
|
+
return {
|
7196
|
+
globalX: globalX,
|
7197
|
+
globalY: globalY,
|
7198
|
+
startX: startX,
|
7199
|
+
startY: startY
|
7200
|
+
};
|
7201
|
+
};
|
7202
|
+
|
7203
|
+
/**
|
7204
|
+
* Warning: It is possible to move your finger on a touch surface, yet not
|
7205
|
+
* effect the `eventPageX/Y` because the touch had caused a scroll that
|
7206
|
+
* compensated for your movement. To track movements across the page, prevent
|
7207
|
+
* default to avoid scrolling, and control scrolling in javascript.
|
7208
|
+
*/
|
7209
|
+
|
7210
|
+
/**
|
7211
|
+
* Gets the exact position of a touch/mouse event on the page with respect to
|
7212
|
+
* the document body. The only reason why this method is needed instead of using
|
7213
|
+
* `TouchEventUtils.extractSingleTouch` is to support IE8-. Mouse events in all
|
7214
|
+
* browsers except IE8- contain a pageY. IE8 and below require clientY
|
7215
|
+
* computation:
|
7165
7216
|
*
|
7166
|
-
* @
|
7217
|
+
* @param {Event} nativeEvent Native event, possibly touch or mouse.
|
7218
|
+
* @return {number} Coordinate with respect to document body.
|
7167
7219
|
*/
|
7168
|
-
function
|
7169
|
-
|
7170
|
-
|
7220
|
+
AbstractEvent.eventPageY = function(nativeEvent) {
|
7221
|
+
var singleTouch = TouchEventUtils.extractSingleTouch(nativeEvent);
|
7222
|
+
if (singleTouch) {
|
7223
|
+
return singleTouch.pageY;
|
7224
|
+
} else if (typeof nativeEvent.pageY !== 'undefined') {
|
7225
|
+
return nativeEvent.pageY;
|
7226
|
+
} else {
|
7227
|
+
return nativeEvent.clientY + BrowserEnv.currentPageScrollTop;
|
7171
7228
|
}
|
7172
|
-
|
7173
|
-
var dispatchID = abstractEvent._dispatchIDs;
|
7174
|
-
invariant(
|
7175
|
-
!Array.isArray(dispatchListener),
|
7176
|
-
'executeDirectDispatch(...): Invalid `abstractEvent`.'
|
7177
|
-
);
|
7178
|
-
var res = dispatchListener ?
|
7179
|
-
dispatchListener(abstractEvent, dispatchID) :
|
7180
|
-
null;
|
7181
|
-
abstractEvent._dispatchListeners = null;
|
7182
|
-
abstractEvent._dispatchIDs = null;
|
7183
|
-
return res;
|
7184
|
-
}
|
7229
|
+
};
|
7185
7230
|
|
7186
7231
|
/**
|
7187
|
-
* @
|
7188
|
-
*
|
7232
|
+
* @see `AbstractEvent.eventPageY`.
|
7233
|
+
*
|
7234
|
+
* @param {Event} nativeEvent Native event, possibly touch or mouse.
|
7235
|
+
* @return {number} Coordinate with respect to document body.
|
7189
7236
|
*/
|
7190
|
-
function
|
7191
|
-
|
7192
|
-
|
7237
|
+
AbstractEvent.eventPageX = function(nativeEvent) {
|
7238
|
+
var singleTouch = TouchEventUtils.extractSingleTouch(nativeEvent);
|
7239
|
+
if (singleTouch) {
|
7240
|
+
return singleTouch.pageX;
|
7241
|
+
} else if (typeof nativeEvent.pageX !== 'undefined') {
|
7242
|
+
return nativeEvent.pageX;
|
7243
|
+
} else {
|
7244
|
+
return nativeEvent.clientX + BrowserEnv.currentPageScrollLeft;
|
7245
|
+
}
|
7246
|
+
};
|
7193
7247
|
|
7194
7248
|
/**
|
7195
|
-
*
|
7249
|
+
* A semantic API around cloning an event for use in another event loop. We
|
7250
|
+
* clear out all dispatched `AbstractEvent`s after each event loop, adding them
|
7251
|
+
* back into the pool. This allows a way to hold onto a reference that won't be
|
7252
|
+
* added back into the pool. Please note that `AbstractEvent.nativeEvent` is
|
7253
|
+
* *not* cloned and you will run into problems in IE if you assume that it will
|
7254
|
+
* be! The moral of that story is to always normalize any data you need into the
|
7255
|
+
* `.data` field. The data field is not cloned either, but there won't be any
|
7256
|
+
* issues related to use of `.data` in a future event cycle so long as no part
|
7257
|
+
* of your application mutates it. We don't clone the private fields because
|
7258
|
+
* your application should never be accessing them.
|
7259
|
+
*
|
7260
|
+
* - TODO: In __DEV__ when "releasing" events, don't put them back into the
|
7261
|
+
* pool. Instead add ES5 getters on all their fields that throw errors so you
|
7262
|
+
* can detect any application that's hanging onto events and reusing them.
|
7263
|
+
* In prod - we can put them back into the pool for reuse.
|
7196
7264
|
*/
|
7197
|
-
|
7198
|
-
|
7199
|
-
|
7200
|
-
|
7201
|
-
|
7202
|
-
|
7203
|
-
|
7204
|
-
|
7205
|
-
|
7206
|
-
|
7207
|
-
|
7265
|
+
AbstractEvent.persistentCloneOf = function(abstractEvent) {
|
7266
|
+
if (true) {
|
7267
|
+
throwIf(!(abstractEvent instanceof AbstractEvent), CLONE_TYPE_ERR);
|
7268
|
+
}
|
7269
|
+
return new AbstractEvent(
|
7270
|
+
abstractEvent.type,
|
7271
|
+
abstractEvent.abstractTargetID,
|
7272
|
+
abstractEvent.originatingTopLevelEventType,
|
7273
|
+
abstractEvent.nativeEvent,
|
7274
|
+
abstractEvent.data,
|
7275
|
+
abstractEvent.target
|
7276
|
+
);
|
7208
7277
|
};
|
7209
7278
|
|
7210
|
-
module.exports =
|
7279
|
+
module.exports = AbstractEvent;
|
7211
7280
|
|
7212
|
-
|
7281
|
+
|
7282
|
+
},{"./BrowserEnv":46,"./PooledClass":37,"./TouchEventUtils":67,"./throwIf":31}],55:[function(require,module,exports){
|
7213
7283
|
/**
|
7214
7284
|
* Copyright 2013 Facebook, Inc.
|
7215
7285
|
*
|
@@ -7225,341 +7295,271 @@ module.exports = EventPluginUtils;
|
|
7225
7295
|
* See the License for the specific language governing permissions and
|
7226
7296
|
* limitations under the License.
|
7227
7297
|
*
|
7228
|
-
* @providesModule
|
7298
|
+
* @providesModule EventPluginUtils
|
7229
7299
|
*/
|
7230
7300
|
|
7231
7301
|
"use strict";
|
7232
7302
|
|
7233
|
-
var
|
7303
|
+
var EventConstants = require("./EventConstants");
|
7304
|
+
var AbstractEvent = require("./AbstractEvent");
|
7234
7305
|
|
7235
|
-
var
|
7306
|
+
var invariant = require("./invariant");
|
7236
7307
|
|
7237
|
-
|
7238
|
-
INVALID_ARGS =
|
7239
|
-
'accumulate requires non empty (non-null, defined) next ' +
|
7240
|
-
'values. All arrays accumulated must not contain any empty items.';
|
7241
|
-
}
|
7308
|
+
var topLevelTypes = EventConstants.topLevelTypes;
|
7242
7309
|
|
7243
|
-
|
7244
|
-
|
7245
|
-
|
7246
|
-
|
7247
|
-
* depending on the total count (if greater than one, an array is allocated).
|
7248
|
-
* Handles most common case first (starting with an empty current value and
|
7249
|
-
* acquiring one).
|
7250
|
-
* @returns {Accumulation} An accumulation which is either a single item or an
|
7251
|
-
* Array of items.
|
7252
|
-
*/
|
7253
|
-
function accumulate(cur, next) {
|
7254
|
-
var curValIsEmpty = cur == null; // Will test for emptiness (null/undef)
|
7255
|
-
var nextValIsEmpty = next === null;
|
7256
|
-
if (true) {
|
7257
|
-
throwIf(nextValIsEmpty, INVALID_ARGS);
|
7258
|
-
}
|
7259
|
-
if (nextValIsEmpty) {
|
7260
|
-
return cur;
|
7261
|
-
} else {
|
7262
|
-
if (curValIsEmpty) {
|
7263
|
-
return next;
|
7264
|
-
} else {
|
7265
|
-
// Both are not empty. Warning: Never call x.concat(y) when you are not
|
7266
|
-
// certain that x is an Array (x could be a string with concat method).
|
7267
|
-
var curIsArray = Array.isArray(cur);
|
7268
|
-
var nextIsArray = Array.isArray(next);
|
7269
|
-
if (curIsArray) {
|
7270
|
-
return cur.concat(next);
|
7271
|
-
} else {
|
7272
|
-
if (nextIsArray) {
|
7273
|
-
return [cur].concat(next);
|
7274
|
-
} else {
|
7275
|
-
return [cur, next];
|
7276
|
-
}
|
7277
|
-
}
|
7278
|
-
}
|
7279
|
-
}
|
7310
|
+
function isEndish(topLevelType) {
|
7311
|
+
return topLevelType === topLevelTypes.topMouseUp ||
|
7312
|
+
topLevelType === topLevelTypes.topTouchEnd ||
|
7313
|
+
topLevelType === topLevelTypes.topTouchCancel;
|
7280
7314
|
}
|
7281
7315
|
|
7282
|
-
|
7283
|
-
|
7284
|
-
|
7285
|
-
|
7286
|
-
|
7287
|
-
|
7288
|
-
|
7289
|
-
|
7290
|
-
* You may obtain a copy of the License at
|
7291
|
-
*
|
7292
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
7293
|
-
*
|
7294
|
-
* Unless required by applicable law or agreed to in writing, software
|
7295
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
7296
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
7297
|
-
* See the License for the specific language governing permissions and
|
7298
|
-
* limitations under the License.
|
7299
|
-
*
|
7300
|
-
* @providesModule AbstractEvent
|
7301
|
-
*/
|
7302
|
-
|
7303
|
-
"use strict";
|
7304
|
-
|
7305
|
-
var BrowserEnv = require("./BrowserEnv");
|
7306
|
-
var PooledClass = require("./PooledClass");
|
7307
|
-
var TouchEventUtils = require("./TouchEventUtils");
|
7308
|
-
|
7309
|
-
var throwIf = require("./throwIf");
|
7316
|
+
function isMoveish(topLevelType) {
|
7317
|
+
return topLevelType === topLevelTypes.topMouseMove ||
|
7318
|
+
topLevelType === topLevelTypes.topTouchMove;
|
7319
|
+
}
|
7320
|
+
function isStartish(topLevelType) {
|
7321
|
+
return topLevelType === topLevelTypes.topMouseDown ||
|
7322
|
+
topLevelType === topLevelTypes.topTouchStart;
|
7323
|
+
}
|
7310
7324
|
|
7325
|
+
function storePageCoordsIn(obj, nativeEvent) {
|
7326
|
+
var pageX = AbstractEvent.eventPageX(nativeEvent);
|
7327
|
+
var pageY = AbstractEvent.eventPageY(nativeEvent);
|
7328
|
+
obj.pageX = pageX;
|
7329
|
+
obj.pageY = pageY;
|
7330
|
+
}
|
7311
7331
|
|
7312
|
-
|
7313
|
-
var
|
7314
|
-
|
7315
|
-
|
7316
|
-
|
7317
|
-
|
7332
|
+
function eventDistance(coords, nativeEvent) {
|
7333
|
+
var pageX = AbstractEvent.eventPageX(nativeEvent);
|
7334
|
+
var pageY = AbstractEvent.eventPageY(nativeEvent);
|
7335
|
+
return Math.pow(
|
7336
|
+
Math.pow(pageX - coords.pageX, 2) + Math.pow(pageY - coords.pageY, 2),
|
7337
|
+
0.5
|
7338
|
+
);
|
7318
7339
|
}
|
7319
|
-
var MAX_POOL_SIZE = 20;
|
7320
7340
|
|
7321
|
-
|
7322
|
-
|
7323
|
-
|
7324
|
-
|
7325
|
-
|
7326
|
-
* should hold all data that is extracted from the event in a cross browser
|
7327
|
-
* manner. Application code should use the data field when possible, not the
|
7328
|
-
* unreliable native event.
|
7329
|
-
*/
|
7330
|
-
function AbstractEvent(
|
7331
|
-
abstractEventType,
|
7332
|
-
abstractTargetID, // Allows the abstract target to differ from native.
|
7333
|
-
originatingTopLevelEventType,
|
7334
|
-
nativeEvent,
|
7335
|
-
data) {
|
7336
|
-
this.type = abstractEventType;
|
7337
|
-
this.abstractTargetID = abstractTargetID || '';
|
7338
|
-
this.originatingTopLevelEventType = originatingTopLevelEventType;
|
7339
|
-
this.nativeEvent = nativeEvent;
|
7340
|
-
this.data = data;
|
7341
|
-
// TODO: Deprecate storing target - doesn't always make sense for some types
|
7342
|
-
this.target = nativeEvent && nativeEvent.target;
|
7341
|
+
var validateEventDispatches;
|
7342
|
+
if (true) {
|
7343
|
+
validateEventDispatches = function(abstractEvent) {
|
7344
|
+
var dispatchListeners = abstractEvent._dispatchListeners;
|
7345
|
+
var dispatchIDs = abstractEvent._dispatchIDs;
|
7343
7346
|
|
7344
|
-
|
7345
|
-
|
7346
|
-
|
7347
|
-
|
7348
|
-
|
7349
|
-
|
7350
|
-
* ID array. _dispatchListeners[i] is being dispatched to a DOM node at ID
|
7351
|
-
* _dispatchIDs[i]. The lengths should never, ever, ever be different.
|
7352
|
-
*/
|
7353
|
-
this._dispatchListeners = null;
|
7354
|
-
this._dispatchIDs = null;
|
7347
|
+
var listenersIsArr = Array.isArray(dispatchListeners);
|
7348
|
+
var idsIsArr = Array.isArray(dispatchIDs);
|
7349
|
+
var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0;
|
7350
|
+
var listenersLen = listenersIsArr ?
|
7351
|
+
dispatchListeners.length :
|
7352
|
+
dispatchListeners ? 1 : 0;
|
7355
7353
|
|
7356
|
-
|
7354
|
+
invariant(
|
7355
|
+
idsIsArr === listenersIsArr && IDsLen === listenersLen,
|
7356
|
+
'EventPluginUtils: Invalid `abstractEvent`.'
|
7357
|
+
);
|
7358
|
+
};
|
7357
7359
|
}
|
7358
7360
|
|
7359
|
-
/** `PooledClass` looks for this. */
|
7360
|
-
AbstractEvent.poolSize = MAX_POOL_SIZE;
|
7361
|
-
|
7362
|
-
/**
|
7363
|
-
* `PooledClass` looks for `destructor` on each instance it releases. We need to
|
7364
|
-
* ensure that we remove all references to listeners which could trap large
|
7365
|
-
* amounts of memory in their closures.
|
7366
|
-
*/
|
7367
|
-
AbstractEvent.prototype.destructor = function() {
|
7368
|
-
this.target = null;
|
7369
|
-
this._dispatchListeners = null;
|
7370
|
-
this._dispatchIDs = null;
|
7371
|
-
};
|
7372
|
-
|
7373
7361
|
/**
|
7374
|
-
*
|
7375
|
-
* `
|
7376
|
-
*
|
7362
|
+
* Invokes `cb(abstractEvent, listener, id)`. Avoids using call if no scope is
|
7363
|
+
* provided. The `(listener,id)` pair effectively forms the "dispatch" but are
|
7364
|
+
* kept separate to conserve memory.
|
7377
7365
|
*/
|
7378
|
-
|
7379
|
-
|
7380
|
-
|
7381
|
-
|
7382
|
-
|
7383
|
-
this.nativeEvent.stopPropagation();
|
7366
|
+
function forEachEventDispatch(abstractEvent, cb) {
|
7367
|
+
var dispatchListeners = abstractEvent._dispatchListeners;
|
7368
|
+
var dispatchIDs = abstractEvent._dispatchIDs;
|
7369
|
+
if (true) {
|
7370
|
+
validateEventDispatches(abstractEvent);
|
7384
7371
|
}
|
7385
|
-
|
7386
|
-
|
7387
|
-
|
7388
|
-
|
7389
|
-
|
7390
|
-
|
7391
|
-
|
7372
|
+
if (Array.isArray(dispatchListeners)) {
|
7373
|
+
var i;
|
7374
|
+
for (
|
7375
|
+
i = 0;
|
7376
|
+
i < dispatchListeners.length && !abstractEvent.isPropagationStopped;
|
7377
|
+
i++) {
|
7378
|
+
// Listeners and IDs are two parallel arrays that are always in sync.
|
7379
|
+
cb(abstractEvent, dispatchListeners[i], dispatchIDs[i]);
|
7380
|
+
}
|
7381
|
+
} else if (dispatchListeners) {
|
7382
|
+
cb(abstractEvent, dispatchListeners, dispatchIDs);
|
7383
|
+
}
|
7384
|
+
}
|
7392
7385
|
|
7393
7386
|
/**
|
7394
|
-
*
|
7387
|
+
* Default implementation of PluginModule.executeDispatch().
|
7388
|
+
* @param {AbstractEvent} AbstractEvent to handle
|
7389
|
+
* @param {function} Application-level callback
|
7390
|
+
* @param {string} domID DOM id to pass to the callback.
|
7395
7391
|
*/
|
7396
|
-
|
7397
|
-
|
7398
|
-
|
7399
|
-
} else {
|
7400
|
-
nativeEvent.returnValue = false;
|
7401
|
-
}
|
7402
|
-
};
|
7392
|
+
function executeDispatch(abstractEvent, listener, domID) {
|
7393
|
+
listener(abstractEvent, domID);
|
7394
|
+
}
|
7403
7395
|
|
7404
7396
|
/**
|
7405
|
-
*
|
7397
|
+
* Standard/simple iteration through an event's collected dispatches.
|
7406
7398
|
*/
|
7407
|
-
|
7408
|
-
|
7409
|
-
|
7410
|
-
|
7411
|
-
|
7412
|
-
clientHeight: target.clientHeight,
|
7413
|
-
scrollHeight: target.scrollHeight,
|
7414
|
-
scrollWidth: target.scrollWidth
|
7415
|
-
};
|
7416
|
-
};
|
7399
|
+
function executeDispatchesInOrder(abstractEvent, executeDispatch) {
|
7400
|
+
forEachEventDispatch(abstractEvent, executeDispatch);
|
7401
|
+
abstractEvent._dispatchListeners = null;
|
7402
|
+
abstractEvent._dispatchIDs = null;
|
7403
|
+
}
|
7417
7404
|
|
7418
|
-
|
7419
|
-
*
|
7420
|
-
*
|
7421
|
-
*
|
7422
|
-
*
|
7405
|
+
/**
|
7406
|
+
* Standard/simple iteration through an event's collected dispatches, but stops
|
7407
|
+
* at the first dispatch execution returning true, and returns that id.
|
7408
|
+
*
|
7409
|
+
* @returns id of the first dispatch execution who's listener returns true, or
|
7410
|
+
* null if no listener returned true.
|
7423
7411
|
*/
|
7424
|
-
|
7425
|
-
var
|
7426
|
-
var
|
7427
|
-
|
7428
|
-
|
7429
|
-
/* traditional scroll wheel data */
|
7430
|
-
if ( nativeEvent.wheelDelta ) { delta = nativeEvent.wheelDelta/120; }
|
7431
|
-
if ( nativeEvent.detail ) { delta = -nativeEvent.detail/3; }
|
7432
|
-
|
7433
|
-
/* Multidimensional scroll (touchpads) with deltas */
|
7434
|
-
deltaY = delta;
|
7435
|
-
|
7436
|
-
/* Gecko based browsers */
|
7437
|
-
if (nativeEvent.axis !== undefined &&
|
7438
|
-
nativeEvent.axis === nativeEvent.HORIZONTAL_AXIS ) {
|
7439
|
-
deltaY = 0;
|
7440
|
-
deltaX = -delta;
|
7441
|
-
}
|
7442
|
-
|
7443
|
-
/* Webkit based browsers */
|
7444
|
-
if (nativeEvent.wheelDeltaY !== undefined ) {
|
7445
|
-
deltaY = nativeEvent.wheelDeltaY/120;
|
7412
|
+
function executeDispatchesInOrderStopAtTrue(abstractEvent) {
|
7413
|
+
var dispatchListeners = abstractEvent._dispatchListeners;
|
7414
|
+
var dispatchIDs = abstractEvent._dispatchIDs;
|
7415
|
+
if (true) {
|
7416
|
+
validateEventDispatches(abstractEvent);
|
7446
7417
|
}
|
7447
|
-
if (
|
7448
|
-
|
7418
|
+
if (Array.isArray(dispatchListeners)) {
|
7419
|
+
var i;
|
7420
|
+
for (
|
7421
|
+
i = 0;
|
7422
|
+
i < dispatchListeners.length && !abstractEvent.isPropagationStopped;
|
7423
|
+
i++) {
|
7424
|
+
// Listeners and IDs are two parallel arrays that are always in sync.
|
7425
|
+
if (dispatchListeners[i](abstractEvent, dispatchIDs[i])) {
|
7426
|
+
return dispatchIDs[i];
|
7427
|
+
}
|
7428
|
+
}
|
7429
|
+
} else if (dispatchListeners) {
|
7430
|
+
if (dispatchListeners(abstractEvent, dispatchIDs)) {
|
7431
|
+
return dispatchIDs;
|
7432
|
+
}
|
7449
7433
|
}
|
7450
|
-
|
7451
|
-
|
7452
|
-
};
|
7434
|
+
return null;
|
7435
|
+
}
|
7453
7436
|
|
7454
7437
|
/**
|
7455
|
-
*
|
7456
|
-
*
|
7438
|
+
* Execution of a "direct" dispatch - there must be at most one dispatch
|
7439
|
+
* accumulated on the event or it is considered an error. It doesn't really make
|
7440
|
+
* sense for an event with multiple dispatches (bubbled) to keep track of the
|
7441
|
+
* return values at each dispatch execution, but it does tend to make sense when
|
7442
|
+
* dealing with "direct" dispatches.
|
7443
|
+
*
|
7444
|
+
* @returns The return value of executing the single dispatch.
|
7457
7445
|
*/
|
7458
|
-
|
7459
|
-
|
7460
|
-
|
7461
|
-
|
7462
|
-
|
7463
|
-
|
7464
|
-
|
7465
|
-
|
7466
|
-
|
7467
|
-
|
7468
|
-
|
7469
|
-
|
7470
|
-
|
7471
|
-
|
7472
|
-
|
7473
|
-
|
7474
|
-
|
7475
|
-
return {
|
7476
|
-
globalX: globalX,
|
7477
|
-
globalY: globalY,
|
7478
|
-
startX: startX,
|
7479
|
-
startY: startY
|
7480
|
-
};
|
7481
|
-
};
|
7446
|
+
function executeDirectDispatch(abstractEvent) {
|
7447
|
+
if (true) {
|
7448
|
+
validateEventDispatches(abstractEvent);
|
7449
|
+
}
|
7450
|
+
var dispatchListener = abstractEvent._dispatchListeners;
|
7451
|
+
var dispatchID = abstractEvent._dispatchIDs;
|
7452
|
+
invariant(
|
7453
|
+
!Array.isArray(dispatchListener),
|
7454
|
+
'executeDirectDispatch(...): Invalid `abstractEvent`.'
|
7455
|
+
);
|
7456
|
+
var res = dispatchListener ?
|
7457
|
+
dispatchListener(abstractEvent, dispatchID) :
|
7458
|
+
null;
|
7459
|
+
abstractEvent._dispatchListeners = null;
|
7460
|
+
abstractEvent._dispatchIDs = null;
|
7461
|
+
return res;
|
7462
|
+
}
|
7482
7463
|
|
7483
7464
|
/**
|
7484
|
-
*
|
7485
|
-
*
|
7486
|
-
* compensated for your movement. To track movements across the page, prevent
|
7487
|
-
* default to avoid scrolling, and control scrolling in javascript.
|
7465
|
+
* @param {AbstractEvent} abstractEvent
|
7466
|
+
* @returns {bool} True iff number of dispatches accumulated is greater than 0.
|
7488
7467
|
*/
|
7468
|
+
function hasDispatches(abstractEvent) {
|
7469
|
+
return !!abstractEvent._dispatchListeners;
|
7470
|
+
}
|
7489
7471
|
|
7490
7472
|
/**
|
7491
|
-
*
|
7492
|
-
* the document body. The only reason why this method is needed instead of using
|
7493
|
-
* `TouchEventUtils.extractSingleTouch` is to support IE8-. Mouse events in all
|
7494
|
-
* browsers except IE8- contain a pageY. IE8 and below require clientY
|
7495
|
-
* computation:
|
7496
|
-
*
|
7497
|
-
* @param {Event} nativeEvent Native event, possibly touch or mouse.
|
7498
|
-
* @return {number} Coordinate with respect to document body.
|
7473
|
+
* General utilities that are useful in creating custom Event Plugins.
|
7499
7474
|
*/
|
7500
|
-
|
7501
|
-
|
7502
|
-
|
7503
|
-
|
7504
|
-
|
7505
|
-
|
7506
|
-
|
7507
|
-
|
7508
|
-
|
7475
|
+
var EventPluginUtils = {
|
7476
|
+
isEndish: isEndish,
|
7477
|
+
isMoveish: isMoveish,
|
7478
|
+
isStartish: isStartish,
|
7479
|
+
storePageCoordsIn: storePageCoordsIn,
|
7480
|
+
eventDistance: eventDistance,
|
7481
|
+
executeDispatchesInOrder: executeDispatchesInOrder,
|
7482
|
+
executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,
|
7483
|
+
executeDirectDispatch: executeDirectDispatch,
|
7484
|
+
hasDispatches: hasDispatches,
|
7485
|
+
executeDispatch: executeDispatch
|
7509
7486
|
};
|
7510
7487
|
|
7488
|
+
module.exports = EventPluginUtils;
|
7489
|
+
|
7490
|
+
},{"./EventConstants":47,"./AbstractEvent":53,"./invariant":10}],56:[function(require,module,exports){
|
7511
7491
|
/**
|
7512
|
-
*
|
7492
|
+
* Copyright 2013 Facebook, Inc.
|
7513
7493
|
*
|
7514
|
-
*
|
7515
|
-
*
|
7494
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
7495
|
+
* you may not use this file except in compliance with the License.
|
7496
|
+
* You may obtain a copy of the License at
|
7497
|
+
*
|
7498
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
7499
|
+
*
|
7500
|
+
* Unless required by applicable law or agreed to in writing, software
|
7501
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
7502
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
7503
|
+
* See the License for the specific language governing permissions and
|
7504
|
+
* limitations under the License.
|
7505
|
+
*
|
7506
|
+
* @providesModule accumulate
|
7516
7507
|
*/
|
7517
|
-
|
7518
|
-
|
7519
|
-
|
7520
|
-
|
7521
|
-
|
7522
|
-
|
7523
|
-
|
7524
|
-
|
7525
|
-
|
7526
|
-
|
7508
|
+
|
7509
|
+
"use strict";
|
7510
|
+
|
7511
|
+
var throwIf = require("./throwIf");
|
7512
|
+
|
7513
|
+
var INVALID_ARGS = 'INVALID_ACCUM_ARGS';
|
7514
|
+
|
7515
|
+
if (true) {
|
7516
|
+
INVALID_ARGS =
|
7517
|
+
'accumulate requires non empty (non-null, defined) next ' +
|
7518
|
+
'values. All arrays accumulated must not contain any empty items.';
|
7519
|
+
}
|
7527
7520
|
|
7528
7521
|
/**
|
7529
|
-
*
|
7530
|
-
*
|
7531
|
-
*
|
7532
|
-
*
|
7533
|
-
*
|
7534
|
-
*
|
7535
|
-
*
|
7536
|
-
*
|
7537
|
-
* of your application mutates it. We don't clone the private fields because
|
7538
|
-
* your application should never be accessing them.
|
7539
|
-
*
|
7540
|
-
* - TODO: In __DEV__ when "releasing" events, don't put them back into the
|
7541
|
-
* pool. Instead add ES5 getters on all their fields that throw errors so you
|
7542
|
-
* can detect any application that's hanging onto events and reusing them.
|
7543
|
-
* In prod - we can put them back into the pool for reuse.
|
7522
|
+
* Accumulates items that must never be empty, into a result in a manner that
|
7523
|
+
* conserves memory - avoiding allocation of arrays until they are needed. The
|
7524
|
+
* accumulation may start and/or end up being a single element or an array
|
7525
|
+
* depending on the total count (if greater than one, an array is allocated).
|
7526
|
+
* Handles most common case first (starting with an empty current value and
|
7527
|
+
* acquiring one).
|
7528
|
+
* @returns {Accumulation} An accumulation which is either a single item or an
|
7529
|
+
* Array of items.
|
7544
7530
|
*/
|
7545
|
-
|
7531
|
+
function accumulate(cur, next) {
|
7532
|
+
var curValIsEmpty = cur == null; // Will test for emptiness (null/undef)
|
7533
|
+
var nextValIsEmpty = next === null;
|
7546
7534
|
if (true) {
|
7547
|
-
throwIf(
|
7535
|
+
throwIf(nextValIsEmpty, INVALID_ARGS);
|
7548
7536
|
}
|
7549
|
-
|
7550
|
-
|
7551
|
-
|
7552
|
-
|
7553
|
-
|
7554
|
-
|
7555
|
-
|
7556
|
-
|
7557
|
-
|
7558
|
-
|
7559
|
-
|
7537
|
+
if (nextValIsEmpty) {
|
7538
|
+
return cur;
|
7539
|
+
} else {
|
7540
|
+
if (curValIsEmpty) {
|
7541
|
+
return next;
|
7542
|
+
} else {
|
7543
|
+
// Both are not empty. Warning: Never call x.concat(y) when you are not
|
7544
|
+
// certain that x is an Array (x could be a string with concat method).
|
7545
|
+
var curIsArray = Array.isArray(cur);
|
7546
|
+
var nextIsArray = Array.isArray(next);
|
7547
|
+
if (curIsArray) {
|
7548
|
+
return cur.concat(next);
|
7549
|
+
} else {
|
7550
|
+
if (nextIsArray) {
|
7551
|
+
return [cur].concat(next);
|
7552
|
+
} else {
|
7553
|
+
return [cur, next];
|
7554
|
+
}
|
7555
|
+
}
|
7556
|
+
}
|
7557
|
+
}
|
7558
|
+
}
|
7560
7559
|
|
7560
|
+
module.exports = accumulate;
|
7561
7561
|
|
7562
|
-
},{"./
|
7562
|
+
},{"./throwIf":31}],58:[function(require,module,exports){
|
7563
7563
|
/**
|
7564
7564
|
* Copyright 2013 Facebook, Inc.
|
7565
7565
|
*
|