mirror of
https://github.com/zhigang1992/reactfire.git
synced 2026-04-01 09:31:05 +08:00
[firebase-release] Updated ReactFire to 0.2.0
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "reactfire",
|
||||
"description": "Firebase mixin for ReactJS",
|
||||
"version": "0.0.0",
|
||||
"version": "0.2.0",
|
||||
"authors": [
|
||||
"Firebase <support@firebase.com>"
|
||||
],
|
||||
|
||||
147
dist/reactfire.js
vendored
Normal file
147
dist/reactfire.js
vendored
Normal file
@@ -0,0 +1,147 @@
|
||||
/*!
|
||||
* ReactFire is an open-source JavaScript library that allows you to add a
|
||||
* realtime data source to your React apps by providing and easy way to let
|
||||
* Firebase populate the state of React components.
|
||||
*
|
||||
* ReactFire 0.2.0
|
||||
* https://github.com/firebase/reactfire/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
var ReactFireMixin = (function() {
|
||||
"use strict";
|
||||
var ReactFireMixin = {
|
||||
/********************/
|
||||
/* MIXIN LIFETIME */
|
||||
/********************/
|
||||
/* Initializes the Firebase binding refs array */
|
||||
componentWillMount: function() {
|
||||
this.firebaseRefs = {};
|
||||
this.firebaseListeners = {};
|
||||
},
|
||||
|
||||
/* Removes any remaining Firebase bindings */
|
||||
componentWillUnmount: function() {
|
||||
for (var key in this.firebaseRefs) {
|
||||
if (this.firebaseRefs.hasOwnProperty(key)) {
|
||||
this.unbind(key);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
/*************/
|
||||
/* BINDING */
|
||||
/*************/
|
||||
/* Creates a binding between Firebase and the inputted bind variable as an array */
|
||||
bindAsArray: function(firebaseRef, bindVar) {
|
||||
this._bind(firebaseRef, bindVar, true);
|
||||
},
|
||||
|
||||
/* Creates a binding between Firebase and the inputted bind variable as an object */
|
||||
bindAsObject: function(firebaseRef, bindVar) {
|
||||
this._bind(firebaseRef, bindVar, false);
|
||||
},
|
||||
|
||||
/* Creates a binding between Firebase and the inputted bind variable as either an array or object */
|
||||
_bind: function(firebaseRef, bindVar, bindAsArray) {
|
||||
this._validateBindVar(bindVar);
|
||||
|
||||
var error;
|
||||
if (typeof firebaseRef.ref === "undefined" || firebaseRef.ref() instanceof Firebase === false) {
|
||||
error = "firebaseRef must be an instance of Firebase";
|
||||
}
|
||||
else if (typeof bindAsArray !== "boolean") {
|
||||
error = "bindAsArray must be a boolean. Got: " + bindAsArray;
|
||||
}
|
||||
|
||||
if (typeof error !== "undefined") {
|
||||
throw new Error("ReactFire: " + error);
|
||||
}
|
||||
|
||||
this.firebaseRefs[bindVar] = firebaseRef.ref();
|
||||
this.firebaseListeners[bindVar] = firebaseRef.on("value", function(dataSnapshot) {
|
||||
var newState = {};
|
||||
if (bindAsArray) {
|
||||
newState[bindVar] = this._toArray(dataSnapshot.val());
|
||||
}
|
||||
else {
|
||||
newState[bindVar] = dataSnapshot.val();
|
||||
}
|
||||
this.setState(newState);
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
/* Removes the binding between Firebase and the inputted bind variable */
|
||||
unbind: function(bindVar) {
|
||||
this._validateBindVar(bindVar);
|
||||
|
||||
if (typeof this.firebaseRefs[bindVar] === "undefined") {
|
||||
throw new Error("unexpected value for bindVar. \"" + bindVar + "\" was either never bound or has already been unbound");
|
||||
}
|
||||
|
||||
this.firebaseRefs[bindVar].off("value", this.firebaseListeners[bindVar]);
|
||||
delete this.firebaseRefs[bindVar];
|
||||
delete this.firebaseListeners[bindVar];
|
||||
},
|
||||
|
||||
|
||||
/*************/
|
||||
/* HELPERS */
|
||||
/*************/
|
||||
/* Validates the name of the variable which is being bound */
|
||||
_validateBindVar: function(bindVar) {
|
||||
var error;
|
||||
|
||||
if (typeof bindVar !== "string") {
|
||||
error = "bindVar must be a string. Got: " + bindVar;
|
||||
}
|
||||
else if (bindVar.length === 0) {
|
||||
error = "bindVar must be a non-empty string. Got: \"\"";
|
||||
}
|
||||
else if (bindVar.length > 768) {
|
||||
// Firebase can only stored child paths up to 768 characters
|
||||
error = "bindVar is too long to be stored in Firebase. Got: " + bindVar;
|
||||
}
|
||||
else if (/[\[\].#$\/\u0000-\u001F\u007F]/.test(bindVar)) {
|
||||
// Firebase does not allow node keys to contain the following characters
|
||||
error = "bindVar cannot contain any of the following characters: . # $ ] [ /. Got: " + bindVar;
|
||||
}
|
||||
|
||||
if (typeof error !== "undefined") {
|
||||
throw new Error("ReactFire: " + error);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
/* Returns true if the inputted object is a JavaScript array */
|
||||
_isArray: function(obj) {
|
||||
return (Object.prototype.toString.call(obj) === "[object Array]");
|
||||
},
|
||||
|
||||
/* Converts a Firebase object to a JavaScript array */
|
||||
_toArray: function(obj) {
|
||||
var out = [];
|
||||
if (obj) {
|
||||
if (this._isArray(obj)) {
|
||||
out = obj;
|
||||
}
|
||||
else if (typeof(obj) === "object") {
|
||||
for (var key in obj) {
|
||||
if (obj.hasOwnProperty(key)) {
|
||||
out.push(obj[key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
};
|
||||
|
||||
return ReactFireMixin;
|
||||
})();
|
||||
|
||||
// Export ReactFireMixin if this is being run in node
|
||||
if (typeof module !== "undefined" && typeof process !== "undefined") {
|
||||
module.exports = ReactFireMixin;
|
||||
}
|
||||
10
dist/reactfire.min.js
vendored
Normal file
10
dist/reactfire.min.js
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
/*!
|
||||
* ReactFire is an open-source JavaScript library that allows you to add a
|
||||
* realtime data source to your React apps by providing and easy way to let
|
||||
* Firebase populate the state of React components.
|
||||
*
|
||||
* ReactFire 0.2.0
|
||||
* https://github.com/firebase/reactfire/
|
||||
* License: MIT
|
||||
*/
|
||||
var ReactFireMixin=function(){"use strict";var e={componentWillMount:function(){this.firebaseRefs={},this.firebaseListeners={}},componentWillUnmount:function(){for(var e in this.firebaseRefs)this.firebaseRefs.hasOwnProperty(e)&&this.unbind(e)},bindAsArray:function(e,t){this._bind(e,t,!0)},bindAsObject:function(e,t){this._bind(e,t,!1)},_bind:function(e,t,i){this._validateBindVar(t);var n;if("undefined"==typeof e.ref||e.ref()instanceof Firebase==!1?n="firebaseRef must be an instance of Firebase":"boolean"!=typeof i&&(n="bindAsArray must be a boolean. Got: "+i),"undefined"!=typeof n)throw new Error("ReactFire: "+n);this.firebaseRefs[t]=e.ref(),this.firebaseListeners[t]=e.on("value",function(e){var n={};n[t]=i?this._toArray(e.val()):e.val(),this.setState(n)}.bind(this))},unbind:function(e){if(this._validateBindVar(e),"undefined"==typeof this.firebaseRefs[e])throw new Error('unexpected value for bindVar. "'+e+'" was either never bound or has already been unbound');this.firebaseRefs[e].off("value",this.firebaseListeners[e]),delete this.firebaseRefs[e],delete this.firebaseListeners[e]},_validateBindVar:function(e){var t;if("string"!=typeof e?t="bindVar must be a string. Got: "+e:0===e.length?t='bindVar must be a non-empty string. Got: ""':e.length>768?t="bindVar is too long to be stored in Firebase. Got: "+e:/[\[\].#$\/\u0000-\u001F\u007F]/.test(e)&&(t="bindVar cannot contain any of the following characters: . # $ ] [ /. Got: "+e),"undefined"!=typeof t)throw new Error("ReactFire: "+t)},_isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},_toArray:function(e){var t=[];if(e)if(this._isArray(e))t=e;else if("object"==typeof e)for(var i in e)e.hasOwnProperty(i)&&t.push(e[i]);return t}};return e}();"undefined"!=typeof module&&"undefined"!=typeof process&&(module.exports=ReactFireMixin);
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "reactfire",
|
||||
"description": "Firebase mixin for ReactJS",
|
||||
"version": "0.0.0",
|
||||
"version": "0.2.0",
|
||||
"author": "Firebase <support@firebase.com> (https://www.firebase.com/)",
|
||||
"homepage": "https://github.com/firebase/reactfire/",
|
||||
"repository": {
|
||||
|
||||
Reference in New Issue
Block a user