Skip to content

Commit 46adf77

Browse files
committed
include dist
1 parent 716f738 commit 46adf77

File tree

3 files changed

+301
-1
lines changed

3 files changed

+301
-1
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
.DS_Store
22
node_modules
33
coverage
4-
dist

dist/vuefire.js

Lines changed: 300 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,300 @@
1+
(function webpackUniversalModuleDefinition(root, factory) {
2+
if(typeof exports === 'object' && typeof module === 'object')
3+
module.exports = factory();
4+
else if(typeof define === 'function' && define.amd)
5+
define([], factory);
6+
else if(typeof exports === 'object')
7+
exports["VueFire"] = factory();
8+
else
9+
root["VueFire"] = factory();
10+
})(this, function() {
11+
return /******/ (function(modules) { // webpackBootstrap
12+
/******/ // The module cache
13+
/******/ var installedModules = {};
14+
15+
/******/ // The require function
16+
/******/ function __webpack_require__(moduleId) {
17+
18+
/******/ // Check if module is in cache
19+
/******/ if(installedModules[moduleId])
20+
/******/ return installedModules[moduleId].exports;
21+
22+
/******/ // Create a new module (and put it into the cache)
23+
/******/ var module = installedModules[moduleId] = {
24+
/******/ exports: {},
25+
/******/ id: moduleId,
26+
/******/ loaded: false
27+
/******/ };
28+
29+
/******/ // Execute the module function
30+
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31+
32+
/******/ // Flag the module as loaded
33+
/******/ module.loaded = true;
34+
35+
/******/ // Return the exports of the module
36+
/******/ return module.exports;
37+
/******/ }
38+
39+
40+
/******/ // expose the modules object (__webpack_modules__)
41+
/******/ __webpack_require__.m = modules;
42+
43+
/******/ // expose the module cache
44+
/******/ __webpack_require__.c = installedModules;
45+
46+
/******/ // __webpack_public_path__
47+
/******/ __webpack_require__.p = "";
48+
49+
/******/ // Load entry module and return exports
50+
/******/ return __webpack_require__(0);
51+
/******/ })
52+
/************************************************************************/
53+
/******/ ([
54+
/* 0 */
55+
/***/ function(module, exports) {
56+
57+
var Vue // late binding
58+
59+
/**
60+
* Check if a value is an object.
61+
*
62+
* @param {*} val
63+
* @return {boolean}
64+
*/
65+
function isObject (val) {
66+
return Object.prototype.toString.call(val) === '[object Object]'
67+
}
68+
69+
/**
70+
* Convert firebase snapshot into a bindable data record.
71+
*
72+
* @param {FirebaseSnapshot} snapshot
73+
* @return {Object}
74+
*/
75+
function createRecord (snapshot) {
76+
var value = snapshot.val()
77+
var res = isObject(value)
78+
? value
79+
: { '.value': value }
80+
res['.key'] = snapshot.key()
81+
return res
82+
}
83+
84+
/**
85+
* Find the index for an object with given key.
86+
*
87+
* @param {array} array
88+
* @param {string} key
89+
* @return {number}
90+
*/
91+
function indexForKey (array, key) {
92+
for (var i = 0; i < array.length; i++) {
93+
if (array[i]['.key'] === key) {
94+
return i
95+
}
96+
}
97+
/* istanbul ignore next */
98+
return -1
99+
}
100+
101+
/**
102+
* Bind a firebase data source to a key on a vm.
103+
*
104+
* @param {Vue} vm
105+
* @param {string} key
106+
* @param {object} source
107+
*/
108+
function bind (vm, key, source) {
109+
var asObject = false
110+
var cancelCallback = null
111+
// check { source, asArray, cancelCallback } syntax
112+
if (isObject(source) && source.hasOwnProperty('source')) {
113+
asObject = source.asObject
114+
cancelCallback = source.cancelCallback
115+
source = source.source
116+
}
117+
if (!isObject(source)) {
118+
throw new Error('VueFire: invalid Firebase binding source.')
119+
}
120+
// get the original ref for possible queries
121+
var ref = source
122+
if (typeof source.ref === 'function') {
123+
ref = source.ref()
124+
}
125+
vm.$firebaseRefs[key] = ref
126+
vm._firebaseSources[key] = source
127+
// bind based on initial value type
128+
if (asObject) {
129+
bindAsObject(vm, key, source, cancelCallback)
130+
} else {
131+
bindAsArray(vm, key, source, cancelCallback)
132+
}
133+
}
134+
135+
/**
136+
* Bind a firebase data source to a key on a vm as an Array.
137+
*
138+
* @param {Vue} vm
139+
* @param {string} key
140+
* @param {object} source
141+
* @param {function|null} cancelCallback
142+
*/
143+
function bindAsArray (vm, key, source, cancelCallback) {
144+
var array = []
145+
Vue.util.defineReactive(vm, key, array)
146+
147+
var onAdd = source.on('child_added', function (snapshot, prevKey) {
148+
var index = prevKey ? indexForKey(array, prevKey) + 1 : 0
149+
array.splice(index, 0, createRecord(snapshot))
150+
}, cancelCallback)
151+
152+
var onRemove = source.on('child_removed', function (snapshot) {
153+
var index = indexForKey(array, snapshot.key())
154+
array.splice(index, 1)
155+
}, cancelCallback)
156+
157+
var onChange = source.on('child_changed', function (snapshot) {
158+
var index = indexForKey(array, snapshot.key())
159+
array.splice(index, 1, createRecord(snapshot))
160+
}, cancelCallback)
161+
162+
var onMove = source.on('child_moved', function (snapshot, prevKey) {
163+
var index = indexForKey(array, snapshot.key())
164+
var record = array.splice(index, 1)[0]
165+
var newIndex = prevKey ? indexForKey(array, prevKey) + 1 : 0
166+
array.splice(newIndex, 0, record)
167+
}, cancelCallback)
168+
169+
vm._firebaseListeners[key] = {
170+
child_added: onAdd,
171+
child_removed: onRemove,
172+
child_changed: onChange,
173+
child_moved: onMove
174+
}
175+
}
176+
177+
/**
178+
* Bind a firebase data source to a key on a vm as an Object.
179+
*
180+
* @param {Vue} vm
181+
* @param {string} key
182+
* @param {Object} source
183+
* @param {function|null} cancelCallback
184+
*/
185+
function bindAsObject (vm, key, source, cancelCallback) {
186+
Vue.util.defineReactive(vm, key, {})
187+
var cb = source.on('value', function (snapshot) {
188+
vm[key] = createRecord(snapshot)
189+
}, cancelCallback)
190+
vm._firebaseListeners[key] = { value: cb }
191+
}
192+
193+
/**
194+
* Unbind a firebase-bound key from a vm.
195+
*
196+
* @param {Vue} vm
197+
* @param {string} key
198+
*/
199+
function unbind (vm, key) {
200+
var source = vm._firebaseSources && vm._firebaseSources[key]
201+
if (!source) {
202+
throw new Error(
203+
'VueFire: unbind failed: "' + key + '" is not bound to ' +
204+
'a Firebase reference.'
205+
)
206+
}
207+
var listeners = vm._firebaseListeners[key]
208+
for (var event in listeners) {
209+
source.off(event, listeners[event])
210+
}
211+
vm[key] = null
212+
vm.$firebaseRefs[key] = null
213+
vm._firebaseSources[key] = null
214+
vm._firebaseListeners[key] = null
215+
}
216+
217+
/**
218+
* Ensure the related bookkeeping variables on an instance.
219+
*
220+
* @param {Vue} vm
221+
*/
222+
function ensureRefs (vm) {
223+
if (!vm.$firebaseRefs) {
224+
vm.$firebaseRefs = Object.create(null)
225+
vm._firebaseSources = Object.create(null)
226+
vm._firebaseListeners = Object.create(null)
227+
}
228+
}
229+
230+
var VueFireMixin = {
231+
init: function () {
232+
var bindings = this.$options.firebase
233+
if (!bindings) return
234+
ensureRefs(this)
235+
for (var key in bindings) {
236+
bind(this, key, bindings[key])
237+
}
238+
},
239+
beforeDestroy: function () {
240+
if (!this.$firebaseRefs) return
241+
for (var key in this.$firebaseRefs) {
242+
if (this.$firebaseRefs[key]) {
243+
this.$unbind(key)
244+
}
245+
}
246+
this.$firebaseRefs = null
247+
this._firebaseSources = null
248+
this._firebaseListeners = null
249+
}
250+
}
251+
252+
/**
253+
* Install function passed to Vue.use() in manual installation.
254+
*
255+
* @param {function} _Vue
256+
*/
257+
function install (_Vue) {
258+
Vue = _Vue
259+
Vue.mixin(VueFireMixin)
260+
261+
// use object-based merge strategy
262+
var mergeStrats = Vue.config.optionMergeStrategies
263+
mergeStrats.firebase = mergeStrats.methods
264+
265+
// extend instance methods
266+
Vue.prototype.$bindAsObject = function (key, source, cancelCallback) {
267+
ensureRefs(this)
268+
bind(this, key, {
269+
source: source,
270+
asObject: true,
271+
cancelCallback: cancelCallback
272+
})
273+
}
274+
275+
Vue.prototype.$bindAsArray = function (key, source, cancelCallback) {
276+
ensureRefs(this)
277+
bind(this, key, {
278+
source: source,
279+
cancelCallback: cancelCallback
280+
})
281+
}
282+
283+
Vue.prototype.$unbind = function (key) {
284+
unbind(this, key)
285+
}
286+
}
287+
288+
// auto install
289+
/* istanbul ignore if */
290+
if (typeof window !== 'undefined' && window.Vue) {
291+
install(window.Vue)
292+
}
293+
294+
module.exports = install
295+
296+
297+
/***/ }
298+
/******/ ])
299+
});
300+
;

dist/vuefire.min.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)