|
/*global angular*/ |
|
angular.module('fireutil', ['firebase']) |
|
|
|
// Ref: https://github.com/firebase/angularFire/issues/200#issuecomment-31905575 |
|
.factory('$firebaseArr', ['$firebase', '$filter', '$log', function($firebase, $filter, $log) { |
|
return $firebaseArr; |
|
|
|
function $firebaseArr(ref) { |
|
var dataObj = $firebase(ref); |
|
var dataArr = angular.extend([], dataObj); |
|
|
|
dataObj.$on('change', function() { |
|
dataArr.length = 0; |
|
angular.extend(dataArr, $filter('orderByPriority')(dataObj)); |
|
}); |
|
|
|
/** |
|
* Destroy the $firebaseArr object |
|
*/ |
|
dataArr.$destroy = function () { |
|
dataObj.$off(); |
|
}; |
|
|
|
/** |
|
* Create $firebaseArr object from a child |
|
* @param {string} name child's name |
|
* @return {$firebaseArr object} |
|
*/ |
|
dataArr.$childArr = function(name) { |
|
var ref = dataObj.$getRef().child(name); |
|
return $firebaseArr(ref); |
|
}; |
|
|
|
return dataArr; |
|
} |
|
}]) |
|
|
|
.factory('firebaseRef', function (Firebase) { |
|
/** |
|
* Firebase reference generator |
|
* |
|
* @usage |
|
* var refFunc = firebaseRef(rootUrl); |
|
* refFunc(); // "{BASE}" reference |
|
* |
|
* refFunc('a', 'b', 'c'); // "{BASE}/a/b/c" reference |
|
* refFunc(['a', 'b', 'c']); // same as above |
|
*/ |
|
return function firebaseRef(rootUrl) { |
|
var _rootRef = new Firebase(rootUrl); |
|
return function ref(path) { |
|
if (!angular.isArray(path)) { |
|
path = Array.prototype.slice.call(arguments); |
|
} |
|
|
|
if (!path || path.length === 0) { |
|
return new Firebase(rootUrl); |
|
} |
|
|
|
return _rootRef.child(path.join('/')); |
|
}; |
|
}; |
|
}); |