/*!
 * vue-resource v1.5.1
 * https://github.com/pagekit/vue-resource
 * Released under the MIT License.
 */

!function (t, e) {
    "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : t.VueResource = e()
}(this, function () {
    "use strict";

    function u(t) {
        this.state = 2, this.value = void 0, this.deferred = [];
        var e = this;
        try {
            t(function (t) {
                e.resolve(t)
            }, function (t) {
                e.reject(t)
            })
        } catch (t) {
            e.reject(t)
        }
    }

    u.reject = function (n) {
        return new u(function (t, e) {
            e(n)
        })
    }, u.resolve = function (n) {
        return new u(function (t, e) {
            t(n)
        })
    }, u.all = function (s) {
        return new u(function (n, t) {
            var o = 0, r = [];

            function e(e) {
                return function (t) {
                    r[e] = t, (o += 1) === s.length && n(r)
                }
            }

            0 === s.length && n(r);
            for (var i = 0; i < s.length; i += 1) u.resolve(s[i]).then(e(i), t)
        })
    }, u.race = function (o) {
        return new u(function (t, e) {
            for (var n = 0; n < o.length; n += 1) u.resolve(o[n]).then(t, e)
        })
    };
    var t = u.prototype;

    function c(t, e) {
        t instanceof Promise ? this.promise = t : this.promise = new Promise(t.bind(e)), this.context = e
    }

    t.resolve = function (t) {
        var e = this;
        if (2 === e.state) {
            if (t === e) throw new TypeError("Promise settled with itself.");
            var n = !1;
            try {
                var o = t && t.then;
                if (null !== t && "object" == typeof t && "function" == typeof o) return void o.call(t, function (t) {
                    n || e.resolve(t), n = !0
                }, function (t) {
                    n || e.reject(t), n = !0
                })
            } catch (t) {
                return void(n || e.reject(t))
            }
            e.state = 0, e.value = t, e.notify()
        }
    }, t.reject = function (t) {
        var e = this;
        if (2 === e.state) {
            if (t === e) throw new TypeError("Promise settled with itself.");
            e.state = 1, e.value = t, e.notify()
        }
    }, t.notify = function () {
        var t, i = this;
        r(function () {
            if (2 !== i.state) for (; i.deferred.length;) {
                var t = i.deferred.shift(), e = t[0], n = t[1], o = t[2], r = t[3];
                try {
                    0 === i.state ? o("function" == typeof e ? e.call(void 0, i.value) : i.value) : 1 === i.state && ("function" == typeof n ? o(n.call(void 0, i.value)) : r(i.value))
                } catch (t) {
                    r(t)
                }
            }
        }, t)
    }, t.then = function (n, o) {
        var r = this;
        return new u(function (t, e) {
            r.deferred.push([n, o, t, e]), r.notify()
        })
    }, t.catch = function (t) {
        return this.then(void 0, t)
    }, "undefined" == typeof Promise && (window.Promise = u), c.all = function (t, e) {
        return new c(Promise.all(t), e)
    }, c.resolve = function (t, e) {
        return new c(Promise.resolve(t), e)
    }, c.reject = function (t, e) {
        return new c(Promise.reject(t), e)
    }, c.race = function (t, e) {
        return new c(Promise.race(t), e)
    };
    var e = c.prototype;
    e.bind = function (t) {
        return this.context = t, this
    }, e.then = function (t, e) {
        return t && t.bind && this.context && (t = t.bind(this.context)), e && e.bind && this.context && (e = e.bind(this.context)), new c(this.promise.then(t, e), this.context)
    }, e.catch = function (t) {
        return t && t.bind && this.context && (t = t.bind(this.context)), new c(this.promise.catch(t), this.context)
    }, e.finally = function (e) {
        return this.then(function (t) {
            return e.call(this), t
        }, function (t) {
            return e.call(this), Promise.reject(t)
        })
    };
    var r, i = {}.hasOwnProperty, o = [].slice, a = !1, s = "undefined" != typeof window;

    function f(t) {
        return t ? t.replace(/^\s*|\s*$/g, "") : ""
    }

    function p(t) {
        return t ? t.toLowerCase() : ""
    }

    var h = Array.isArray;

    function d(t) {
        return "string" == typeof t
    }

    function l(t) {
        return "function" == typeof t
    }

    function m(t) {
        return null !== t && "object" == typeof t
    }

    function y(t) {
        return m(t) && Object.getPrototypeOf(t) == Object.prototype
    }

    function v(t, e, n) {
        var o = c.resolve(t);
        return arguments.length < 2 ? o : o.then(e, n)
    }

    function b(t, e, n) {
        return l(n = n || {}) && (n = n.call(e)), T(t.bind({$vm: e, $options: n}), t, {$options: n})
    }

    function g(t, e) {
        var n, o;
        if (h(t)) for (n = 0; n < t.length; n++) e.call(t[n], t[n], n); else if (m(t)) for (o in t) i.call(t, o) && e.call(t[o], t[o], o);
        return t
    }

    var w = Object.assign || function (e) {
        return o.call(arguments, 1).forEach(function (t) {
            x(e, t)
        }), e
    };

    function T(e) {
        return o.call(arguments, 1).forEach(function (t) {
            x(e, t, !0)
        }), e
    }

    function x(t, e, n) {
        for (var o in e) n && (y(e[o]) || h(e[o])) ? (y(e[o]) && !y(t[o]) && (t[o] = {}), h(e[o]) && !h(t[o]) && (t[o] = []), x(t[o], e[o], n)) : void 0 !== e[o] && (t[o] = e[o])
    }

    function j(t, e, n) {
        var o, u, a, r = (o = t, u = ["+", "#", ".", "/", ";", "?", "&"], {
            vars: a = [], expand: function (s) {
                return o.replace(/\{([^{}]+)\}|([^{}]+)/g, function (t, e, n) {
                    if (e) {
                        var o = null, r = [];
                        if (-1 !== u.indexOf(e.charAt(0)) && (o = e.charAt(0), e = e.substr(1)), e.split(/,/g).forEach(function (t) {
                            var e = /([^:*]*)(?::(\d+)|(\*))?/.exec(t);
                            r.push.apply(r, function (t, e, n, o) {
                                var r = t[n], i = [];
                                if (E(r) && "" !== r) if ("string" == typeof r || "number" == typeof r || "boolean" == typeof r) r = r.toString(), o && "*" !== o && (r = r.substring(0, parseInt(o, 10))), i.push(O(e, r, P(e) ? n : null)); else if ("*" === o) Array.isArray(r) ? r.filter(E).forEach(function (t) {
                                    i.push(O(e, t, P(e) ? n : null))
                                }) : Object.keys(r).forEach(function (t) {
                                    E(r[t]) && i.push(O(e, r[t], t))
                                }); else {
                                    var s = [];
                                    Array.isArray(r) ? r.filter(E).forEach(function (t) {
                                        s.push(O(e, t))
                                    }) : Object.keys(r).forEach(function (t) {
                                        E(r[t]) && (s.push(encodeURIComponent(t)), s.push(O(e, r[t].toString())))
                                    }), P(e) ? i.push(encodeURIComponent(n) + "=" + s.join(",")) : 0 !== s.length && i.push(s.join(","))
                                } else ";" === e ? i.push(encodeURIComponent(n)) : "" !== r || "&" !== e && "?" !== e ? "" === r && i.push("") : i.push(encodeURIComponent(n) + "=");
                                return i
                            }(s, o, e[1], e[2] || e[3])), a.push(e[1])
                        }), o && "+" !== o) {
                            var i = ",";
                            return "?" === o ? i = "&" : "#" !== o && (i = o), (0 !== r.length ? o : "") + r.join(i)
                        }
                        return r.join(",")
                    }
                    return C(n)
                })
            }
        }), i = r.expand(e);
        return n && n.push.apply(n, r.vars), i
    }

    function E(t) {
        return null != t
    }

    function P(t) {
        return ";" === t || "&" === t || "?" === t
    }

    function O(t, e, n) {
        return e = "+" === t || "#" === t ? C(e) : encodeURIComponent(e), n ? encodeURIComponent(n) + "=" + e : e
    }

    function C(t) {
        return t.split(/(%[0-9A-Fa-f]{2})/g).map(function (t) {
            return /%[0-9A-Fa-f]/.test(t) || (t = encodeURI(t)), t
        }).join("")
    }

    function $(t, e) {
        var r, i = this || {}, n = t;
        return d(t) && (n = {
            url: t,
            params: e
        }), n = T({}, $.options, i.$options, n), $.transforms.forEach(function (t) {
            var e, n, o;
            d(t) && (t = $.transform[t]), l(t) && (e = t, n = r, o = i.$vm, r = function (t) {
                return e.call(o, t, n)
            })
        }), r(n)
    }

    function U(i) {
        return new c(function (o) {
            var r = new XDomainRequest, t = function (t) {
                var e = t.type, n = 0;
                "load" === e ? n = 200 : "error" === e && (n = 500), o(i.respondWith(r.responseText, {status: n}))
            };
            i.abort = function () {
                return r.abort()
            }, r.open(i.method, i.getUrl()), i.timeout && (r.timeout = i.timeout), r.onload = t, r.onabort = t, r.onerror = t, r.ontimeout = t, r.onprogress = function () {
            }, r.send(i.getBody())
        })
    }

    $.options = {url: "", root: null, params: {}}, $.transform = {
        template: function (e) {
            var t = [], n = j(e.url, e.params, t);
            return t.forEach(function (t) {
                delete e.params[t]
            }), n
        }, query: function (t, e) {
            var n = Object.keys($.options.params), o = {}, r = e(t);
            return g(t.params, function (t, e) {
                -1 === n.indexOf(e) && (o[e] = t)
            }), (o = $.params(o)) && (r += (-1 == r.indexOf("?") ? "?" : "&") + o), r
        }, root: function (t, e) {
            var n, o, r = e(t);
            return d(t.root) && !/^(https?:)?\//.test(r) && (n = t.root, o = "/", r = (n && void 0 === o ? n.replace(/\s+$/, "") : n && o ? n.replace(new RegExp("[" + o + "]+$"), "") : n) + "/" + r), r
        }
    }, $.transforms = ["template", "query", "root"], $.params = function (t) {
        var e = [], n = encodeURIComponent;
        return e.add = function (t, e) {
            l(e) && (e = e()), null === e && (e = ""), this.push(n(t) + "=" + n(e))
        }, function n(o, t, r) {
            var i, s = h(t), u = y(t);
            g(t, function (t, e) {
                i = m(t) || h(t), r && (e = r + "[" + (u || i ? e : "") + "]"), !r && s ? o.add(t.name, t.value) : i ? n(o, t, e) : o.add(e, t)
            })
        }(e, t), e.join("&").replace(/%20/g, "+")
    }, $.parse = function (t) {
        var e = document.createElement("a");
        return document.documentMode && (e.href = t, t = e.href), e.href = t, {
            href: e.href,
            protocol: e.protocol ? e.protocol.replace(/:$/, "") : "",
            port: e.port,
            host: e.host,
            hostname: e.hostname,
            pathname: "/" === e.pathname.charAt(0) ? e.pathname : "/" + e.pathname,
            search: e.search ? e.search.replace(/^\?/, "") : "",
            hash: e.hash ? e.hash.replace(/^#/, "") : ""
        }
    };
    var R = s && "withCredentials" in new XMLHttpRequest;

    function n(u) {
        return new c(function (o) {
            var t, r, e = u.jsonp || "callback", i = u.jsonpCallback || "_jsonp" + Math.random().toString(36).substr(2),
                s = null;
            t = function (t) {
                var e = t.type, n = 0;
                "load" === e && null !== s ? n = 200 : "error" === e && (n = 500), n && window[i] && (delete window[i], document.body.removeChild(r)), o(u.respondWith(s, {status: n}))
            }, window[i] = function (t) {
                s = JSON.stringify(t)
            }, u.abort = function () {
                t({type: "abort"})
            }, u.params[e] = i, u.timeout && setTimeout(u.abort, u.timeout), (r = document.createElement("script")).src = u.getUrl(), r.type = "text/javascript", r.async = !0, r.onload = t, r.onerror = t, document.body.appendChild(r)
        })
    }

    function A(r) {
        return new c(function (n) {
            var o = new XMLHttpRequest, t = function (t) {
                var e = r.respondWith("response" in o ? o.response : o.responseText, {
                    status: 1223 === o.status ? 204 : o.status,
                    statusText: 1223 === o.status ? "No Content" : f(o.statusText)
                });
                g(f(o.getAllResponseHeaders()).split("\n"), function (t) {
                    e.headers.append(t.slice(0, t.indexOf(":")), t.slice(t.indexOf(":") + 1))
                }), n(e)
            };
            r.abort = function () {
                return o.abort()
            }, o.open(r.method, r.getUrl(), !0), r.timeout && (o.timeout = r.timeout), r.responseType && "responseType" in o && (o.responseType = r.responseType), (r.withCredentials || r.credentials) && (o.withCredentials = !0), r.crossOrigin || r.headers.set("X-Requested-With", "XMLHttpRequest"), l(r.progress) && "GET" === r.method && o.addEventListener("progress", r.progress), l(r.downloadProgress) && o.addEventListener("progress", r.downloadProgress), l(r.progress) && /^(POST|PUT)$/i.test(r.method) && o.upload.addEventListener("progress", r.progress), l(r.uploadProgress) && o.upload && o.upload.addEventListener("progress", r.uploadProgress), r.headers.forEach(function (t, e) {
                o.setRequestHeader(e, t)
            }), o.onload = t, o.onabort = t, o.onerror = t, o.ontimeout = t, o.send(r.getBody())
        })
    }

    function S(s) {
        var u = require("got");
        return new c(function (e) {
            var n, t = s.getUrl(), o = s.getBody(), r = s.method, i = {};
            s.headers.forEach(function (t, e) {
                i[e] = t
            }), u(t, {body: o, method: r, headers: i}).then(n = function (t) {
                var n = s.respondWith(t.body, {status: t.statusCode, statusText: f(t.statusMessage)});
                g(t.headers, function (t, e) {
                    n.headers.set(e, t)
                }), e(n)
            }, function (t) {
                return n(t.response)
            })
        })
    }

    function k(t) {
        return (t.client || (s ? A : S))(t)
    }

    var I = function (t) {
        var n = this;
        this.map = {}, g(t, function (t, e) {
            return n.append(e, t)
        })
    };

    function L(t, n) {
        return Object.keys(t).reduce(function (t, e) {
            return p(n) === p(e) ? e : t
        }, null)
    }

    I.prototype.has = function (t) {
        return null !== L(this.map, t)
    }, I.prototype.get = function (t) {
        var e = this.map[L(this.map, t)];
        return e ? e.join() : null
    }, I.prototype.getAll = function (t) {
        return this.map[L(this.map, t)] || []
    }, I.prototype.set = function (t, e) {
        this.map[function (t) {
            if (/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(t)) throw new TypeError("Invalid character in header field name");
            return f(t)
        }(L(this.map, t) || t)] = [f(e)]
    }, I.prototype.append = function (t, e) {
        var n = this.map[L(this.map, t)];
        n ? n.push(f(e)) : this.set(t, e)
    }, I.prototype.delete = function (t) {
        delete this.map[L(this.map, t)]
    }, I.prototype.deleteAll = function () {
        this.map = {}
    }, I.prototype.forEach = function (n, o) {
        var r = this;
        g(this.map, function (t, e) {
            g(t, function (t) {
                return n.call(o, t, e, r)
            })
        })
    };
    var q = function (t, e) {
        var n, o, r, i = e.url, s = e.headers, u = e.status, a = e.statusText;
        this.url = i, this.ok = 200 <= u && u < 300, this.status = u || 0, this.statusText = a || "", this.headers = new I(s), d(this.body = t) ? this.bodyText = t : (r = t, "undefined" != typeof Blob && r instanceof Blob && (this.bodyBlob = t, (0 === (o = t).type.indexOf("text") || -1 !== o.type.indexOf("json")) && (this.bodyText = (n = t, new c(function (t) {
            var e = new FileReader;
            e.readAsText(n), e.onload = function () {
                t(e.result)
            }
        })))))
    };
    q.prototype.blob = function () {
        return v(this.bodyBlob)
    }, q.prototype.text = function () {
        return v(this.bodyText)
    }, q.prototype.json = function () {
        return v(this.text(), function (t) {
            return JSON.parse(t)
        })
    }, Object.defineProperty(q.prototype, "data", {
        get: function () {
            return this.body
        }, set: function (t) {
            this.body = t
        }
    });
    var H = function (t) {
        var e;
        this.body = null, this.params = {}, w(this, t, {method: (e = t.method || "GET", e ? e.toUpperCase() : "")}), this.headers instanceof I || (this.headers = new I(this.headers))
    };
    H.prototype.getUrl = function () {
        return $(this)
    }, H.prototype.getBody = function () {
        return this.body
    }, H.prototype.respondWith = function (t, e) {
        return new q(t, w(e || {}, {url: this.getUrl()}))
    };
    var B = {"Content-Type": "application/json;charset=utf-8"};

    function M(t) {
        var e = this || {}, n = function (i) {
            var s = [k], u = [];

            function t(t) {
                for (; s.length;) {
                    var e = s.pop();
                    if (l(e)) {
                        var o = void 0, n = void 0;
                        if (m(o = e.call(i, t, function (t) {
                            return n = t
                        }) || n)) return new c(function (t, n) {
                            u.forEach(function (e) {
                                o = v(o, function (t) {
                                    return e.call(i, t) || t
                                }, n)
                            }), v(o, t, n)
                        }, i);
                        l(o) && u.unshift(o)
                    } else r = "Invalid interceptor of type " + typeof e + ", must be a function", "undefined" != typeof console && a && console.warn("[VueResource warn]: " + r)
                }
                var r
            }

            return m(i) || (i = null), t.use = function (t) {
                s.push(t)
            }, t
        }(e.$vm);
        return function (n) {
            o.call(arguments, 1).forEach(function (t) {
                for (var e in t) void 0 === n[e] && (n[e] = t[e])
            })
        }(t || {}, e.$options, M.options), M.interceptors.forEach(function (t) {
            d(t) && (t = M.interceptor[t]), l(t) && n.use(t)
        }), n(new H(t)).then(function (t) {
            return t.ok ? t : c.reject(t)
        }, function (t) {
            var e;
            return t instanceof Error && (e = t, "undefined" != typeof console && console.error(e)), c.reject(t)
        })
    }

    function N(n, o, t, r) {
        var i = this || {}, s = {};
        return g(t = w({}, N.actions, t), function (t, e) {
            t = T({url: n, params: w({}, o)}, r, t), s[e] = function () {
                return (i.$http || M)(function (t, e) {
                    var n, o = w({}, t), r = {};
                    switch (e.length) {
                        case 2:
                            r = e[0], n = e[1];
                            break;
                        case 1:
                            /^(POST|PUT|PATCH)$/i.test(o.method) ? n = e[0] : r = e[0];
                            break;
                        case 0:
                            break;
                        default:
                            throw"Expected up to 2 arguments [params, body], got " + e.length + " arguments"
                    }
                    return o.body = n, o.params = w({}, o.params, r), o
                }(t, arguments))
            }
        }), s
    }

    function D(n) {
        var t, e, o;
        D.installed || (e = (t = n).config, o = t.nextTick, r = o, a = e.debug || !e.silent, n.url = $, n.http = M, n.resource = N, n.Promise = c, Object.defineProperties(n.prototype, {
            $url: {
                get: function () {
                    return b(n.url, this, this.$options.url)
                }
            }, $http: {
                get: function () {
                    return b(n.http, this, this.$options.http)
                }
            }, $resource: {
                get: function () {
                    return n.resource.bind(this)
                }
            }, $promise: {
                get: function () {
                    var e = this;
                    return function (t) {
                        return new n.Promise(t, e)
                    }
                }
            }
        }))
    }

    return M.options = {}, M.headers = {
        put: B,
        post: B,
        patch: B,
        delete: B,
        common: {Accept: "application/json, text/plain, */*"},
        custom: {}
    }, M.interceptor = {
        before: function (t) {
            l(t.before) && t.before.call(this, t)
        }, method: function (t) {
            t.emulateHTTP && /^(PUT|PATCH|DELETE)$/i.test(t.method) && (t.headers.set("X-HTTP-Method-Override", t.method), t.method = "POST")
        }, jsonp: function (t) {
            "JSONP" == t.method && (t.client = n)
        }, json: function (t) {
            var e = t.headers.get("Content-Type") || "";
            return m(t.body) && 0 === e.indexOf("application/json") && (t.body = JSON.stringify(t.body)), function (o) {
                return o.bodyText ? v(o.text(), function (t) {
                    var e, n;
                    if (0 === (o.headers.get("Content-Type") || "").indexOf("application/json") || (n = (e = t).match(/^\s*(\[|\{)/)) && {
                        "[": /]\s*$/,
                        "{": /}\s*$/
                    }[n[1]].test(e)) try {
                        o.body = JSON.parse(t)
                    } catch (t) {
                        o.body = null
                    } else o.body = t;
                    return o
                }) : o
            }
        }, form: function (t) {
            var e;
            e = t.body, "undefined" != typeof FormData && e instanceof FormData ? t.headers.delete("Content-Type") : m(t.body) && t.emulateJSON && (t.body = $.params(t.body), t.headers.set("Content-Type", "application/x-www-form-urlencoded"))
        }, header: function (n) {
            g(w({}, M.headers.common, n.crossOrigin ? {} : M.headers.custom, M.headers[p(n.method)]), function (t, e) {
                n.headers.has(e) || n.headers.set(e, t)
            })
        }, cors: function (t) {
            if (s) {
                var e = $.parse(location.href), n = $.parse(t.getUrl());
                n.protocol === e.protocol && n.host === e.host || (t.crossOrigin = !0, t.emulateHTTP = !1, R || (t.client = U))
            }
        }
    }, M.interceptors = ["before", "method", "jsonp", "json", "form", "header", "cors"], ["get", "delete", "head", "jsonp"].forEach(function (n) {
        M[n] = function (t, e) {
            return this(w(e || {}, {url: t, method: n}))
        }
    }), ["post", "put", "patch"].forEach(function (o) {
        M[o] = function (t, e, n) {
            return this(w(n || {}, {url: t, method: o, body: e}))
        }
    }), N.actions = {
        get: {method: "GET"},
        save: {method: "POST"},
        query: {method: "GET"},
        update: {method: "PUT"},
        remove: {method: "DELETE"},
        delete: {method: "DELETE"}
    }, "undefined" != typeof window && window.Vue && window.Vue.use(D), D
});