diff --git a/.babelrc b/.babelrc
new file mode 100644
index 00000000..27485f9d
--- /dev/null
+++ b/.babelrc
@@ -0,0 +1,7 @@
+{
+
+ "presets": [
+ "@babel/preset-env"
+ ],
+ "plugins": ["@babel/plugin-syntax-dynamic-import"]
+}
\ No newline at end of file
diff --git a/fonts/vendor/element-ui/lib/theme-chalk/element-icons.ttf b/fonts/vendor/element-ui/lib/theme-chalk/element-icons.ttf
new file mode 100644
index 00000000..91b74de3
Binary files /dev/null and b/fonts/vendor/element-ui/lib/theme-chalk/element-icons.ttf differ
diff --git a/fonts/vendor/element-ui/lib/theme-chalk/element-icons.woff b/fonts/vendor/element-ui/lib/theme-chalk/element-icons.woff
new file mode 100644
index 00000000..02b9a253
Binary files /dev/null and b/fonts/vendor/element-ui/lib/theme-chalk/element-icons.woff differ
diff --git a/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400.woff b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400.woff
new file mode 100644
index 00000000..4ddf3dc5
Binary files /dev/null and b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400.woff differ
diff --git a/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400.woff2 b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400.woff2
new file mode 100644
index 00000000..674546e1
Binary files /dev/null and b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400.woff2 differ
diff --git a/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400italic.woff b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400italic.woff
new file mode 100644
index 00000000..f34c2146
Binary files /dev/null and b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400italic.woff differ
diff --git a/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400italic.woff2 b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400italic.woff2
new file mode 100644
index 00000000..b3723c0f
Binary files /dev/null and b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400italic.woff2 differ
diff --git a/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700.woff b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700.woff
new file mode 100644
index 00000000..d8dd85bf
Binary files /dev/null and b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700.woff differ
diff --git a/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700.woff2 b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700.woff2
new file mode 100644
index 00000000..2c3f8e76
Binary files /dev/null and b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700.woff2 differ
diff --git a/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700italic.woff b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700italic.woff
new file mode 100644
index 00000000..6ef568bf
Binary files /dev/null and b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700italic.woff differ
diff --git a/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700italic.woff2 b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700italic.woff2
new file mode 100644
index 00000000..d0fa0cd6
Binary files /dev/null and b/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700italic.woff2 differ
diff --git a/public/0.17b8d08b9d259577cf6a.js b/public/0.17b8d08b9d259577cf6a.js
new file mode 100644
index 00000000..67279288
--- /dev/null
+++ b/public/0.17b8d08b9d259577cf6a.js
@@ -0,0 +1,859 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],{
+
+/***/ "./node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js":
+/*!*********************************************************************************!*\
+ !*** ./node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js ***!
+ \*********************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+var runtime = (function (exports) {
+ "use strict";
+
+ var Op = Object.prototype;
+ var hasOwn = Op.hasOwnProperty;
+ var undefined; // More compressible than void 0.
+ var $Symbol = typeof Symbol === "function" ? Symbol : {};
+ var iteratorSymbol = $Symbol.iterator || "@@iterator";
+ var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
+ var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
+
+ function wrap(innerFn, outerFn, self, tryLocsList) {
+ // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
+ var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
+ var generator = Object.create(protoGenerator.prototype);
+ var context = new Context(tryLocsList || []);
+
+ // The ._invoke method unifies the implementations of the .next,
+ // .throw, and .return methods.
+ generator._invoke = makeInvokeMethod(innerFn, self, context);
+
+ return generator;
+ }
+ exports.wrap = wrap;
+
+ // Try/catch helper to minimize deoptimizations. Returns a completion
+ // record like context.tryEntries[i].completion. This interface could
+ // have been (and was previously) designed to take a closure to be
+ // invoked without arguments, but in all the cases we care about we
+ // already have an existing method we want to call, so there's no need
+ // to create a new function object. We can even get away with assuming
+ // the method takes exactly one argument, since that happens to be true
+ // in every case, so we don't have to touch the arguments object. The
+ // only additional allocation required is the completion record, which
+ // has a stable shape and so hopefully should be cheap to allocate.
+ function tryCatch(fn, obj, arg) {
+ try {
+ return { type: "normal", arg: fn.call(obj, arg) };
+ } catch (err) {
+ return { type: "throw", arg: err };
+ }
+ }
+
+ var GenStateSuspendedStart = "suspendedStart";
+ var GenStateSuspendedYield = "suspendedYield";
+ var GenStateExecuting = "executing";
+ var GenStateCompleted = "completed";
+
+ // Returning this object from the innerFn has the same effect as
+ // breaking out of the dispatch switch statement.
+ var ContinueSentinel = {};
+
+ // Dummy constructor functions that we use as the .constructor and
+ // .constructor.prototype properties for functions that return Generator
+ // objects. For full spec compliance, you may wish to configure your
+ // minifier not to mangle the names of these two functions.
+ function Generator() {}
+ function GeneratorFunction() {}
+ function GeneratorFunctionPrototype() {}
+
+ // This is a polyfill for %IteratorPrototype% for environments that
+ // don't natively support it.
+ var IteratorPrototype = {};
+ IteratorPrototype[iteratorSymbol] = function () {
+ return this;
+ };
+
+ var getProto = Object.getPrototypeOf;
+ var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
+ if (NativeIteratorPrototype &&
+ NativeIteratorPrototype !== Op &&
+ hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
+ // This environment has a native %IteratorPrototype%; use it instead
+ // of the polyfill.
+ IteratorPrototype = NativeIteratorPrototype;
+ }
+
+ var Gp = GeneratorFunctionPrototype.prototype =
+ Generator.prototype = Object.create(IteratorPrototype);
+ GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
+ GeneratorFunctionPrototype.constructor = GeneratorFunction;
+ GeneratorFunctionPrototype[toStringTagSymbol] =
+ GeneratorFunction.displayName = "GeneratorFunction";
+
+ // Helper for defining the .next, .throw, and .return methods of the
+ // Iterator interface in terms of a single ._invoke method.
+ function defineIteratorMethods(prototype) {
+ ["next", "throw", "return"].forEach(function(method) {
+ prototype[method] = function(arg) {
+ return this._invoke(method, arg);
+ };
+ });
+ }
+
+ exports.isGeneratorFunction = function(genFun) {
+ var ctor = typeof genFun === "function" && genFun.constructor;
+ return ctor
+ ? ctor === GeneratorFunction ||
+ // For the native GeneratorFunction constructor, the best we can
+ // do is to check its .name property.
+ (ctor.displayName || ctor.name) === "GeneratorFunction"
+ : false;
+ };
+
+ exports.mark = function(genFun) {
+ if (Object.setPrototypeOf) {
+ Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
+ } else {
+ genFun.__proto__ = GeneratorFunctionPrototype;
+ if (!(toStringTagSymbol in genFun)) {
+ genFun[toStringTagSymbol] = "GeneratorFunction";
+ }
+ }
+ genFun.prototype = Object.create(Gp);
+ return genFun;
+ };
+
+ // Within the body of any async function, `await x` is transformed to
+ // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
+ // `hasOwn.call(value, "__await")` to determine if the yielded value is
+ // meant to be awaited.
+ exports.awrap = function(arg) {
+ return { __await: arg };
+ };
+
+ function AsyncIterator(generator) {
+ function invoke(method, arg, resolve, reject) {
+ var record = tryCatch(generator[method], generator, arg);
+ if (record.type === "throw") {
+ reject(record.arg);
+ } else {
+ var result = record.arg;
+ var value = result.value;
+ if (value &&
+ typeof value === "object" &&
+ hasOwn.call(value, "__await")) {
+ return Promise.resolve(value.__await).then(function(value) {
+ invoke("next", value, resolve, reject);
+ }, function(err) {
+ invoke("throw", err, resolve, reject);
+ });
+ }
+
+ return Promise.resolve(value).then(function(unwrapped) {
+ // When a yielded Promise is resolved, its final value becomes
+ // the .value of the Promise<{value,done}> result for the
+ // current iteration.
+ result.value = unwrapped;
+ resolve(result);
+ }, function(error) {
+ // If a rejected Promise was yielded, throw the rejection back
+ // into the async generator function so it can be handled there.
+ return invoke("throw", error, resolve, reject);
+ });
+ }
+ }
+
+ var previousPromise;
+
+ function enqueue(method, arg) {
+ function callInvokeWithMethodAndArg() {
+ return new Promise(function(resolve, reject) {
+ invoke(method, arg, resolve, reject);
+ });
+ }
+
+ return previousPromise =
+ // If enqueue has been called before, then we want to wait until
+ // all previous Promises have been resolved before calling invoke,
+ // so that results are always delivered in the correct order. If
+ // enqueue has not been called before, then it is important to
+ // call invoke immediately, without waiting on a callback to fire,
+ // so that the async generator function has the opportunity to do
+ // any necessary setup in a predictable way. This predictability
+ // is why the Promise constructor synchronously invokes its
+ // executor callback, and why async functions synchronously
+ // execute code before the first await. Since we implement simple
+ // async functions in terms of async generators, it is especially
+ // important to get this right, even though it requires care.
+ previousPromise ? previousPromise.then(
+ callInvokeWithMethodAndArg,
+ // Avoid propagating failures to Promises returned by later
+ // invocations of the iterator.
+ callInvokeWithMethodAndArg
+ ) : callInvokeWithMethodAndArg();
+ }
+
+ // Define the unified helper method that is used to implement .next,
+ // .throw, and .return (see defineIteratorMethods).
+ this._invoke = enqueue;
+ }
+
+ defineIteratorMethods(AsyncIterator.prototype);
+ AsyncIterator.prototype[asyncIteratorSymbol] = function () {
+ return this;
+ };
+ exports.AsyncIterator = AsyncIterator;
+
+ // Note that simple async functions are implemented on top of
+ // AsyncIterator objects; they just return a Promise for the value of
+ // the final result produced by the iterator.
+ exports.async = function(innerFn, outerFn, self, tryLocsList) {
+ var iter = new AsyncIterator(
+ wrap(innerFn, outerFn, self, tryLocsList)
+ );
+
+ return exports.isGeneratorFunction(outerFn)
+ ? iter // If outerFn is a generator, return the full iterator.
+ : iter.next().then(function(result) {
+ return result.done ? result.value : iter.next();
+ });
+ };
+
+ function makeInvokeMethod(innerFn, self, context) {
+ var state = GenStateSuspendedStart;
+
+ return function invoke(method, arg) {
+ if (state === GenStateExecuting) {
+ throw new Error("Generator is already running");
+ }
+
+ if (state === GenStateCompleted) {
+ if (method === "throw") {
+ throw arg;
+ }
+
+ // Be forgiving, per 25.3.3.3.3 of the spec:
+ // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
+ return doneResult();
+ }
+
+ context.method = method;
+ context.arg = arg;
+
+ while (true) {
+ var delegate = context.delegate;
+ if (delegate) {
+ var delegateResult = maybeInvokeDelegate(delegate, context);
+ if (delegateResult) {
+ if (delegateResult === ContinueSentinel) continue;
+ return delegateResult;
+ }
+ }
+
+ if (context.method === "next") {
+ // Setting context._sent for legacy support of Babel's
+ // function.sent implementation.
+ context.sent = context._sent = context.arg;
+
+ } else if (context.method === "throw") {
+ if (state === GenStateSuspendedStart) {
+ state = GenStateCompleted;
+ throw context.arg;
+ }
+
+ context.dispatchException(context.arg);
+
+ } else if (context.method === "return") {
+ context.abrupt("return", context.arg);
+ }
+
+ state = GenStateExecuting;
+
+ var record = tryCatch(innerFn, self, context);
+ if (record.type === "normal") {
+ // If an exception is thrown from innerFn, we leave state ===
+ // GenStateExecuting and loop back for another invocation.
+ state = context.done
+ ? GenStateCompleted
+ : GenStateSuspendedYield;
+
+ if (record.arg === ContinueSentinel) {
+ continue;
+ }
+
+ return {
+ value: record.arg,
+ done: context.done
+ };
+
+ } else if (record.type === "throw") {
+ state = GenStateCompleted;
+ // Dispatch the exception by looping back around to the
+ // context.dispatchException(context.arg) call above.
+ context.method = "throw";
+ context.arg = record.arg;
+ }
+ }
+ };
+ }
+
+ // Call delegate.iterator[context.method](context.arg) and handle the
+ // result, either by returning a { value, done } result from the
+ // delegate iterator, or by modifying context.method and context.arg,
+ // setting context.delegate to null, and returning the ContinueSentinel.
+ function maybeInvokeDelegate(delegate, context) {
+ var method = delegate.iterator[context.method];
+ if (method === undefined) {
+ // A .throw or .return when the delegate iterator has no .throw
+ // method always terminates the yield* loop.
+ context.delegate = null;
+
+ if (context.method === "throw") {
+ // Note: ["return"] must be used for ES3 parsing compatibility.
+ if (delegate.iterator["return"]) {
+ // If the delegate iterator has a return method, give it a
+ // chance to clean up.
+ context.method = "return";
+ context.arg = undefined;
+ maybeInvokeDelegate(delegate, context);
+
+ if (context.method === "throw") {
+ // If maybeInvokeDelegate(context) changed context.method from
+ // "return" to "throw", let that override the TypeError below.
+ return ContinueSentinel;
+ }
+ }
+
+ context.method = "throw";
+ context.arg = new TypeError(
+ "The iterator does not provide a 'throw' method");
+ }
+
+ return ContinueSentinel;
+ }
+
+ var record = tryCatch(method, delegate.iterator, context.arg);
+
+ if (record.type === "throw") {
+ context.method = "throw";
+ context.arg = record.arg;
+ context.delegate = null;
+ return ContinueSentinel;
+ }
+
+ var info = record.arg;
+
+ if (! info) {
+ context.method = "throw";
+ context.arg = new TypeError("iterator result is not an object");
+ context.delegate = null;
+ return ContinueSentinel;
+ }
+
+ if (info.done) {
+ // Assign the result of the finished delegate to the temporary
+ // variable specified by delegate.resultName (see delegateYield).
+ context[delegate.resultName] = info.value;
+
+ // Resume execution at the desired location (see delegateYield).
+ context.next = delegate.nextLoc;
+
+ // If context.method was "throw" but the delegate handled the
+ // exception, let the outer generator proceed normally. If
+ // context.method was "next", forget context.arg since it has been
+ // "consumed" by the delegate iterator. If context.method was
+ // "return", allow the original .return call to continue in the
+ // outer generator.
+ if (context.method !== "return") {
+ context.method = "next";
+ context.arg = undefined;
+ }
+
+ } else {
+ // Re-yield the result returned by the delegate method.
+ return info;
+ }
+
+ // The delegate iterator is finished, so forget it and continue with
+ // the outer generator.
+ context.delegate = null;
+ return ContinueSentinel;
+ }
+
+ // Define Generator.prototype.{next,throw,return} in terms of the
+ // unified ._invoke helper method.
+ defineIteratorMethods(Gp);
+
+ Gp[toStringTagSymbol] = "Generator";
+
+ // A Generator should always return itself as the iterator object when the
+ // @@iterator function is called on it. Some browsers' implementations of the
+ // iterator prototype chain incorrectly implement this, causing the Generator
+ // object to not be returned from this call. This ensures that doesn't happen.
+ // See https://github.com/facebook/regenerator/issues/274 for more details.
+ Gp[iteratorSymbol] = function() {
+ return this;
+ };
+
+ Gp.toString = function() {
+ return "[object Generator]";
+ };
+
+ function pushTryEntry(locs) {
+ var entry = { tryLoc: locs[0] };
+
+ if (1 in locs) {
+ entry.catchLoc = locs[1];
+ }
+
+ if (2 in locs) {
+ entry.finallyLoc = locs[2];
+ entry.afterLoc = locs[3];
+ }
+
+ this.tryEntries.push(entry);
+ }
+
+ function resetTryEntry(entry) {
+ var record = entry.completion || {};
+ record.type = "normal";
+ delete record.arg;
+ entry.completion = record;
+ }
+
+ function Context(tryLocsList) {
+ // The root entry object (effectively a try statement without a catch
+ // or a finally block) gives us a place to store values thrown from
+ // locations where there is no enclosing try statement.
+ this.tryEntries = [{ tryLoc: "root" }];
+ tryLocsList.forEach(pushTryEntry, this);
+ this.reset(true);
+ }
+
+ exports.keys = function(object) {
+ var keys = [];
+ for (var key in object) {
+ keys.push(key);
+ }
+ keys.reverse();
+
+ // Rather than returning an object with a next method, we keep
+ // things simple and return the next function itself.
+ return function next() {
+ while (keys.length) {
+ var key = keys.pop();
+ if (key in object) {
+ next.value = key;
+ next.done = false;
+ return next;
+ }
+ }
+
+ // To avoid creating an additional object, we just hang the .value
+ // and .done properties off the next function object itself. This
+ // also ensures that the minifier will not anonymize the function.
+ next.done = true;
+ return next;
+ };
+ };
+
+ function values(iterable) {
+ if (iterable) {
+ var iteratorMethod = iterable[iteratorSymbol];
+ if (iteratorMethod) {
+ return iteratorMethod.call(iterable);
+ }
+
+ if (typeof iterable.next === "function") {
+ return iterable;
+ }
+
+ if (!isNaN(iterable.length)) {
+ var i = -1, next = function next() {
+ while (++i < iterable.length) {
+ if (hasOwn.call(iterable, i)) {
+ next.value = iterable[i];
+ next.done = false;
+ return next;
+ }
+ }
+
+ next.value = undefined;
+ next.done = true;
+
+ return next;
+ };
+
+ return next.next = next;
+ }
+ }
+
+ // Return an iterator with no values.
+ return { next: doneResult };
+ }
+ exports.values = values;
+
+ function doneResult() {
+ return { value: undefined, done: true };
+ }
+
+ Context.prototype = {
+ constructor: Context,
+
+ reset: function(skipTempReset) {
+ this.prev = 0;
+ this.next = 0;
+ // Resetting context._sent for legacy support of Babel's
+ // function.sent implementation.
+ this.sent = this._sent = undefined;
+ this.done = false;
+ this.delegate = null;
+
+ this.method = "next";
+ this.arg = undefined;
+
+ this.tryEntries.forEach(resetTryEntry);
+
+ if (!skipTempReset) {
+ for (var name in this) {
+ // Not sure about the optimal order of these conditions:
+ if (name.charAt(0) === "t" &&
+ hasOwn.call(this, name) &&
+ !isNaN(+name.slice(1))) {
+ this[name] = undefined;
+ }
+ }
+ }
+ },
+
+ stop: function() {
+ this.done = true;
+
+ var rootEntry = this.tryEntries[0];
+ var rootRecord = rootEntry.completion;
+ if (rootRecord.type === "throw") {
+ throw rootRecord.arg;
+ }
+
+ return this.rval;
+ },
+
+ dispatchException: function(exception) {
+ if (this.done) {
+ throw exception;
+ }
+
+ var context = this;
+ function handle(loc, caught) {
+ record.type = "throw";
+ record.arg = exception;
+ context.next = loc;
+
+ if (caught) {
+ // If the dispatched exception was caught by a catch block,
+ // then let that catch block handle the exception normally.
+ context.method = "next";
+ context.arg = undefined;
+ }
+
+ return !! caught;
+ }
+
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+ var record = entry.completion;
+
+ if (entry.tryLoc === "root") {
+ // Exception thrown outside of any try block that could handle
+ // it, so set the completion value of the entire function to
+ // throw the exception.
+ return handle("end");
+ }
+
+ if (entry.tryLoc <= this.prev) {
+ var hasCatch = hasOwn.call(entry, "catchLoc");
+ var hasFinally = hasOwn.call(entry, "finallyLoc");
+
+ if (hasCatch && hasFinally) {
+ if (this.prev < entry.catchLoc) {
+ return handle(entry.catchLoc, true);
+ } else if (this.prev < entry.finallyLoc) {
+ return handle(entry.finallyLoc);
+ }
+
+ } else if (hasCatch) {
+ if (this.prev < entry.catchLoc) {
+ return handle(entry.catchLoc, true);
+ }
+
+ } else if (hasFinally) {
+ if (this.prev < entry.finallyLoc) {
+ return handle(entry.finallyLoc);
+ }
+
+ } else {
+ throw new Error("try statement without catch or finally");
+ }
+ }
+ }
+ },
+
+ abrupt: function(type, arg) {
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+ if (entry.tryLoc <= this.prev &&
+ hasOwn.call(entry, "finallyLoc") &&
+ this.prev < entry.finallyLoc) {
+ var finallyEntry = entry;
+ break;
+ }
+ }
+
+ if (finallyEntry &&
+ (type === "break" ||
+ type === "continue") &&
+ finallyEntry.tryLoc <= arg &&
+ arg <= finallyEntry.finallyLoc) {
+ // Ignore the finally entry if control is not jumping to a
+ // location outside the try/catch block.
+ finallyEntry = null;
+ }
+
+ var record = finallyEntry ? finallyEntry.completion : {};
+ record.type = type;
+ record.arg = arg;
+
+ if (finallyEntry) {
+ this.method = "next";
+ this.next = finallyEntry.finallyLoc;
+ return ContinueSentinel;
+ }
+
+ return this.complete(record);
+ },
+
+ complete: function(record, afterLoc) {
+ if (record.type === "throw") {
+ throw record.arg;
+ }
+
+ if (record.type === "break" ||
+ record.type === "continue") {
+ this.next = record.arg;
+ } else if (record.type === "return") {
+ this.rval = this.arg = record.arg;
+ this.method = "return";
+ this.next = "end";
+ } else if (record.type === "normal" && afterLoc) {
+ this.next = afterLoc;
+ }
+
+ return ContinueSentinel;
+ },
+
+ finish: function(finallyLoc) {
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+ if (entry.finallyLoc === finallyLoc) {
+ this.complete(entry.completion, entry.afterLoc);
+ resetTryEntry(entry);
+ return ContinueSentinel;
+ }
+ }
+ },
+
+ "catch": function(tryLoc) {
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+ if (entry.tryLoc === tryLoc) {
+ var record = entry.completion;
+ if (record.type === "throw") {
+ var thrown = record.arg;
+ resetTryEntry(entry);
+ }
+ return thrown;
+ }
+ }
+
+ // The context.catch method must only be called with a location
+ // argument that corresponds to a known catch block.
+ throw new Error("illegal catch attempt");
+ },
+
+ delegateYield: function(iterable, resultName, nextLoc) {
+ this.delegate = {
+ iterator: values(iterable),
+ resultName: resultName,
+ nextLoc: nextLoc
+ };
+
+ if (this.method === "next") {
+ // Deliberately forget the last sent value so that we don't
+ // accidentally pass it on to the delegate.
+ this.arg = undefined;
+ }
+
+ return ContinueSentinel;
+ }
+ };
+
+ // Regardless of whether this script is executing as a CommonJS module
+ // or not, return the runtime object so that we can declare the variable
+ // regeneratorRuntime in the outer scope, which allows this module to be
+ // injected easily by `bin/regenerator --include-runtime script.js`.
+ return exports;
+
+}(
+ // If this script is executing as a CommonJS module, use module.exports
+ // as the regeneratorRuntime namespace. Otherwise create a new empty
+ // object. Either way, the resulting object will be used to initialize
+ // the regeneratorRuntime variable at the top of this file.
+ true ? module.exports : undefined
+));
+
+try {
+ regeneratorRuntime = runtime;
+} catch (accidentalStrictMode) {
+ // This module should not be running in strict mode, so the above
+ // assignment should always work unless something is misconfigured. Just
+ // in case runtime.js accidentally runs in strict mode, we can escape
+ // strict mode using a global Function call. This could conceivably fail
+ // if a Content Security Policy forbids using Function, but in that case
+ // the proper solution is to fix the accidental strict mode problem. If
+ // you've misconfigured your bundler to force strict mode and applied a
+ // CSP to forbid Function, and you're not willing to fix either of those
+ // problems, please detail your unique predicament in a GitHub issue.
+ Function("r", "regeneratorRuntime = r")(runtime);
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/@babel/runtime/regenerator/index.js":
+/*!**********************************************************!*\
+ !*** ./node_modules/@babel/runtime/regenerator/index.js ***!
+ \**********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(/*! regenerator-runtime */ "./node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js");
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
+/* globals __VUE_SSR_CONTEXT__ */
+
+// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
+// This module is a runtime utility for cleaner component module output and will
+// be included in the final webpack user bundle.
+
+function normalizeComponent (
+ scriptExports,
+ render,
+ staticRenderFns,
+ functionalTemplate,
+ injectStyles,
+ scopeId,
+ moduleIdentifier, /* server only */
+ shadowMode /* vue-cli only */
+) {
+ // Vue.extend constructor export interop
+ var options = typeof scriptExports === 'function'
+ ? scriptExports.options
+ : scriptExports
+
+ // render functions
+ if (render) {
+ options.render = render
+ options.staticRenderFns = staticRenderFns
+ options._compiled = true
+ }
+
+ // functional template
+ if (functionalTemplate) {
+ options.functional = true
+ }
+
+ // scopedId
+ if (scopeId) {
+ options._scopeId = 'data-v-' + scopeId
+ }
+
+ var hook
+ if (moduleIdentifier) { // server build
+ hook = function (context) {
+ // 2.3 injection
+ context =
+ context || // cached call
+ (this.$vnode && this.$vnode.ssrContext) || // stateful
+ (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
+ // 2.2 with runInNewContext: true
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
+ context = __VUE_SSR_CONTEXT__
+ }
+ // inject component styles
+ if (injectStyles) {
+ injectStyles.call(this, context)
+ }
+ // register component module identifier for async chunk inferrence
+ if (context && context._registeredComponents) {
+ context._registeredComponents.add(moduleIdentifier)
+ }
+ }
+ // used by ssr in case component is cached and beforeCreate
+ // never gets called
+ options._ssrRegister = hook
+ } else if (injectStyles) {
+ hook = shadowMode
+ ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
+ : injectStyles
+ }
+
+ if (hook) {
+ if (options.functional) {
+ // for template-only hot-reload because in that case the render fn doesn't
+ // go through the normalizer
+ options._injectStyles = hook
+ // register for functioal component in vue file
+ var originalRender = options.render
+ options.render = function renderWithStyleInjection (h, context) {
+ hook.call(context)
+ return originalRender(h, context)
+ }
+ } else {
+ // inject component registration as beforeCreate hook
+ var existing = options.beforeCreate
+ options.beforeCreate = existing
+ ? [].concat(existing, hook)
+ : [hook]
+ }
+ }
+
+ return {
+ exports: scriptExports,
+ options: options
+ }
+}
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/1.8f721a069933f04e92d7.js b/public/1.8f721a069933f04e92d7.js
new file mode 100644
index 00000000..c9640f05
--- /dev/null
+++ b/public/1.8f721a069933f04e92d7.js
@@ -0,0 +1,336 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[1],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/paginator.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/paginator.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'paginator',
+ props: {
+ meta: {
+ type: Object,
+ default: function _default() {
+ return {
+ total: 0,
+ per_page: 10,
+ from: 0,
+ to: 1,
+ last_page: 1,
+ current_page: 1
+ };
+ }
+ }
+ },
+ computed: {
+ centerStart: function centerStart() {
+ if (this.meta.last_page <= 10) {
+ return 1;
+ }
+
+ var count = this.meta.last_page - this.meta.current_page <= 4 ? 9 - (this.meta.last_page - this.meta.current_page) : 4;
+ return this.meta.current_page - count > 1 ? this.meta.current_page - count : 1;
+ },
+ centerEnd: function centerEnd() {
+ if (this.meta.last_page <= 10) {
+ return this.meta.last_page;
+ }
+
+ var count = this.meta.current_page <= 4 ? 9 - (this.meta.current_page - 1) : 4;
+ return this.meta.current_page + count < this.meta.last_page - 1 ? this.meta.current_page + count : this.meta.last_page;
+ }
+ },
+ methods: {
+ range: function range(start, end) {
+ return Array(end - start + 1).fill().map(function (_, idx) {
+ return start + idx;
+ });
+ },
+ change: function change(page) {
+ this.meta.current_page = page;
+ this.$emit('change', page);
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/paginator.vue?vue&type=style&index=0&id=5f72e89e&scoped=true&lang=scss&":
+/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/paginator.vue?vue&type=style&index=0&id=5f72e89e&scoped=true&lang=scss& ***!
+ \************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, ".paginator[data-v-5f72e89e] {\n list-style: none;\n padding: 1em 0;\n}\n.paginator .paginator-item a[data-v-5f72e89e] {\n display: inline-block;\n height: 32px;\n width: 32px;\n text-align: center;\n border-radius: 100%;\n line-height: 32px;\n font-size: 14px;\n margin: 0 0.2em;\n}\n.paginator .paginator-item.active a[data-v-5f72e89e] {\n color: #fff;\n background: rgba(0, 0, 0, 0.5);\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/paginator.vue?vue&type=style&index=0&id=5f72e89e&scoped=true&lang=scss&":
+/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/paginator.vue?vue&type=style&index=0&id=5f72e89e&scoped=true&lang=scss& ***!
+ \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./paginator.vue?vue&type=style&index=0&id=5f72e89e&scoped=true&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/paginator.vue?vue&type=style&index=0&id=5f72e89e&scoped=true&lang=scss&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/paginator.vue?vue&type=template&id=5f72e89e&scoped=true&":
+/*!***************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/paginator.vue?vue&type=template&id=5f72e89e&scoped=true& ***!
+ \***************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _vm.meta.last_page > 1
+ ? _c(
+ "ul",
+ {
+ staticClass:
+ "paginator d-flex justify-content-center align-items-center"
+ },
+ [
+ _vm.centerStart != 1
+ ? [
+ _c(
+ "li",
+ {
+ staticClass: "paginator-item",
+ class: { active: 1 == _vm.meta.current_page }
+ },
+ [
+ _c(
+ "a",
+ {
+ attrs: { href: "javascript:;" },
+ on: {
+ click: function($event) {
+ return _vm.change(1)
+ }
+ }
+ },
+ [_vm._v("1")]
+ )
+ ]
+ ),
+ _vm._v(" "),
+ _c("li", { staticClass: "paginator-item" }, [
+ _c("a", {
+ staticClass: "text-muted",
+ attrs: { disabled: "" },
+ domProps: { innerHTML: _vm._s("⋯") }
+ })
+ ])
+ ]
+ : _vm._e(),
+ _vm._v(" "),
+ _vm._l(_vm.range(_vm.centerStart, _vm.centerEnd), function(i) {
+ return _c(
+ "li",
+ {
+ key: i,
+ staticClass: "paginator-item",
+ class: { active: i == _vm.meta.current_page }
+ },
+ [
+ _c(
+ "a",
+ {
+ attrs: { href: "javascript:;" },
+ on: {
+ click: function($event) {
+ return _vm.change(i)
+ }
+ }
+ },
+ [_vm._v(_vm._s(i))]
+ )
+ ]
+ )
+ }),
+ _vm._v(" "),
+ _vm.centerEnd != _vm.meta.last_page
+ ? [
+ _c("li", { staticClass: "paginator-item" }, [
+ _c("a", {
+ staticClass: "text-muted",
+ attrs: { disabled: "" },
+ domProps: { innerHTML: _vm._s("⋯") }
+ })
+ ]),
+ _vm._v(" "),
+ _c(
+ "li",
+ {
+ staticClass: "paginator-item",
+ class: {
+ active: _vm.meta.last_page == _vm.meta.current_page
+ }
+ },
+ [
+ _c(
+ "a",
+ {
+ attrs: { href: "javascript:;" },
+ on: {
+ click: function($event) {
+ return _vm.change(_vm.meta.last_page)
+ }
+ }
+ },
+ [_vm._v(_vm._s(_vm.meta.last_page))]
+ )
+ ]
+ )
+ ]
+ : _vm._e()
+ ],
+ 2
+ )
+ : _vm._e()
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./src/components/paginator.vue":
+/*!**************************************!*\
+ !*** ./src/components/paginator.vue ***!
+ \**************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _paginator_vue_vue_type_template_id_5f72e89e_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./paginator.vue?vue&type=template&id=5f72e89e&scoped=true& */ "./src/components/paginator.vue?vue&type=template&id=5f72e89e&scoped=true&");
+/* harmony import */ var _paginator_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./paginator.vue?vue&type=script&lang=js& */ "./src/components/paginator.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _paginator_vue_vue_type_style_index_0_id_5f72e89e_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./paginator.vue?vue&type=style&index=0&id=5f72e89e&scoped=true&lang=scss& */ "./src/components/paginator.vue?vue&type=style&index=0&id=5f72e89e&scoped=true&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _paginator_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _paginator_vue_vue_type_template_id_5f72e89e_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _paginator_vue_vue_type_template_id_5f72e89e_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ "5f72e89e",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/paginator.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/paginator.vue?vue&type=script&lang=js&":
+/*!***************************************************************!*\
+ !*** ./src/components/paginator.vue?vue&type=script&lang=js& ***!
+ \***************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paginator_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./paginator.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/paginator.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paginator_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/paginator.vue?vue&type=style&index=0&id=5f72e89e&scoped=true&lang=scss&":
+/*!************************************************************************************************!*\
+ !*** ./src/components/paginator.vue?vue&type=style&index=0&id=5f72e89e&scoped=true&lang=scss& ***!
+ \************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_paginator_vue_vue_type_style_index_0_id_5f72e89e_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../node_modules/style-loader!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./paginator.vue?vue&type=style&index=0&id=5f72e89e&scoped=true&lang=scss& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/paginator.vue?vue&type=style&index=0&id=5f72e89e&scoped=true&lang=scss&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_paginator_vue_vue_type_style_index_0_id_5f72e89e_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_paginator_vue_vue_type_style_index_0_id_5f72e89e_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_paginator_vue_vue_type_style_index_0_id_5f72e89e_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_paginator_vue_vue_type_style_index_0_id_5f72e89e_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_paginator_vue_vue_type_style_index_0_id_5f72e89e_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/components/paginator.vue?vue&type=template&id=5f72e89e&scoped=true&":
+/*!*********************************************************************************!*\
+ !*** ./src/components/paginator.vue?vue&type=template&id=5f72e89e&scoped=true& ***!
+ \*********************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paginator_vue_vue_type_template_id_5f72e89e_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./paginator.vue?vue&type=template&id=5f72e89e&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/paginator.vue?vue&type=template&id=5f72e89e&scoped=true&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paginator_vue_vue_type_template_id_5f72e89e_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paginator_vue_vue_type_template_id_5f72e89e_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/10.1163691f38c6de464081.js b/public/10.1163691f38c6de464081.js
new file mode 100644
index 00000000..6c49f14c
--- /dev/null
+++ b/public/10.1163691f38c6de464081.js
@@ -0,0 +1,932 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[10],{
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "CheckIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Check icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Close.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Close.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "CloseIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Close icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Email.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Email.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "EmailIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Email icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js&":
+/*!************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "PlusIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Plus icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "TooltipOutlineIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Tooltip Outline icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon check-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d: "M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Close.vue?vue&type=template&id=3cc2737c&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Close.vue?vue&type=template&id=3cc2737c& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon close-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Email.vue?vue&type=template&id=503121c0&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Email.vue?vue&type=template&id=503121c0& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon email-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M20,8L12,13L4,8V6L12,11L20,6M20,4H4C2.89,4 2,4.89 2,6V18C2,19.1 2.9,20 4,20H20C21.1,20 22,19.1 22,18V6C22,4.89 21.1,4 20,4Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6&":
+/*!**********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6& ***!
+ \**********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon plus-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ { attrs: { d: "M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z" } },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&":
+/*!********************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a& ***!
+ \********************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon tooltip-outline-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M4,2H20C21.1,2 22,2.9 22,4V16C22,17.1 21.1,18 20,18H16L12,22L8,18H4C2.9,18 2,17.1 2,16V4C2,2.9 2.9,2 4,2M4,4V16H8.83L12,19.17L15.17,16H20V4H4Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Check.vue":
+/*!**********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Check.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Check.vue?vue&type=template&id=7146728c& */ "./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&");
+/* harmony import */ var _Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Check.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Check.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Check.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Check.vue?vue&type=template&id=7146728c& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Close.vue":
+/*!**********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Close.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Close_vue_vue_type_template_id_3cc2737c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Close.vue?vue&type=template&id=3cc2737c& */ "./node_modules/vue-material-design-icons/Close.vue?vue&type=template&id=3cc2737c&");
+/* harmony import */ var _Close_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Close.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Close.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Close_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Close_vue_vue_type_template_id_3cc2737c___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Close_vue_vue_type_template_id_3cc2737c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Close.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Close.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Close.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Close_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Close.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Close.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Close_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Close.vue?vue&type=template&id=3cc2737c&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Close.vue?vue&type=template&id=3cc2737c& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Close_vue_vue_type_template_id_3cc2737c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Close.vue?vue&type=template&id=3cc2737c& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Close.vue?vue&type=template&id=3cc2737c&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Close_vue_vue_type_template_id_3cc2737c___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Close_vue_vue_type_template_id_3cc2737c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Email.vue":
+/*!**********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Email.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Email_vue_vue_type_template_id_503121c0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Email.vue?vue&type=template&id=503121c0& */ "./node_modules/vue-material-design-icons/Email.vue?vue&type=template&id=503121c0&");
+/* harmony import */ var _Email_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Email.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Email.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Email_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Email_vue_vue_type_template_id_503121c0___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Email_vue_vue_type_template_id_503121c0___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Email.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Email.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Email.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Email_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Email.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Email.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Email_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Email.vue?vue&type=template&id=503121c0&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Email.vue?vue&type=template&id=503121c0& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Email_vue_vue_type_template_id_503121c0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Email.vue?vue&type=template&id=503121c0& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Email.vue?vue&type=template&id=503121c0&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Email_vue_vue_type_template_id_503121c0___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Email_vue_vue_type_template_id_503121c0___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Plus.vue":
+/*!*********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Plus.vue ***!
+ \*********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Plus.vue?vue&type=template&id=18bbb6c6& */ "./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6&");
+/* harmony import */ var _Plus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Plus.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Plus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Plus.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Plus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Plus.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Plus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6&":
+/*!****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6& ***!
+ \****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Plus.vue?vue&type=template&id=18bbb6c6& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue":
+/*!*******************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue ***!
+ \*******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TooltipOutline.vue?vue&type=template&id=fff4072a& */ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&");
+/* harmony import */ var _TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TooltipOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/TooltipOutline.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./TooltipOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&":
+/*!**************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a& ***!
+ \**************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./TooltipOutline.vue?vue&type=template&id=fff4072a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/11.80e35f84831e7eccba12.js b/public/11.80e35f84831e7eccba12.js
new file mode 100644
index 00000000..5331289a
--- /dev/null
+++ b/public/11.80e35f84831e7eccba12.js
@@ -0,0 +1,814 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[11],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/follow-btn.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/follow-btn.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _relation_btn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./relation-btn */ "./src/components/buttons/relation-btn.vue");
+/* harmony import */ var $icons_Plus__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/Plus */ "./node_modules/vue-material-design-icons/Plus.vue");
+/* harmony import */ var $icons_Check__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/Check */ "./node_modules/vue-material-design-icons/Check.vue");
+/* harmony import */ var $icons_Close__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $icons/Close */ "./node_modules/vue-material-design-icons/Close.vue");
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'follow-btn',
+ components: {
+ RelationBtn: _relation_btn__WEBPACK_IMPORTED_MODULE_0__["default"],
+ PlusIcon: $icons_Plus__WEBPACK_IMPORTED_MODULE_1__["default"],
+ CheckIcon: $icons_Check__WEBPACK_IMPORTED_MODULE_2__["default"],
+ CloseIcon: $icons_Close__WEBPACK_IMPORTED_MODULE_3__["default"]
+ },
+ props: {
+ item: {
+ type: Object,
+ required: true
+ },
+ simple: {
+ type: Boolean,
+ default: false
+ }
+ },
+ data: function data() {
+ return {
+ hovering: false
+ };
+ },
+ computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_4__["mapGetters"])(['currentUser']))
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/relation-btn.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/relation-btn.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+/* harmony default export */ __webpack_exports__["default"] = ({
+ props: {
+ relation: {
+ type: String,
+ required: true
+ },
+ action: {
+ type: String,
+ required: true
+ },
+ item: {
+ type: Object,
+ required: true,
+ default: function _default() {
+ return {};
+ }
+ }
+ },
+ data: function data() {
+ return {
+ types: {
+ thread: 'App\\Thread',
+ user: "App\\User",
+ node: 'App\\Node'
+ },
+ actions: {
+ like: 'has_liked',
+ follow: 'has_followed',
+ subscribe: 'has_subscribed'
+ }
+ };
+ },
+ methods: {
+ toggle: function toggle() {
+ var _this = this;
+
+ // let action = !this.item[this.actions[this.action]] ? this.action : `${this.action}`
+ this.$http.post("relations/".concat(this.action), {
+ followable_type: this.types[this.relation],
+ followable_id: this.item.id
+ }).then(function () {
+ _this.item[_this.actions[_this.action]] = !_this.item[_this.actions[_this.action]];
+
+ _this.$emit('after-toggle', _this.item[_this.actions[_this.action]]);
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/empty-state.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/empty-state.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $icons_TooltipOutline__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $icons/TooltipOutline */ "./node_modules/vue-material-design-icons/TooltipOutline.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'empty-state',
+ components: {
+ EmptyIcon: $icons_TooltipOutline__WEBPACK_IMPORTED_MODULE_0__["default"]
+ },
+ props: {
+ title: {
+ type: String,
+ default: null
+ },
+ message: {
+ type: String,
+ default: '空空如也~~~'
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-list-item.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-list-item.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $components_buttons_follow_btn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $components/buttons/follow-btn */ "./src/components/buttons/follow-btn.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'user-list-item',
+ components: {
+ FollowBtn: $components_buttons_follow_btn__WEBPACK_IMPORTED_MODULE_0__["default"]
+ },
+ props: {
+ user: {
+ type: Object
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/follow-btn.vue?vue&type=template&id=4bfe56c4&":
+/*!************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/follow-btn.vue?vue&type=template&id=4bfe56c4& ***!
+ \************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _vm.currentUser.id && _vm.item.id != _vm.currentUser.id
+ ? _c(
+ "relation-btn",
+ { attrs: { relation: "user", action: "follow", item: _vm.item } },
+ [
+ _c("template", { slot: "on" }, [
+ _vm.simple
+ ? _c(
+ "button",
+ {
+ staticClass: "btn btn-rounded btn-ghost btn-icon ml-auto",
+ attrs: { title: "关注 TA" }
+ },
+ [_c("plus-icon")],
+ 1
+ )
+ : _c(
+ "button",
+ {
+ staticClass: "btn btn-rounded btn-outline-teal-blue mx-1",
+ attrs: { title: "关注 TA" }
+ },
+ [_c("plus-icon"), _vm._v("关注 TA\n ")],
+ 1
+ )
+ ]),
+ _vm._v(" "),
+ _c("template", { slot: "off" }, [
+ _vm.simple
+ ? _c(
+ "button",
+ {
+ staticClass: "btn btn-icon ml-auto",
+ class: {
+ "btn-ghost": !_vm.hovering,
+ "btn-danger": _vm.hovering
+ },
+ attrs: { title: "取消关注 TA" },
+ on: {
+ mouseenter: function($event) {
+ _vm.hovering = true
+ },
+ mouseleave: function($event) {
+ _vm.hovering = false
+ }
+ }
+ },
+ [!_vm.hovering ? _c("check-icon") : _c("close-icon")],
+ 1
+ )
+ : _c(
+ "button",
+ {
+ staticClass: "btn mx-1",
+ class: {
+ "btn-teal-blue": !_vm.hovering,
+ "btn-danger": _vm.hovering
+ },
+ attrs: { title: "取消关注 TA" },
+ on: {
+ mouseenter: function($event) {
+ _vm.hovering = true
+ },
+ mouseleave: function($event) {
+ _vm.hovering = false
+ }
+ }
+ },
+ [
+ !_vm.hovering ? _c("check-icon") : _c("close-icon"),
+ _vm._v(
+ "\n " +
+ _vm._s(_vm.hovering ? "取消关注" : "正在关注") +
+ "\n "
+ )
+ ],
+ 1
+ )
+ ])
+ ],
+ 2
+ )
+ : _vm._e()
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69&":
+/*!**************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69& ***!
+ \**************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ { on: { click: _vm.toggle } },
+ [!_vm.item[_vm.actions[_vm.action]] ? [_vm._t("on")] : [_vm._t("off")]],
+ 2
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/empty-state.vue?vue&type=template&id=772b85b1&":
+/*!*****************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/empty-state.vue?vue&type=template&id=772b85b1& ***!
+ \*****************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "text-center p-5 text-gray-50" }, [
+ _c("div", { staticClass: "container" }, [
+ _c(
+ "h1",
+ { staticClass: "display-4" },
+ [_vm._t("icon", [_c("empty-icon")])],
+ 2
+ ),
+ _vm._v(" "),
+ _c("h2", [_vm._t("title", [_vm._v(_vm._s(_vm.title))])], 2),
+ _vm._v(" "),
+ _c(
+ "p",
+ { staticClass: "lead" },
+ [_vm._t("message", [_vm._v(_vm._s(_vm.message))])],
+ 2
+ )
+ ])
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-list-item.vue?vue&type=template&id=77d18d70&":
+/*!********************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-list-item.vue?vue&type=template&id=77d18d70& ***!
+ \********************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ { staticClass: "user-media d-flex align-items-center" },
+ [
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: { name: "users.show", params: { id: _vm.user.username } }
+ }
+ },
+ [
+ _c("img", {
+ staticClass: "avatar-40",
+ attrs: { src: _vm.user.avatar, alt: _vm.user.name }
+ })
+ ]
+ ),
+ _vm._v(" "),
+ _c("div", { staticClass: "ml-2" }, [
+ _c(
+ "div",
+ [
+ _c(
+ "router-link",
+ {
+ attrs: {
+ tag: "a",
+ to: { name: "users.show", params: { id: _vm.user.username } }
+ }
+ },
+ [
+ _c("h5", { staticClass: "mb-0 text-gray-50 d-inline" }, [
+ _vm._v(_vm._s(_vm.user.name))
+ ])
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "router-link",
+ {
+ staticClass: "ml-1 text-muted text-12",
+ attrs: {
+ tag: "a",
+ to: { name: "users.show", params: { id: _vm.user.username } }
+ }
+ },
+ [_vm._v("@" + _vm._s(_vm.user.username))]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("div", { staticClass: "text-12 text-gray-70" }, [
+ _vm._v(_vm._s(_vm.user.bio))
+ ])
+ ]),
+ _vm._v(" "),
+ _vm._t(
+ "appends",
+ [
+ _c("follow-btn", {
+ staticClass: "ml-auto",
+ attrs: { item: _vm.user, simple: "" }
+ })
+ ],
+ { data: _vm.user }
+ )
+ ],
+ 2
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./src/components/buttons/follow-btn.vue":
+/*!***********************************************!*\
+ !*** ./src/components/buttons/follow-btn.vue ***!
+ \***********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _follow_btn_vue_vue_type_template_id_4bfe56c4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./follow-btn.vue?vue&type=template&id=4bfe56c4& */ "./src/components/buttons/follow-btn.vue?vue&type=template&id=4bfe56c4&");
+/* harmony import */ var _follow_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./follow-btn.vue?vue&type=script&lang=js& */ "./src/components/buttons/follow-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _follow_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _follow_btn_vue_vue_type_template_id_4bfe56c4___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _follow_btn_vue_vue_type_template_id_4bfe56c4___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/buttons/follow-btn.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/buttons/follow-btn.vue?vue&type=script&lang=js&":
+/*!************************************************************************!*\
+ !*** ./src/components/buttons/follow-btn.vue?vue&type=script&lang=js& ***!
+ \************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_follow_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./follow-btn.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/follow-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_follow_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/buttons/follow-btn.vue?vue&type=template&id=4bfe56c4&":
+/*!******************************************************************************!*\
+ !*** ./src/components/buttons/follow-btn.vue?vue&type=template&id=4bfe56c4& ***!
+ \******************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_follow_btn_vue_vue_type_template_id_4bfe56c4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./follow-btn.vue?vue&type=template&id=4bfe56c4& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/follow-btn.vue?vue&type=template&id=4bfe56c4&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_follow_btn_vue_vue_type_template_id_4bfe56c4___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_follow_btn_vue_vue_type_template_id_4bfe56c4___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/buttons/relation-btn.vue":
+/*!*************************************************!*\
+ !*** ./src/components/buttons/relation-btn.vue ***!
+ \*************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./relation-btn.vue?vue&type=template&id=4a803e69& */ "./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69&");
+/* harmony import */ var _relation_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./relation-btn.vue?vue&type=script&lang=js& */ "./src/components/buttons/relation-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _relation_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/buttons/relation-btn.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/buttons/relation-btn.vue?vue&type=script&lang=js&":
+/*!**************************************************************************!*\
+ !*** ./src/components/buttons/relation-btn.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_relation_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./relation-btn.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/relation-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_relation_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69&":
+/*!********************************************************************************!*\
+ !*** ./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69& ***!
+ \********************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./relation-btn.vue?vue&type=template&id=4a803e69& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/empty-state.vue":
+/*!****************************************!*\
+ !*** ./src/components/empty-state.vue ***!
+ \****************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./empty-state.vue?vue&type=template&id=772b85b1& */ "./src/components/empty-state.vue?vue&type=template&id=772b85b1&");
+/* harmony import */ var _empty_state_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./empty-state.vue?vue&type=script&lang=js& */ "./src/components/empty-state.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _empty_state_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/empty-state.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/empty-state.vue?vue&type=script&lang=js&":
+/*!*****************************************************************!*\
+ !*** ./src/components/empty-state.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_state_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./empty-state.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/empty-state.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_state_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/empty-state.vue?vue&type=template&id=772b85b1&":
+/*!***********************************************************************!*\
+ !*** ./src/components/empty-state.vue?vue&type=template&id=772b85b1& ***!
+ \***********************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./empty-state.vue?vue&type=template&id=772b85b1& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/empty-state.vue?vue&type=template&id=772b85b1&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/user-list-item.vue":
+/*!*******************************************!*\
+ !*** ./src/components/user-list-item.vue ***!
+ \*******************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _user_list_item_vue_vue_type_template_id_77d18d70___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./user-list-item.vue?vue&type=template&id=77d18d70& */ "./src/components/user-list-item.vue?vue&type=template&id=77d18d70&");
+/* harmony import */ var _user_list_item_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./user-list-item.vue?vue&type=script&lang=js& */ "./src/components/user-list-item.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _user_list_item_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _user_list_item_vue_vue_type_template_id_77d18d70___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _user_list_item_vue_vue_type_template_id_77d18d70___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/user-list-item.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/user-list-item.vue?vue&type=script&lang=js&":
+/*!********************************************************************!*\
+ !*** ./src/components/user-list-item.vue?vue&type=script&lang=js& ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_list_item_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./user-list-item.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-list-item.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_list_item_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/user-list-item.vue?vue&type=template&id=77d18d70&":
+/*!**************************************************************************!*\
+ !*** ./src/components/user-list-item.vue?vue&type=template&id=77d18d70& ***!
+ \**************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_list_item_vue_vue_type_template_id_77d18d70___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./user-list-item.vue?vue&type=template&id=77d18d70& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-list-item.vue?vue&type=template&id=77d18d70&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_list_item_vue_vue_type_template_id_77d18d70___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_list_item_vue_vue_type_template_id_77d18d70___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/12.ffa155942fd31d411257.js b/public/12.ffa155942fd31d411257.js
new file mode 100644
index 00000000..bdc6ab00
--- /dev/null
+++ b/public/12.ffa155942fd31d411257.js
@@ -0,0 +1,751 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[12],{
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Facebook.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Facebook.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "FacebookIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Facebook icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/GithubCircle.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/GithubCircle.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "GithubCircleIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Github Circle icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/GooglePlus.vue?vue&type=script&lang=js&":
+/*!******************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/GooglePlus.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "GooglePlusIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Google Plus icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Qqchat.vue?vue&type=script&lang=js&":
+/*!**************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Qqchat.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "QqchatIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Qqchat icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Facebook.vue?vue&type=template&id=166b381c&":
+/*!**************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Facebook.vue?vue&type=template&id=166b381c& ***!
+ \**************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon facebook-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M17,2V2H17V6H15C14.31,6 14,6.81 14,7.5V10H14L17,10V14H14V22H10V14H7V10H10V6C10,3.79 11.79,2 14,2H17Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/GithubCircle.vue?vue&type=template&id=167b8182&":
+/*!******************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/GithubCircle.vue?vue&type=template&id=167b8182& ***!
+ \******************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon github-circle-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M12,2C6.48,2 2,6.48 2,12C2,16.42 4.87,20.17 8.84,21.5C9.34,21.58 9.5,21.27 9.5,21C9.5,20.77 9.5,20.14 9.5,19.31C6.73,19.91 6.14,17.97 6.14,17.97C5.68,16.81 5.03,16.5 5.03,16.5C4.12,15.88 5.1,15.9 5.1,15.9C6.1,15.97 6.63,16.93 6.63,16.93C7.5,18.45 8.97,18 9.54,17.76C9.63,17.11 9.89,16.67 10.17,16.42C7.95,16.17 5.62,15.31 5.62,11.5C5.62,10.39 6,9.5 6.65,8.79C6.55,8.54 6.2,7.5 6.75,6.15C6.75,6.15 7.59,5.88 9.5,7.17C10.29,6.95 11.15,6.84 12,6.84C12.85,6.84 13.71,6.95 14.5,7.17C16.41,5.88 17.25,6.15 17.25,6.15C17.8,7.5 17.45,8.54 17.35,8.79C18,9.5 18.38,10.39 18.38,11.5C18.38,15.32 16.04,16.16 13.81,16.41C14.17,16.72 14.5,17.33 14.5,18.26C14.5,19.6 14.5,20.68 14.5,21C14.5,21.27 14.66,21.59 15.17,21.5C19.14,20.16 22,16.42 22,12C22,6.48 17.52,2 12,2Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/GooglePlus.vue?vue&type=template&id=3898311f&":
+/*!****************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/GooglePlus.vue?vue&type=template&id=3898311f& ***!
+ \****************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon google-plus-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M23,11H21V9H19V11H17V13H19V15H21V13H23M8,11V13.4H12C11.8,14.4 10.8,16.4 8,16.4C5.6,16.4 3.7,14.4 3.7,12C3.7,9.6 5.6,7.6 8,7.6C9.4,7.6 10.3,8.2 10.8,8.7L12.7,6.9C11.5,5.7 9.9,5 8,5C4.1,5 1,8.1 1,12C1,15.9 4.1,19 8,19C12,19 14.7,16.2 14.7,12.2C14.7,11.7 14.7,11.4 14.6,11H8Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Qqchat.vue?vue&type=template&id=755a06a4&":
+/*!************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Qqchat.vue?vue&type=template&id=755a06a4& ***!
+ \************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon qqchat-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M3.18,13.54C3.76,12.16 4.57,11.14 5.17,10.92C5.16,10.12 5.31,9.62 5.56,9.22C5.56,9.19 5.5,8.86 5.72,8.45C5.87,4.85 8.21,2 12,2C15.79,2 18.13,4.85 18.28,8.45C18.5,8.86 18.44,9.19 18.44,9.22C18.69,9.62 18.84,10.12 18.83,10.92C19.43,11.14 20.24,12.16 20.82,13.55C21.57,15.31 21.69,17 21.09,17.3C20.68,17.5 20.03,17 19.42,16.12C19.18,17.1 18.58,18 17.73,18.71C18.63,19.04 19.21,19.58 19.21,20.19C19.21,21.19 17.63,22 15.69,22C13.93,22 12.5,21.34 12.21,20.5H11.79C11.5,21.34 10.07,22 8.31,22C6.37,22 4.79,21.19 4.79,20.19C4.79,19.58 5.37,19.04 6.27,18.71C5.42,18 4.82,17.1 4.58,16.12C3.97,17 3.32,17.5 2.91,17.3C2.31,17 2.43,15.31 3.18,13.54Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Facebook.vue":
+/*!*************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Facebook.vue ***!
+ \*************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Facebook_vue_vue_type_template_id_166b381c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Facebook.vue?vue&type=template&id=166b381c& */ "./node_modules/vue-material-design-icons/Facebook.vue?vue&type=template&id=166b381c&");
+/* harmony import */ var _Facebook_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Facebook.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Facebook.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Facebook_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Facebook_vue_vue_type_template_id_166b381c___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Facebook_vue_vue_type_template_id_166b381c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Facebook.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Facebook.vue?vue&type=script&lang=js&":
+/*!**************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Facebook.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Facebook_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Facebook.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Facebook.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Facebook_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Facebook.vue?vue&type=template&id=166b381c&":
+/*!********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Facebook.vue?vue&type=template&id=166b381c& ***!
+ \********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Facebook_vue_vue_type_template_id_166b381c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Facebook.vue?vue&type=template&id=166b381c& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Facebook.vue?vue&type=template&id=166b381c&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Facebook_vue_vue_type_template_id_166b381c___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Facebook_vue_vue_type_template_id_166b381c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/GithubCircle.vue":
+/*!*****************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/GithubCircle.vue ***!
+ \*****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _GithubCircle_vue_vue_type_template_id_167b8182___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GithubCircle.vue?vue&type=template&id=167b8182& */ "./node_modules/vue-material-design-icons/GithubCircle.vue?vue&type=template&id=167b8182&");
+/* harmony import */ var _GithubCircle_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./GithubCircle.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/GithubCircle.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _GithubCircle_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _GithubCircle_vue_vue_type_template_id_167b8182___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _GithubCircle_vue_vue_type_template_id_167b8182___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/GithubCircle.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/GithubCircle.vue?vue&type=script&lang=js&":
+/*!******************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/GithubCircle.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_GithubCircle_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./GithubCircle.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/GithubCircle.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_GithubCircle_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/GithubCircle.vue?vue&type=template&id=167b8182&":
+/*!************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/GithubCircle.vue?vue&type=template&id=167b8182& ***!
+ \************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_GithubCircle_vue_vue_type_template_id_167b8182___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./GithubCircle.vue?vue&type=template&id=167b8182& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/GithubCircle.vue?vue&type=template&id=167b8182&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_GithubCircle_vue_vue_type_template_id_167b8182___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_GithubCircle_vue_vue_type_template_id_167b8182___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/GooglePlus.vue":
+/*!***************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/GooglePlus.vue ***!
+ \***************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _GooglePlus_vue_vue_type_template_id_3898311f___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GooglePlus.vue?vue&type=template&id=3898311f& */ "./node_modules/vue-material-design-icons/GooglePlus.vue?vue&type=template&id=3898311f&");
+/* harmony import */ var _GooglePlus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./GooglePlus.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/GooglePlus.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _GooglePlus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _GooglePlus_vue_vue_type_template_id_3898311f___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _GooglePlus_vue_vue_type_template_id_3898311f___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/GooglePlus.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/GooglePlus.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/GooglePlus.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_GooglePlus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./GooglePlus.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/GooglePlus.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_GooglePlus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/GooglePlus.vue?vue&type=template&id=3898311f&":
+/*!**********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/GooglePlus.vue?vue&type=template&id=3898311f& ***!
+ \**********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_GooglePlus_vue_vue_type_template_id_3898311f___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./GooglePlus.vue?vue&type=template&id=3898311f& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/GooglePlus.vue?vue&type=template&id=3898311f&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_GooglePlus_vue_vue_type_template_id_3898311f___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_GooglePlus_vue_vue_type_template_id_3898311f___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Qqchat.vue":
+/*!***********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Qqchat.vue ***!
+ \***********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Qqchat_vue_vue_type_template_id_755a06a4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Qqchat.vue?vue&type=template&id=755a06a4& */ "./node_modules/vue-material-design-icons/Qqchat.vue?vue&type=template&id=755a06a4&");
+/* harmony import */ var _Qqchat_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Qqchat.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Qqchat.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Qqchat_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Qqchat_vue_vue_type_template_id_755a06a4___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Qqchat_vue_vue_type_template_id_755a06a4___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Qqchat.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Qqchat.vue?vue&type=script&lang=js&":
+/*!************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Qqchat.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Qqchat_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Qqchat.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Qqchat.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Qqchat_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Qqchat.vue?vue&type=template&id=755a06a4&":
+/*!******************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Qqchat.vue?vue&type=template&id=755a06a4& ***!
+ \******************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Qqchat_vue_vue_type_template_id_755a06a4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Qqchat.vue?vue&type=template&id=755a06a4& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Qqchat.vue?vue&type=template&id=755a06a4&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Qqchat_vue_vue_type_template_id_755a06a4___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Qqchat_vue_vue_type_template_id_755a06a4___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/13.c7f122518fa549773d41.js b/public/13.c7f122518fa549773d41.js
new file mode 100644
index 00000000..f8154c8d
--- /dev/null
+++ b/public/13.c7f122518fa549773d41.js
@@ -0,0 +1,551 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[13],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/hot-tags.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/hot-tags.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'HotTags',
+ data: function data() {
+ return {
+ nodes: []
+ };
+ },
+ methods: {
+ loadNodes: function loadNodes() {
+ var _this = this;
+
+ this.$http.get('nodes?hot=5&per_page=5').then(function (nodes) {
+ return _this.nodes = nodes.data;
+ });
+ }
+ },
+ created: function created() {
+ this.loadNodes();
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-social-btns.vue?vue&type=script&lang=js&":
+/*!******************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-social-btns.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $icons_Twitter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $icons/Twitter */ "./node_modules/vue-material-design-icons/Twitter.vue");
+/* harmony import */ var $icons_GithubCircle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/GithubCircle */ "./node_modules/vue-material-design-icons/GithubCircle.vue");
+/* harmony import */ var $icons_Facebook__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/Facebook */ "./node_modules/vue-material-design-icons/Facebook.vue");
+/* harmony import */ var $icons_Instagram__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $icons/Instagram */ "./node_modules/vue-material-design-icons/Instagram.vue");
+/* harmony import */ var $icons_Telegram__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! $icons/Telegram */ "./node_modules/vue-material-design-icons/Telegram.vue");
+/* harmony import */ var $icons_Steam__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! $icons/Steam */ "./node_modules/vue-material-design-icons/Steam.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'user-social-btns',
+ props: {
+ user: {
+ type: Object,
+ required: true
+ },
+ size: {
+ type: Number,
+ default: 16
+ },
+ spacing: {
+ type: Number,
+ default: 8
+ }
+ },
+ computed: {
+ btnClass: function btnClass() {
+ return "text-".concat(this.size, " spacing-").concat(this.spacing);
+ }
+ },
+ components: {
+ TwitterIcon: $icons_Twitter__WEBPACK_IMPORTED_MODULE_0__["default"],
+ GithubIcon: $icons_GithubCircle__WEBPACK_IMPORTED_MODULE_1__["default"],
+ FacebookIcon: $icons_Facebook__WEBPACK_IMPORTED_MODULE_2__["default"],
+ InstagramIcon: $icons_Instagram__WEBPACK_IMPORTED_MODULE_3__["default"],
+ TelegramIcon: $icons_Telegram__WEBPACK_IMPORTED_MODULE_4__["default"],
+ SteamIcon: $icons_Steam__WEBPACK_IMPORTED_MODULE_5__["default"]
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-social-btns.vue?vue&type=style&index=0&id=1e242af6&scoped=true&lang=scss&":
+/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-social-btns.vue?vue&type=style&index=0&id=1e242af6&scoped=true&lang=scss& ***!
+ \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, "", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-social-btns.vue?vue&type=style&index=0&id=1e242af6&scoped=true&lang=scss&":
+/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-social-btns.vue?vue&type=style&index=0&id=1e242af6&scoped=true&lang=scss& ***!
+ \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./user-social-btns.vue?vue&type=style&index=0&id=1e242af6&scoped=true&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-social-btns.vue?vue&type=style&index=0&id=1e242af6&scoped=true&lang=scss&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/hot-tags.vue?vue&type=template&id=622cc129&":
+/*!**************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/hot-tags.vue?vue&type=template&id=622cc129& ***!
+ \**************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box text-gray-50" }, [
+ _vm._m(0),
+ _vm._v(" "),
+ _c(
+ "ul",
+ { staticClass: "plan-list text-13" },
+ [
+ _vm._l(_vm.nodes, function(node) {
+ return [
+ _c(
+ "router-link",
+ {
+ key: node.id,
+ staticClass: "py-1 cursor-pointer",
+ attrs: {
+ tag: "li",
+ to: { name: "nodes.node", params: { id: node.id } }
+ }
+ },
+ [
+ _vm._v("\n #" + _vm._s(node.title) + " "),
+ _c("span", { staticClass: "float-right" }, [
+ _vm._v(_vm._s(node.cache ? node.cache.threads_count : 0))
+ ])
+ ]
+ )
+ ]
+ })
+ ],
+ 2
+ )
+ ])
+}
+var staticRenderFns = [
+ function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box-heading" }, [
+ _c("div", { staticClass: "text-13" }, [_vm._v("热门话题")])
+ ])
+ }
+]
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-social-btns.vue?vue&type=template&id=1e242af6&scoped=true&":
+/*!**********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-social-btns.vue?vue&type=template&id=1e242af6&scoped=true& ***!
+ \**********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ { staticClass: "user-social-btns d-flex justify-content-start flex-wrap" },
+ [
+ _vm.user.extends.github
+ ? _c(
+ "a",
+ {
+ staticClass: "btn btn-dark btn-icon",
+ class: _vm.btnClass,
+ attrs: {
+ href: "https://github.com/" + _vm.user.extends.github,
+ target: "_blank"
+ }
+ },
+ [_c("github-icon")],
+ 1
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.user.extends.twitter
+ ? _c(
+ "a",
+ {
+ staticClass: "btn btn-twitter btn-icon",
+ class: _vm.btnClass,
+ attrs: {
+ href: "https://twitter.com/" + _vm.user.extends.twitter,
+ target: "_blank"
+ }
+ },
+ [_c("twitter-icon")],
+ 1
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.user.extends.facebook
+ ? _c(
+ "a",
+ {
+ staticClass: "btn btn-facebook btn-icon",
+ class: _vm.btnClass,
+ attrs: {
+ href: "https://www.facebook.com/" + _vm.user.extends.facebook,
+ target: "_blank"
+ }
+ },
+ [_c("facebook-icon")],
+ 1
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.user.extends.instagram
+ ? _c(
+ "a",
+ {
+ staticClass: "btn btn-orange btn-icon text-white",
+ class: _vm.btnClass,
+ attrs: {
+ href: "https://www.instagram.com/" + _vm.user.extends.instagram,
+ target: "_blank"
+ }
+ },
+ [_c("instagram-icon")],
+ 1
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.user.extends.telegram
+ ? _c(
+ "a",
+ {
+ staticClass: "btn btn-teal-blue btn-icon text-white",
+ class: _vm.btnClass,
+ attrs: {
+ href: "https://t.me/" + _vm.user.extends.telegram,
+ target: "_blank"
+ }
+ },
+ [_c("telegram-icon")],
+ 1
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.user.extends.steam
+ ? _c(
+ "a",
+ {
+ staticClass: "btn btn-payne-grey btn-icon text-white",
+ class: _vm.btnClass,
+ attrs: {
+ href: "https://steamcommunity.com/id/" + _vm.user.extends.steam,
+ target: "_blank"
+ }
+ },
+ [_c("steam-icon")],
+ 1
+ )
+ : _vm._e()
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./src/components/hot-tags.vue":
+/*!*************************************!*\
+ !*** ./src/components/hot-tags.vue ***!
+ \*************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hot-tags.vue?vue&type=template&id=622cc129& */ "./src/components/hot-tags.vue?vue&type=template&id=622cc129&");
+/* harmony import */ var _hot_tags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hot-tags.vue?vue&type=script&lang=js& */ "./src/components/hot-tags.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _hot_tags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/hot-tags.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/hot-tags.vue?vue&type=script&lang=js&":
+/*!**************************************************************!*\
+ !*** ./src/components/hot-tags.vue?vue&type=script&lang=js& ***!
+ \**************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_hot_tags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./hot-tags.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/hot-tags.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_hot_tags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/hot-tags.vue?vue&type=template&id=622cc129&":
+/*!********************************************************************!*\
+ !*** ./src/components/hot-tags.vue?vue&type=template&id=622cc129& ***!
+ \********************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./hot-tags.vue?vue&type=template&id=622cc129& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/hot-tags.vue?vue&type=template&id=622cc129&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/user-social-btns.vue":
+/*!*********************************************!*\
+ !*** ./src/components/user-social-btns.vue ***!
+ \*********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _user_social_btns_vue_vue_type_template_id_1e242af6_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./user-social-btns.vue?vue&type=template&id=1e242af6&scoped=true& */ "./src/components/user-social-btns.vue?vue&type=template&id=1e242af6&scoped=true&");
+/* harmony import */ var _user_social_btns_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./user-social-btns.vue?vue&type=script&lang=js& */ "./src/components/user-social-btns.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _user_social_btns_vue_vue_type_style_index_0_id_1e242af6_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./user-social-btns.vue?vue&type=style&index=0&id=1e242af6&scoped=true&lang=scss& */ "./src/components/user-social-btns.vue?vue&type=style&index=0&id=1e242af6&scoped=true&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _user_social_btns_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _user_social_btns_vue_vue_type_template_id_1e242af6_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _user_social_btns_vue_vue_type_template_id_1e242af6_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ "1e242af6",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/user-social-btns.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/user-social-btns.vue?vue&type=script&lang=js&":
+/*!**********************************************************************!*\
+ !*** ./src/components/user-social-btns.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_social_btns_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./user-social-btns.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-social-btns.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_social_btns_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/user-social-btns.vue?vue&type=style&index=0&id=1e242af6&scoped=true&lang=scss&":
+/*!*******************************************************************************************************!*\
+ !*** ./src/components/user-social-btns.vue?vue&type=style&index=0&id=1e242af6&scoped=true&lang=scss& ***!
+ \*******************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_user_social_btns_vue_vue_type_style_index_0_id_1e242af6_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../node_modules/style-loader!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./user-social-btns.vue?vue&type=style&index=0&id=1e242af6&scoped=true&lang=scss& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-social-btns.vue?vue&type=style&index=0&id=1e242af6&scoped=true&lang=scss&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_user_social_btns_vue_vue_type_style_index_0_id_1e242af6_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_user_social_btns_vue_vue_type_style_index_0_id_1e242af6_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_user_social_btns_vue_vue_type_style_index_0_id_1e242af6_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_user_social_btns_vue_vue_type_style_index_0_id_1e242af6_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_user_social_btns_vue_vue_type_style_index_0_id_1e242af6_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/components/user-social-btns.vue?vue&type=template&id=1e242af6&scoped=true&":
+/*!****************************************************************************************!*\
+ !*** ./src/components/user-social-btns.vue?vue&type=template&id=1e242af6&scoped=true& ***!
+ \****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_social_btns_vue_vue_type_template_id_1e242af6_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./user-social-btns.vue?vue&type=template&id=1e242af6&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-social-btns.vue?vue&type=template&id=1e242af6&scoped=true&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_social_btns_vue_vue_type_template_id_1e242af6_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_social_btns_vue_vue_type_template_id_1e242af6_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/14.644007cb2e6d0ab3b33b.js b/public/14.644007cb2e6d0ab3b33b.js
new file mode 100644
index 00000000..3c5850c3
--- /dev/null
+++ b/public/14.644007cb2e6d0ab3b33b.js
@@ -0,0 +1,259 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[14],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/oauth.vue?vue&type=script&lang=js&":
+/*!*********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/auth/oauth.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'oauth',
+ mounted: function mounted() {
+ var _this = this;
+
+ var platform = this.$route.params.platform;
+
+ if (this.$route.name === 'auth.oauth_redirect') {
+ this.$http.get('oauth/redirect-url/' + platform).then(function (redirectUrl) {
+ window.location = redirectUrl;
+ });
+ } else {
+ this.$http.get('oauth/callback/' + platform).then(function (response) {
+ _this.$store.dispatch('setToken', response.token);
+
+ _this.$store.dispatch('setUser', response.user);
+
+ _this.$store.dispatch('loadUser');
+
+ _this.$message.success('欢迎回来~');
+
+ if (window.opener) {
+ window.opener.location.reload();
+ window.close();
+ } else {
+ window.location.href = '/';
+ }
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/oauth.vue?vue&type=template&id=eb049ade&":
+/*!*************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/auth/oauth.vue?vue&type=template&id=eb049ade& ***!
+ \*************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "oauth-redirect text-center p-5" }, [
+ _vm.$route.name == "auth.oauth_redirect"
+ ? _c("div", [
+ _vm._v("Redirecting to " + _vm._s(_vm.$route.params.platform) + "...")
+ ])
+ : _c("div", [_vm._v("Fetching user info...")])
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
+/* globals __VUE_SSR_CONTEXT__ */
+
+// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
+// This module is a runtime utility for cleaner component module output and will
+// be included in the final webpack user bundle.
+
+function normalizeComponent (
+ scriptExports,
+ render,
+ staticRenderFns,
+ functionalTemplate,
+ injectStyles,
+ scopeId,
+ moduleIdentifier, /* server only */
+ shadowMode /* vue-cli only */
+) {
+ // Vue.extend constructor export interop
+ var options = typeof scriptExports === 'function'
+ ? scriptExports.options
+ : scriptExports
+
+ // render functions
+ if (render) {
+ options.render = render
+ options.staticRenderFns = staticRenderFns
+ options._compiled = true
+ }
+
+ // functional template
+ if (functionalTemplate) {
+ options.functional = true
+ }
+
+ // scopedId
+ if (scopeId) {
+ options._scopeId = 'data-v-' + scopeId
+ }
+
+ var hook
+ if (moduleIdentifier) { // server build
+ hook = function (context) {
+ // 2.3 injection
+ context =
+ context || // cached call
+ (this.$vnode && this.$vnode.ssrContext) || // stateful
+ (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
+ // 2.2 with runInNewContext: true
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
+ context = __VUE_SSR_CONTEXT__
+ }
+ // inject component styles
+ if (injectStyles) {
+ injectStyles.call(this, context)
+ }
+ // register component module identifier for async chunk inferrence
+ if (context && context._registeredComponents) {
+ context._registeredComponents.add(moduleIdentifier)
+ }
+ }
+ // used by ssr in case component is cached and beforeCreate
+ // never gets called
+ options._ssrRegister = hook
+ } else if (injectStyles) {
+ hook = shadowMode
+ ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
+ : injectStyles
+ }
+
+ if (hook) {
+ if (options.functional) {
+ // for template-only hot-reload because in that case the render fn doesn't
+ // go through the normalizer
+ options._injectStyles = hook
+ // register for functioal component in vue file
+ var originalRender = options.render
+ options.render = function renderWithStyleInjection (h, context) {
+ hook.call(context)
+ return originalRender(h, context)
+ }
+ } else {
+ // inject component registration as beforeCreate hook
+ var existing = options.beforeCreate
+ options.beforeCreate = existing
+ ? [].concat(existing, hook)
+ : [hook]
+ }
+ }
+
+ return {
+ exports: scriptExports,
+ options: options
+ }
+}
+
+
+/***/ }),
+
+/***/ "./src/modules/auth/oauth.vue":
+/*!************************************!*\
+ !*** ./src/modules/auth/oauth.vue ***!
+ \************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _oauth_vue_vue_type_template_id_eb049ade___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./oauth.vue?vue&type=template&id=eb049ade& */ "./src/modules/auth/oauth.vue?vue&type=template&id=eb049ade&");
+/* harmony import */ var _oauth_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./oauth.vue?vue&type=script&lang=js& */ "./src/modules/auth/oauth.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _oauth_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _oauth_vue_vue_type_template_id_eb049ade___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _oauth_vue_vue_type_template_id_eb049ade___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/auth/oauth.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/auth/oauth.vue?vue&type=script&lang=js&":
+/*!*************************************************************!*\
+ !*** ./src/modules/auth/oauth.vue?vue&type=script&lang=js& ***!
+ \*************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_oauth_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./oauth.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/oauth.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_oauth_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/auth/oauth.vue?vue&type=template&id=eb049ade&":
+/*!*******************************************************************!*\
+ !*** ./src/modules/auth/oauth.vue?vue&type=template&id=eb049ade& ***!
+ \*******************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_oauth_vue_vue_type_template_id_eb049ade___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./oauth.vue?vue&type=template&id=eb049ade& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/oauth.vue?vue&type=template&id=eb049ade&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_oauth_vue_vue_type_template_id_eb049ade___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_oauth_vue_vue_type_template_id_eb049ade___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/15.556bc6b46922981b0249.js b/public/15.556bc6b46922981b0249.js
new file mode 100644
index 00000000..d9176614
--- /dev/null
+++ b/public/15.556bc6b46922981b0249.js
@@ -0,0 +1,2621 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[15],{
+
+/***/ "./node_modules/popper.js/dist/esm/popper.js":
+/*!***************************************************!*\
+ !*** ./node_modules/popper.js/dist/esm/popper.js ***!
+ \***************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* WEBPACK VAR INJECTION */(function(global) {/**!
+ * @fileOverview Kickass library to create and place poppers near their reference elements.
+ * @version 1.15.0
+ * @license
+ * Copyright (c) 2016 Federico Zivolo and contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
+
+var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
+var timeoutDuration = 0;
+for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
+ if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {
+ timeoutDuration = 1;
+ break;
+ }
+}
+
+function microtaskDebounce(fn) {
+ var called = false;
+ return function () {
+ if (called) {
+ return;
+ }
+ called = true;
+ window.Promise.resolve().then(function () {
+ called = false;
+ fn();
+ });
+ };
+}
+
+function taskDebounce(fn) {
+ var scheduled = false;
+ return function () {
+ if (!scheduled) {
+ scheduled = true;
+ setTimeout(function () {
+ scheduled = false;
+ fn();
+ }, timeoutDuration);
+ }
+ };
+}
+
+var supportsMicroTasks = isBrowser && window.Promise;
+
+/**
+* Create a debounced version of a method, that's asynchronously deferred
+* but called in the minimum time possible.
+*
+* @method
+* @memberof Popper.Utils
+* @argument {Function} fn
+* @returns {Function}
+*/
+var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;
+
+/**
+ * Check if the given variable is a function
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Any} functionToCheck - variable to check
+ * @returns {Boolean} answer to: is a function?
+ */
+function isFunction(functionToCheck) {
+ var getType = {};
+ return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
+}
+
+/**
+ * Get CSS computed property of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Eement} element
+ * @argument {String} property
+ */
+function getStyleComputedProperty(element, property) {
+ if (element.nodeType !== 1) {
+ return [];
+ }
+ // NOTE: 1 DOM access here
+ var window = element.ownerDocument.defaultView;
+ var css = window.getComputedStyle(element, null);
+ return property ? css[property] : css;
+}
+
+/**
+ * Returns the parentNode or the host of the element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} parent
+ */
+function getParentNode(element) {
+ if (element.nodeName === 'HTML') {
+ return element;
+ }
+ return element.parentNode || element.host;
+}
+
+/**
+ * Returns the scrolling parent of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} scroll parent
+ */
+function getScrollParent(element) {
+ // Return body, `getScroll` will take care to get the correct `scrollTop` from it
+ if (!element) {
+ return document.body;
+ }
+
+ switch (element.nodeName) {
+ case 'HTML':
+ case 'BODY':
+ return element.ownerDocument.body;
+ case '#document':
+ return element.body;
+ }
+
+ // Firefox want us to check `-x` and `-y` variations as well
+
+ var _getStyleComputedProp = getStyleComputedProperty(element),
+ overflow = _getStyleComputedProp.overflow,
+ overflowX = _getStyleComputedProp.overflowX,
+ overflowY = _getStyleComputedProp.overflowY;
+
+ if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
+ return element;
+ }
+
+ return getScrollParent(getParentNode(element));
+}
+
+var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
+var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
+
+/**
+ * Determines if the browser is Internet Explorer
+ * @method
+ * @memberof Popper.Utils
+ * @param {Number} version to check
+ * @returns {Boolean} isIE
+ */
+function isIE(version) {
+ if (version === 11) {
+ return isIE11;
+ }
+ if (version === 10) {
+ return isIE10;
+ }
+ return isIE11 || isIE10;
+}
+
+/**
+ * Returns the offset parent of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} offset parent
+ */
+function getOffsetParent(element) {
+ if (!element) {
+ return document.documentElement;
+ }
+
+ var noOffsetParent = isIE(10) ? document.body : null;
+
+ // NOTE: 1 DOM access here
+ var offsetParent = element.offsetParent || null;
+ // Skip hidden elements which don't have an offsetParent
+ while (offsetParent === noOffsetParent && element.nextElementSibling) {
+ offsetParent = (element = element.nextElementSibling).offsetParent;
+ }
+
+ var nodeName = offsetParent && offsetParent.nodeName;
+
+ if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
+ return element ? element.ownerDocument.documentElement : document.documentElement;
+ }
+
+ // .offsetParent will return the closest TH, TD or TABLE in case
+ // no offsetParent is present, I hate this job...
+ if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {
+ return getOffsetParent(offsetParent);
+ }
+
+ return offsetParent;
+}
+
+function isOffsetContainer(element) {
+ var nodeName = element.nodeName;
+
+ if (nodeName === 'BODY') {
+ return false;
+ }
+ return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;
+}
+
+/**
+ * Finds the root node (document, shadowDOM root) of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} node
+ * @returns {Element} root node
+ */
+function getRoot(node) {
+ if (node.parentNode !== null) {
+ return getRoot(node.parentNode);
+ }
+
+ return node;
+}
+
+/**
+ * Finds the offset parent common to the two provided nodes
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element1
+ * @argument {Element} element2
+ * @returns {Element} common offset parent
+ */
+function findCommonOffsetParent(element1, element2) {
+ // This check is needed to avoid errors in case one of the elements isn't defined for any reason
+ if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
+ return document.documentElement;
+ }
+
+ // Here we make sure to give as "start" the element that comes first in the DOM
+ var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;
+ var start = order ? element1 : element2;
+ var end = order ? element2 : element1;
+
+ // Get common ancestor container
+ var range = document.createRange();
+ range.setStart(start, 0);
+ range.setEnd(end, 0);
+ var commonAncestorContainer = range.commonAncestorContainer;
+
+ // Both nodes are inside #document
+
+ if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {
+ if (isOffsetContainer(commonAncestorContainer)) {
+ return commonAncestorContainer;
+ }
+
+ return getOffsetParent(commonAncestorContainer);
+ }
+
+ // one of the nodes is inside shadowDOM, find which one
+ var element1root = getRoot(element1);
+ if (element1root.host) {
+ return findCommonOffsetParent(element1root.host, element2);
+ } else {
+ return findCommonOffsetParent(element1, getRoot(element2).host);
+ }
+}
+
+/**
+ * Gets the scroll value of the given element in the given side (top and left)
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @argument {String} side `top` or `left`
+ * @returns {number} amount of scrolled pixels
+ */
+function getScroll(element) {
+ var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';
+
+ var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';
+ var nodeName = element.nodeName;
+
+ if (nodeName === 'BODY' || nodeName === 'HTML') {
+ var html = element.ownerDocument.documentElement;
+ var scrollingElement = element.ownerDocument.scrollingElement || html;
+ return scrollingElement[upperSide];
+ }
+
+ return element[upperSide];
+}
+
+/*
+ * Sum or subtract the element scroll values (left and top) from a given rect object
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} rect - Rect object you want to change
+ * @param {HTMLElement} element - The element from the function reads the scroll values
+ * @param {Boolean} subtract - set to true if you want to subtract the scroll values
+ * @return {Object} rect - The modifier rect object
+ */
+function includeScroll(rect, element) {
+ var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+ var scrollTop = getScroll(element, 'top');
+ var scrollLeft = getScroll(element, 'left');
+ var modifier = subtract ? -1 : 1;
+ rect.top += scrollTop * modifier;
+ rect.bottom += scrollTop * modifier;
+ rect.left += scrollLeft * modifier;
+ rect.right += scrollLeft * modifier;
+ return rect;
+}
+
+/*
+ * Helper to detect borders of a given element
+ * @method
+ * @memberof Popper.Utils
+ * @param {CSSStyleDeclaration} styles
+ * Result of `getStyleComputedProperty` on the given element
+ * @param {String} axis - `x` or `y`
+ * @return {number} borders - The borders size of the given axis
+ */
+
+function getBordersSize(styles, axis) {
+ var sideA = axis === 'x' ? 'Left' : 'Top';
+ var sideB = sideA === 'Left' ? 'Right' : 'Bottom';
+
+ return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
+}
+
+function getSize(axis, body, html, computedStyle) {
+ return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);
+}
+
+function getWindowSizes(document) {
+ var body = document.body;
+ var html = document.documentElement;
+ var computedStyle = isIE(10) && getComputedStyle(html);
+
+ return {
+ height: getSize('Height', body, html, computedStyle),
+ width: getSize('Width', body, html, computedStyle)
+ };
+}
+
+var classCallCheck = function (instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+};
+
+var createClass = function () {
+ function defineProperties(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+
+ return function (Constructor, protoProps, staticProps) {
+ if (protoProps) defineProperties(Constructor.prototype, protoProps);
+ if (staticProps) defineProperties(Constructor, staticProps);
+ return Constructor;
+ };
+}();
+
+
+
+
+
+var defineProperty = function (obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+
+ return obj;
+};
+
+var _extends = Object.assign || function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+};
+
+/**
+ * Given element offsets, generate an output similar to getBoundingClientRect
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Object} offsets
+ * @returns {Object} ClientRect like output
+ */
+function getClientRect(offsets) {
+ return _extends({}, offsets, {
+ right: offsets.left + offsets.width,
+ bottom: offsets.top + offsets.height
+ });
+}
+
+/**
+ * Get bounding client rect of given element
+ * @method
+ * @memberof Popper.Utils
+ * @param {HTMLElement} element
+ * @return {Object} client rect
+ */
+function getBoundingClientRect(element) {
+ var rect = {};
+
+ // IE10 10 FIX: Please, don't ask, the element isn't
+ // considered in DOM in some circumstances...
+ // This isn't reproducible in IE10 compatibility mode of IE11
+ try {
+ if (isIE(10)) {
+ rect = element.getBoundingClientRect();
+ var scrollTop = getScroll(element, 'top');
+ var scrollLeft = getScroll(element, 'left');
+ rect.top += scrollTop;
+ rect.left += scrollLeft;
+ rect.bottom += scrollTop;
+ rect.right += scrollLeft;
+ } else {
+ rect = element.getBoundingClientRect();
+ }
+ } catch (e) {}
+
+ var result = {
+ left: rect.left,
+ top: rect.top,
+ width: rect.right - rect.left,
+ height: rect.bottom - rect.top
+ };
+
+ // subtract scrollbar size from sizes
+ var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};
+ var width = sizes.width || element.clientWidth || result.right - result.left;
+ var height = sizes.height || element.clientHeight || result.bottom - result.top;
+
+ var horizScrollbar = element.offsetWidth - width;
+ var vertScrollbar = element.offsetHeight - height;
+
+ // if an hypothetical scrollbar is detected, we must be sure it's not a `border`
+ // we make this check conditional for performance reasons
+ if (horizScrollbar || vertScrollbar) {
+ var styles = getStyleComputedProperty(element);
+ horizScrollbar -= getBordersSize(styles, 'x');
+ vertScrollbar -= getBordersSize(styles, 'y');
+
+ result.width -= horizScrollbar;
+ result.height -= vertScrollbar;
+ }
+
+ return getClientRect(result);
+}
+
+function getOffsetRectRelativeToArbitraryNode(children, parent) {
+ var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+ var isIE10 = isIE(10);
+ var isHTML = parent.nodeName === 'HTML';
+ var childrenRect = getBoundingClientRect(children);
+ var parentRect = getBoundingClientRect(parent);
+ var scrollParent = getScrollParent(children);
+
+ var styles = getStyleComputedProperty(parent);
+ var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
+ var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
+
+ // In cases where the parent is fixed, we must ignore negative scroll in offset calc
+ if (fixedPosition && isHTML) {
+ parentRect.top = Math.max(parentRect.top, 0);
+ parentRect.left = Math.max(parentRect.left, 0);
+ }
+ var offsets = getClientRect({
+ top: childrenRect.top - parentRect.top - borderTopWidth,
+ left: childrenRect.left - parentRect.left - borderLeftWidth,
+ width: childrenRect.width,
+ height: childrenRect.height
+ });
+ offsets.marginTop = 0;
+ offsets.marginLeft = 0;
+
+ // Subtract margins of documentElement in case it's being used as parent
+ // we do this only on HTML because it's the only element that behaves
+ // differently when margins are applied to it. The margins are included in
+ // the box of the documentElement, in the other cases not.
+ if (!isIE10 && isHTML) {
+ var marginTop = parseFloat(styles.marginTop, 10);
+ var marginLeft = parseFloat(styles.marginLeft, 10);
+
+ offsets.top -= borderTopWidth - marginTop;
+ offsets.bottom -= borderTopWidth - marginTop;
+ offsets.left -= borderLeftWidth - marginLeft;
+ offsets.right -= borderLeftWidth - marginLeft;
+
+ // Attach marginTop and marginLeft because in some circumstances we may need them
+ offsets.marginTop = marginTop;
+ offsets.marginLeft = marginLeft;
+ }
+
+ if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
+ offsets = includeScroll(offsets, parent);
+ }
+
+ return offsets;
+}
+
+function getViewportOffsetRectRelativeToArtbitraryNode(element) {
+ var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+ var html = element.ownerDocument.documentElement;
+ var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
+ var width = Math.max(html.clientWidth, window.innerWidth || 0);
+ var height = Math.max(html.clientHeight, window.innerHeight || 0);
+
+ var scrollTop = !excludeScroll ? getScroll(html) : 0;
+ var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
+
+ var offset = {
+ top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
+ left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,
+ width: width,
+ height: height
+ };
+
+ return getClientRect(offset);
+}
+
+/**
+ * Check if the given element is fixed or is inside a fixed parent
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @argument {Element} customContainer
+ * @returns {Boolean} answer to "isFixed?"
+ */
+function isFixed(element) {
+ var nodeName = element.nodeName;
+ if (nodeName === 'BODY' || nodeName === 'HTML') {
+ return false;
+ }
+ if (getStyleComputedProperty(element, 'position') === 'fixed') {
+ return true;
+ }
+ var parentNode = getParentNode(element);
+ if (!parentNode) {
+ return false;
+ }
+ return isFixed(parentNode);
+}
+
+/**
+ * Finds the first parent of an element that has a transformed property defined
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} first transformed parent or documentElement
+ */
+
+function getFixedPositionOffsetParent(element) {
+ // This check is needed to avoid errors in case one of the elements isn't defined for any reason
+ if (!element || !element.parentElement || isIE()) {
+ return document.documentElement;
+ }
+ var el = element.parentElement;
+ while (el && getStyleComputedProperty(el, 'transform') === 'none') {
+ el = el.parentElement;
+ }
+ return el || document.documentElement;
+}
+
+/**
+ * Computed the boundaries limits and return them
+ * @method
+ * @memberof Popper.Utils
+ * @param {HTMLElement} popper
+ * @param {HTMLElement} reference
+ * @param {number} padding
+ * @param {HTMLElement} boundariesElement - Element used to define the boundaries
+ * @param {Boolean} fixedPosition - Is in fixed position mode
+ * @returns {Object} Coordinates of the boundaries
+ */
+function getBoundaries(popper, reference, padding, boundariesElement) {
+ var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
+
+ // NOTE: 1 DOM access here
+
+ var boundaries = { top: 0, left: 0 };
+ var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
+
+ // Handle viewport case
+ if (boundariesElement === 'viewport') {
+ boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
+ } else {
+ // Handle other cases based on DOM element used as boundaries
+ var boundariesNode = void 0;
+ if (boundariesElement === 'scrollParent') {
+ boundariesNode = getScrollParent(getParentNode(reference));
+ if (boundariesNode.nodeName === 'BODY') {
+ boundariesNode = popper.ownerDocument.documentElement;
+ }
+ } else if (boundariesElement === 'window') {
+ boundariesNode = popper.ownerDocument.documentElement;
+ } else {
+ boundariesNode = boundariesElement;
+ }
+
+ var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
+
+ // In case of HTML, we need a different computation
+ if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
+ var _getWindowSizes = getWindowSizes(popper.ownerDocument),
+ height = _getWindowSizes.height,
+ width = _getWindowSizes.width;
+
+ boundaries.top += offsets.top - offsets.marginTop;
+ boundaries.bottom = height + offsets.top;
+ boundaries.left += offsets.left - offsets.marginLeft;
+ boundaries.right = width + offsets.left;
+ } else {
+ // for all the other DOM elements, this one is good
+ boundaries = offsets;
+ }
+ }
+
+ // Add paddings
+ padding = padding || 0;
+ var isPaddingNumber = typeof padding === 'number';
+ boundaries.left += isPaddingNumber ? padding : padding.left || 0;
+ boundaries.top += isPaddingNumber ? padding : padding.top || 0;
+ boundaries.right -= isPaddingNumber ? padding : padding.right || 0;
+ boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;
+
+ return boundaries;
+}
+
+function getArea(_ref) {
+ var width = _ref.width,
+ height = _ref.height;
+
+ return width * height;
+}
+
+/**
+ * Utility used to transform the `auto` placement to the placement with more
+ * available space.
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {
+ var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
+
+ if (placement.indexOf('auto') === -1) {
+ return placement;
+ }
+
+ var boundaries = getBoundaries(popper, reference, padding, boundariesElement);
+
+ var rects = {
+ top: {
+ width: boundaries.width,
+ height: refRect.top - boundaries.top
+ },
+ right: {
+ width: boundaries.right - refRect.right,
+ height: boundaries.height
+ },
+ bottom: {
+ width: boundaries.width,
+ height: boundaries.bottom - refRect.bottom
+ },
+ left: {
+ width: refRect.left - boundaries.left,
+ height: boundaries.height
+ }
+ };
+
+ var sortedAreas = Object.keys(rects).map(function (key) {
+ return _extends({
+ key: key
+ }, rects[key], {
+ area: getArea(rects[key])
+ });
+ }).sort(function (a, b) {
+ return b.area - a.area;
+ });
+
+ var filteredAreas = sortedAreas.filter(function (_ref2) {
+ var width = _ref2.width,
+ height = _ref2.height;
+ return width >= popper.clientWidth && height >= popper.clientHeight;
+ });
+
+ var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;
+
+ var variation = placement.split('-')[1];
+
+ return computedPlacement + (variation ? '-' + variation : '');
+}
+
+/**
+ * Get offsets to the reference element
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} state
+ * @param {Element} popper - the popper element
+ * @param {Element} reference - the reference element (the popper will be relative to this)
+ * @param {Element} fixedPosition - is in fixed position mode
+ * @returns {Object} An object containing the offsets which will be applied to the popper
+ */
+function getReferenceOffsets(state, popper, reference) {
+ var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
+
+ var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
+ return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
+}
+
+/**
+ * Get the outer sizes of the given element (offset size + margins)
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Object} object containing width and height properties
+ */
+function getOuterSizes(element) {
+ var window = element.ownerDocument.defaultView;
+ var styles = window.getComputedStyle(element);
+ var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);
+ var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);
+ var result = {
+ width: element.offsetWidth + y,
+ height: element.offsetHeight + x
+ };
+ return result;
+}
+
+/**
+ * Get the opposite placement of the given one
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement
+ * @returns {String} flipped placement
+ */
+function getOppositePlacement(placement) {
+ var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };
+ return placement.replace(/left|right|bottom|top/g, function (matched) {
+ return hash[matched];
+ });
+}
+
+/**
+ * Get offsets to the popper
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} position - CSS position the Popper will get applied
+ * @param {HTMLElement} popper - the popper element
+ * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)
+ * @param {String} placement - one of the valid placement options
+ * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper
+ */
+function getPopperOffsets(popper, referenceOffsets, placement) {
+ placement = placement.split('-')[0];
+
+ // Get popper node sizes
+ var popperRect = getOuterSizes(popper);
+
+ // Add position, width and height to our offsets object
+ var popperOffsets = {
+ width: popperRect.width,
+ height: popperRect.height
+ };
+
+ // depending by the popper placement we have to compute its offsets slightly differently
+ var isHoriz = ['right', 'left'].indexOf(placement) !== -1;
+ var mainSide = isHoriz ? 'top' : 'left';
+ var secondarySide = isHoriz ? 'left' : 'top';
+ var measurement = isHoriz ? 'height' : 'width';
+ var secondaryMeasurement = !isHoriz ? 'height' : 'width';
+
+ popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;
+ if (placement === secondarySide) {
+ popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];
+ } else {
+ popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];
+ }
+
+ return popperOffsets;
+}
+
+/**
+ * Mimics the `find` method of Array
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Array} arr
+ * @argument prop
+ * @argument value
+ * @returns index or -1
+ */
+function find(arr, check) {
+ // use native find if supported
+ if (Array.prototype.find) {
+ return arr.find(check);
+ }
+
+ // use `filter` to obtain the same behavior of `find`
+ return arr.filter(check)[0];
+}
+
+/**
+ * Return the index of the matching object
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Array} arr
+ * @argument prop
+ * @argument value
+ * @returns index or -1
+ */
+function findIndex(arr, prop, value) {
+ // use native findIndex if supported
+ if (Array.prototype.findIndex) {
+ return arr.findIndex(function (cur) {
+ return cur[prop] === value;
+ });
+ }
+
+ // use `find` + `indexOf` if `findIndex` isn't supported
+ var match = find(arr, function (obj) {
+ return obj[prop] === value;
+ });
+ return arr.indexOf(match);
+}
+
+/**
+ * Loop trough the list of modifiers and run them in order,
+ * each of them will then edit the data object.
+ * @method
+ * @memberof Popper.Utils
+ * @param {dataObject} data
+ * @param {Array} modifiers
+ * @param {String} ends - Optional modifier name used as stopper
+ * @returns {dataObject}
+ */
+function runModifiers(modifiers, data, ends) {
+ var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));
+
+ modifiersToRun.forEach(function (modifier) {
+ if (modifier['function']) {
+ // eslint-disable-line dot-notation
+ console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
+ }
+ var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation
+ if (modifier.enabled && isFunction(fn)) {
+ // Add properties to offsets to make them a complete clientRect object
+ // we do this before each modifier to make sure the previous one doesn't
+ // mess with these values
+ data.offsets.popper = getClientRect(data.offsets.popper);
+ data.offsets.reference = getClientRect(data.offsets.reference);
+
+ data = fn(data, modifier);
+ }
+ });
+
+ return data;
+}
+
+/**
+ * Updates the position of the popper, computing the new offsets and applying
+ * the new style.
+ * Prefer `scheduleUpdate` over `update` because of performance reasons.
+ * @method
+ * @memberof Popper
+ */
+function update() {
+ // if popper is destroyed, don't perform any further update
+ if (this.state.isDestroyed) {
+ return;
+ }
+
+ var data = {
+ instance: this,
+ styles: {},
+ arrowStyles: {},
+ attributes: {},
+ flipped: false,
+ offsets: {}
+ };
+
+ // compute reference element offsets
+ data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
+
+ // compute auto placement, store placement inside the data object,
+ // modifiers will be able to edit `placement` if needed
+ // and refer to originalPlacement to know the original value
+ data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);
+
+ // store the computed placement inside `originalPlacement`
+ data.originalPlacement = data.placement;
+
+ data.positionFixed = this.options.positionFixed;
+
+ // compute the popper offsets
+ data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
+
+ data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
+
+ // run the modifiers
+ data = runModifiers(this.modifiers, data);
+
+ // the first `update` will call `onCreate` callback
+ // the other ones will call `onUpdate` callback
+ if (!this.state.isCreated) {
+ this.state.isCreated = true;
+ this.options.onCreate(data);
+ } else {
+ this.options.onUpdate(data);
+ }
+}
+
+/**
+ * Helper used to know if the given modifier is enabled.
+ * @method
+ * @memberof Popper.Utils
+ * @returns {Boolean}
+ */
+function isModifierEnabled(modifiers, modifierName) {
+ return modifiers.some(function (_ref) {
+ var name = _ref.name,
+ enabled = _ref.enabled;
+ return enabled && name === modifierName;
+ });
+}
+
+/**
+ * Get the prefixed supported property name
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} property (camelCase)
+ * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)
+ */
+function getSupportedPropertyName(property) {
+ var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
+ var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
+
+ for (var i = 0; i < prefixes.length; i++) {
+ var prefix = prefixes[i];
+ var toCheck = prefix ? '' + prefix + upperProp : property;
+ if (typeof document.body.style[toCheck] !== 'undefined') {
+ return toCheck;
+ }
+ }
+ return null;
+}
+
+/**
+ * Destroys the popper.
+ * @method
+ * @memberof Popper
+ */
+function destroy() {
+ this.state.isDestroyed = true;
+
+ // touch DOM only if `applyStyle` modifier is enabled
+ if (isModifierEnabled(this.modifiers, 'applyStyle')) {
+ this.popper.removeAttribute('x-placement');
+ this.popper.style.position = '';
+ this.popper.style.top = '';
+ this.popper.style.left = '';
+ this.popper.style.right = '';
+ this.popper.style.bottom = '';
+ this.popper.style.willChange = '';
+ this.popper.style[getSupportedPropertyName('transform')] = '';
+ }
+
+ this.disableEventListeners();
+
+ // remove the popper if user explicity asked for the deletion on destroy
+ // do not use `remove` because IE11 doesn't support it
+ if (this.options.removeOnDestroy) {
+ this.popper.parentNode.removeChild(this.popper);
+ }
+ return this;
+}
+
+/**
+ * Get the window associated with the element
+ * @argument {Element} element
+ * @returns {Window}
+ */
+function getWindow(element) {
+ var ownerDocument = element.ownerDocument;
+ return ownerDocument ? ownerDocument.defaultView : window;
+}
+
+function attachToScrollParents(scrollParent, event, callback, scrollParents) {
+ var isBody = scrollParent.nodeName === 'BODY';
+ var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
+ target.addEventListener(event, callback, { passive: true });
+
+ if (!isBody) {
+ attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);
+ }
+ scrollParents.push(target);
+}
+
+/**
+ * Setup needed event listeners used to update the popper position
+ * @method
+ * @memberof Popper.Utils
+ * @private
+ */
+function setupEventListeners(reference, options, state, updateBound) {
+ // Resize event listener on window
+ state.updateBound = updateBound;
+ getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });
+
+ // Scroll event listener on scroll parents
+ var scrollElement = getScrollParent(reference);
+ attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);
+ state.scrollElement = scrollElement;
+ state.eventsEnabled = true;
+
+ return state;
+}
+
+/**
+ * It will add resize/scroll events and start recalculating
+ * position of the popper element when they are triggered.
+ * @method
+ * @memberof Popper
+ */
+function enableEventListeners() {
+ if (!this.state.eventsEnabled) {
+ this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);
+ }
+}
+
+/**
+ * Remove event listeners used to update the popper position
+ * @method
+ * @memberof Popper.Utils
+ * @private
+ */
+function removeEventListeners(reference, state) {
+ // Remove resize event listener on window
+ getWindow(reference).removeEventListener('resize', state.updateBound);
+
+ // Remove scroll event listener on scroll parents
+ state.scrollParents.forEach(function (target) {
+ target.removeEventListener('scroll', state.updateBound);
+ });
+
+ // Reset state
+ state.updateBound = null;
+ state.scrollParents = [];
+ state.scrollElement = null;
+ state.eventsEnabled = false;
+ return state;
+}
+
+/**
+ * It will remove resize/scroll events and won't recalculate popper position
+ * when they are triggered. It also won't trigger `onUpdate` callback anymore,
+ * unless you call `update` method manually.
+ * @method
+ * @memberof Popper
+ */
+function disableEventListeners() {
+ if (this.state.eventsEnabled) {
+ cancelAnimationFrame(this.scheduleUpdate);
+ this.state = removeEventListeners(this.reference, this.state);
+ }
+}
+
+/**
+ * Tells if a given input is a number
+ * @method
+ * @memberof Popper.Utils
+ * @param {*} input to check
+ * @return {Boolean}
+ */
+function isNumeric(n) {
+ return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);
+}
+
+/**
+ * Set the style to the given popper
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element - Element to apply the style to
+ * @argument {Object} styles
+ * Object with a list of properties and values which will be applied to the element
+ */
+function setStyles(element, styles) {
+ Object.keys(styles).forEach(function (prop) {
+ var unit = '';
+ // add unit if the value is numeric and is one of the following
+ if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {
+ unit = 'px';
+ }
+ element.style[prop] = styles[prop] + unit;
+ });
+}
+
+/**
+ * Set the attributes to the given popper
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element - Element to apply the attributes to
+ * @argument {Object} styles
+ * Object with a list of properties and values which will be applied to the element
+ */
+function setAttributes(element, attributes) {
+ Object.keys(attributes).forEach(function (prop) {
+ var value = attributes[prop];
+ if (value !== false) {
+ element.setAttribute(prop, attributes[prop]);
+ } else {
+ element.removeAttribute(prop);
+ }
+ });
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} data.styles - List of style properties - values to apply to popper element
+ * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The same data object
+ */
+function applyStyle(data) {
+ // any property present in `data.styles` will be applied to the popper,
+ // in this way we can make the 3rd party modifiers add custom styles to it
+ // Be aware, modifiers could override the properties defined in the previous
+ // lines of this modifier!
+ setStyles(data.instance.popper, data.styles);
+
+ // any property present in `data.attributes` will be applied to the popper,
+ // they will be set as HTML attributes of the element
+ setAttributes(data.instance.popper, data.attributes);
+
+ // if arrowElement is defined and arrowStyles has some properties
+ if (data.arrowElement && Object.keys(data.arrowStyles).length) {
+ setStyles(data.arrowElement, data.arrowStyles);
+ }
+
+ return data;
+}
+
+/**
+ * Set the x-placement attribute before everything else because it could be used
+ * to add margins to the popper margins needs to be calculated to get the
+ * correct popper offsets.
+ * @method
+ * @memberof Popper.modifiers
+ * @param {HTMLElement} reference - The reference element used to position the popper
+ * @param {HTMLElement} popper - The HTML element used as popper
+ * @param {Object} options - Popper.js options
+ */
+function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
+ // compute reference element offsets
+ var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
+
+ // compute auto placement, store placement inside the data object,
+ // modifiers will be able to edit `placement` if needed
+ // and refer to originalPlacement to know the original value
+ var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);
+
+ popper.setAttribute('x-placement', placement);
+
+ // Apply `position` to popper before anything else because
+ // without the position applied we can't guarantee correct computations
+ setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
+
+ return options;
+}
+
+/**
+ * @function
+ * @memberof Popper.Utils
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Boolean} shouldRound - If the offsets should be rounded at all
+ * @returns {Object} The popper's position offsets rounded
+ *
+ * The tale of pixel-perfect positioning. It's still not 100% perfect, but as
+ * good as it can be within reason.
+ * Discussion here: https://github.com/FezVrasta/popper.js/pull/715
+ *
+ * Low DPI screens cause a popper to be blurry if not using full pixels (Safari
+ * as well on High DPI screens).
+ *
+ * Firefox prefers no rounding for positioning and does not have blurriness on
+ * high DPI screens.
+ *
+ * Only horizontal placement and left/right values need to be considered.
+ */
+function getRoundedOffsets(data, shouldRound) {
+ var _data$offsets = data.offsets,
+ popper = _data$offsets.popper,
+ reference = _data$offsets.reference;
+ var round = Math.round,
+ floor = Math.floor;
+
+ var noRound = function noRound(v) {
+ return v;
+ };
+
+ var referenceWidth = round(reference.width);
+ var popperWidth = round(popper.width);
+
+ var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;
+ var isVariation = data.placement.indexOf('-') !== -1;
+ var sameWidthParity = referenceWidth % 2 === popperWidth % 2;
+ var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;
+
+ var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;
+ var verticalToInteger = !shouldRound ? noRound : round;
+
+ return {
+ left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),
+ top: verticalToInteger(popper.top),
+ bottom: verticalToInteger(popper.bottom),
+ right: horizontalToInteger(popper.right)
+ };
+}
+
+var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function computeStyle(data, options) {
+ var x = options.x,
+ y = options.y;
+ var popper = data.offsets.popper;
+
+ // Remove this legacy support in Popper.js v2
+
+ var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {
+ return modifier.name === 'applyStyle';
+ }).gpuAcceleration;
+ if (legacyGpuAccelerationOption !== undefined) {
+ console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');
+ }
+ var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;
+
+ var offsetParent = getOffsetParent(data.instance.popper);
+ var offsetParentRect = getBoundingClientRect(offsetParent);
+
+ // Styles
+ var styles = {
+ position: popper.position
+ };
+
+ var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);
+
+ var sideA = x === 'bottom' ? 'top' : 'bottom';
+ var sideB = y === 'right' ? 'left' : 'right';
+
+ // if gpuAcceleration is set to `true` and transform is supported,
+ // we use `translate3d` to apply the position to the popper we
+ // automatically use the supported prefixed version if needed
+ var prefixedProperty = getSupportedPropertyName('transform');
+
+ // now, let's make a step back and look at this code closely (wtf?)
+ // If the content of the popper grows once it's been positioned, it
+ // may happen that the popper gets misplaced because of the new content
+ // overflowing its reference element
+ // To avoid this problem, we provide two options (x and y), which allow
+ // the consumer to define the offset origin.
+ // If we position a popper on top of a reference element, we can set
+ // `x` to `top` to make the popper grow towards its top instead of
+ // its bottom.
+ var left = void 0,
+ top = void 0;
+ if (sideA === 'bottom') {
+ // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)
+ // and not the bottom of the html element
+ if (offsetParent.nodeName === 'HTML') {
+ top = -offsetParent.clientHeight + offsets.bottom;
+ } else {
+ top = -offsetParentRect.height + offsets.bottom;
+ }
+ } else {
+ top = offsets.top;
+ }
+ if (sideB === 'right') {
+ if (offsetParent.nodeName === 'HTML') {
+ left = -offsetParent.clientWidth + offsets.right;
+ } else {
+ left = -offsetParentRect.width + offsets.right;
+ }
+ } else {
+ left = offsets.left;
+ }
+ if (gpuAcceleration && prefixedProperty) {
+ styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';
+ styles[sideA] = 0;
+ styles[sideB] = 0;
+ styles.willChange = 'transform';
+ } else {
+ // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties
+ var invertTop = sideA === 'bottom' ? -1 : 1;
+ var invertLeft = sideB === 'right' ? -1 : 1;
+ styles[sideA] = top * invertTop;
+ styles[sideB] = left * invertLeft;
+ styles.willChange = sideA + ', ' + sideB;
+ }
+
+ // Attributes
+ var attributes = {
+ 'x-placement': data.placement
+ };
+
+ // Update `data` attributes, styles and arrowStyles
+ data.attributes = _extends({}, attributes, data.attributes);
+ data.styles = _extends({}, styles, data.styles);
+ data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);
+
+ return data;
+}
+
+/**
+ * Helper used to know if the given modifier depends from another one.
+ * It checks if the needed modifier is listed and enabled.
+ * @method
+ * @memberof Popper.Utils
+ * @param {Array} modifiers - list of modifiers
+ * @param {String} requestingName - name of requesting modifier
+ * @param {String} requestedName - name of requested modifier
+ * @returns {Boolean}
+ */
+function isModifierRequired(modifiers, requestingName, requestedName) {
+ var requesting = find(modifiers, function (_ref) {
+ var name = _ref.name;
+ return name === requestingName;
+ });
+
+ var isRequired = !!requesting && modifiers.some(function (modifier) {
+ return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;
+ });
+
+ if (!isRequired) {
+ var _requesting = '`' + requestingName + '`';
+ var requested = '`' + requestedName + '`';
+ console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');
+ }
+ return isRequired;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function arrow(data, options) {
+ var _data$offsets$arrow;
+
+ // arrow depends on keepTogether in order to work
+ if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {
+ return data;
+ }
+
+ var arrowElement = options.element;
+
+ // if arrowElement is a string, suppose it's a CSS selector
+ if (typeof arrowElement === 'string') {
+ arrowElement = data.instance.popper.querySelector(arrowElement);
+
+ // if arrowElement is not found, don't run the modifier
+ if (!arrowElement) {
+ return data;
+ }
+ } else {
+ // if the arrowElement isn't a query selector we must check that the
+ // provided DOM node is child of its popper node
+ if (!data.instance.popper.contains(arrowElement)) {
+ console.warn('WARNING: `arrow.element` must be child of its popper element!');
+ return data;
+ }
+ }
+
+ var placement = data.placement.split('-')[0];
+ var _data$offsets = data.offsets,
+ popper = _data$offsets.popper,
+ reference = _data$offsets.reference;
+
+ var isVertical = ['left', 'right'].indexOf(placement) !== -1;
+
+ var len = isVertical ? 'height' : 'width';
+ var sideCapitalized = isVertical ? 'Top' : 'Left';
+ var side = sideCapitalized.toLowerCase();
+ var altSide = isVertical ? 'left' : 'top';
+ var opSide = isVertical ? 'bottom' : 'right';
+ var arrowElementSize = getOuterSizes(arrowElement)[len];
+
+ //
+ // extends keepTogether behavior making sure the popper and its
+ // reference have enough pixels in conjunction
+ //
+
+ // top/left side
+ if (reference[opSide] - arrowElementSize < popper[side]) {
+ data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);
+ }
+ // bottom/right side
+ if (reference[side] + arrowElementSize > popper[opSide]) {
+ data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];
+ }
+ data.offsets.popper = getClientRect(data.offsets.popper);
+
+ // compute center of the popper
+ var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;
+
+ // Compute the sideValue using the updated popper offsets
+ // take popper margin in account because we don't have this info available
+ var css = getStyleComputedProperty(data.instance.popper);
+ var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);
+ var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);
+ var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;
+
+ // prevent arrowElement from being placed not contiguously to its popper
+ sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);
+
+ data.arrowElement = arrowElement;
+ data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);
+
+ return data;
+}
+
+/**
+ * Get the opposite placement variation of the given one
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement variation
+ * @returns {String} flipped placement variation
+ */
+function getOppositeVariation(variation) {
+ if (variation === 'end') {
+ return 'start';
+ } else if (variation === 'start') {
+ return 'end';
+ }
+ return variation;
+}
+
+/**
+ * List of accepted placements to use as values of the `placement` option.
+ * Valid placements are:
+ * - `auto`
+ * - `top`
+ * - `right`
+ * - `bottom`
+ * - `left`
+ *
+ * Each placement can have a variation from this list:
+ * - `-start`
+ * - `-end`
+ *
+ * Variations are interpreted easily if you think of them as the left to right
+ * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`
+ * is right.
+ * Vertically (`left` and `right`), `start` is top and `end` is bottom.
+ *
+ * Some valid examples are:
+ * - `top-end` (on top of reference, right aligned)
+ * - `right-start` (on right of reference, top aligned)
+ * - `bottom` (on bottom, centered)
+ * - `auto-end` (on the side with more space available, alignment depends by placement)
+ *
+ * @static
+ * @type {Array}
+ * @enum {String}
+ * @readonly
+ * @method placements
+ * @memberof Popper
+ */
+var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];
+
+// Get rid of `auto` `auto-start` and `auto-end`
+var validPlacements = placements.slice(3);
+
+/**
+ * Given an initial placement, returns all the subsequent placements
+ * clockwise (or counter-clockwise).
+ *
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement - A valid placement (it accepts variations)
+ * @argument {Boolean} counter - Set to true to walk the placements counterclockwise
+ * @returns {Array} placements including their variations
+ */
+function clockwise(placement) {
+ var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+ var index = validPlacements.indexOf(placement);
+ var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));
+ return counter ? arr.reverse() : arr;
+}
+
+var BEHAVIORS = {
+ FLIP: 'flip',
+ CLOCKWISE: 'clockwise',
+ COUNTERCLOCKWISE: 'counterclockwise'
+};
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function flip(data, options) {
+ // if `inner` modifier is enabled, we can't use the `flip` modifier
+ if (isModifierEnabled(data.instance.modifiers, 'inner')) {
+ return data;
+ }
+
+ if (data.flipped && data.placement === data.originalPlacement) {
+ // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides
+ return data;
+ }
+
+ var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
+
+ var placement = data.placement.split('-')[0];
+ var placementOpposite = getOppositePlacement(placement);
+ var variation = data.placement.split('-')[1] || '';
+
+ var flipOrder = [];
+
+ switch (options.behavior) {
+ case BEHAVIORS.FLIP:
+ flipOrder = [placement, placementOpposite];
+ break;
+ case BEHAVIORS.CLOCKWISE:
+ flipOrder = clockwise(placement);
+ break;
+ case BEHAVIORS.COUNTERCLOCKWISE:
+ flipOrder = clockwise(placement, true);
+ break;
+ default:
+ flipOrder = options.behavior;
+ }
+
+ flipOrder.forEach(function (step, index) {
+ if (placement !== step || flipOrder.length === index + 1) {
+ return data;
+ }
+
+ placement = data.placement.split('-')[0];
+ placementOpposite = getOppositePlacement(placement);
+
+ var popperOffsets = data.offsets.popper;
+ var refOffsets = data.offsets.reference;
+
+ // using floor because the reference offsets may contain decimals we are not going to consider here
+ var floor = Math.floor;
+ var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);
+
+ var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);
+ var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);
+ var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);
+ var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);
+
+ var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;
+
+ // flip the variation if required
+ var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
+
+ // flips variation if reference element overflows boundaries
+ var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);
+
+ // flips variation if popper content overflows boundaries
+ var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);
+
+ var flippedVariation = flippedVariationByRef || flippedVariationByContent;
+
+ if (overlapsRef || overflowsBoundaries || flippedVariation) {
+ // this boolean to detect any flip loop
+ data.flipped = true;
+
+ if (overlapsRef || overflowsBoundaries) {
+ placement = flipOrder[index + 1];
+ }
+
+ if (flippedVariation) {
+ variation = getOppositeVariation(variation);
+ }
+
+ data.placement = placement + (variation ? '-' + variation : '');
+
+ // this object contains `position`, we want to preserve it along with
+ // any additional property we may add in the future
+ data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));
+
+ data = runModifiers(data.instance.modifiers, data, 'flip');
+ }
+ });
+ return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function keepTogether(data) {
+ var _data$offsets = data.offsets,
+ popper = _data$offsets.popper,
+ reference = _data$offsets.reference;
+
+ var placement = data.placement.split('-')[0];
+ var floor = Math.floor;
+ var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
+ var side = isVertical ? 'right' : 'bottom';
+ var opSide = isVertical ? 'left' : 'top';
+ var measurement = isVertical ? 'width' : 'height';
+
+ if (popper[side] < floor(reference[opSide])) {
+ data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];
+ }
+ if (popper[opSide] > floor(reference[side])) {
+ data.offsets.popper[opSide] = floor(reference[side]);
+ }
+
+ return data;
+}
+
+/**
+ * Converts a string containing value + unit into a px value number
+ * @function
+ * @memberof {modifiers~offset}
+ * @private
+ * @argument {String} str - Value + unit string
+ * @argument {String} measurement - `height` or `width`
+ * @argument {Object} popperOffsets
+ * @argument {Object} referenceOffsets
+ * @returns {Number|String}
+ * Value in pixels, or original string if no values were extracted
+ */
+function toValue(str, measurement, popperOffsets, referenceOffsets) {
+ // separate value from unit
+ var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/);
+ var value = +split[1];
+ var unit = split[2];
+
+ // If it's not a number it's an operator, I guess
+ if (!value) {
+ return str;
+ }
+
+ if (unit.indexOf('%') === 0) {
+ var element = void 0;
+ switch (unit) {
+ case '%p':
+ element = popperOffsets;
+ break;
+ case '%':
+ case '%r':
+ default:
+ element = referenceOffsets;
+ }
+
+ var rect = getClientRect(element);
+ return rect[measurement] / 100 * value;
+ } else if (unit === 'vh' || unit === 'vw') {
+ // if is a vh or vw, we calculate the size based on the viewport
+ var size = void 0;
+ if (unit === 'vh') {
+ size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
+ } else {
+ size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
+ }
+ return size / 100 * value;
+ } else {
+ // if is an explicit pixel unit, we get rid of the unit and keep the value
+ // if is an implicit unit, it's px, and we return just the value
+ return value;
+ }
+}
+
+/**
+ * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.
+ * @function
+ * @memberof {modifiers~offset}
+ * @private
+ * @argument {String} offset
+ * @argument {Object} popperOffsets
+ * @argument {Object} referenceOffsets
+ * @argument {String} basePlacement
+ * @returns {Array} a two cells array with x and y offsets in numbers
+ */
+function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {
+ var offsets = [0, 0];
+
+ // Use height if placement is left or right and index is 0 otherwise use width
+ // in this way the first offset will use an axis and the second one
+ // will use the other one
+ var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;
+
+ // Split the offset string to obtain a list of values and operands
+ // The regex addresses values with the plus or minus sign in front (+10, -20, etc)
+ var fragments = offset.split(/(\+|\-)/).map(function (frag) {
+ return frag.trim();
+ });
+
+ // Detect if the offset string contains a pair of values or a single one
+ // they could be separated by comma or space
+ var divider = fragments.indexOf(find(fragments, function (frag) {
+ return frag.search(/,|\s/) !== -1;
+ }));
+
+ if (fragments[divider] && fragments[divider].indexOf(',') === -1) {
+ console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');
+ }
+
+ // If divider is found, we divide the list of values and operands to divide
+ // them by ofset X and Y.
+ var splitRegex = /\s*,\s*|\s+/;
+ var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];
+
+ // Convert the values with units to absolute pixels to allow our computations
+ ops = ops.map(function (op, index) {
+ // Most of the units rely on the orientation of the popper
+ var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';
+ var mergeWithPrevious = false;
+ return op
+ // This aggregates any `+` or `-` sign that aren't considered operators
+ // e.g.: 10 + +5 => [10, +, +5]
+ .reduce(function (a, b) {
+ if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {
+ a[a.length - 1] = b;
+ mergeWithPrevious = true;
+ return a;
+ } else if (mergeWithPrevious) {
+ a[a.length - 1] += b;
+ mergeWithPrevious = false;
+ return a;
+ } else {
+ return a.concat(b);
+ }
+ }, [])
+ // Here we convert the string values into number values (in px)
+ .map(function (str) {
+ return toValue(str, measurement, popperOffsets, referenceOffsets);
+ });
+ });
+
+ // Loop trough the offsets arrays and execute the operations
+ ops.forEach(function (op, index) {
+ op.forEach(function (frag, index2) {
+ if (isNumeric(frag)) {
+ offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);
+ }
+ });
+ });
+ return offsets;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @argument {Number|String} options.offset=0
+ * The offset value as described in the modifier description
+ * @returns {Object} The data object, properly modified
+ */
+function offset(data, _ref) {
+ var offset = _ref.offset;
+ var placement = data.placement,
+ _data$offsets = data.offsets,
+ popper = _data$offsets.popper,
+ reference = _data$offsets.reference;
+
+ var basePlacement = placement.split('-')[0];
+
+ var offsets = void 0;
+ if (isNumeric(+offset)) {
+ offsets = [+offset, 0];
+ } else {
+ offsets = parseOffset(offset, popper, reference, basePlacement);
+ }
+
+ if (basePlacement === 'left') {
+ popper.top += offsets[0];
+ popper.left -= offsets[1];
+ } else if (basePlacement === 'right') {
+ popper.top += offsets[0];
+ popper.left += offsets[1];
+ } else if (basePlacement === 'top') {
+ popper.left += offsets[0];
+ popper.top -= offsets[1];
+ } else if (basePlacement === 'bottom') {
+ popper.left += offsets[0];
+ popper.top += offsets[1];
+ }
+
+ data.popper = popper;
+ return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function preventOverflow(data, options) {
+ var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);
+
+ // If offsetParent is the reference element, we really want to
+ // go one step up and use the next offsetParent as reference to
+ // avoid to make this modifier completely useless and look like broken
+ if (data.instance.reference === boundariesElement) {
+ boundariesElement = getOffsetParent(boundariesElement);
+ }
+
+ // NOTE: DOM access here
+ // resets the popper's position so that the document size can be calculated excluding
+ // the size of the popper element itself
+ var transformProp = getSupportedPropertyName('transform');
+ var popperStyles = data.instance.popper.style; // assignment to help minification
+ var top = popperStyles.top,
+ left = popperStyles.left,
+ transform = popperStyles[transformProp];
+
+ popperStyles.top = '';
+ popperStyles.left = '';
+ popperStyles[transformProp] = '';
+
+ var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
+
+ // NOTE: DOM access here
+ // restores the original style properties after the offsets have been computed
+ popperStyles.top = top;
+ popperStyles.left = left;
+ popperStyles[transformProp] = transform;
+
+ options.boundaries = boundaries;
+
+ var order = options.priority;
+ var popper = data.offsets.popper;
+
+ var check = {
+ primary: function primary(placement) {
+ var value = popper[placement];
+ if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {
+ value = Math.max(popper[placement], boundaries[placement]);
+ }
+ return defineProperty({}, placement, value);
+ },
+ secondary: function secondary(placement) {
+ var mainSide = placement === 'right' ? 'left' : 'top';
+ var value = popper[mainSide];
+ if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {
+ value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));
+ }
+ return defineProperty({}, mainSide, value);
+ }
+ };
+
+ order.forEach(function (placement) {
+ var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';
+ popper = _extends({}, popper, check[side](placement));
+ });
+
+ data.offsets.popper = popper;
+
+ return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function shift(data) {
+ var placement = data.placement;
+ var basePlacement = placement.split('-')[0];
+ var shiftvariation = placement.split('-')[1];
+
+ // if shift shiftvariation is specified, run the modifier
+ if (shiftvariation) {
+ var _data$offsets = data.offsets,
+ reference = _data$offsets.reference,
+ popper = _data$offsets.popper;
+
+ var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;
+ var side = isVertical ? 'left' : 'top';
+ var measurement = isVertical ? 'width' : 'height';
+
+ var shiftOffsets = {
+ start: defineProperty({}, side, reference[side]),
+ end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])
+ };
+
+ data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);
+ }
+
+ return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function hide(data) {
+ if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {
+ return data;
+ }
+
+ var refRect = data.offsets.reference;
+ var bound = find(data.instance.modifiers, function (modifier) {
+ return modifier.name === 'preventOverflow';
+ }).boundaries;
+
+ if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {
+ // Avoid unnecessary DOM access if visibility hasn't changed
+ if (data.hide === true) {
+ return data;
+ }
+
+ data.hide = true;
+ data.attributes['x-out-of-boundaries'] = '';
+ } else {
+ // Avoid unnecessary DOM access if visibility hasn't changed
+ if (data.hide === false) {
+ return data;
+ }
+
+ data.hide = false;
+ data.attributes['x-out-of-boundaries'] = false;
+ }
+
+ return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function inner(data) {
+ var placement = data.placement;
+ var basePlacement = placement.split('-')[0];
+ var _data$offsets = data.offsets,
+ popper = _data$offsets.popper,
+ reference = _data$offsets.reference;
+
+ var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;
+
+ var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;
+
+ popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);
+
+ data.placement = getOppositePlacement(placement);
+ data.offsets.popper = getClientRect(popper);
+
+ return data;
+}
+
+/**
+ * Modifier function, each modifier can have a function of this type assigned
+ * to its `fn` property.
+ * These functions will be called on each update, this means that you must
+ * make sure they are performant enough to avoid performance bottlenecks.
+ *
+ * @function ModifierFn
+ * @argument {dataObject} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {dataObject} The data object, properly modified
+ */
+
+/**
+ * Modifiers are plugins used to alter the behavior of your poppers.
+ * Popper.js uses a set of 9 modifiers to provide all the basic functionalities
+ * needed by the library.
+ *
+ * Usually you don't want to override the `order`, `fn` and `onLoad` props.
+ * All the other properties are configurations that could be tweaked.
+ * @namespace modifiers
+ */
+var modifiers = {
+ /**
+ * Modifier used to shift the popper on the start or end of its reference
+ * element.
+ * It will read the variation of the `placement` property.
+ * It can be one either `-end` or `-start`.
+ * @memberof modifiers
+ * @inner
+ */
+ shift: {
+ /** @prop {number} order=100 - Index used to define the order of execution */
+ order: 100,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: shift
+ },
+
+ /**
+ * The `offset` modifier can shift your popper on both its axis.
+ *
+ * It accepts the following units:
+ * - `px` or unit-less, interpreted as pixels
+ * - `%` or `%r`, percentage relative to the length of the reference element
+ * - `%p`, percentage relative to the length of the popper element
+ * - `vw`, CSS viewport width unit
+ * - `vh`, CSS viewport height unit
+ *
+ * For length is intended the main axis relative to the placement of the popper.
+ * This means that if the placement is `top` or `bottom`, the length will be the
+ * `width`. In case of `left` or `right`, it will be the `height`.
+ *
+ * You can provide a single value (as `Number` or `String`), or a pair of values
+ * as `String` divided by a comma or one (or more) white spaces.
+ * The latter is a deprecated method because it leads to confusion and will be
+ * removed in v2.
+ * Additionally, it accepts additions and subtractions between different units.
+ * Note that multiplications and divisions aren't supported.
+ *
+ * Valid examples are:
+ * ```
+ * 10
+ * '10%'
+ * '10, 10'
+ * '10%, 10'
+ * '10 + 10%'
+ * '10 - 5vh + 3%'
+ * '-10px + 5vh, 5px - 6%'
+ * ```
+ * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap
+ * > with their reference element, unfortunately, you will have to disable the `flip` modifier.
+ * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).
+ *
+ * @memberof modifiers
+ * @inner
+ */
+ offset: {
+ /** @prop {number} order=200 - Index used to define the order of execution */
+ order: 200,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: offset,
+ /** @prop {Number|String} offset=0
+ * The offset value as described in the modifier description
+ */
+ offset: 0
+ },
+
+ /**
+ * Modifier used to prevent the popper from being positioned outside the boundary.
+ *
+ * A scenario exists where the reference itself is not within the boundaries.
+ * We can say it has "escaped the boundaries" — or just "escaped".
+ * In this case we need to decide whether the popper should either:
+ *
+ * - detach from the reference and remain "trapped" in the boundaries, or
+ * - if it should ignore the boundary and "escape with its reference"
+ *
+ * When `escapeWithReference` is set to`true` and reference is completely
+ * outside its boundaries, the popper will overflow (or completely leave)
+ * the boundaries in order to remain attached to the edge of the reference.
+ *
+ * @memberof modifiers
+ * @inner
+ */
+ preventOverflow: {
+ /** @prop {number} order=300 - Index used to define the order of execution */
+ order: 300,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: preventOverflow,
+ /**
+ * @prop {Array} [priority=['left','right','top','bottom']]
+ * Popper will try to prevent overflow following these priorities by default,
+ * then, it could overflow on the left and on top of the `boundariesElement`
+ */
+ priority: ['left', 'right', 'top', 'bottom'],
+ /**
+ * @prop {number} padding=5
+ * Amount of pixel used to define a minimum distance between the boundaries
+ * and the popper. This makes sure the popper always has a little padding
+ * between the edges of its container
+ */
+ padding: 5,
+ /**
+ * @prop {String|HTMLElement} boundariesElement='scrollParent'
+ * Boundaries used by the modifier. Can be `scrollParent`, `window`,
+ * `viewport` or any DOM element.
+ */
+ boundariesElement: 'scrollParent'
+ },
+
+ /**
+ * Modifier used to make sure the reference and its popper stay near each other
+ * without leaving any gap between the two. Especially useful when the arrow is
+ * enabled and you want to ensure that it points to its reference element.
+ * It cares only about the first axis. You can still have poppers with margin
+ * between the popper and its reference element.
+ * @memberof modifiers
+ * @inner
+ */
+ keepTogether: {
+ /** @prop {number} order=400 - Index used to define the order of execution */
+ order: 400,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: keepTogether
+ },
+
+ /**
+ * This modifier is used to move the `arrowElement` of the popper to make
+ * sure it is positioned between the reference element and its popper element.
+ * It will read the outer size of the `arrowElement` node to detect how many
+ * pixels of conjunction are needed.
+ *
+ * It has no effect if no `arrowElement` is provided.
+ * @memberof modifiers
+ * @inner
+ */
+ arrow: {
+ /** @prop {number} order=500 - Index used to define the order of execution */
+ order: 500,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: arrow,
+ /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */
+ element: '[x-arrow]'
+ },
+
+ /**
+ * Modifier used to flip the popper's placement when it starts to overlap its
+ * reference element.
+ *
+ * Requires the `preventOverflow` modifier before it in order to work.
+ *
+ * **NOTE:** this modifier will interrupt the current update cycle and will
+ * restart it if it detects the need to flip the placement.
+ * @memberof modifiers
+ * @inner
+ */
+ flip: {
+ /** @prop {number} order=600 - Index used to define the order of execution */
+ order: 600,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: flip,
+ /**
+ * @prop {String|Array} behavior='flip'
+ * The behavior used to change the popper's placement. It can be one of
+ * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid
+ * placements (with optional variations)
+ */
+ behavior: 'flip',
+ /**
+ * @prop {number} padding=5
+ * The popper will flip if it hits the edges of the `boundariesElement`
+ */
+ padding: 5,
+ /**
+ * @prop {String|HTMLElement} boundariesElement='viewport'
+ * The element which will define the boundaries of the popper position.
+ * The popper will never be placed outside of the defined boundaries
+ * (except if `keepTogether` is enabled)
+ */
+ boundariesElement: 'viewport',
+ /**
+ * @prop {Boolean} flipVariations=false
+ * The popper will switch placement variation between `-start` and `-end` when
+ * the reference element overlaps its boundaries.
+ *
+ * The original placement should have a set variation.
+ */
+ flipVariations: false,
+ /**
+ * @prop {Boolean} flipVariationsByContent=false
+ * The popper will switch placement variation between `-start` and `-end` when
+ * the popper element overlaps its reference boundaries.
+ *
+ * The original placement should have a set variation.
+ */
+ flipVariationsByContent: false
+ },
+
+ /**
+ * Modifier used to make the popper flow toward the inner of the reference element.
+ * By default, when this modifier is disabled, the popper will be placed outside
+ * the reference element.
+ * @memberof modifiers
+ * @inner
+ */
+ inner: {
+ /** @prop {number} order=700 - Index used to define the order of execution */
+ order: 700,
+ /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */
+ enabled: false,
+ /** @prop {ModifierFn} */
+ fn: inner
+ },
+
+ /**
+ * Modifier used to hide the popper when its reference element is outside of the
+ * popper boundaries. It will set a `x-out-of-boundaries` attribute which can
+ * be used to hide with a CSS selector the popper when its reference is
+ * out of boundaries.
+ *
+ * Requires the `preventOverflow` modifier before it in order to work.
+ * @memberof modifiers
+ * @inner
+ */
+ hide: {
+ /** @prop {number} order=800 - Index used to define the order of execution */
+ order: 800,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: hide
+ },
+
+ /**
+ * Computes the style that will be applied to the popper element to gets
+ * properly positioned.
+ *
+ * Note that this modifier will not touch the DOM, it just prepares the styles
+ * so that `applyStyle` modifier can apply it. This separation is useful
+ * in case you need to replace `applyStyle` with a custom implementation.
+ *
+ * This modifier has `850` as `order` value to maintain backward compatibility
+ * with previous versions of Popper.js. Expect the modifiers ordering method
+ * to change in future major versions of the library.
+ *
+ * @memberof modifiers
+ * @inner
+ */
+ computeStyle: {
+ /** @prop {number} order=850 - Index used to define the order of execution */
+ order: 850,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: computeStyle,
+ /**
+ * @prop {Boolean} gpuAcceleration=true
+ * If true, it uses the CSS 3D transformation to position the popper.
+ * Otherwise, it will use the `top` and `left` properties
+ */
+ gpuAcceleration: true,
+ /**
+ * @prop {string} [x='bottom']
+ * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.
+ * Change this if your popper should grow in a direction different from `bottom`
+ */
+ x: 'bottom',
+ /**
+ * @prop {string} [x='left']
+ * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.
+ * Change this if your popper should grow in a direction different from `right`
+ */
+ y: 'right'
+ },
+
+ /**
+ * Applies the computed styles to the popper element.
+ *
+ * All the DOM manipulations are limited to this modifier. This is useful in case
+ * you want to integrate Popper.js inside a framework or view library and you
+ * want to delegate all the DOM manipulations to it.
+ *
+ * Note that if you disable this modifier, you must make sure the popper element
+ * has its position set to `absolute` before Popper.js can do its work!
+ *
+ * Just disable this modifier and define your own to achieve the desired effect.
+ *
+ * @memberof modifiers
+ * @inner
+ */
+ applyStyle: {
+ /** @prop {number} order=900 - Index used to define the order of execution */
+ order: 900,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: applyStyle,
+ /** @prop {Function} */
+ onLoad: applyStyleOnLoad,
+ /**
+ * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier
+ * @prop {Boolean} gpuAcceleration=true
+ * If true, it uses the CSS 3D transformation to position the popper.
+ * Otherwise, it will use the `top` and `left` properties
+ */
+ gpuAcceleration: undefined
+ }
+};
+
+/**
+ * The `dataObject` is an object containing all the information used by Popper.js.
+ * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.
+ * @name dataObject
+ * @property {Object} data.instance The Popper.js instance
+ * @property {String} data.placement Placement applied to popper
+ * @property {String} data.originalPlacement Placement originally defined on init
+ * @property {Boolean} data.flipped True if popper has been flipped by flip modifier
+ * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper
+ * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier
+ * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)
+ * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)
+ * @property {Object} data.boundaries Offsets of the popper boundaries
+ * @property {Object} data.offsets The measurements of popper, reference and arrow elements
+ * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values
+ * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values
+ * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0
+ */
+
+/**
+ * Default options provided to Popper.js constructor.
+ * These can be overridden using the `options` argument of Popper.js.
+ * To override an option, simply pass an object with the same
+ * structure of the `options` object, as the 3rd argument. For example:
+ * ```
+ * new Popper(ref, pop, {
+ * modifiers: {
+ * preventOverflow: { enabled: false }
+ * }
+ * })
+ * ```
+ * @type {Object}
+ * @static
+ * @memberof Popper
+ */
+var Defaults = {
+ /**
+ * Popper's placement.
+ * @prop {Popper.placements} placement='bottom'
+ */
+ placement: 'bottom',
+
+ /**
+ * Set this to true if you want popper to position it self in 'fixed' mode
+ * @prop {Boolean} positionFixed=false
+ */
+ positionFixed: false,
+
+ /**
+ * Whether events (resize, scroll) are initially enabled.
+ * @prop {Boolean} eventsEnabled=true
+ */
+ eventsEnabled: true,
+
+ /**
+ * Set to true if you want to automatically remove the popper when
+ * you call the `destroy` method.
+ * @prop {Boolean} removeOnDestroy=false
+ */
+ removeOnDestroy: false,
+
+ /**
+ * Callback called when the popper is created.
+ * By default, it is set to no-op.
+ * Access Popper.js instance with `data.instance`.
+ * @prop {onCreate}
+ */
+ onCreate: function onCreate() {},
+
+ /**
+ * Callback called when the popper is updated. This callback is not called
+ * on the initialization/creation of the popper, but only on subsequent
+ * updates.
+ * By default, it is set to no-op.
+ * Access Popper.js instance with `data.instance`.
+ * @prop {onUpdate}
+ */
+ onUpdate: function onUpdate() {},
+
+ /**
+ * List of modifiers used to modify the offsets before they are applied to the popper.
+ * They provide most of the functionalities of Popper.js.
+ * @prop {modifiers}
+ */
+ modifiers: modifiers
+};
+
+/**
+ * @callback onCreate
+ * @param {dataObject} data
+ */
+
+/**
+ * @callback onUpdate
+ * @param {dataObject} data
+ */
+
+// Utils
+// Methods
+var Popper = function () {
+ /**
+ * Creates a new Popper.js instance.
+ * @class Popper
+ * @param {Element|referenceObject} reference - The reference element used to position the popper
+ * @param {Element} popper - The HTML / XML element used as the popper
+ * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)
+ * @return {Object} instance - The generated Popper.js instance
+ */
+ function Popper(reference, popper) {
+ var _this = this;
+
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+ classCallCheck(this, Popper);
+
+ this.scheduleUpdate = function () {
+ return requestAnimationFrame(_this.update);
+ };
+
+ // make update() debounced, so that it only runs at most once-per-tick
+ this.update = debounce(this.update.bind(this));
+
+ // with {} we create a new object with the options inside it
+ this.options = _extends({}, Popper.Defaults, options);
+
+ // init state
+ this.state = {
+ isDestroyed: false,
+ isCreated: false,
+ scrollParents: []
+ };
+
+ // get reference and popper elements (allow jQuery wrappers)
+ this.reference = reference && reference.jquery ? reference[0] : reference;
+ this.popper = popper && popper.jquery ? popper[0] : popper;
+
+ // Deep merge modifiers options
+ this.options.modifiers = {};
+ Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {
+ _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});
+ });
+
+ // Refactoring modifiers' list (Object => Array)
+ this.modifiers = Object.keys(this.options.modifiers).map(function (name) {
+ return _extends({
+ name: name
+ }, _this.options.modifiers[name]);
+ })
+ // sort the modifiers by order
+ .sort(function (a, b) {
+ return a.order - b.order;
+ });
+
+ // modifiers have the ability to execute arbitrary code when Popper.js get inited
+ // such code is executed in the same order of its modifier
+ // they could add new properties to their options configuration
+ // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!
+ this.modifiers.forEach(function (modifierOptions) {
+ if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {
+ modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);
+ }
+ });
+
+ // fire the first update to position the popper in the right place
+ this.update();
+
+ var eventsEnabled = this.options.eventsEnabled;
+ if (eventsEnabled) {
+ // setup event listeners, they will take care of update the position in specific situations
+ this.enableEventListeners();
+ }
+
+ this.state.eventsEnabled = eventsEnabled;
+ }
+
+ // We can't use class properties because they don't get listed in the
+ // class prototype and break stuff like Sinon stubs
+
+
+ createClass(Popper, [{
+ key: 'update',
+ value: function update$$1() {
+ return update.call(this);
+ }
+ }, {
+ key: 'destroy',
+ value: function destroy$$1() {
+ return destroy.call(this);
+ }
+ }, {
+ key: 'enableEventListeners',
+ value: function enableEventListeners$$1() {
+ return enableEventListeners.call(this);
+ }
+ }, {
+ key: 'disableEventListeners',
+ value: function disableEventListeners$$1() {
+ return disableEventListeners.call(this);
+ }
+
+ /**
+ * Schedules an update. It will run on the next UI update available.
+ * @method scheduleUpdate
+ * @memberof Popper
+ */
+
+
+ /**
+ * Collection of utilities useful when writing custom modifiers.
+ * Starting from version 1.7, this method is available only if you
+ * include `popper-utils.js` before `popper.js`.
+ *
+ * **DEPRECATION**: This way to access PopperUtils is deprecated
+ * and will be removed in v2! Use the PopperUtils module directly instead.
+ * Due to the high instability of the methods contained in Utils, we can't
+ * guarantee them to follow semver. Use them at your own risk!
+ * @static
+ * @private
+ * @type {Object}
+ * @deprecated since version 1.8
+ * @member Utils
+ * @memberof Popper
+ */
+
+ }]);
+ return Popper;
+}();
+
+/**
+ * The `referenceObject` is an object that provides an interface compatible with Popper.js
+ * and lets you use it as replacement of a real DOM node.
+ * You can use this method to position a popper relatively to a set of coordinates
+ * in case you don't have a DOM node to use as reference.
+ *
+ * ```
+ * new Popper(referenceObject, popperNode);
+ * ```
+ *
+ * NB: This feature isn't supported in Internet Explorer 10.
+ * @name referenceObject
+ * @property {Function} data.getBoundingClientRect
+ * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.
+ * @property {number} data.clientWidth
+ * An ES6 getter that will return the width of the virtual reference element.
+ * @property {number} data.clientHeight
+ * An ES6 getter that will return the height of the virtual reference element.
+ */
+
+
+Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;
+Popper.placements = placements;
+Popper.Defaults = Defaults;
+
+/* harmony default export */ __webpack_exports__["default"] = (Popper);
+//# sourceMappingURL=popper.js.map
+
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/16.f9216c5dee8b80d554c2.js b/public/16.f9216c5dee8b80d554c2.js
new file mode 100644
index 00000000..50947c80
--- /dev/null
+++ b/public/16.f9216c5dee8b80d554c2.js
@@ -0,0 +1,19645 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[16],{
+
+/***/ "./node_modules/clipboard/dist/clipboard.js":
+/*!**************************************************!*\
+ !*** ./node_modules/clipboard/dist/clipboard.js ***!
+ \**************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+/*!
+ * clipboard.js v2.0.4
+ * https://zenorocha.github.io/clipboard.js
+ *
+ * Licensed MIT © Zeno Rocha
+ */
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(true)
+ module.exports = factory();
+ else {}
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _clipboardAction = __webpack_require__(1);
+
+var _clipboardAction2 = _interopRequireDefault(_clipboardAction);
+
+var _tinyEmitter = __webpack_require__(3);
+
+var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);
+
+var _goodListener = __webpack_require__(4);
+
+var _goodListener2 = _interopRequireDefault(_goodListener);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+/**
+ * Base class which takes one or more elements, adds event listeners to them,
+ * and instantiates a new `ClipboardAction` on each click.
+ */
+var Clipboard = function (_Emitter) {
+ _inherits(Clipboard, _Emitter);
+
+ /**
+ * @param {String|HTMLElement|HTMLCollection|NodeList} trigger
+ * @param {Object} options
+ */
+ function Clipboard(trigger, options) {
+ _classCallCheck(this, Clipboard);
+
+ var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));
+
+ _this.resolveOptions(options);
+ _this.listenClick(trigger);
+ return _this;
+ }
+
+ /**
+ * Defines if attributes would be resolved using internal setter functions
+ * or custom functions that were passed in the constructor.
+ * @param {Object} options
+ */
+
+
+ _createClass(Clipboard, [{
+ key: 'resolveOptions',
+ value: function resolveOptions() {
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ this.action = typeof options.action === 'function' ? options.action : this.defaultAction;
+ this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;
+ this.text = typeof options.text === 'function' ? options.text : this.defaultText;
+ this.container = _typeof(options.container) === 'object' ? options.container : document.body;
+ }
+
+ /**
+ * Adds a click event listener to the passed trigger.
+ * @param {String|HTMLElement|HTMLCollection|NodeList} trigger
+ */
+
+ }, {
+ key: 'listenClick',
+ value: function listenClick(trigger) {
+ var _this2 = this;
+
+ this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {
+ return _this2.onClick(e);
+ });
+ }
+
+ /**
+ * Defines a new `ClipboardAction` on each click event.
+ * @param {Event} e
+ */
+
+ }, {
+ key: 'onClick',
+ value: function onClick(e) {
+ var trigger = e.delegateTarget || e.currentTarget;
+
+ if (this.clipboardAction) {
+ this.clipboardAction = null;
+ }
+
+ this.clipboardAction = new _clipboardAction2.default({
+ action: this.action(trigger),
+ target: this.target(trigger),
+ text: this.text(trigger),
+ container: this.container,
+ trigger: trigger,
+ emitter: this
+ });
+ }
+
+ /**
+ * Default `action` lookup function.
+ * @param {Element} trigger
+ */
+
+ }, {
+ key: 'defaultAction',
+ value: function defaultAction(trigger) {
+ return getAttributeValue('action', trigger);
+ }
+
+ /**
+ * Default `target` lookup function.
+ * @param {Element} trigger
+ */
+
+ }, {
+ key: 'defaultTarget',
+ value: function defaultTarget(trigger) {
+ var selector = getAttributeValue('target', trigger);
+
+ if (selector) {
+ return document.querySelector(selector);
+ }
+ }
+
+ /**
+ * Returns the support of the given action, or all actions if no action is
+ * given.
+ * @param {String} [action]
+ */
+
+ }, {
+ key: 'defaultText',
+
+
+ /**
+ * Default `text` lookup function.
+ * @param {Element} trigger
+ */
+ value: function defaultText(trigger) {
+ return getAttributeValue('text', trigger);
+ }
+
+ /**
+ * Destroy lifecycle.
+ */
+
+ }, {
+ key: 'destroy',
+ value: function destroy() {
+ this.listener.destroy();
+
+ if (this.clipboardAction) {
+ this.clipboardAction.destroy();
+ this.clipboardAction = null;
+ }
+ }
+ }], [{
+ key: 'isSupported',
+ value: function isSupported() {
+ var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];
+
+ var actions = typeof action === 'string' ? [action] : action;
+ var support = !!document.queryCommandSupported;
+
+ actions.forEach(function (action) {
+ support = support && !!document.queryCommandSupported(action);
+ });
+
+ return support;
+ }
+ }]);
+
+ return Clipboard;
+}(_tinyEmitter2.default);
+
+/**
+ * Helper function to retrieve attribute value.
+ * @param {String} suffix
+ * @param {Element} element
+ */
+
+
+function getAttributeValue(suffix, element) {
+ var attribute = 'data-clipboard-' + suffix;
+
+ if (!element.hasAttribute(attribute)) {
+ return;
+ }
+
+ return element.getAttribute(attribute);
+}
+
+module.exports = Clipboard;
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _select = __webpack_require__(2);
+
+var _select2 = _interopRequireDefault(_select);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+/**
+ * Inner class which performs selection from either `text` or `target`
+ * properties and then executes copy or cut operations.
+ */
+var ClipboardAction = function () {
+ /**
+ * @param {Object} options
+ */
+ function ClipboardAction(options) {
+ _classCallCheck(this, ClipboardAction);
+
+ this.resolveOptions(options);
+ this.initSelection();
+ }
+
+ /**
+ * Defines base properties passed from constructor.
+ * @param {Object} options
+ */
+
+
+ _createClass(ClipboardAction, [{
+ key: 'resolveOptions',
+ value: function resolveOptions() {
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ this.action = options.action;
+ this.container = options.container;
+ this.emitter = options.emitter;
+ this.target = options.target;
+ this.text = options.text;
+ this.trigger = options.trigger;
+
+ this.selectedText = '';
+ }
+
+ /**
+ * Decides which selection strategy is going to be applied based
+ * on the existence of `text` and `target` properties.
+ */
+
+ }, {
+ key: 'initSelection',
+ value: function initSelection() {
+ if (this.text) {
+ this.selectFake();
+ } else if (this.target) {
+ this.selectTarget();
+ }
+ }
+
+ /**
+ * Creates a fake textarea element, sets its value from `text` property,
+ * and makes a selection on it.
+ */
+
+ }, {
+ key: 'selectFake',
+ value: function selectFake() {
+ var _this = this;
+
+ var isRTL = document.documentElement.getAttribute('dir') == 'rtl';
+
+ this.removeFake();
+
+ this.fakeHandlerCallback = function () {
+ return _this.removeFake();
+ };
+ this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;
+
+ this.fakeElem = document.createElement('textarea');
+ // Prevent zooming on iOS
+ this.fakeElem.style.fontSize = '12pt';
+ // Reset box model
+ this.fakeElem.style.border = '0';
+ this.fakeElem.style.padding = '0';
+ this.fakeElem.style.margin = '0';
+ // Move element out of screen horizontally
+ this.fakeElem.style.position = 'absolute';
+ this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';
+ // Move element to the same position vertically
+ var yPosition = window.pageYOffset || document.documentElement.scrollTop;
+ this.fakeElem.style.top = yPosition + 'px';
+
+ this.fakeElem.setAttribute('readonly', '');
+ this.fakeElem.value = this.text;
+
+ this.container.appendChild(this.fakeElem);
+
+ this.selectedText = (0, _select2.default)(this.fakeElem);
+ this.copyText();
+ }
+
+ /**
+ * Only removes the fake element after another click event, that way
+ * a user can hit `Ctrl+C` to copy because selection still exists.
+ */
+
+ }, {
+ key: 'removeFake',
+ value: function removeFake() {
+ if (this.fakeHandler) {
+ this.container.removeEventListener('click', this.fakeHandlerCallback);
+ this.fakeHandler = null;
+ this.fakeHandlerCallback = null;
+ }
+
+ if (this.fakeElem) {
+ this.container.removeChild(this.fakeElem);
+ this.fakeElem = null;
+ }
+ }
+
+ /**
+ * Selects the content from element passed on `target` property.
+ */
+
+ }, {
+ key: 'selectTarget',
+ value: function selectTarget() {
+ this.selectedText = (0, _select2.default)(this.target);
+ this.copyText();
+ }
+
+ /**
+ * Executes the copy operation based on the current selection.
+ */
+
+ }, {
+ key: 'copyText',
+ value: function copyText() {
+ var succeeded = void 0;
+
+ try {
+ succeeded = document.execCommand(this.action);
+ } catch (err) {
+ succeeded = false;
+ }
+
+ this.handleResult(succeeded);
+ }
+
+ /**
+ * Fires an event based on the copy operation result.
+ * @param {Boolean} succeeded
+ */
+
+ }, {
+ key: 'handleResult',
+ value: function handleResult(succeeded) {
+ this.emitter.emit(succeeded ? 'success' : 'error', {
+ action: this.action,
+ text: this.selectedText,
+ trigger: this.trigger,
+ clearSelection: this.clearSelection.bind(this)
+ });
+ }
+
+ /**
+ * Moves focus away from `target` and back to the trigger, removes current selection.
+ */
+
+ }, {
+ key: 'clearSelection',
+ value: function clearSelection() {
+ if (this.trigger) {
+ this.trigger.focus();
+ }
+
+ window.getSelection().removeAllRanges();
+ }
+
+ /**
+ * Sets the `action` to be performed which can be either 'copy' or 'cut'.
+ * @param {String} action
+ */
+
+ }, {
+ key: 'destroy',
+
+
+ /**
+ * Destroy lifecycle.
+ */
+ value: function destroy() {
+ this.removeFake();
+ }
+ }, {
+ key: 'action',
+ set: function set() {
+ var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';
+
+ this._action = action;
+
+ if (this._action !== 'copy' && this._action !== 'cut') {
+ throw new Error('Invalid "action" value, use either "copy" or "cut"');
+ }
+ }
+
+ /**
+ * Gets the `action` property.
+ * @return {String}
+ */
+ ,
+ get: function get() {
+ return this._action;
+ }
+
+ /**
+ * Sets the `target` property using an element
+ * that will be have its content copied.
+ * @param {Element} target
+ */
+
+ }, {
+ key: 'target',
+ set: function set(target) {
+ if (target !== undefined) {
+ if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {
+ if (this.action === 'copy' && target.hasAttribute('disabled')) {
+ throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');
+ }
+
+ if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {
+ throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');
+ }
+
+ this._target = target;
+ } else {
+ throw new Error('Invalid "target" value, use a valid Element');
+ }
+ }
+ }
+
+ /**
+ * Gets the `target` property.
+ * @return {String|HTMLElement}
+ */
+ ,
+ get: function get() {
+ return this._target;
+ }
+ }]);
+
+ return ClipboardAction;
+}();
+
+module.exports = ClipboardAction;
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports) {
+
+function select(element) {
+ var selectedText;
+
+ if (element.nodeName === 'SELECT') {
+ element.focus();
+
+ selectedText = element.value;
+ }
+ else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {
+ var isReadOnly = element.hasAttribute('readonly');
+
+ if (!isReadOnly) {
+ element.setAttribute('readonly', '');
+ }
+
+ element.select();
+ element.setSelectionRange(0, element.value.length);
+
+ if (!isReadOnly) {
+ element.removeAttribute('readonly');
+ }
+
+ selectedText = element.value;
+ }
+ else {
+ if (element.hasAttribute('contenteditable')) {
+ element.focus();
+ }
+
+ var selection = window.getSelection();
+ var range = document.createRange();
+
+ range.selectNodeContents(element);
+ selection.removeAllRanges();
+ selection.addRange(range);
+
+ selectedText = selection.toString();
+ }
+
+ return selectedText;
+}
+
+module.exports = select;
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports) {
+
+function E () {
+ // Keep this empty so it's easier to inherit from
+ // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)
+}
+
+E.prototype = {
+ on: function (name, callback, ctx) {
+ var e = this.e || (this.e = {});
+
+ (e[name] || (e[name] = [])).push({
+ fn: callback,
+ ctx: ctx
+ });
+
+ return this;
+ },
+
+ once: function (name, callback, ctx) {
+ var self = this;
+ function listener () {
+ self.off(name, listener);
+ callback.apply(ctx, arguments);
+ };
+
+ listener._ = callback
+ return this.on(name, listener, ctx);
+ },
+
+ emit: function (name) {
+ var data = [].slice.call(arguments, 1);
+ var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
+ var i = 0;
+ var len = evtArr.length;
+
+ for (i; i < len; i++) {
+ evtArr[i].fn.apply(evtArr[i].ctx, data);
+ }
+
+ return this;
+ },
+
+ off: function (name, callback) {
+ var e = this.e || (this.e = {});
+ var evts = e[name];
+ var liveEvents = [];
+
+ if (evts && callback) {
+ for (var i = 0, len = evts.length; i < len; i++) {
+ if (evts[i].fn !== callback && evts[i].fn._ !== callback)
+ liveEvents.push(evts[i]);
+ }
+ }
+
+ // Remove event from queue to prevent memory leak
+ // Suggested by https://github.com/lazd
+ // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910
+
+ (liveEvents.length)
+ ? e[name] = liveEvents
+ : delete e[name];
+
+ return this;
+ }
+};
+
+module.exports = E;
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var is = __webpack_require__(5);
+var delegate = __webpack_require__(6);
+
+/**
+ * Validates all params and calls the right
+ * listener function based on its target type.
+ *
+ * @param {String|HTMLElement|HTMLCollection|NodeList} target
+ * @param {String} type
+ * @param {Function} callback
+ * @return {Object}
+ */
+function listen(target, type, callback) {
+ if (!target && !type && !callback) {
+ throw new Error('Missing required arguments');
+ }
+
+ if (!is.string(type)) {
+ throw new TypeError('Second argument must be a String');
+ }
+
+ if (!is.fn(callback)) {
+ throw new TypeError('Third argument must be a Function');
+ }
+
+ if (is.node(target)) {
+ return listenNode(target, type, callback);
+ }
+ else if (is.nodeList(target)) {
+ return listenNodeList(target, type, callback);
+ }
+ else if (is.string(target)) {
+ return listenSelector(target, type, callback);
+ }
+ else {
+ throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');
+ }
+}
+
+/**
+ * Adds an event listener to a HTML element
+ * and returns a remove listener function.
+ *
+ * @param {HTMLElement} node
+ * @param {String} type
+ * @param {Function} callback
+ * @return {Object}
+ */
+function listenNode(node, type, callback) {
+ node.addEventListener(type, callback);
+
+ return {
+ destroy: function() {
+ node.removeEventListener(type, callback);
+ }
+ }
+}
+
+/**
+ * Add an event listener to a list of HTML elements
+ * and returns a remove listener function.
+ *
+ * @param {NodeList|HTMLCollection} nodeList
+ * @param {String} type
+ * @param {Function} callback
+ * @return {Object}
+ */
+function listenNodeList(nodeList, type, callback) {
+ Array.prototype.forEach.call(nodeList, function(node) {
+ node.addEventListener(type, callback);
+ });
+
+ return {
+ destroy: function() {
+ Array.prototype.forEach.call(nodeList, function(node) {
+ node.removeEventListener(type, callback);
+ });
+ }
+ }
+}
+
+/**
+ * Add an event listener to a selector
+ * and returns a remove listener function.
+ *
+ * @param {String} selector
+ * @param {String} type
+ * @param {Function} callback
+ * @return {Object}
+ */
+function listenSelector(selector, type, callback) {
+ return delegate(document.body, selector, type, callback);
+}
+
+module.exports = listen;
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports) {
+
+/**
+ * Check if argument is a HTML element.
+ *
+ * @param {Object} value
+ * @return {Boolean}
+ */
+exports.node = function(value) {
+ return value !== undefined
+ && value instanceof HTMLElement
+ && value.nodeType === 1;
+};
+
+/**
+ * Check if argument is a list of HTML elements.
+ *
+ * @param {Object} value
+ * @return {Boolean}
+ */
+exports.nodeList = function(value) {
+ var type = Object.prototype.toString.call(value);
+
+ return value !== undefined
+ && (type === '[object NodeList]' || type === '[object HTMLCollection]')
+ && ('length' in value)
+ && (value.length === 0 || exports.node(value[0]));
+};
+
+/**
+ * Check if argument is a string.
+ *
+ * @param {Object} value
+ * @return {Boolean}
+ */
+exports.string = function(value) {
+ return typeof value === 'string'
+ || value instanceof String;
+};
+
+/**
+ * Check if argument is a function.
+ *
+ * @param {Object} value
+ * @return {Boolean}
+ */
+exports.fn = function(value) {
+ var type = Object.prototype.toString.call(value);
+
+ return type === '[object Function]';
+};
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var closest = __webpack_require__(7);
+
+/**
+ * Delegates event to a selector.
+ *
+ * @param {Element} element
+ * @param {String} selector
+ * @param {String} type
+ * @param {Function} callback
+ * @param {Boolean} useCapture
+ * @return {Object}
+ */
+function _delegate(element, selector, type, callback, useCapture) {
+ var listenerFn = listener.apply(this, arguments);
+
+ element.addEventListener(type, listenerFn, useCapture);
+
+ return {
+ destroy: function() {
+ element.removeEventListener(type, listenerFn, useCapture);
+ }
+ }
+}
+
+/**
+ * Delegates event to a selector.
+ *
+ * @param {Element|String|Array} [elements]
+ * @param {String} selector
+ * @param {String} type
+ * @param {Function} callback
+ * @param {Boolean} useCapture
+ * @return {Object}
+ */
+function delegate(elements, selector, type, callback, useCapture) {
+ // Handle the regular Element usage
+ if (typeof elements.addEventListener === 'function') {
+ return _delegate.apply(null, arguments);
+ }
+
+ // Handle Element-less usage, it defaults to global delegation
+ if (typeof type === 'function') {
+ // Use `document` as the first parameter, then apply arguments
+ // This is a short way to .unshift `arguments` without running into deoptimizations
+ return _delegate.bind(null, document).apply(null, arguments);
+ }
+
+ // Handle Selector-based usage
+ if (typeof elements === 'string') {
+ elements = document.querySelectorAll(elements);
+ }
+
+ // Handle Array-like based usage
+ return Array.prototype.map.call(elements, function (element) {
+ return _delegate(element, selector, type, callback, useCapture);
+ });
+}
+
+/**
+ * Finds closest match and invokes callback.
+ *
+ * @param {Element} element
+ * @param {String} selector
+ * @param {String} type
+ * @param {Function} callback
+ * @return {Function}
+ */
+function listener(element, selector, type, callback) {
+ return function(e) {
+ e.delegateTarget = closest(e.target, selector);
+
+ if (e.delegateTarget) {
+ callback.call(element, e);
+ }
+ }
+}
+
+module.exports = delegate;
+
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports) {
+
+var DOCUMENT_NODE_TYPE = 9;
+
+/**
+ * A polyfill for Element.matches()
+ */
+if (typeof Element !== 'undefined' && !Element.prototype.matches) {
+ var proto = Element.prototype;
+
+ proto.matches = proto.matchesSelector ||
+ proto.mozMatchesSelector ||
+ proto.msMatchesSelector ||
+ proto.oMatchesSelector ||
+ proto.webkitMatchesSelector;
+}
+
+/**
+ * Finds the closest parent that matches a selector.
+ *
+ * @param {Element} element
+ * @param {String} selector
+ * @return {Function}
+ */
+function closest (element, selector) {
+ while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {
+ if (typeof element.matches === 'function' &&
+ element.matches(selector)) {
+ return element;
+ }
+ element = element.parentNode;
+ }
+}
+
+module.exports = closest;
+
+
+/***/ })
+/******/ ]);
+});
+
+/***/ }),
+
+/***/ "./node_modules/dayjs/dayjs.min.js":
+/*!*****************************************!*\
+ !*** ./node_modules/dayjs/dayjs.min.js ***!
+ \*****************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+!function(t,n){ true?module.exports=n():undefined}(this,function(){"use strict";var t="millisecond",n="second",e="minute",r="hour",i="day",s="week",u="month",o="quarter",a="year",h=/^(\d{4})-?(\d{1,2})-?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?.?(\d{1,3})?$/,f=/\[([^\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,c=function(t,n,e){var r=String(t);return!r||r.length>=n?t:""+Array(n+1-r.length).join(e)+t},d={s:c,z:function(t){var n=-t.utcOffset(),e=Math.abs(n),r=Math.floor(e/60),i=e%60;return(n<=0?"+":"-")+c(r,2,"0")+":"+c(i,2,"0")},m:function(t,n){var e=12*(n.year()-t.year())+(n.month()-t.month()),r=t.clone().add(e,u),i=n-r<0,s=t.clone().add(e+(i?-1:1),u);return Number(-(e+(n-r)/(i?r-s:s-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(h){return{M:u,y:a,w:s,d:i,h:r,m:e,s:n,ms:t,Q:o}[h]||String(h||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},$={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},l="en",m={};m[l]=$;var y=function(t){return t instanceof v},M=function(t,n,e){var r;if(!t)return l;if("string"==typeof t)m[t]&&(r=t),n&&(m[t]=n,r=t);else{var i=t.name;m[i]=t,r=i}return e||(l=r),r},g=function(t,n,e){if(y(t))return t.clone();var r=n?"string"==typeof n?{format:n,pl:e}:n:{};return r.date=t,new v(r)},D=d;D.l=M,D.i=y,D.w=function(t,n){return g(t,{locale:n.$L,utc:n.$u})};var v=function(){function c(t){this.$L=this.$L||M(t.locale,null,!0),this.parse(t)}var d=c.prototype;return d.parse=function(t){this.$d=function(t){var n=t.date,e=t.utc;if(null===n)return new Date(NaN);if(D.u(n))return new Date;if(n instanceof Date)return new Date(n);if("string"==typeof n&&!/Z$/i.test(n)){var r=n.match(h);if(r)return e?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(n)}(t),this.init()},d.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},d.$utils=function(){return D},d.isValid=function(){return!("Invalid Date"===this.$d.toString())},d.isSame=function(t,n){var e=g(t);return this.startOf(n)<=e&&e<=this.endOf(n)},d.isAfter=function(t,n){return g(t)
+ * All rights reserved
+ *
+ * Licensed under the MIT license.
+ *
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *****************************************************************************/
+var dijkstra = {
+ single_source_shortest_paths: function(graph, s, d) {
+ // Predecessor map for each node that has been encountered.
+ // node ID => predecessor node ID
+ var predecessors = {};
+
+ // Costs of shortest paths from s to all nodes encountered.
+ // node ID => cost
+ var costs = {};
+ costs[s] = 0;
+
+ // Costs of shortest paths from s to all nodes encountered; differs from
+ // `costs` in that it provides easy access to the node that currently has
+ // the known shortest path from s.
+ // XXX: Do we actually need both `costs` and `open`?
+ var open = dijkstra.PriorityQueue.make();
+ open.push(s, 0);
+
+ var closest,
+ u, v,
+ cost_of_s_to_u,
+ adjacent_nodes,
+ cost_of_e,
+ cost_of_s_to_u_plus_cost_of_e,
+ cost_of_s_to_v,
+ first_visit;
+ while (!open.empty()) {
+ // In the nodes remaining in graph that have a known cost from s,
+ // find the node, u, that currently has the shortest path from s.
+ closest = open.pop();
+ u = closest.value;
+ cost_of_s_to_u = closest.cost;
+
+ // Get nodes adjacent to u...
+ adjacent_nodes = graph[u] || {};
+
+ // ...and explore the edges that connect u to those nodes, updating
+ // the cost of the shortest paths to any or all of those nodes as
+ // necessary. v is the node across the current edge from u.
+ for (v in adjacent_nodes) {
+ if (adjacent_nodes.hasOwnProperty(v)) {
+ // Get the cost of the edge running from u to v.
+ cost_of_e = adjacent_nodes[v];
+
+ // Cost of s to u plus the cost of u to v across e--this is *a*
+ // cost from s to v that may or may not be less than the current
+ // known cost to v.
+ cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;
+
+ // If we haven't visited v yet OR if the current known cost from s to
+ // v is greater than the new cost we just found (cost of s to u plus
+ // cost of u to v across e), update v's cost in the cost list and
+ // update v's predecessor in the predecessor list (it's now u).
+ cost_of_s_to_v = costs[v];
+ first_visit = (typeof costs[v] === 'undefined');
+ if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {
+ costs[v] = cost_of_s_to_u_plus_cost_of_e;
+ open.push(v, cost_of_s_to_u_plus_cost_of_e);
+ predecessors[v] = u;
+ }
+ }
+ }
+ }
+
+ if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {
+ var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');
+ throw new Error(msg);
+ }
+
+ return predecessors;
+ },
+
+ extract_shortest_path_from_predecessor_list: function(predecessors, d) {
+ var nodes = [];
+ var u = d;
+ var predecessor;
+ while (u) {
+ nodes.push(u);
+ predecessor = predecessors[u];
+ u = predecessors[u];
+ }
+ nodes.reverse();
+ return nodes;
+ },
+
+ find_path: function(graph, s, d) {
+ var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);
+ return dijkstra.extract_shortest_path_from_predecessor_list(
+ predecessors, d);
+ },
+
+ /**
+ * A very naive priority queue implementation.
+ */
+ PriorityQueue: {
+ make: function (opts) {
+ var T = dijkstra.PriorityQueue,
+ t = {},
+ key;
+ opts = opts || {};
+ for (key in T) {
+ if (T.hasOwnProperty(key)) {
+ t[key] = T[key];
+ }
+ }
+ t.queue = [];
+ t.sorter = opts.sorter || T.default_sorter;
+ return t;
+ },
+
+ default_sorter: function (a, b) {
+ return a.cost - b.cost;
+ },
+
+ /**
+ * Add a new item to the queue and ensure the highest priority element
+ * is at the front of the queue.
+ */
+ push: function (value, cost) {
+ var item = {value: value, cost: cost};
+ this.queue.push(item);
+ this.queue.sort(this.sorter);
+ },
+
+ /**
+ * Return the highest priority element in the queue.
+ */
+ pop: function () {
+ return this.queue.shift();
+ },
+
+ empty: function () {
+ return this.queue.length === 0;
+ }
+ }
+};
+
+
+// node.js module exports
+if (true) {
+ module.exports = dijkstra;
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/mo-js/build/mo.js":
+/*!****************************************!*\
+ !*** ./node_modules/mo-js/build/mo.js ***!
+ \****************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(true)
+ module.exports = factory();
+ else {}
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId])
+/******/ return installedModules[moduleId].exports;
+
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ exports: {},
+/******/ id: moduleId,
+/******/ loaded: false
+/******/ };
+
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ // Flag the module as loaded
+/******/ module.loaded = true;
+
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+
+
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "build/";
+
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ module.exports = __webpack_require__(1);
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module) {'use strict';
+
+ exports.__esModule = true;
+
+ var _typeof2 = __webpack_require__(3);
+
+ var _typeof3 = _interopRequireDefault(_typeof2);
+
+ var _h = __webpack_require__(71);
+
+ var _h2 = _interopRequireDefault(_h);
+
+ var _shapesMap = __webpack_require__(72);
+
+ var _shapesMap2 = _interopRequireDefault(_shapesMap);
+
+ var _shape = __webpack_require__(94);
+
+ var _shape2 = _interopRequireDefault(_shape);
+
+ var _shapeSwirl = __webpack_require__(117);
+
+ var _shapeSwirl2 = _interopRequireDefault(_shapeSwirl);
+
+ var _burst = __webpack_require__(118);
+
+ var _burst2 = _interopRequireDefault(_burst);
+
+ var _html = __webpack_require__(119);
+
+ var _html2 = _interopRequireDefault(_html);
+
+ var _stagger = __webpack_require__(127);
+
+ var _stagger2 = _interopRequireDefault(_stagger);
+
+ var _spriter = __webpack_require__(128);
+
+ var _spriter2 = _interopRequireDefault(_spriter);
+
+ var _motionPath = __webpack_require__(129);
+
+ var _motionPath2 = _interopRequireDefault(_motionPath);
+
+ var _tween = __webpack_require__(101);
+
+ var _tween2 = _interopRequireDefault(_tween);
+
+ var _timeline = __webpack_require__(110);
+
+ var _timeline2 = _interopRequireDefault(_timeline);
+
+ var _tweener = __webpack_require__(102);
+
+ var _tweener2 = _interopRequireDefault(_tweener);
+
+ var _tweenable = __webpack_require__(100);
+
+ var _tweenable2 = _interopRequireDefault(_tweenable);
+
+ var _thenable = __webpack_require__(99);
+
+ var _thenable2 = _interopRequireDefault(_thenable);
+
+ var _tunable = __webpack_require__(116);
+
+ var _tunable2 = _interopRequireDefault(_tunable);
+
+ var _delta = __webpack_require__(126);
+
+ var _delta2 = _interopRequireDefault(_delta);
+
+ var _deltas = __webpack_require__(125);
+
+ var _deltas2 = _interopRequireDefault(_deltas);
+
+ var _module = __webpack_require__(84);
+
+ var _module2 = _interopRequireDefault(_module);
+
+ var _easing = __webpack_require__(105);
+
+ var _easing2 = _interopRequireDefault(_easing);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ var mojs = {
+ revision: '0.288.2', isDebug: true, helpers: _h2.default,
+ Shape: _shape2.default, ShapeSwirl: _shapeSwirl2.default, Burst: _burst2.default, Html: _html2.default, stagger: _stagger2.default, Spriter: _spriter2.default, MotionPath: _motionPath2.default,
+ Tween: _tween2.default, Timeline: _timeline2.default, Tweenable: _tweenable2.default, Thenable: _thenable2.default, Tunable: _tunable2.default, Module: _module2.default,
+ tweener: _tweener2.default, easing: _easing2.default, shapesMap: _shapesMap2.default, _pool: { Delta: _delta2.default, Deltas: _deltas2.default }
+ };
+
+ // functions alias
+ mojs.h = mojs.helpers;
+ mojs.delta = mojs.h.delta;
+ // custom shape add function and class
+ mojs.addShape = mojs.shapesMap.addShape;
+ mojs.CustomShape = mojs.shapesMap.custom;
+ // module alias
+ mojs.Transit = mojs.Shape;
+ mojs.Swirl = mojs.ShapeSwirl;
+
+ // TODO:
+ /*
+ H/V in paths
+
+ rand for direction
+ burst children angle after tune
+ burst pathScale after tune
+ swirl then issue
+ 'rand' angle flick with `then`
+ not able to `play()` in `onComplete` callback
+ ---
+ module names
+ swirls in then chains for x/y
+ parse rand(stagger(20, 10), 20) values
+ percentage for radius
+ */
+
+ // istanbul ignore next
+ if (true) {
+ !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {
+ return mojs;
+ }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+ }
+ // istanbul ignore next
+ if (( false ? undefined : (0, _typeof3.default)(module)) === "object" && (0, _typeof3.default)(module.exports) === "object") {
+ module.exports = mojs;
+ }
+
+ exports.default = mojs;
+
+
+ typeof window !== 'undefined' && (window.mojs = mojs);
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)(module)))
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports) {
+
+ module.exports = function(module) {
+ if(!module.webpackPolyfill) {
+ module.deprecate = function() {};
+ module.paths = [];
+ // module.parent = undefined by default
+ module.children = [];
+ module.webpackPolyfill = 1;
+ }
+ return module;
+ }
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ "use strict";
+
+ exports.__esModule = true;
+
+ var _iterator = __webpack_require__(4);
+
+ var _iterator2 = _interopRequireDefault(_iterator);
+
+ var _symbol = __webpack_require__(55);
+
+ var _symbol2 = _interopRequireDefault(_symbol);
+
+ var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
+ return typeof obj === "undefined" ? "undefined" : _typeof(obj);
+ } : function (obj) {
+ return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+ };
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ module.exports = { "default": __webpack_require__(5), __esModule: true };
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ __webpack_require__(6);
+ __webpack_require__(50);
+ module.exports = __webpack_require__(54).f('iterator');
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+ var $at = __webpack_require__(7)(true);
+
+ // 21.1.3.27 String.prototype[@@iterator]()
+ __webpack_require__(10)(String, 'String', function(iterated){
+ this._t = String(iterated); // target
+ this._i = 0; // next index
+ // 21.1.5.2.1 %StringIteratorPrototype%.next()
+ }, function(){
+ var O = this._t
+ , index = this._i
+ , point;
+ if(index >= O.length)return {value: undefined, done: true};
+ point = $at(O, index);
+ this._i += point.length;
+ return {value: point, done: false};
+ });
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var toInteger = __webpack_require__(8)
+ , defined = __webpack_require__(9);
+ // true -> String#at
+ // false -> String#codePointAt
+ module.exports = function(TO_STRING){
+ return function(that, pos){
+ var s = String(defined(that))
+ , i = toInteger(pos)
+ , l = s.length
+ , a, b;
+ if(i < 0 || i >= l)return TO_STRING ? '' : undefined;
+ a = s.charCodeAt(i);
+ return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
+ ? TO_STRING ? s.charAt(i) : a
+ : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
+ };
+ };
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports) {
+
+ // 7.1.4 ToInteger
+ var ceil = Math.ceil
+ , floor = Math.floor;
+ module.exports = function(it){
+ return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+ };
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports) {
+
+ // 7.2.1 RequireObjectCoercible(argument)
+ module.exports = function(it){
+ if(it == undefined)throw TypeError("Can't call method on " + it);
+ return it;
+ };
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+ var LIBRARY = __webpack_require__(11)
+ , $export = __webpack_require__(12)
+ , redefine = __webpack_require__(27)
+ , hide = __webpack_require__(17)
+ , has = __webpack_require__(28)
+ , Iterators = __webpack_require__(29)
+ , $iterCreate = __webpack_require__(30)
+ , setToStringTag = __webpack_require__(46)
+ , getPrototypeOf = __webpack_require__(48)
+ , ITERATOR = __webpack_require__(47)('iterator')
+ , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`
+ , FF_ITERATOR = '@@iterator'
+ , KEYS = 'keys'
+ , VALUES = 'values';
+
+ var returnThis = function(){ return this; };
+
+ module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){
+ $iterCreate(Constructor, NAME, next);
+ var getMethod = function(kind){
+ if(!BUGGY && kind in proto)return proto[kind];
+ switch(kind){
+ case KEYS: return function keys(){ return new Constructor(this, kind); };
+ case VALUES: return function values(){ return new Constructor(this, kind); };
+ } return function entries(){ return new Constructor(this, kind); };
+ };
+ var TAG = NAME + ' Iterator'
+ , DEF_VALUES = DEFAULT == VALUES
+ , VALUES_BUG = false
+ , proto = Base.prototype
+ , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]
+ , $default = $native || getMethod(DEFAULT)
+ , $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined
+ , $anyNative = NAME == 'Array' ? proto.entries || $native : $native
+ , methods, key, IteratorPrototype;
+ // Fix native
+ if($anyNative){
+ IteratorPrototype = getPrototypeOf($anyNative.call(new Base));
+ if(IteratorPrototype !== Object.prototype){
+ // Set @@toStringTag to native iterators
+ setToStringTag(IteratorPrototype, TAG, true);
+ // fix for some old engines
+ if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);
+ }
+ }
+ // fix Array#{values, @@iterator}.name in V8 / FF
+ if(DEF_VALUES && $native && $native.name !== VALUES){
+ VALUES_BUG = true;
+ $default = function values(){ return $native.call(this); };
+ }
+ // Define iterator
+ if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){
+ hide(proto, ITERATOR, $default);
+ }
+ // Plug for library
+ Iterators[NAME] = $default;
+ Iterators[TAG] = returnThis;
+ if(DEFAULT){
+ methods = {
+ values: DEF_VALUES ? $default : getMethod(VALUES),
+ keys: IS_SET ? $default : getMethod(KEYS),
+ entries: $entries
+ };
+ if(FORCED)for(key in methods){
+ if(!(key in proto))redefine(proto, key, methods[key]);
+ } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
+ }
+ return methods;
+ };
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports) {
+
+ module.exports = true;
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var global = __webpack_require__(13)
+ , core = __webpack_require__(14)
+ , ctx = __webpack_require__(15)
+ , hide = __webpack_require__(17)
+ , PROTOTYPE = 'prototype';
+
+ var $export = function(type, name, source){
+ var IS_FORCED = type & $export.F
+ , IS_GLOBAL = type & $export.G
+ , IS_STATIC = type & $export.S
+ , IS_PROTO = type & $export.P
+ , IS_BIND = type & $export.B
+ , IS_WRAP = type & $export.W
+ , exports = IS_GLOBAL ? core : core[name] || (core[name] = {})
+ , expProto = exports[PROTOTYPE]
+ , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
+ , key, own, out;
+ if(IS_GLOBAL)source = name;
+ for(key in source){
+ // contains in native
+ own = !IS_FORCED && target && target[key] !== undefined;
+ if(own && key in exports)continue;
+ // export native or passed
+ out = own ? target[key] : source[key];
+ // prevent global pollution for namespaces
+ exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+ // bind timers to global for call from export context
+ : IS_BIND && own ? ctx(out, global)
+ // wrap global constructors for prevent change them in library
+ : IS_WRAP && target[key] == out ? (function(C){
+ var F = function(a, b, c){
+ if(this instanceof C){
+ switch(arguments.length){
+ case 0: return new C;
+ case 1: return new C(a);
+ case 2: return new C(a, b);
+ } return new C(a, b, c);
+ } return C.apply(this, arguments);
+ };
+ F[PROTOTYPE] = C[PROTOTYPE];
+ return F;
+ // make static versions for prototype methods
+ })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+ // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+ if(IS_PROTO){
+ (exports.virtual || (exports.virtual = {}))[key] = out;
+ // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+ if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);
+ }
+ }
+ };
+ // type bitmap
+ $export.F = 1; // forced
+ $export.G = 2; // global
+ $export.S = 4; // static
+ $export.P = 8; // proto
+ $export.B = 16; // bind
+ $export.W = 32; // wrap
+ $export.U = 64; // safe
+ $export.R = 128; // real proto method for `library`
+ module.exports = $export;
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports) {
+
+ // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+ var global = module.exports = typeof window != 'undefined' && window.Math == Math
+ ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
+ if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports) {
+
+ var core = module.exports = {version: '2.4.0'};
+ if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // optional / simple context binding
+ var aFunction = __webpack_require__(16);
+ module.exports = function(fn, that, length){
+ aFunction(fn);
+ if(that === undefined)return fn;
+ switch(length){
+ case 1: return function(a){
+ return fn.call(that, a);
+ };
+ case 2: return function(a, b){
+ return fn.call(that, a, b);
+ };
+ case 3: return function(a, b, c){
+ return fn.call(that, a, b, c);
+ };
+ }
+ return function(/* ...args */){
+ return fn.apply(that, arguments);
+ };
+ };
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports) {
+
+ module.exports = function(it){
+ if(typeof it != 'function')throw TypeError(it + ' is not a function!');
+ return it;
+ };
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var dP = __webpack_require__(18)
+ , createDesc = __webpack_require__(26);
+ module.exports = __webpack_require__(22) ? function(object, key, value){
+ return dP.f(object, key, createDesc(1, value));
+ } : function(object, key, value){
+ object[key] = value;
+ return object;
+ };
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var anObject = __webpack_require__(19)
+ , IE8_DOM_DEFINE = __webpack_require__(21)
+ , toPrimitive = __webpack_require__(25)
+ , dP = Object.defineProperty;
+
+ exports.f = __webpack_require__(22) ? Object.defineProperty : function defineProperty(O, P, Attributes){
+ anObject(O);
+ P = toPrimitive(P, true);
+ anObject(Attributes);
+ if(IE8_DOM_DEFINE)try {
+ return dP(O, P, Attributes);
+ } catch(e){ /* empty */ }
+ if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
+ if('value' in Attributes)O[P] = Attributes.value;
+ return O;
+ };
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var isObject = __webpack_require__(20);
+ module.exports = function(it){
+ if(!isObject(it))throw TypeError(it + ' is not an object!');
+ return it;
+ };
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports) {
+
+ module.exports = function(it){
+ return typeof it === 'object' ? it !== null : typeof it === 'function';
+ };
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ module.exports = !__webpack_require__(22) && !__webpack_require__(23)(function(){
+ return Object.defineProperty(__webpack_require__(24)('div'), 'a', {get: function(){ return 7; }}).a != 7;
+ });
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // Thank's IE8 for his funny defineProperty
+ module.exports = !__webpack_require__(23)(function(){
+ return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
+ });
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports) {
+
+ module.exports = function(exec){
+ try {
+ return !!exec();
+ } catch(e){
+ return true;
+ }
+ };
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var isObject = __webpack_require__(20)
+ , document = __webpack_require__(13).document
+ // in old IE typeof document.createElement is 'object'
+ , is = isObject(document) && isObject(document.createElement);
+ module.exports = function(it){
+ return is ? document.createElement(it) : {};
+ };
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // 7.1.1 ToPrimitive(input [, PreferredType])
+ var isObject = __webpack_require__(20);
+ // instead of the ES6 spec version, we didn't implement @@toPrimitive case
+ // and the second argument - flag - preferred type is a string
+ module.exports = function(it, S){
+ if(!isObject(it))return it;
+ var fn, val;
+ if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+ if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
+ if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+ throw TypeError("Can't convert object to primitive value");
+ };
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports) {
+
+ module.exports = function(bitmap, value){
+ return {
+ enumerable : !(bitmap & 1),
+ configurable: !(bitmap & 2),
+ writable : !(bitmap & 4),
+ value : value
+ };
+ };
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ module.exports = __webpack_require__(17);
+
+/***/ }),
+/* 28 */
+/***/ (function(module, exports) {
+
+ var hasOwnProperty = {}.hasOwnProperty;
+ module.exports = function(it, key){
+ return hasOwnProperty.call(it, key);
+ };
+
+/***/ }),
+/* 29 */
+/***/ (function(module, exports) {
+
+ module.exports = {};
+
+/***/ }),
+/* 30 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+ var create = __webpack_require__(31)
+ , descriptor = __webpack_require__(26)
+ , setToStringTag = __webpack_require__(46)
+ , IteratorPrototype = {};
+
+ // 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
+ __webpack_require__(17)(IteratorPrototype, __webpack_require__(47)('iterator'), function(){ return this; });
+
+ module.exports = function(Constructor, NAME, next){
+ Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});
+ setToStringTag(Constructor, NAME + ' Iterator');
+ };
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+ var anObject = __webpack_require__(19)
+ , dPs = __webpack_require__(32)
+ , enumBugKeys = __webpack_require__(44)
+ , IE_PROTO = __webpack_require__(41)('IE_PROTO')
+ , Empty = function(){ /* empty */ }
+ , PROTOTYPE = 'prototype';
+
+ // Create object with fake `null` prototype: use iframe Object with cleared prototype
+ var createDict = function(){
+ // Thrash, waste and sodomy: IE GC bug
+ var iframe = __webpack_require__(24)('iframe')
+ , i = enumBugKeys.length
+ , lt = '<'
+ , gt = '>'
+ , iframeDocument;
+ iframe.style.display = 'none';
+ __webpack_require__(45).appendChild(iframe);
+ iframe.src = 'javascript:'; // eslint-disable-line no-script-url
+ // createDict = iframe.contentWindow.Object;
+ // html.removeChild(iframe);
+ iframeDocument = iframe.contentWindow.document;
+ iframeDocument.open();
+ iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
+ iframeDocument.close();
+ createDict = iframeDocument.F;
+ while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];
+ return createDict();
+ };
+
+ module.exports = Object.create || function create(O, Properties){
+ var result;
+ if(O !== null){
+ Empty[PROTOTYPE] = anObject(O);
+ result = new Empty;
+ Empty[PROTOTYPE] = null;
+ // add "__proto__" for Object.getPrototypeOf polyfill
+ result[IE_PROTO] = O;
+ } else result = createDict();
+ return Properties === undefined ? result : dPs(result, Properties);
+ };
+
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var dP = __webpack_require__(18)
+ , anObject = __webpack_require__(19)
+ , getKeys = __webpack_require__(33);
+
+ module.exports = __webpack_require__(22) ? Object.defineProperties : function defineProperties(O, Properties){
+ anObject(O);
+ var keys = getKeys(Properties)
+ , length = keys.length
+ , i = 0
+ , P;
+ while(length > i)dP.f(O, P = keys[i++], Properties[P]);
+ return O;
+ };
+
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // 19.1.2.14 / 15.2.3.14 Object.keys(O)
+ var $keys = __webpack_require__(34)
+ , enumBugKeys = __webpack_require__(44);
+
+ module.exports = Object.keys || function keys(O){
+ return $keys(O, enumBugKeys);
+ };
+
+/***/ }),
+/* 34 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var has = __webpack_require__(28)
+ , toIObject = __webpack_require__(35)
+ , arrayIndexOf = __webpack_require__(38)(false)
+ , IE_PROTO = __webpack_require__(41)('IE_PROTO');
+
+ module.exports = function(object, names){
+ var O = toIObject(object)
+ , i = 0
+ , result = []
+ , key;
+ for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);
+ // Don't enum bug & hidden keys
+ while(names.length > i)if(has(O, key = names[i++])){
+ ~arrayIndexOf(result, key) || result.push(key);
+ }
+ return result;
+ };
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // to indexed object, toObject with fallback for non-array-like ES3 strings
+ var IObject = __webpack_require__(36)
+ , defined = __webpack_require__(9);
+ module.exports = function(it){
+ return IObject(defined(it));
+ };
+
+/***/ }),
+/* 36 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // fallback for non-array-like ES3 and non-enumerable old V8 strings
+ var cof = __webpack_require__(37);
+ module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
+ return cof(it) == 'String' ? it.split('') : Object(it);
+ };
+
+/***/ }),
+/* 37 */
+/***/ (function(module, exports) {
+
+ var toString = {}.toString;
+
+ module.exports = function(it){
+ return toString.call(it).slice(8, -1);
+ };
+
+/***/ }),
+/* 38 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // false -> Array#indexOf
+ // true -> Array#includes
+ var toIObject = __webpack_require__(35)
+ , toLength = __webpack_require__(39)
+ , toIndex = __webpack_require__(40);
+ module.exports = function(IS_INCLUDES){
+ return function($this, el, fromIndex){
+ var O = toIObject($this)
+ , length = toLength(O.length)
+ , index = toIndex(fromIndex, length)
+ , value;
+ // Array#includes uses SameValueZero equality algorithm
+ if(IS_INCLUDES && el != el)while(length > index){
+ value = O[index++];
+ if(value != value)return true;
+ // Array#toIndex ignores holes, Array#includes - not
+ } else for(;length > index; index++)if(IS_INCLUDES || index in O){
+ if(O[index] === el)return IS_INCLUDES || index || 0;
+ } return !IS_INCLUDES && -1;
+ };
+ };
+
+/***/ }),
+/* 39 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // 7.1.15 ToLength
+ var toInteger = __webpack_require__(8)
+ , min = Math.min;
+ module.exports = function(it){
+ return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+ };
+
+/***/ }),
+/* 40 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var toInteger = __webpack_require__(8)
+ , max = Math.max
+ , min = Math.min;
+ module.exports = function(index, length){
+ index = toInteger(index);
+ return index < 0 ? max(index + length, 0) : min(index, length);
+ };
+
+/***/ }),
+/* 41 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var shared = __webpack_require__(42)('keys')
+ , uid = __webpack_require__(43);
+ module.exports = function(key){
+ return shared[key] || (shared[key] = uid(key));
+ };
+
+/***/ }),
+/* 42 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var global = __webpack_require__(13)
+ , SHARED = '__core-js_shared__'
+ , store = global[SHARED] || (global[SHARED] = {});
+ module.exports = function(key){
+ return store[key] || (store[key] = {});
+ };
+
+/***/ }),
+/* 43 */
+/***/ (function(module, exports) {
+
+ var id = 0
+ , px = Math.random();
+ module.exports = function(key){
+ return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+ };
+
+/***/ }),
+/* 44 */
+/***/ (function(module, exports) {
+
+ // IE 8- don't enum bug keys
+ module.exports = (
+ 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+ ).split(',');
+
+/***/ }),
+/* 45 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ module.exports = __webpack_require__(13).document && document.documentElement;
+
+/***/ }),
+/* 46 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var def = __webpack_require__(18).f
+ , has = __webpack_require__(28)
+ , TAG = __webpack_require__(47)('toStringTag');
+
+ module.exports = function(it, tag, stat){
+ if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});
+ };
+
+/***/ }),
+/* 47 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var store = __webpack_require__(42)('wks')
+ , uid = __webpack_require__(43)
+ , Symbol = __webpack_require__(13).Symbol
+ , USE_SYMBOL = typeof Symbol == 'function';
+
+ var $exports = module.exports = function(name){
+ return store[name] || (store[name] =
+ USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
+ };
+
+ $exports.store = store;
+
+/***/ }),
+/* 48 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
+ var has = __webpack_require__(28)
+ , toObject = __webpack_require__(49)
+ , IE_PROTO = __webpack_require__(41)('IE_PROTO')
+ , ObjectProto = Object.prototype;
+
+ module.exports = Object.getPrototypeOf || function(O){
+ O = toObject(O);
+ if(has(O, IE_PROTO))return O[IE_PROTO];
+ if(typeof O.constructor == 'function' && O instanceof O.constructor){
+ return O.constructor.prototype;
+ } return O instanceof Object ? ObjectProto : null;
+ };
+
+/***/ }),
+/* 49 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // 7.1.13 ToObject(argument)
+ var defined = __webpack_require__(9);
+ module.exports = function(it){
+ return Object(defined(it));
+ };
+
+/***/ }),
+/* 50 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ __webpack_require__(51);
+ var global = __webpack_require__(13)
+ , hide = __webpack_require__(17)
+ , Iterators = __webpack_require__(29)
+ , TO_STRING_TAG = __webpack_require__(47)('toStringTag');
+
+ for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){
+ var NAME = collections[i]
+ , Collection = global[NAME]
+ , proto = Collection && Collection.prototype;
+ if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);
+ Iterators[NAME] = Iterators.Array;
+ }
+
+/***/ }),
+/* 51 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+ var addToUnscopables = __webpack_require__(52)
+ , step = __webpack_require__(53)
+ , Iterators = __webpack_require__(29)
+ , toIObject = __webpack_require__(35);
+
+ // 22.1.3.4 Array.prototype.entries()
+ // 22.1.3.13 Array.prototype.keys()
+ // 22.1.3.29 Array.prototype.values()
+ // 22.1.3.30 Array.prototype[@@iterator]()
+ module.exports = __webpack_require__(10)(Array, 'Array', function(iterated, kind){
+ this._t = toIObject(iterated); // target
+ this._i = 0; // next index
+ this._k = kind; // kind
+ // 22.1.5.2.1 %ArrayIteratorPrototype%.next()
+ }, function(){
+ var O = this._t
+ , kind = this._k
+ , index = this._i++;
+ if(!O || index >= O.length){
+ this._t = undefined;
+ return step(1);
+ }
+ if(kind == 'keys' )return step(0, index);
+ if(kind == 'values')return step(0, O[index]);
+ return step(0, [index, O[index]]);
+ }, 'values');
+
+ // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
+ Iterators.Arguments = Iterators.Array;
+
+ addToUnscopables('keys');
+ addToUnscopables('values');
+ addToUnscopables('entries');
+
+/***/ }),
+/* 52 */
+/***/ (function(module, exports) {
+
+ module.exports = function(){ /* empty */ };
+
+/***/ }),
+/* 53 */
+/***/ (function(module, exports) {
+
+ module.exports = function(done, value){
+ return {value: value, done: !!done};
+ };
+
+/***/ }),
+/* 54 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ exports.f = __webpack_require__(47);
+
+/***/ }),
+/* 55 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ module.exports = { "default": __webpack_require__(56), __esModule: true };
+
+/***/ }),
+/* 56 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ __webpack_require__(57);
+ __webpack_require__(68);
+ __webpack_require__(69);
+ __webpack_require__(70);
+ module.exports = __webpack_require__(14).Symbol;
+
+/***/ }),
+/* 57 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+ // ECMAScript 6 symbols shim
+ var global = __webpack_require__(13)
+ , has = __webpack_require__(28)
+ , DESCRIPTORS = __webpack_require__(22)
+ , $export = __webpack_require__(12)
+ , redefine = __webpack_require__(27)
+ , META = __webpack_require__(58).KEY
+ , $fails = __webpack_require__(23)
+ , shared = __webpack_require__(42)
+ , setToStringTag = __webpack_require__(46)
+ , uid = __webpack_require__(43)
+ , wks = __webpack_require__(47)
+ , wksExt = __webpack_require__(54)
+ , wksDefine = __webpack_require__(59)
+ , keyOf = __webpack_require__(60)
+ , enumKeys = __webpack_require__(61)
+ , isArray = __webpack_require__(64)
+ , anObject = __webpack_require__(19)
+ , toIObject = __webpack_require__(35)
+ , toPrimitive = __webpack_require__(25)
+ , createDesc = __webpack_require__(26)
+ , _create = __webpack_require__(31)
+ , gOPNExt = __webpack_require__(65)
+ , $GOPD = __webpack_require__(67)
+ , $DP = __webpack_require__(18)
+ , $keys = __webpack_require__(33)
+ , gOPD = $GOPD.f
+ , dP = $DP.f
+ , gOPN = gOPNExt.f
+ , $Symbol = global.Symbol
+ , $JSON = global.JSON
+ , _stringify = $JSON && $JSON.stringify
+ , PROTOTYPE = 'prototype'
+ , HIDDEN = wks('_hidden')
+ , TO_PRIMITIVE = wks('toPrimitive')
+ , isEnum = {}.propertyIsEnumerable
+ , SymbolRegistry = shared('symbol-registry')
+ , AllSymbols = shared('symbols')
+ , OPSymbols = shared('op-symbols')
+ , ObjectProto = Object[PROTOTYPE]
+ , USE_NATIVE = typeof $Symbol == 'function'
+ , QObject = global.QObject;
+ // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
+ var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
+
+ // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
+ var setSymbolDesc = DESCRIPTORS && $fails(function(){
+ return _create(dP({}, 'a', {
+ get: function(){ return dP(this, 'a', {value: 7}).a; }
+ })).a != 7;
+ }) ? function(it, key, D){
+ var protoDesc = gOPD(ObjectProto, key);
+ if(protoDesc)delete ObjectProto[key];
+ dP(it, key, D);
+ if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);
+ } : dP;
+
+ var wrap = function(tag){
+ var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
+ sym._k = tag;
+ return sym;
+ };
+
+ var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){
+ return typeof it == 'symbol';
+ } : function(it){
+ return it instanceof $Symbol;
+ };
+
+ var $defineProperty = function defineProperty(it, key, D){
+ if(it === ObjectProto)$defineProperty(OPSymbols, key, D);
+ anObject(it);
+ key = toPrimitive(key, true);
+ anObject(D);
+ if(has(AllSymbols, key)){
+ if(!D.enumerable){
+ if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));
+ it[HIDDEN][key] = true;
+ } else {
+ if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;
+ D = _create(D, {enumerable: createDesc(0, false)});
+ } return setSymbolDesc(it, key, D);
+ } return dP(it, key, D);
+ };
+ var $defineProperties = function defineProperties(it, P){
+ anObject(it);
+ var keys = enumKeys(P = toIObject(P))
+ , i = 0
+ , l = keys.length
+ , key;
+ while(l > i)$defineProperty(it, key = keys[i++], P[key]);
+ return it;
+ };
+ var $create = function create(it, P){
+ return P === undefined ? _create(it) : $defineProperties(_create(it), P);
+ };
+ var $propertyIsEnumerable = function propertyIsEnumerable(key){
+ var E = isEnum.call(this, key = toPrimitive(key, true));
+ if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;
+ return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
+ };
+ var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){
+ it = toIObject(it);
+ key = toPrimitive(key, true);
+ if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;
+ var D = gOPD(it, key);
+ if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;
+ return D;
+ };
+ var $getOwnPropertyNames = function getOwnPropertyNames(it){
+ var names = gOPN(toIObject(it))
+ , result = []
+ , i = 0
+ , key;
+ while(names.length > i){
+ if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);
+ } return result;
+ };
+ var $getOwnPropertySymbols = function getOwnPropertySymbols(it){
+ var IS_OP = it === ObjectProto
+ , names = gOPN(IS_OP ? OPSymbols : toIObject(it))
+ , result = []
+ , i = 0
+ , key;
+ while(names.length > i){
+ if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);
+ } return result;
+ };
+
+ // 19.4.1.1 Symbol([description])
+ if(!USE_NATIVE){
+ $Symbol = function Symbol(){
+ if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');
+ var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
+ var $set = function(value){
+ if(this === ObjectProto)$set.call(OPSymbols, value);
+ if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;
+ setSymbolDesc(this, tag, createDesc(1, value));
+ };
+ if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});
+ return wrap(tag);
+ };
+ redefine($Symbol[PROTOTYPE], 'toString', function toString(){
+ return this._k;
+ });
+
+ $GOPD.f = $getOwnPropertyDescriptor;
+ $DP.f = $defineProperty;
+ __webpack_require__(66).f = gOPNExt.f = $getOwnPropertyNames;
+ __webpack_require__(63).f = $propertyIsEnumerable;
+ __webpack_require__(62).f = $getOwnPropertySymbols;
+
+ if(DESCRIPTORS && !__webpack_require__(11)){
+ redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
+ }
+
+ wksExt.f = function(name){
+ return wrap(wks(name));
+ }
+ }
+
+ $export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});
+
+ for(var symbols = (
+ // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
+ 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
+ ).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);
+
+ for(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);
+
+ $export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
+ // 19.4.2.1 Symbol.for(key)
+ 'for': function(key){
+ return has(SymbolRegistry, key += '')
+ ? SymbolRegistry[key]
+ : SymbolRegistry[key] = $Symbol(key);
+ },
+ // 19.4.2.5 Symbol.keyFor(sym)
+ keyFor: function keyFor(key){
+ if(isSymbol(key))return keyOf(SymbolRegistry, key);
+ throw TypeError(key + ' is not a symbol!');
+ },
+ useSetter: function(){ setter = true; },
+ useSimple: function(){ setter = false; }
+ });
+
+ $export($export.S + $export.F * !USE_NATIVE, 'Object', {
+ // 19.1.2.2 Object.create(O [, Properties])
+ create: $create,
+ // 19.1.2.4 Object.defineProperty(O, P, Attributes)
+ defineProperty: $defineProperty,
+ // 19.1.2.3 Object.defineProperties(O, Properties)
+ defineProperties: $defineProperties,
+ // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
+ getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
+ // 19.1.2.7 Object.getOwnPropertyNames(O)
+ getOwnPropertyNames: $getOwnPropertyNames,
+ // 19.1.2.8 Object.getOwnPropertySymbols(O)
+ getOwnPropertySymbols: $getOwnPropertySymbols
+ });
+
+ // 24.3.2 JSON.stringify(value [, replacer [, space]])
+ $JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){
+ var S = $Symbol();
+ // MS Edge converts symbol values to JSON as {}
+ // WebKit converts symbol values to JSON as null
+ // V8 throws on boxed symbols
+ return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';
+ })), 'JSON', {
+ stringify: function stringify(it){
+ if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined
+ var args = [it]
+ , i = 1
+ , replacer, $replacer;
+ while(arguments.length > i)args.push(arguments[i++]);
+ replacer = args[1];
+ if(typeof replacer == 'function')$replacer = replacer;
+ if($replacer || !isArray(replacer))replacer = function(key, value){
+ if($replacer)value = $replacer.call(this, key, value);
+ if(!isSymbol(value))return value;
+ };
+ args[1] = replacer;
+ return _stringify.apply($JSON, args);
+ }
+ });
+
+ // 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
+ $Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(17)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
+ // 19.4.3.5 Symbol.prototype[@@toStringTag]
+ setToStringTag($Symbol, 'Symbol');
+ // 20.2.1.9 Math[@@toStringTag]
+ setToStringTag(Math, 'Math', true);
+ // 24.3.3 JSON[@@toStringTag]
+ setToStringTag(global.JSON, 'JSON', true);
+
+/***/ }),
+/* 58 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var META = __webpack_require__(43)('meta')
+ , isObject = __webpack_require__(20)
+ , has = __webpack_require__(28)
+ , setDesc = __webpack_require__(18).f
+ , id = 0;
+ var isExtensible = Object.isExtensible || function(){
+ return true;
+ };
+ var FREEZE = !__webpack_require__(23)(function(){
+ return isExtensible(Object.preventExtensions({}));
+ });
+ var setMeta = function(it){
+ setDesc(it, META, {value: {
+ i: 'O' + ++id, // object ID
+ w: {} // weak collections IDs
+ }});
+ };
+ var fastKey = function(it, create){
+ // return primitive with prefix
+ if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+ if(!has(it, META)){
+ // can't set metadata to uncaught frozen object
+ if(!isExtensible(it))return 'F';
+ // not necessary to add metadata
+ if(!create)return 'E';
+ // add missing metadata
+ setMeta(it);
+ // return object ID
+ } return it[META].i;
+ };
+ var getWeak = function(it, create){
+ if(!has(it, META)){
+ // can't set metadata to uncaught frozen object
+ if(!isExtensible(it))return true;
+ // not necessary to add metadata
+ if(!create)return false;
+ // add missing metadata
+ setMeta(it);
+ // return hash weak collections IDs
+ } return it[META].w;
+ };
+ // add metadata on freeze-family methods calling
+ var onFreeze = function(it){
+ if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);
+ return it;
+ };
+ var meta = module.exports = {
+ KEY: META,
+ NEED: false,
+ fastKey: fastKey,
+ getWeak: getWeak,
+ onFreeze: onFreeze
+ };
+
+/***/ }),
+/* 59 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var global = __webpack_require__(13)
+ , core = __webpack_require__(14)
+ , LIBRARY = __webpack_require__(11)
+ , wksExt = __webpack_require__(54)
+ , defineProperty = __webpack_require__(18).f;
+ module.exports = function(name){
+ var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
+ if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});
+ };
+
+/***/ }),
+/* 60 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var getKeys = __webpack_require__(33)
+ , toIObject = __webpack_require__(35);
+ module.exports = function(object, el){
+ var O = toIObject(object)
+ , keys = getKeys(O)
+ , length = keys.length
+ , index = 0
+ , key;
+ while(length > index)if(O[key = keys[index++]] === el)return key;
+ };
+
+/***/ }),
+/* 61 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // all enumerable object keys, includes symbols
+ var getKeys = __webpack_require__(33)
+ , gOPS = __webpack_require__(62)
+ , pIE = __webpack_require__(63);
+ module.exports = function(it){
+ var result = getKeys(it)
+ , getSymbols = gOPS.f;
+ if(getSymbols){
+ var symbols = getSymbols(it)
+ , isEnum = pIE.f
+ , i = 0
+ , key;
+ while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);
+ } return result;
+ };
+
+/***/ }),
+/* 62 */
+/***/ (function(module, exports) {
+
+ exports.f = Object.getOwnPropertySymbols;
+
+/***/ }),
+/* 63 */
+/***/ (function(module, exports) {
+
+ exports.f = {}.propertyIsEnumerable;
+
+/***/ }),
+/* 64 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // 7.2.2 IsArray(argument)
+ var cof = __webpack_require__(37);
+ module.exports = Array.isArray || function isArray(arg){
+ return cof(arg) == 'Array';
+ };
+
+/***/ }),
+/* 65 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
+ var toIObject = __webpack_require__(35)
+ , gOPN = __webpack_require__(66).f
+ , toString = {}.toString;
+
+ var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
+ ? Object.getOwnPropertyNames(window) : [];
+
+ var getWindowNames = function(it){
+ try {
+ return gOPN(it);
+ } catch(e){
+ return windowNames.slice();
+ }
+ };
+
+ module.exports.f = function getOwnPropertyNames(it){
+ return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
+ };
+
+
+/***/ }),
+/* 66 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
+ var $keys = __webpack_require__(34)
+ , hiddenKeys = __webpack_require__(44).concat('length', 'prototype');
+
+ exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){
+ return $keys(O, hiddenKeys);
+ };
+
+/***/ }),
+/* 67 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var pIE = __webpack_require__(63)
+ , createDesc = __webpack_require__(26)
+ , toIObject = __webpack_require__(35)
+ , toPrimitive = __webpack_require__(25)
+ , has = __webpack_require__(28)
+ , IE8_DOM_DEFINE = __webpack_require__(21)
+ , gOPD = Object.getOwnPropertyDescriptor;
+
+ exports.f = __webpack_require__(22) ? gOPD : function getOwnPropertyDescriptor(O, P){
+ O = toIObject(O);
+ P = toPrimitive(P, true);
+ if(IE8_DOM_DEFINE)try {
+ return gOPD(O, P);
+ } catch(e){ /* empty */ }
+ if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);
+ };
+
+/***/ }),
+/* 68 */
+/***/ (function(module, exports) {
+
+
+
+/***/ }),
+/* 69 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ __webpack_require__(59)('asyncIterator');
+
+/***/ }),
+/* 70 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ __webpack_require__(59)('observable');
+
+/***/ }),
+/* 71 */
+/***/ (function(module, exports) {
+
+ var Helpers, h;
+
+ Helpers = (function() {
+ Helpers.prototype.NS = 'http://www.w3.org/2000/svg';
+
+ Helpers.prototype.logBadgeCss = 'background:#3A0839;color:#FF512F;border-radius:5px; padding: 1px 5px 2px; border: 1px solid #FF512F;';
+
+ Helpers.prototype.shortColors = {
+ transparent: 'rgba(0,0,0,0)',
+ none: 'rgba(0,0,0,0)',
+ aqua: 'rgb(0,255,255)',
+ black: 'rgb(0,0,0)',
+ blue: 'rgb(0,0,255)',
+ fuchsia: 'rgb(255,0,255)',
+ gray: 'rgb(128,128,128)',
+ green: 'rgb(0,128,0)',
+ lime: 'rgb(0,255,0)',
+ maroon: 'rgb(128,0,0)',
+ navy: 'rgb(0,0,128)',
+ olive: 'rgb(128,128,0)',
+ purple: 'rgb(128,0,128)',
+ red: 'rgb(255,0,0)',
+ silver: 'rgb(192,192,192)',
+ teal: 'rgb(0,128,128)',
+ white: 'rgb(255,255,255)',
+ yellow: 'rgb(255,255,0)',
+ orange: 'rgb(255,128,0)'
+ };
+
+ Helpers.prototype.chainOptionMap = {};
+
+ Helpers.prototype.callbacksMap = {
+ onRefresh: 1,
+ onStart: 1,
+ onComplete: 1,
+ onFirstUpdate: 1,
+ onUpdate: 1,
+ onProgress: 1,
+ onRepeatStart: 1,
+ onRepeatComplete: 1,
+ onPlaybackStart: 1,
+ onPlaybackPause: 1,
+ onPlaybackStop: 1,
+ onPlaybackComplete: 1
+ };
+
+ Helpers.prototype.tweenOptionMap = {
+ duration: 1,
+ delay: 1,
+ speed: 1,
+ repeat: 1,
+ easing: 1,
+ backwardEasing: 1,
+ isYoyo: 1,
+ shiftTime: 1,
+ isReversed: 1,
+ callbacksContext: 1
+ };
+
+ Helpers.prototype.unitOptionMap = {
+ left: 1,
+ top: 1,
+ x: 1,
+ y: 1,
+ rx: 1,
+ ry: 1
+ };
+
+ Helpers.prototype.RAD_TO_DEG = 180 / Math.PI;
+
+ function Helpers() {
+ this.vars();
+ }
+
+ Helpers.prototype.vars = function() {
+ var ua;
+ this.prefix = this.getPrefix();
+ this.getRemBase();
+ this.isFF = this.prefix.lowercase === 'moz';
+ this.isIE = this.prefix.lowercase === 'ms';
+ ua = navigator.userAgent;
+ this.isOldOpera = ua.match(/presto/gim);
+ this.isSafari = ua.indexOf('Safari') > -1;
+ this.isChrome = ua.indexOf('Chrome') > -1;
+ this.isOpera = ua.toLowerCase().indexOf("op") > -1;
+ this.isChrome && this.isSafari && (this.isSafari = false);
+ (ua.match(/PhantomJS/gim)) && (this.isSafari = false);
+ this.isChrome && this.isOpera && (this.isChrome = false);
+ this.is3d = this.checkIf3d();
+ this.uniqIDs = -1;
+ this.div = document.createElement('div');
+ document.body.appendChild(this.div);
+ return this.defaultStyles = this.computedStyle(this.div);
+ };
+
+ Helpers.prototype.cloneObj = function(obj, exclude) {
+ var i, key, keys, newObj;
+ keys = Object.keys(obj);
+ newObj = {};
+ i = keys.length;
+ while (i--) {
+ key = keys[i];
+ if (exclude != null) {
+ if (!exclude[key]) {
+ newObj[key] = obj[key];
+ }
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ return newObj;
+ };
+
+ Helpers.prototype.extend = function(objTo, objFrom) {
+ var key, value;
+ for (key in objFrom) {
+ value = objFrom[key];
+ if (objTo[key] == null) {
+ objTo[key] = objFrom[key];
+ }
+ }
+ return objTo;
+ };
+
+ Helpers.prototype.getRemBase = function() {
+ var html, style;
+ html = document.querySelector('html');
+ style = getComputedStyle(html);
+ return this.remBase = parseFloat(style.fontSize);
+ };
+
+ Helpers.prototype.clamp = function(value, min, max) {
+ if (value < min) {
+ return min;
+ } else if (value > max) {
+ return max;
+ } else {
+ return value;
+ }
+ };
+
+ Helpers.prototype.setPrefixedStyle = function(el, name, value) {
+ (name === 'transform') && (el.style["" + this.prefix.css + name] = value);
+ return el.style[name] = value;
+ };
+
+ Helpers.prototype.style = function(el, name, value) {
+ var key, keys, len, results;
+ if (typeof name === 'object') {
+ keys = Object.keys(name);
+ len = keys.length;
+ results = [];
+ while (len--) {
+ key = keys[len];
+ value = name[key];
+ results.push(this.setPrefixedStyle(el, key, value));
+ }
+ return results;
+ } else {
+ return this.setPrefixedStyle(el, name, value);
+ }
+ };
+
+ Helpers.prototype.prepareForLog = function(args) {
+ args = Array.prototype.slice.apply(args);
+ args.unshift('::');
+ args.unshift(this.logBadgeCss);
+ args.unshift('%cmo·js%c');
+ return args;
+ };
+
+ Helpers.prototype.log = function() {
+ if (mojs.isDebug === false) {
+ return;
+ }
+ return console.log.apply(console, this.prepareForLog(arguments));
+ };
+
+ Helpers.prototype.warn = function() {
+ if (mojs.isDebug === false) {
+ return;
+ }
+ return console.warn.apply(console, this.prepareForLog(arguments));
+ };
+
+ Helpers.prototype.error = function() {
+ if (mojs.isDebug === false) {
+ return;
+ }
+ return console.error.apply(console, this.prepareForLog(arguments));
+ };
+
+ Helpers.prototype.parseUnit = function(value) {
+ var amount, isStrict, ref, regex, returnVal, unit;
+ if (typeof value === 'number') {
+ return returnVal = {
+ unit: 'px',
+ isStrict: false,
+ value: value,
+ string: value === 0 ? "" + value : value + "px"
+ };
+ } else if (typeof value === 'string') {
+ regex = /px|%|rem|em|ex|cm|ch|mm|in|pt|pc|vh|vw|vmin|deg/gim;
+ unit = (ref = value.match(regex)) != null ? ref[0] : void 0;
+ isStrict = true;
+ if (!unit) {
+ unit = 'px';
+ isStrict = false;
+ }
+ amount = parseFloat(value);
+ return returnVal = {
+ unit: unit,
+ isStrict: isStrict,
+ value: amount,
+ string: amount === 0 ? "" + amount : "" + amount + unit
+ };
+ }
+ return value;
+ };
+
+ Helpers.prototype.bind = function(func, context) {
+ var bindArgs, wrapper;
+ wrapper = function() {
+ var args, unshiftArgs;
+ args = Array.prototype.slice.call(arguments);
+ unshiftArgs = bindArgs.concat(args);
+ return func.apply(context, unshiftArgs);
+ };
+ bindArgs = Array.prototype.slice.call(arguments, 2);
+ return wrapper;
+ };
+
+ Helpers.prototype.getRadialPoint = function(o) {
+ var point, radAngle, radiusX, radiusY;
+ if (o == null) {
+ o = {};
+ }
+ radAngle = (o.angle - 90) * 0.017453292519943295;
+ radiusX = o.radiusX != null ? o.radiusX : o.radius;
+ radiusY = o.radiusY != null ? o.radiusY : o.radius;
+ return point = {
+ x: o.center.x + (Math.cos(radAngle) * radiusX),
+ y: o.center.y + (Math.sin(radAngle) * radiusY)
+ };
+ };
+
+ Helpers.prototype.getPrefix = function() {
+ var dom, pre, styles, v;
+ styles = window.getComputedStyle(document.documentElement, "");
+ v = Array.prototype.slice.call(styles).join("").match(/-(moz|webkit|ms)-/);
+ pre = (v || (styles.OLink === "" && ["", "o"]))[1];
+ dom = "WebKit|Moz|MS|O".match(new RegExp("(" + pre + ")", "i"))[1];
+ return {
+ dom: dom,
+ lowercase: pre,
+ css: "-" + pre + "-",
+ js: pre[0].toUpperCase() + pre.substr(1)
+ };
+ };
+
+ Helpers.prototype.strToArr = function(string) {
+ var arr;
+ arr = [];
+ if (typeof string === 'number' && !isNaN(string)) {
+ arr.push(this.parseUnit(string));
+ return arr;
+ }
+ string.trim().split(/\s+/gim).forEach((function(_this) {
+ return function(str) {
+ return arr.push(_this.parseUnit(_this.parseIfRand(str)));
+ };
+ })(this));
+ return arr;
+ };
+
+ Helpers.prototype.calcArrDelta = function(arr1, arr2) {
+ var delta, i, j, len1, num;
+ delta = [];
+ for (i = j = 0, len1 = arr1.length; j < len1; i = ++j) {
+ num = arr1[i];
+ delta[i] = this.parseUnit("" + (arr2[i].value - arr1[i].value) + arr2[i].unit);
+ }
+ return delta;
+ };
+
+ Helpers.prototype.isArray = function(variable) {
+ return variable instanceof Array;
+ };
+
+ Helpers.prototype.normDashArrays = function(arr1, arr2) {
+ var arr1Len, arr2Len, currItem, i, j, k, lenDiff, ref, ref1, startI;
+ arr1Len = arr1.length;
+ arr2Len = arr2.length;
+ if (arr1Len > arr2Len) {
+ lenDiff = arr1Len - arr2Len;
+ startI = arr2.length;
+ for (i = j = 0, ref = lenDiff; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
+ currItem = i + startI;
+ arr2.push(this.parseUnit("0" + arr1[currItem].unit));
+ }
+ } else if (arr2Len > arr1Len) {
+ lenDiff = arr2Len - arr1Len;
+ startI = arr1.length;
+ for (i = k = 0, ref1 = lenDiff; 0 <= ref1 ? k < ref1 : k > ref1; i = 0 <= ref1 ? ++k : --k) {
+ currItem = i + startI;
+ arr1.push(this.parseUnit("0" + arr2[currItem].unit));
+ }
+ }
+ return [arr1, arr2];
+ };
+
+ Helpers.prototype.makeColorObj = function(color) {
+ var alpha, b, colorObj, g, isRgb, r, regexString1, regexString2, result, rgbColor;
+ if (color[0] === '#') {
+ result = /^#?([a-f\d]{1,2})([a-f\d]{1,2})([a-f\d]{1,2})$/i.exec(color);
+ colorObj = {};
+ if (result) {
+ r = result[1].length === 2 ? result[1] : result[1] + result[1];
+ g = result[2].length === 2 ? result[2] : result[2] + result[2];
+ b = result[3].length === 2 ? result[3] : result[3] + result[3];
+ colorObj = {
+ r: parseInt(r, 16),
+ g: parseInt(g, 16),
+ b: parseInt(b, 16),
+ a: 1
+ };
+ }
+ }
+ if (color[0] !== '#') {
+ isRgb = color[0] === 'r' && color[1] === 'g' && color[2] === 'b';
+ if (isRgb) {
+ rgbColor = color;
+ }
+ if (!isRgb) {
+ rgbColor = !this.shortColors[color] ? (this.div.style.color = color, this.computedStyle(this.div).color) : this.shortColors[color];
+ }
+ regexString1 = '^rgba?\\((\\d{1,3}),\\s?(\\d{1,3}),';
+ regexString2 = '\\s?(\\d{1,3}),?\\s?(\\d{1}|0?\\.\\d{1,})?\\)$';
+ result = new RegExp(regexString1 + regexString2, 'gi').exec(rgbColor);
+ colorObj = {};
+ alpha = parseFloat(result[4] || 1);
+ if (result) {
+ colorObj = {
+ r: parseInt(result[1], 10),
+ g: parseInt(result[2], 10),
+ b: parseInt(result[3], 10),
+ a: (alpha != null) && !isNaN(alpha) ? alpha : 1
+ };
+ }
+ }
+ return colorObj;
+ };
+
+ Helpers.prototype.computedStyle = function(el) {
+ return getComputedStyle(el);
+ };
+
+ Helpers.prototype.capitalize = function(str) {
+ if (typeof str !== 'string') {
+ throw Error('String expected - nothing to capitalize');
+ }
+ return str.charAt(0).toUpperCase() + str.substring(1);
+ };
+
+ Helpers.prototype.parseRand = function(string) {
+ var rand, randArr, units;
+ randArr = string.split(/rand\(|\,|\)/);
+ units = this.parseUnit(randArr[2]);
+ rand = this.rand(parseFloat(randArr[1]), parseFloat(randArr[2]));
+ if (units.unit && randArr[2].match(units.unit)) {
+ return rand + units.unit;
+ } else {
+ return rand;
+ }
+ };
+
+ Helpers.prototype.parseStagger = function(string, index) {
+ var base, number, splittedValue, unit, unitValue, value;
+ value = string.split(/stagger\(|\)$/)[1].toLowerCase();
+ splittedValue = value.split(/(rand\(.*?\)|[^\(,\s]+)(?=\s*,|\s*$)/gim);
+ value = splittedValue.length > 3 ? (base = this.parseUnit(this.parseIfRand(splittedValue[1])), splittedValue[3]) : (base = this.parseUnit(0), splittedValue[1]);
+ value = this.parseIfRand(value);
+ unitValue = this.parseUnit(value);
+ number = index * unitValue.value + base.value;
+ unit = base.isStrict ? base.unit : unitValue.isStrict ? unitValue.unit : '';
+ if (unit) {
+ return "" + number + unit;
+ } else {
+ return number;
+ }
+ };
+
+ Helpers.prototype.parseIfStagger = function(value, i) {
+ if (!(typeof value === 'string' && value.match(/stagger/g))) {
+ return value;
+ } else {
+ return this.parseStagger(value, i);
+ }
+ };
+
+ Helpers.prototype.parseIfRand = function(str) {
+ if (typeof str === 'string' && str.match(/rand\(/)) {
+ return this.parseRand(str);
+ } else {
+ return str;
+ }
+ };
+
+ Helpers.prototype.parseDelta = function(key, value, index) {
+ var curve, delta, easing, end, endArr, endColorObj, i, j, len1, start, startArr, startColorObj;
+ value = this.cloneObj(value);
+ easing = value.easing;
+ if (easing != null) {
+ easing = mojs.easing.parseEasing(easing);
+ }
+ delete value.easing;
+ curve = value.curve;
+ if (curve != null) {
+ curve = mojs.easing.parseEasing(curve);
+ }
+ delete value.curve;
+ start = Object.keys(value)[0];
+ end = value[start];
+ delta = {
+ start: start
+ };
+ if (isNaN(parseFloat(start)) && !start.match(/rand\(/) && !start.match(/stagger\(/)) {
+ if (key === 'strokeLinecap') {
+ this.warn("Sorry, stroke-linecap property is not animatable yet, using the start(" + start + ") value instead", value);
+ return delta;
+ }
+ startColorObj = this.makeColorObj(start);
+ endColorObj = this.makeColorObj(end);
+ delta = {
+ type: 'color',
+ name: key,
+ start: startColorObj,
+ end: endColorObj,
+ easing: easing,
+ curve: curve,
+ delta: {
+ r: endColorObj.r - startColorObj.r,
+ g: endColorObj.g - startColorObj.g,
+ b: endColorObj.b - startColorObj.b,
+ a: endColorObj.a - startColorObj.a
+ }
+ };
+ } else if (key === 'strokeDasharray' || key === 'strokeDashoffset' || key === 'origin') {
+ startArr = this.strToArr(start);
+ endArr = this.strToArr(end);
+ this.normDashArrays(startArr, endArr);
+ for (i = j = 0, len1 = startArr.length; j < len1; i = ++j) {
+ start = startArr[i];
+ end = endArr[i];
+ this.mergeUnits(start, end, key);
+ }
+ delta = {
+ type: 'array',
+ name: key,
+ start: startArr,
+ end: endArr,
+ delta: this.calcArrDelta(startArr, endArr),
+ easing: easing,
+ curve: curve
+ };
+ } else {
+ if (!this.callbacksMap[key] && !this.tweenOptionMap[key]) {
+ if (this.unitOptionMap[key]) {
+ end = this.parseUnit(this.parseStringOption(end, index));
+ start = this.parseUnit(this.parseStringOption(start, index));
+ this.mergeUnits(start, end, key);
+ delta = {
+ type: 'unit',
+ name: key,
+ start: start,
+ end: end,
+ delta: end.value - start.value,
+ easing: easing,
+ curve: curve
+ };
+ } else {
+ end = parseFloat(this.parseStringOption(end, index));
+ start = parseFloat(this.parseStringOption(start, index));
+ delta = {
+ type: 'number',
+ name: key,
+ start: start,
+ end: end,
+ delta: end - start,
+ easing: easing,
+ curve: curve
+ };
+ }
+ }
+ }
+ return delta;
+ };
+
+ Helpers.prototype.mergeUnits = function(start, end, key) {
+ if (!end.isStrict && start.isStrict) {
+ end.unit = start.unit;
+ return end.string = "" + end.value + end.unit;
+ } else if (end.isStrict && !start.isStrict) {
+ start.unit = end.unit;
+ return start.string = "" + start.value + start.unit;
+ } else if (end.isStrict && start.isStrict) {
+ if (end.unit !== start.unit) {
+ start.unit = end.unit;
+ start.string = "" + start.value + start.unit;
+ return this.warn("Two different units were specified on \"" + key + "\" delta property, mo · js will fallback to end \"" + end.unit + "\" unit ");
+ }
+ }
+ };
+
+ Helpers.prototype.rand = function(min, max) {
+ return (Math.random() * (max - min)) + min;
+ };
+
+ Helpers.prototype.isDOM = function(o) {
+ var isNode;
+ if (o == null) {
+ return false;
+ }
+ isNode = typeof o.nodeType === 'number' && typeof o.nodeName === 'string';
+ return typeof o === 'object' && isNode;
+ };
+
+ Helpers.prototype.getChildElements = function(element) {
+ var childNodes, children, i;
+ childNodes = element.childNodes;
+ children = [];
+ i = childNodes.length;
+ while (i--) {
+ if (childNodes[i].nodeType === 1) {
+ children.unshift(childNodes[i]);
+ }
+ }
+ return children;
+ };
+
+ Helpers.prototype.delta = function(start, end) {
+ var isType1, isType2, obj, type1, type2;
+ type1 = typeof start;
+ type2 = typeof end;
+ isType1 = type1 === 'string' || type1 === 'number' && !isNaN(start);
+ isType2 = type2 === 'string' || type2 === 'number' && !isNaN(end);
+ if (!isType1 || !isType2) {
+ this.error("delta method expects Strings or Numbers at input but got - " + start + ", " + end);
+ return;
+ }
+ obj = {};
+ obj[start] = end;
+ return obj;
+ };
+
+ Helpers.prototype.getUniqID = function() {
+ return ++this.uniqIDs;
+ };
+
+ Helpers.prototype.parsePath = function(path) {
+ var domPath;
+ if (typeof path === 'string') {
+ if (path.charAt(0).toLowerCase() === 'm') {
+ domPath = document.createElementNS(this.NS, 'path');
+ domPath.setAttributeNS(null, 'd', path);
+ return domPath;
+ } else {
+ return document.querySelector(path);
+ }
+ }
+ if (path.style) {
+ return path;
+ }
+ };
+
+ Helpers.prototype.closeEnough = function(num1, num2, eps) {
+ return Math.abs(num1 - num2) < eps;
+ };
+
+ Helpers.prototype.checkIf3d = function() {
+ var div, prefixed, style, tr;
+ div = document.createElement('div');
+ this.style(div, 'transform', 'translateZ(0)');
+ style = div.style;
+ prefixed = this.prefix.css + "transform";
+ tr = style[prefixed] != null ? style[prefixed] : style.transform;
+ return tr !== '';
+ };
+
+
+ /*
+ Method to check if variable holds pointer to an object.
+ @param {Any} Variable to test
+ @returns {Boolean} If variable is object.
+ */
+
+ Helpers.prototype.isObject = function(variable) {
+ return variable !== null && typeof variable === 'object';
+ };
+
+
+ /*
+ Method to get first value of the object.
+ Used to get end value on ∆s.
+ @param {Object} Object to get the value of.
+ @returns {Any} The value of the first object' property.
+ */
+
+ Helpers.prototype.getDeltaEnd = function(obj) {
+ var key;
+ key = Object.keys(obj)[0];
+ return obj[key];
+ };
+
+
+ /*
+ Method to get first key of the object.
+ Used to get start value on ∆s.
+ @param {Object} Object to get the value of.
+ @returns {String} The key of the first object' property.
+ */
+
+ Helpers.prototype.getDeltaStart = function(obj) {
+ var key;
+ key = Object.keys(obj)[0];
+ return key;
+ };
+
+
+ /*
+ Method to check if propery exists in callbacksMap or tweenOptionMap.
+ @param {String} Property name to check for
+ @returns {Boolean} If property is tween property.
+ */
+
+ Helpers.prototype.isTweenProp = function(keyName) {
+ return this.tweenOptionMap[keyName] || this.callbacksMap[keyName];
+ };
+
+
+ /*
+ Method to parse string property value
+ which can include both `rand` and `stagger `
+ value in various positions.
+ @param {String} Property name to check for.
+ @param {Number} Optional index for stagger.
+ @returns {Number} Parsed option value.
+ */
+
+ Helpers.prototype.parseStringOption = function(value, index) {
+ if (index == null) {
+ index = 0;
+ }
+ if (typeof value === 'string') {
+ value = this.parseIfStagger(value, index);
+ value = this.parseIfRand(value);
+ }
+ return value;
+ };
+
+
+ /*
+ Method to get the last item of array.
+ @private
+ @param {Array} Array to get the last item in.
+ @returns {Any} The last item of array.
+ */
+
+ Helpers.prototype.getLastItem = function(arr) {
+ return arr[arr.length - 1];
+ };
+
+
+ /*
+ Method parse HTMLElement.
+ @private
+ @param {String, Object} Selector string or HTMLElement.
+ @returns {Object} HTMLElement.
+ */
+
+ Helpers.prototype.parseEl = function(el) {
+ if (h.isDOM(el)) {
+ return el;
+ } else if (typeof el === 'string') {
+ el = document.querySelector(el);
+ }
+ if (el === null) {
+ h.error("Can't parse HTML element: ", el);
+ }
+ return el;
+ };
+
+
+ /*
+ Method force compositor layer on HTMLElement.
+ @private
+ @param {Object} HTMLElement.
+ @returns {Object} HTMLElement.
+ */
+
+ Helpers.prototype.force3d = function(el) {
+ this.setPrefixedStyle(el, 'backface-visibility', 'hidden');
+ return el;
+ };
+
+
+ /*
+ Method to check if value is delta.
+ @private
+ @param {Any} Property to check.
+ @returns {Boolean} If value is delta.
+ */
+
+ Helpers.prototype.isDelta = function(optionsValue) {
+ var isObject;
+ isObject = this.isObject(optionsValue);
+ isObject = isObject && !optionsValue.unit;
+ return !(!isObject || this.isArray(optionsValue) || this.isDOM(optionsValue));
+ };
+
+ return Helpers;
+
+ })();
+
+ h = new Helpers;
+
+ module.exports = h;
+
+
+/***/ }),
+/* 72 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var Bit, BitsMap, Circle, Cross, Curve, Custom, Equal, Line, Polygon, Rect, Zigzag, h;
+
+ Bit = __webpack_require__(73)["default"] || __webpack_require__(73);
+
+ Custom = __webpack_require__(85)["default"] || __webpack_require__(85);
+
+ Circle = __webpack_require__(86);
+
+ Line = __webpack_require__(87);
+
+ Zigzag = __webpack_require__(88);
+
+ Rect = __webpack_require__(89);
+
+ Polygon = __webpack_require__(90);
+
+ Cross = __webpack_require__(91);
+
+ Curve = __webpack_require__(92)["default"] || __webpack_require__(92);
+
+ Equal = __webpack_require__(93);
+
+ h = __webpack_require__(71);
+
+ BitsMap = (function() {
+ function BitsMap() {
+ this.addShape = h.bind(this.addShape, this);
+ }
+
+ BitsMap.prototype.bit = Bit;
+
+ BitsMap.prototype.custom = Custom;
+
+ BitsMap.prototype.circle = Circle;
+
+ BitsMap.prototype.line = Line;
+
+ BitsMap.prototype.zigzag = Zigzag;
+
+ BitsMap.prototype.rect = Rect;
+
+ BitsMap.prototype.polygon = Polygon;
+
+ BitsMap.prototype.cross = Cross;
+
+ BitsMap.prototype.equal = Equal;
+
+ BitsMap.prototype.curve = Curve;
+
+ BitsMap.prototype.getShape = function(name) {
+ return this[name] || h.error("no \"" + name + "\" shape available yet, please choose from this list:", ['circle', 'line', 'zigzag', 'rect', 'polygon', 'cross', 'equal', 'curve']);
+ };
+
+
+ /*
+ Method to add shape to the map.
+ @public
+ @param {String} Name of the shape module.
+ @param {Object} Shape module class.
+ */
+
+ BitsMap.prototype.addShape = function(name, Module) {
+ return this[name] = Module;
+ };
+
+ return BitsMap;
+
+ })();
+
+ module.exports = new BitsMap;
+
+
+/***/ }),
+/* 73 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _typeof2 = __webpack_require__(3);
+
+ var _typeof3 = _interopRequireDefault(_typeof2);
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _possibleConstructorReturn2 = __webpack_require__(75);
+
+ var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+ var _inherits2 = __webpack_require__(76);
+
+ var _inherits3 = _interopRequireDefault(_inherits2);
+
+ var _module = __webpack_require__(84);
+
+ var _module2 = _interopRequireDefault(_module);
+
+ var _h = __webpack_require__(71);
+
+ var _h2 = _interopRequireDefault(_h);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ var Bit = function (_Module) {
+ (0, _inherits3.default)(Bit, _Module);
+
+ function Bit() {
+ (0, _classCallCheck3.default)(this, Bit);
+ return (0, _possibleConstructorReturn3.default)(this, _Module.apply(this, arguments));
+ }
+
+ /*
+ Method to declare module's defaults.
+ @private
+ */
+ Bit.prototype._declareDefaults = function _declareDefaults() {
+ this._defaults = {
+ 'ns': 'http://www.w3.org/2000/svg',
+ 'tag': 'ellipse',
+ 'parent': document.body,
+ 'ratio': 1,
+ 'radius': 50,
+ 'radiusX': null,
+ 'radiusY': null,
+ 'stroke': 'hotpink',
+ 'stroke-dasharray': '',
+ 'stroke-dashoffset': '',
+ 'stroke-linecap': '',
+ 'stroke-width': 2,
+ 'stroke-opacity': 1,
+ 'fill': 'transparent',
+ 'fill-opacity': 1,
+ 'width': 0,
+ 'height': 0
+ };
+ this._drawMap = ['stroke', 'stroke-width', 'stroke-opacity', 'stroke-dasharray', 'fill', 'stroke-dashoffset', 'stroke-linecap', 'fill-opacity', 'transform'];
+ };
+
+ Bit.prototype._vars = function _vars() {
+ this._state = {};
+ this._drawMapLength = this._drawMap.length;
+ };
+ /*
+ Method for initial render of the shape.
+ @private
+ */
+
+
+ Bit.prototype._render = function _render() {
+ if (this._isRendered) {
+ return;
+ }
+ // set `_isRendered` hatch
+ this._isRendered = true;
+ // create `SVG` canvas to draw in
+ this._createSVGCanvas();
+ // set canvas size
+ this._setCanvasSize();
+ // draw the initial state
+ // this._draw();
+ // append the canvas to the parent from props
+ this._props.parent.appendChild(this._canvas);
+ };
+ /*
+ Method to create `SVG` canvas to draw in.
+ @private
+ */
+
+
+ Bit.prototype._createSVGCanvas = function _createSVGCanvas() {
+ var p = this._props;
+ // create canvas - `svg` element to draw in
+ this._canvas = document.createElementNS(p.ns, 'svg');
+ // create the element shape element and add it to the canvas
+ this.el = document.createElementNS(p.ns, p.tag);
+ this._canvas.appendChild(this.el);
+ };
+ /*
+ Method to set size of the _canvas.
+ @private
+ */
+
+
+ Bit.prototype._setCanvasSize = function _setCanvasSize() {
+ var p = this._props,
+ style = this._canvas.style;
+
+ style.display = 'block';
+ style.width = '100%';
+ style.height = '100%';
+ style.left = '0px';
+ style.top = '0px';
+ };
+ /*
+ Method to draw the shape.
+ Called on every frame.
+ @private
+ */
+
+
+ Bit.prototype._draw = function _draw() {
+ this._props.length = this._getLength();
+
+ var state = this._state,
+ props = this._props;
+
+ var len = this._drawMapLength;
+ while (len--) {
+ var name = this._drawMap[len];
+ switch (name) {
+ case 'stroke-dasharray':
+ case 'stroke-dashoffset':
+ this.castStrokeDash(name);
+ }
+ this._setAttrIfChanged(name, this._props[name]);
+ }
+ this._state.radius = this._props.radius;
+ };
+
+ Bit.prototype.castStrokeDash = function castStrokeDash(name) {
+ // # if array of values
+ var p = this._props;
+ if (_h2.default.isArray(p[name])) {
+ var stroke = '';
+ for (var i = 0; i < p[name].length; i++) {
+ var dash = p[name][i],
+ cast = dash.unit === '%' ? this.castPercent(dash.value) : dash.value;
+ stroke += cast + ' ';
+ }
+ p[name] = stroke === '0 ' ? stroke = '' : stroke;
+ return p[name] = stroke;
+ }
+ // # if single value
+ if ((0, _typeof3.default)(p[name]) === 'object') {
+ stroke = p[name].unit === '%' ? this.castPercent(p[name].value) : p[name].value;
+ p[name] = stroke === 0 ? stroke = '' : stroke;
+ }
+ };
+
+ Bit.prototype.castPercent = function castPercent(percent) {
+ return percent * (this._props.length / 100);
+ };
+
+ /*
+ Method to set props to attributes and cache the values.
+ @private
+ */
+
+
+ Bit.prototype._setAttrIfChanged = function _setAttrIfChanged(name, value) {
+ if (this._state[name] !== value) {
+ // this.el.style[name] = value;
+ this.el.setAttribute(name, value);
+ this._state[name] = value;
+ }
+ };
+ /*
+ Method to length of the shape.
+ @private
+ @returns {Number} Length of the shape.
+ */
+
+
+ Bit.prototype._getLength = function _getLength() {
+ var p = this._props,
+ len = 0,
+ isGetLength = !!(this.el && this.el.getTotalLength);
+
+ if (isGetLength && this.el.getAttribute('d')) {
+ len = this.el.getTotalLength();
+ } else {
+ len = 2 * (p.radiusX != null ? p.radiusX : p.radius);
+ }
+ return len;
+ };
+ /*
+ Method to calculate total sum between points.
+ @private
+ @param {Array} Array of points.
+ @returns {Number} Distance bewtween all points.
+ */
+
+
+ Bit.prototype._getPointsPerimiter = function _getPointsPerimiter(points) {
+ var sum = 0;
+
+ for (var i = 1; i < points.length; i++) {
+ sum += this._pointsDelta(points[i - 1], points[i]);
+ }
+
+ sum += this._pointsDelta(points[0], _h2.default.getLastItem(points));
+ return sum;
+ };
+ /*
+ Method to get delta from two points.
+ @private
+ @param {Object} Point 1.
+ @param {Object} Point 2.
+ @returns {Number} Distance between the pooints.
+ */
+
+
+ Bit.prototype._pointsDelta = function _pointsDelta(point1, point2) {
+ var dx = Math.abs(point1.x - point2.x),
+ dy = Math.abs(point1.y - point2.y);
+ return Math.sqrt(dx * dx + dy * dy);
+ };
+ /*
+ Method to set module's size.
+ @private
+ @param {Number} Module width.
+ @param {Number} Module height.
+ */
+
+
+ Bit.prototype._setSize = function _setSize(width, height) {
+ var p = this._props;
+ p.width = width;
+ p.height = height;
+ this._draw();
+ };
+
+ return Bit;
+ }(_module2.default);
+
+ exports.default = Bit;
+
+/***/ }),
+/* 74 */
+/***/ (function(module, exports) {
+
+ "use strict";
+
+ exports.__esModule = true;
+
+ exports.default = function (instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ };
+
+/***/ }),
+/* 75 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ "use strict";
+
+ exports.__esModule = true;
+
+ var _typeof2 = __webpack_require__(3);
+
+ var _typeof3 = _interopRequireDefault(_typeof2);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ exports.default = function (self, call) {
+ if (!self) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+
+ return call && ((typeof call === "undefined" ? "undefined" : (0, _typeof3.default)(call)) === "object" || typeof call === "function") ? call : self;
+ };
+
+/***/ }),
+/* 76 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ "use strict";
+
+ exports.__esModule = true;
+
+ var _setPrototypeOf = __webpack_require__(77);
+
+ var _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);
+
+ var _create = __webpack_require__(81);
+
+ var _create2 = _interopRequireDefault(_create);
+
+ var _typeof2 = __webpack_require__(3);
+
+ var _typeof3 = _interopRequireDefault(_typeof2);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ exports.default = function (subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : (0, _typeof3.default)(superClass)));
+ }
+
+ subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;
+ };
+
+/***/ }),
+/* 77 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ module.exports = { "default": __webpack_require__(78), __esModule: true };
+
+/***/ }),
+/* 78 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ __webpack_require__(79);
+ module.exports = __webpack_require__(14).Object.setPrototypeOf;
+
+/***/ }),
+/* 79 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // 19.1.3.19 Object.setPrototypeOf(O, proto)
+ var $export = __webpack_require__(12);
+ $export($export.S, 'Object', {setPrototypeOf: __webpack_require__(80).set});
+
+/***/ }),
+/* 80 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // Works with __proto__ only. Old v8 can't work with null proto objects.
+ /* eslint-disable no-proto */
+ var isObject = __webpack_require__(20)
+ , anObject = __webpack_require__(19);
+ var check = function(O, proto){
+ anObject(O);
+ if(!isObject(proto) && proto !== null)throw TypeError(proto + ": can't set as prototype!");
+ };
+ module.exports = {
+ set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
+ function(test, buggy, set){
+ try {
+ set = __webpack_require__(15)(Function.call, __webpack_require__(67).f(Object.prototype, '__proto__').set, 2);
+ set(test, []);
+ buggy = !(test instanceof Array);
+ } catch(e){ buggy = true; }
+ return function setPrototypeOf(O, proto){
+ check(O, proto);
+ if(buggy)O.__proto__ = proto;
+ else set(O, proto);
+ return O;
+ };
+ }({}, false) : undefined),
+ check: check
+ };
+
+/***/ }),
+/* 81 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ module.exports = { "default": __webpack_require__(82), __esModule: true };
+
+/***/ }),
+/* 82 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ __webpack_require__(83);
+ var $Object = __webpack_require__(14).Object;
+ module.exports = function create(P, D){
+ return $Object.create(P, D);
+ };
+
+/***/ }),
+/* 83 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var $export = __webpack_require__(12)
+ // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+ $export($export.S, 'Object', {create: __webpack_require__(31)});
+
+/***/ }),
+/* 84 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _typeof2 = __webpack_require__(3);
+
+ var _typeof3 = _interopRequireDefault(_typeof2);
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _h = __webpack_require__(71);
+
+ var _h2 = _interopRequireDefault(_h);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ /*
+ Base class for module. Extends and parses defaults.
+ */
+ var Module = function () {
+ function Module() {
+ var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+ (0, _classCallCheck3.default)(this, Module);
+
+ // this._isIt = o.isIt;
+ // delete o.isIt;
+ this._o = o;
+ this._index = this._o.index || 0;
+ // map of props that should be
+ // parsed to arrays of values
+ this._arrayPropertyMap = {
+ strokeDashoffset: 1,
+ strokeDasharray: 1,
+ origin: 1
+ };
+
+ this._skipPropsDelta = {
+ timeline: 1,
+ prevChainModule: 1,
+ callbacksContext: 1
+ };
+
+ this._declareDefaults();
+ this._extendDefaults();
+
+ this._vars();
+ this._render();
+ }
+ /*
+ Method to declare defaults.
+ @private
+ */
+
+
+ Module.prototype._declareDefaults = function _declareDefaults() {
+ this._defaults = {};
+ };
+ /*
+ Method to declare module's variables.
+ @private
+ */
+
+
+ Module.prototype._vars = function _vars() {
+ this._progress = 0;
+ this._strokeDasharrayBuffer = [];
+ };
+ /*
+ Method to render on initialization.
+ @private
+ */
+
+
+ Module.prototype._render = function _render() {};
+ /*
+ Method to set property on the module.
+ @private
+ @param {String, Object} Name of the property to set
+ or object with properties to set.
+ @param {Any} Value for the property to set. Could be
+ undefined if the first param is object.
+ */
+
+
+ Module.prototype._setProp = function _setProp(attr, value) {
+ if ((typeof attr === 'undefined' ? 'undefined' : (0, _typeof3.default)(attr)) === 'object') {
+ for (var key in attr) {
+ this._assignProp(key, attr[key]);
+ }
+ } else {
+ this._assignProp(attr, value);
+ }
+ };
+ /*
+ Method to assign single property's value.
+ @private
+ @param {String} Property name.
+ @param {Any} Property value.
+ */
+
+
+ Module.prototype._assignProp = function _assignProp(key, value) {
+ this._props[key] = value;
+ };
+ /*
+ Method to show element.
+ @private
+ */
+
+
+ Module.prototype._show = function _show() {
+ var p = this._props;
+ if (!this.el) {
+ return;
+ }
+
+ if (p.isSoftHide) {
+ // this.el.style.opacity = p.opacity;
+ this._showByTransform();
+ } else {
+ this.el.style.display = 'block';
+ }
+
+ this._isShown = true;
+ };
+ /*
+ Method to hide element.
+ @private
+ */
+
+
+ Module.prototype._hide = function _hide() {
+ if (!this.el) {
+ return;
+ }
+
+ if (this._props.isSoftHide) {
+ // this.el.style.opacity = 0;
+ _h2.default.setPrefixedStyle(this.el, 'transform', 'scale(0)');
+ } else {
+ this.el.style.display = 'none';
+ }
+
+ this._isShown = false;
+ };
+ /*
+ Method to show element by applying transform back to normal.
+ @private
+ */
+
+
+ Module.prototype._showByTransform = function _showByTransform() {};
+ /*
+ Method to parse option string.
+ Searches for stagger and rand values and parses them.
+ Leaves the value unattended otherwise.
+ @param {Any} Option value to parse.
+ @returns {Number} Parsed options value.
+ */
+
+
+ Module.prototype._parseOptionString = function _parseOptionString(value) {
+ if (typeof value === 'string') {
+ if (value.match(/stagger/)) {
+ value = _h2.default.parseStagger(value, this._index);
+ }
+ }
+ if (typeof value === 'string') {
+ if (value.match(/rand/)) {
+ value = _h2.default.parseRand(value);
+ }
+ }
+ return value;
+ };
+ /*
+ Method to parse postion option.
+ @param {String} Property name.
+ @param {Any} Property Value.
+ @returns {String} Parsed options value.
+ */
+
+
+ Module.prototype._parsePositionOption = function _parsePositionOption(key, value) {
+ if (_h2.default.unitOptionMap[key]) {
+ value = _h2.default.parseUnit(value).string;
+ }
+ return value;
+ };
+ /*
+ Method to parse strokeDash.. option.
+ @param {String} Property name.
+ @param {Any} Property value.
+ @returns {String} Parsed options value.
+ */
+
+
+ Module.prototype._parseStrokeDashOption = function _parseStrokeDashOption(key, value) {
+ var result = value;
+ // parse numeric/percent values for strokeDash.. properties
+ if (this._arrayPropertyMap[key]) {
+ var result = [];
+ switch (typeof value === 'undefined' ? 'undefined' : (0, _typeof3.default)(value)) {
+ case 'number':
+ result.push(_h2.default.parseUnit(value));
+ break;
+ case 'string':
+ var array = value.split(' ');
+ for (var i = 0; i < array.length; i++) {
+ result.push(_h2.default.parseUnit(array[i]));
+ }
+ break;
+ }
+ }
+ return result;
+ };
+ /*
+ Method to check if the property is delta property.
+ @private
+ @param {Any} Parameter value to check.
+ @returns {Boolean}
+ */
+
+
+ Module.prototype._isDelta = function _isDelta(optionsValue) {
+ var isObject = _h2.default.isObject(optionsValue);
+ isObject = isObject && !optionsValue.unit;
+ return !(!isObject || _h2.default.isArray(optionsValue) || _h2.default.isDOM(optionsValue));
+ };
+ /*
+ Method to get delta from property and set
+ the property's start value to the props object.
+ @private
+ @param {String} Key name to get delta for.
+ @param {Object} Option value to get the delta for.
+ */
+
+
+ Module.prototype._getDelta = function _getDelta(key, optionsValue) {
+ var delta;
+ if ((key === 'left' || key === 'top') && !this._o.ctx) {
+ _h2.default.warn('Consider to animate x/y properties instead of left/top,\n as it would be much more performant', optionsValue);
+ }
+ // skip delta calculation for a property if it is listed
+ // in skipPropsDelta object
+ if (this._skipPropsDelta && this._skipPropsDelta[key]) {
+ return;
+ }
+ // get delta
+ delta = _h2.default.parseDelta(key, optionsValue, this._index);
+ // if successfully parsed - save it
+ if (delta.type != null) {
+ this._deltas[key] = delta;
+ }
+
+ var deltaEnd = (0, _typeof3.default)(delta.end) === 'object' ? delta.end.value === 0 ? 0 : delta.end.string : delta.end;
+ // set props to end value of the delta
+ // 0 should be 0 regardless units
+ this._props[key] = deltaEnd;
+ };
+ /*
+ Method to copy `_o` options to `_props` object
+ with fallback to `_defaults`.
+ @private
+ */
+
+
+ Module.prototype._extendDefaults = function _extendDefaults() {
+ this._props = {};
+ this._deltas = {};
+ for (var key in this._defaults) {
+ // skip property if it is listed in _skipProps
+ // if (this._skipProps && this._skipProps[key]) { continue; }
+ // copy the properties to the _o object
+ var value = this._o[key] != null ? this._o[key] : this._defaults[key];
+ // parse option
+ this._parseOption(key, value);
+ }
+ };
+ /*
+ Method to tune new oprions to _o and _props object.
+ @private
+ @param {Object} Options object to tune to.
+ */
+
+
+ Module.prototype._tuneNewOptions = function _tuneNewOptions(o) {
+ // hide the module before tuning it's options
+ // cuz the user could see the change
+ this._hide();
+ for (var key in o) {
+ // skip property if it is listed in _skipProps
+ // if (this._skipProps && this._skipProps[key]) { continue; }
+ // copy the properties to the _o object
+ // delete the key from deltas
+ o && delete this._deltas[key];
+ // rewrite _o record
+ this._o[key] = o[key];
+ // save the options to _props
+ this._parseOption(key, o[key]);
+ }
+ };
+ /*
+ Method to parse option value.
+ @private
+ @param {String} Option name.
+ @param {Any} Option value.
+ */
+
+
+ Module.prototype._parseOption = function _parseOption(name, value) {
+ // if delta property
+ if (this._isDelta(value) && !this._skipPropsDelta[name]) {
+ this._getDelta(name, value);
+ var deltaEnd = _h2.default.getDeltaEnd(value);
+ return this._assignProp(name, this._parseProperty(name, deltaEnd));
+ }
+
+ this._assignProp(name, this._parseProperty(name, value));
+ };
+ /*
+ Method to parse postion and string props.
+ @private
+ @param {String} Property name.
+ @param {Any} Property value.
+ @returns {Any} Parsed property value.
+ */
+
+
+ Module.prototype._parsePreArrayProperty = function _parsePreArrayProperty(name, value) {
+ // parse stagger and rand values
+ value = this._parseOptionString(value);
+ // parse units for position properties
+ return this._parsePositionOption(name, value);
+ };
+ /*
+ Method to parse property value.
+ @private
+ @param {String} Property name.
+ @param {Any} Property value.
+ @returns {Any} Parsed property value.
+ */
+
+
+ Module.prototype._parseProperty = function _parseProperty(name, value) {
+ // parse `HTML` element in `parent` option
+ if (name === 'parent') {
+ return _h2.default.parseEl(value);
+ }
+ // parse `stagger`, `rand` and `position`
+ value = this._parsePreArrayProperty(name, value);
+ // parse numeric/percent values for strokeDash.. properties
+ return this._parseStrokeDashOption(name, value);
+ };
+ /*
+ Method to parse values inside ∆.
+ @private
+ @param {String} Key name.
+ @param {Object} Delta.
+ @returns {Object} Delta with parsed parameters.
+ */
+
+
+ Module.prototype._parseDeltaValues = function _parseDeltaValues(name, delta) {
+ // return h.parseDelta( name, delta, this._index );
+
+ var d = {};
+ for (var key in delta) {
+ var value = delta[key];
+
+ // delete delta[key];
+ // add parsed properties
+ var newEnd = this._parsePreArrayProperty(name, value);
+ d[this._parsePreArrayProperty(name, key)] = newEnd;
+ }
+ return d;
+ };
+ /*
+ Method to parse delta and nondelta properties.
+ @private
+ @param {String} Property name.
+ @param {Any} Property value.
+ @returns {Any} Parsed property value.
+ */
+
+
+ Module.prototype._preparsePropValue = function _preparsePropValue(key, value) {
+ return this._isDelta(value) ? this._parseDeltaValues(key, value) : this._parsePreArrayProperty(key, value);
+ };
+ /*
+ Method to calculate current progress of the deltas.
+ @private
+ @param {Number} Eased progress to calculate - [0..1].
+ @param {Number} Progress to calculate - [0..1].
+ */
+
+
+ Module.prototype._calcCurrentProps = function _calcCurrentProps(easedProgress, p) {
+
+ for (var key in this._deltas) {
+
+ var value = this._deltas[key];
+
+ // get eased progress from delta easing if defined and not curve
+ var isCurve = !!value.curve;
+ var ep = value.easing != null && !isCurve ? value.easing(p) : easedProgress;
+
+ if (value.type === 'array') {
+ var arr;
+ // if prop property is array - reuse it else - create an array
+ if (_h2.default.isArray(this._props[key])) {
+ arr = this._props[key];
+ arr.length = 0;
+ } else {
+ arr = [];
+ }
+
+ // just optimization to prevent curve
+ // calculations on every array item
+ var proc = isCurve ? value.curve(p) : null;
+
+ for (var i = 0; i < value.delta.length; i++) {
+ var item = value.delta[i],
+ dash = !isCurve ? value.start[i].value + ep * item.value : proc * (value.start[i].value + p * item.value);
+ arr.push({
+ string: '' + dash + item.unit,
+ value: dash,
+ unit: item.unit
+ });
+ }
+
+ this._props[key] = arr;
+ } else if (value.type === 'number') {
+ this._props[key] = !isCurve ? value.start + ep * value.delta : value.curve(p) * (value.start + p * value.delta);
+ } else if (value.type === 'unit') {
+ var currentValue = !isCurve ? value.start.value + ep * value.delta : value.curve(p) * (value.start.value + p * value.delta);
+
+ this._props[key] = '' + currentValue + value.end.unit;
+ } else if (value.type === 'color') {
+ var r, g, b, a;
+ if (!isCurve) {
+ r = parseInt(value.start.r + ep * value.delta.r, 10);
+ g = parseInt(value.start.g + ep * value.delta.g, 10);
+ b = parseInt(value.start.b + ep * value.delta.b, 10);
+ a = parseFloat(value.start.a + ep * value.delta.a);
+ } else {
+ var cp = value.curve(p);
+ r = parseInt(cp * (value.start.r + p * value.delta.r), 10);
+ g = parseInt(cp * (value.start.g + p * value.delta.g), 10);
+ b = parseInt(cp * (value.start.b + p * value.delta.b), 10);
+ a = parseFloat(cp * (value.start.a + p * value.delta.a));
+ }
+ this._props[key] = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';
+ }
+ }
+ };
+ /*
+ Method to calculate current progress and probably draw it in children.
+ @private
+ @param {Number} Eased progress to set - [0..1].
+ @param {Number} Progress to set - [0..1].
+ */
+
+
+ Module.prototype._setProgress = function _setProgress(easedProgress, progress) {
+ this._progress = easedProgress;
+ this._calcCurrentProps(easedProgress, progress);
+ };
+
+ return Module;
+ }();
+
+ exports.default = Module;
+
+/***/ }),
+/* 85 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _possibleConstructorReturn2 = __webpack_require__(75);
+
+ var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+ var _inherits2 = __webpack_require__(76);
+
+ var _inherits3 = _interopRequireDefault(_inherits2);
+
+ var _bit = __webpack_require__(73);
+
+ var _bit2 = _interopRequireDefault(_bit);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ var Custom = function (_Bit) {
+ (0, _inherits3.default)(Custom, _Bit);
+
+ function Custom() {
+ (0, _classCallCheck3.default)(this, Custom);
+ return (0, _possibleConstructorReturn3.default)(this, _Bit.apply(this, arguments));
+ }
+
+ /*
+ Method to declare module's defaults.
+ @private
+ @overrides @ Bit
+ */
+ Custom.prototype._declareDefaults = function _declareDefaults() {
+ _Bit.prototype._declareDefaults.call(this);
+
+ this._defaults.tag = 'path';
+ this._defaults.parent = null;
+
+ // remove `stroke-width` from `_drawMap`
+ // because we need to recal strokeWidth size regarding scale
+ for (var i = 0; i < this._drawMap.length; i++) {
+ if (this._drawMap[i] === 'stroke-width') {
+ this._drawMap.splice(i, 1);
+ }
+ }
+ };
+ /*
+ Method to get shape to set on module's path.
+ @public
+ @returns {String} Empty string.
+ */
+
+
+ Custom.prototype.getShape = function getShape() {
+ return '';
+ };
+ /*
+ Method to get shape perimeter length.
+ @public
+ @returns {Number} Default length string.
+ */
+
+
+ Custom.prototype.getLength = function getLength() {
+ return 100;
+ };
+ /*
+ Method to draw the shape.
+ Called on every frame.
+ @private
+ @overrides @ Bit
+ */
+
+
+ Custom.prototype._draw = function _draw() {
+ var p = this._props,
+ state = this._state,
+ radiusXChange = state['radiusX'] !== p.radiusX,
+ radiusYChange = state['radiusY'] !== p.radiusY,
+ radiusChange = state['radius'] !== p.radius;
+
+ // update transform only if one of radiuses changed
+ if (radiusXChange || radiusYChange || radiusChange) {
+ this.el.setAttribute('transform', this._getScale());
+ state['radiusX'] = p.radiusX;
+ state['radiusY'] = p.radiusY;
+ state['radius'] = p.radius;
+ }
+
+ this._setAttrIfChanged('stroke-width', p['stroke-width'] / p.maxScale);
+
+ _Bit.prototype._draw.call(this);
+ };
+ /*
+ Method for initial render of the shape.
+ @private
+ @overrides @ Bit
+ */
+
+
+ Custom.prototype._render = function _render() {
+ if (this._isRendered) {
+ return;
+ }
+ this._isRendered = true;
+
+ this._length = this.getLength();
+
+ var p = this._props;
+ p.parent.innerHTML = '';
+
+ this._canvas = p.parent.querySelector('#js-mojs-shape-canvas');
+ this.el = p.parent.querySelector('#js-mojs-shape-el');
+ this._setCanvasSize();
+ };
+ /*
+ Method to get scales for the shape.
+ @private
+ @mutates @props
+ */
+
+
+ Custom.prototype._getScale = function _getScale() {
+ var p = this._props,
+ radiusX = p.radiusX ? p.radiusX : p.radius,
+ radiusY = p.radiusY ? p.radiusY : p.radius;
+
+ p.scaleX = 2 * radiusX / 100;
+ p.scaleY = 2 * radiusY / 100;
+ p.maxScale = Math.max(p.scaleX, p.scaleY);
+
+ p.shiftX = p.width / 2 - 50 * p.scaleX;
+ p.shiftY = p.height / 2 - 50 * p.scaleY;
+
+ var translate = 'translate(' + p.shiftX + ', ' + p.shiftY + ')';
+ return translate + ' scale(' + p.scaleX + ', ' + p.scaleY + ')';
+ };
+ /*
+ Method to length of the shape.
+ @private
+ @returns {Number} Length of the shape.
+ */
+
+
+ Custom.prototype._getLength = function _getLength() {
+ return this._length;
+ };
+
+ return Custom;
+ }(_bit2.default);
+
+ exports.default = Custom;
+
+/***/ }),
+/* 86 */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+ /* istanbul ignore next */
+ var Bit, Circle,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Bit = __webpack_require__(73)["default"] || __webpack_require__(73);
+
+ Circle = (function(superClass) {
+ extend(Circle, superClass);
+
+ function Circle() {
+ return Circle.__super__.constructor.apply(this, arguments);
+ }
+
+ Circle.prototype._declareDefaults = function() {
+ Circle.__super__._declareDefaults.apply(this, arguments);
+ return this._defaults.shape = 'ellipse';
+ };
+
+ Circle.prototype._draw = function() {
+ var rx, ry;
+ rx = this._props.radiusX != null ? this._props.radiusX : this._props.radius;
+ ry = this._props.radiusY != null ? this._props.radiusY : this._props.radius;
+ this._setAttrIfChanged('rx', rx);
+ this._setAttrIfChanged('ry', ry);
+ this._setAttrIfChanged('cx', this._props.width / 2);
+ this._setAttrIfChanged('cy', this._props.height / 2);
+ return Circle.__super__._draw.apply(this, arguments);
+ };
+
+ Circle.prototype._getLength = function() {
+ var radiusX, radiusY;
+ radiusX = this._props.radiusX != null ? this._props.radiusX : this._props.radius;
+ radiusY = this._props.radiusY != null ? this._props.radiusY : this._props.radius;
+ return 2 * Math.PI * Math.sqrt((radiusX * radiusX + radiusY * radiusY) / 2);
+ };
+
+ return Circle;
+
+ })(Bit);
+
+ module.exports = Circle;
+
+
+/***/ }),
+/* 87 */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+ /* istanbul ignore next */
+ var Bit, Line,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Bit = __webpack_require__(73)["default"] || __webpack_require__(73);
+
+ Line = (function(superClass) {
+ extend(Line, superClass);
+
+ function Line() {
+ return Line.__super__.constructor.apply(this, arguments);
+ }
+
+ Line.prototype._declareDefaults = function() {
+ Line.__super__._declareDefaults.apply(this, arguments);
+ return this._defaults.tag = 'line';
+ };
+
+ Line.prototype._draw = function() {
+ var radiusX, x, y;
+ radiusX = this._props.radiusX != null ? this._props.radiusX : this._props.radius;
+ x = this._props.width / 2;
+ y = this._props.height / 2;
+ this._setAttrIfChanged('x1', x - radiusX);
+ this._setAttrIfChanged('x2', x + radiusX);
+ this._setAttrIfChanged('y1', y);
+ this._setAttrIfChanged('y2', y);
+ return Line.__super__._draw.apply(this, arguments);
+ };
+
+ return Line;
+
+ })(Bit);
+
+ module.exports = Line;
+
+
+/***/ }),
+/* 88 */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+ /* istanbul ignore next */
+ var Bit, Zigzag,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Bit = __webpack_require__(73)["default"] || __webpack_require__(73);
+
+ Zigzag = (function(superClass) {
+ extend(Zigzag, superClass);
+
+ function Zigzag() {
+ return Zigzag.__super__.constructor.apply(this, arguments);
+ }
+
+ Zigzag.prototype._declareDefaults = function() {
+ Zigzag.__super__._declareDefaults.apply(this, arguments);
+ this._defaults.tag = 'path';
+ return this._defaults.points = 3;
+ };
+
+ Zigzag.prototype._draw = function() {
+ var currentX, currentY, delta, i, isPoints, isRadiusX, isRadiusY, j, length, p, points, radiusX, radiusY, ref, stepX, x, y, yFlip;
+ Zigzag.__super__._draw.apply(this, arguments);
+ p = this._props;
+ if (!this._props.points) {
+ return;
+ }
+ radiusX = this._props.radiusX != null ? this._props.radiusX : this._props.radius;
+ radiusY = this._props.radiusY != null ? this._props.radiusY : this._props.radius;
+ isRadiusX = radiusX === this._prevRadiusX;
+ isRadiusY = radiusY === this._prevRadiusY;
+ isPoints = p.points === this._prevPoints;
+ if (isRadiusX && isRadiusY && isPoints) {
+ return;
+ }
+ x = p.width / 2;
+ y = p.height / 2;
+ currentX = x - radiusX;
+ currentY = y;
+ stepX = (2 * radiusX) / (p.points - 1);
+ yFlip = -1;
+ delta = Math.sqrt(stepX * stepX + radiusY * radiusY);
+ length = -delta;
+ points = "M" + currentX + ", " + y + " ";
+ for (i = j = 0, ref = p.points; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
+ points += "L" + currentX + ", " + currentY + " ";
+ currentX += stepX;
+ length += delta;
+ currentY = yFlip === -1 ? y - radiusY : y;
+ yFlip = -yFlip;
+ }
+ this._length = length;
+ this.el.setAttribute('d', points);
+ this._prevPoints = p.points;
+ this._prevRadiusX = radiusX;
+ return this._prevRadiusY = radiusY;
+ };
+
+ Zigzag.prototype._getLength = function() {
+ return this._length;
+ };
+
+ return Zigzag;
+
+ })(Bit);
+
+ module.exports = Zigzag;
+
+
+/***/ }),
+/* 89 */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+ /* istanbul ignore next */
+ var Bit, Rect,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Bit = __webpack_require__(73)["default"] || __webpack_require__(73);
+
+ Rect = (function(superClass) {
+ extend(Rect, superClass);
+
+ function Rect() {
+ return Rect.__super__.constructor.apply(this, arguments);
+ }
+
+ Rect.prototype._declareDefaults = function() {
+ Rect.__super__._declareDefaults.apply(this, arguments);
+ this._defaults.tag = 'rect';
+ this._defaults.rx = 0;
+ return this._defaults.ry = 0;
+ };
+
+ Rect.prototype._draw = function() {
+ var p, radiusX, radiusY;
+ Rect.__super__._draw.apply(this, arguments);
+ p = this._props;
+ radiusX = p.radiusX != null ? p.radiusX : p.radius;
+ radiusY = p.radiusY != null ? p.radiusY : p.radius;
+ this._setAttrIfChanged('width', 2 * radiusX);
+ this._setAttrIfChanged('height', 2 * radiusY);
+ this._setAttrIfChanged('x', (p.width / 2) - radiusX);
+ this._setAttrIfChanged('y', (p.height / 2) - radiusY);
+ this._setAttrIfChanged('rx', p.rx);
+ return this._setAttrIfChanged('ry', p.ry);
+ };
+
+ Rect.prototype._getLength = function() {
+ var radiusX, radiusY;
+ radiusX = this._props.radiusX != null ? this._props.radiusX : this._props.radius;
+ radiusY = this._props.radiusY != null ? this._props.radiusY : this._props.radius;
+ return 2 * (2 * radiusX + 2 * radiusY);
+ };
+
+ return Rect;
+
+ })(Bit);
+
+ module.exports = Rect;
+
+
+/***/ }),
+/* 90 */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+ /* istanbul ignore next */
+ var Bit, Polygon, h,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Bit = __webpack_require__(73)["default"] || __webpack_require__(73);
+
+ h = __webpack_require__(71);
+
+ Polygon = (function(superClass) {
+ extend(Polygon, superClass);
+
+ function Polygon() {
+ return Polygon.__super__.constructor.apply(this, arguments);
+ }
+
+
+ /*
+ Method to declare defaults.
+ @overrides @ Bit
+ */
+
+ Polygon.prototype._declareDefaults = function() {
+ Polygon.__super__._declareDefaults.apply(this, arguments);
+ this._defaults.tag = 'path';
+ return this._defaults.points = 3;
+ };
+
+
+ /*
+ Method to draw the shape.
+ @overrides @ Bit
+ */
+
+ Polygon.prototype._draw = function() {
+ var char, d, i, isPoints, isRadiusX, isRadiusY, j, k, len, p, point, radiusX, radiusY, ref, ref1, step;
+ p = this._props;
+ radiusX = this._props.radiusX != null ? this._props.radiusX : this._props.radius;
+ radiusY = this._props.radiusY != null ? this._props.radiusY : this._props.radius;
+ isRadiusX = radiusX === this._prevRadiusX;
+ isRadiusY = radiusY === this._prevRadiusY;
+ isPoints = p.points === this._prevPoints;
+ if (!(isRadiusX && isRadiusY && isPoints)) {
+ step = 360 / this._props.points;
+ if (this._radialPoints == null) {
+ this._radialPoints = [];
+ } else {
+ this._radialPoints.length = 0;
+ }
+ for (i = j = 0, ref = this._props.points; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
+ this._radialPoints.push(h.getRadialPoint({
+ radius: this._props.radius,
+ radiusX: this._props.radiusX,
+ radiusY: this._props.radiusY,
+ angle: i * step,
+ center: {
+ x: p.width / 2,
+ y: p.height / 2
+ }
+ }));
+ }
+ d = '';
+ ref1 = this._radialPoints;
+ for (i = k = 0, len = ref1.length; k < len; i = ++k) {
+ point = ref1[i];
+ char = i === 0 ? 'M' : 'L';
+ d += "" + char + (point.x.toFixed(4)) + "," + (point.y.toFixed(4)) + " ";
+ }
+ this._prevPoints = p.points;
+ this._prevRadiusX = radiusX;
+ this._prevRadiusY = radiusY;
+ this.el.setAttribute('d', (d += 'z'));
+ }
+ return Polygon.__super__._draw.apply(this, arguments);
+ };
+
+
+ /*
+ Method to get length of the shape.
+ @overrides @ Bit
+ */
+
+ Polygon.prototype._getLength = function() {
+ return this._getPointsPerimiter(this._radialPoints);
+ };
+
+ return Polygon;
+
+ })(Bit);
+
+ module.exports = Polygon;
+
+
+/***/ }),
+/* 91 */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+ /* istanbul ignore next */
+ var Bit, Cross,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Bit = __webpack_require__(73)["default"] || __webpack_require__(73);
+
+ Cross = (function(superClass) {
+ extend(Cross, superClass);
+
+ function Cross() {
+ return Cross.__super__.constructor.apply(this, arguments);
+ }
+
+ Cross.prototype._declareDefaults = function() {
+ Cross.__super__._declareDefaults.apply(this, arguments);
+ return this._defaults.tag = 'path';
+ };
+
+ Cross.prototype._draw = function() {
+ var d, isRadiusX, isRadiusY, line1, line2, p, radiusX, radiusY, x, x1, x2, y, y1, y2;
+ Cross.__super__._draw.apply(this, arguments);
+ p = this._props;
+ radiusX = this._props.radiusX != null ? this._props.radiusX : this._props.radius;
+ radiusY = this._props.radiusY != null ? this._props.radiusY : this._props.radius;
+ isRadiusX = radiusX === this._prevRadiusX;
+ isRadiusY = radiusY === this._prevRadiusY;
+ if (isRadiusX && isRadiusY) {
+ return;
+ }
+ x = this._props.width / 2;
+ y = this._props.height / 2;
+ x1 = x - radiusX;
+ x2 = x + radiusX;
+ line1 = "M" + x1 + "," + y + " L" + x2 + "," + y;
+ y1 = y - radiusY;
+ y2 = y + radiusY;
+ line2 = "M" + x + "," + y1 + " L" + x + "," + y2;
+ d = line1 + " " + line2;
+ this.el.setAttribute('d', d);
+ this._prevRadiusX = radiusX;
+ return this._prevRadiusY = radiusY;
+ };
+
+ Cross.prototype._getLength = function() {
+ var radiusX, radiusY;
+ radiusX = this._props.radiusX != null ? this._props.radiusX : this._props.radius;
+ radiusY = this._props.radiusY != null ? this._props.radiusY : this._props.radius;
+ return 2 * (radiusX + radiusY);
+ };
+
+ return Cross;
+
+ })(Bit);
+
+ module.exports = Cross;
+
+
+/***/ }),
+/* 92 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _possibleConstructorReturn2 = __webpack_require__(75);
+
+ var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+ var _inherits2 = __webpack_require__(76);
+
+ var _inherits3 = _interopRequireDefault(_inherits2);
+
+ var _bit = __webpack_require__(73);
+
+ var _bit2 = _interopRequireDefault(_bit);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ var Curve = function (_Bit) {
+ (0, _inherits3.default)(Curve, _Bit);
+
+ function Curve() {
+ (0, _classCallCheck3.default)(this, Curve);
+ return (0, _possibleConstructorReturn3.default)(this, _Bit.apply(this, arguments));
+ }
+
+ /*
+ Method to declare module's defaults.
+ @private
+ @overrides @ Bit
+ */
+ Curve.prototype._declareDefaults = function _declareDefaults() {
+ _Bit.prototype._declareDefaults.call(this);
+ this._defaults.tag = 'path';
+ };
+ /*
+ Method to draw the module.
+ @private
+ @overrides @ Bit
+ */
+
+
+ Curve.prototype._draw = function _draw() {
+ _Bit.prototype._draw.call(this);
+ var p = this._props;
+
+ var radiusX = p.radiusX != null ? p.radiusX : p.radius;
+ var radiusY = p.radiusY != null ? p.radiusY : p.radius;
+
+ var isRadiusX = radiusX === this._prevRadiusX;
+ var isRadiusY = radiusY === this._prevRadiusY;
+ var isPoints = p.points === this._prevPoints;
+ // skip if nothing changed
+ if (isRadiusX && isRadiusY && isPoints) {
+ return;
+ }
+
+ var x = p.width / 2;
+ var y = p.height / 2;
+ var x1 = x - radiusX;
+ var x2 = x + radiusX;
+
+ var d = 'M' + x1 + ' ' + y + ' Q ' + x + ' ' + (y - 2 * radiusY) + ' ' + x2 + ' ' + y;
+
+ // set the `d` attribute and save it to `_prevD`
+ this.el.setAttribute('d', d);
+ // save the properties
+ this._prevPoints = p.points;
+ this._prevRadiusX = radiusX;
+ this._prevRadiusY = radiusY;
+ };
+
+ Curve.prototype._getLength = function _getLength() {
+ var p = this._props;
+
+ var radiusX = p.radiusX != null ? p.radiusX : p.radius;
+ var radiusY = p.radiusY != null ? p.radiusY : p.radius;
+
+ var dRadius = radiusX + radiusY;
+ var sqrt = Math.sqrt((3 * radiusX + radiusY) * (radiusX + 3 * radiusY));
+
+ return .5 * Math.PI * (3 * dRadius - sqrt);
+ };
+
+ return Curve;
+ }(_bit2.default); // istanbul ignore next
+
+
+ exports.default = Curve;
+
+/***/ }),
+/* 93 */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+ /* istanbul ignore next */
+ var Bit, Equal,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Bit = __webpack_require__(73)["default"] || __webpack_require__(73);
+
+ Equal = (function(superClass) {
+ extend(Equal, superClass);
+
+ function Equal() {
+ return Equal.__super__.constructor.apply(this, arguments);
+ }
+
+ Equal.prototype._declareDefaults = function() {
+ Equal.__super__._declareDefaults.apply(this, arguments);
+ this._defaults.tag = 'path';
+ return this._defaults.points = 2;
+ };
+
+ Equal.prototype._draw = function() {
+ var d, i, isPoints, isRadiusX, isRadiusY, j, p, radiusX, radiusY, ref, x, x1, x2, y, yStart, yStep;
+ Equal.__super__._draw.apply(this, arguments);
+ p = this._props;
+ if (!this._props.points) {
+ return;
+ }
+ radiusX = this._props.radiusX != null ? this._props.radiusX : this._props.radius;
+ radiusY = this._props.radiusY != null ? this._props.radiusY : this._props.radius;
+ isRadiusX = radiusX === this._prevRadiusX;
+ isRadiusY = radiusY === this._prevRadiusY;
+ isPoints = p.points === this._prevPoints;
+ if (isRadiusX && isRadiusY && isPoints) {
+ return;
+ }
+ x = this._props.width / 2;
+ y = this._props.height / 2;
+ x1 = x - radiusX;
+ x2 = x + radiusX;
+ d = '';
+ yStep = 2 * radiusY / (this._props.points - 1);
+ yStart = y - radiusY;
+ for (i = j = 0, ref = this._props.points; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
+ y = "" + (i * yStep + yStart);
+ d += "M" + x1 + ", " + y + " L" + x2 + ", " + y + " ";
+ }
+ this.el.setAttribute('d', d);
+ this._prevPoints = p.points;
+ this._prevRadiusX = radiusX;
+ return this._prevRadiusY = radiusY;
+ };
+
+ Equal.prototype._getLength = function() {
+ return 2 * (this._props.radiusX != null ? this._props.radiusX : this._props.radius);
+ };
+
+ return Equal;
+
+ })(Bit);
+
+ module.exports = Equal;
+
+
+/***/ }),
+/* 94 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _keys = __webpack_require__(95);
+
+ var _keys2 = _interopRequireDefault(_keys);
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _possibleConstructorReturn2 = __webpack_require__(75);
+
+ var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+ var _inherits2 = __webpack_require__(76);
+
+ var _inherits3 = _interopRequireDefault(_inherits2);
+
+ var _module = __webpack_require__(84);
+
+ var _module2 = _interopRequireDefault(_module);
+
+ var _thenable = __webpack_require__(99);
+
+ var _thenable2 = _interopRequireDefault(_thenable);
+
+ var _tunable = __webpack_require__(116);
+
+ var _tunable2 = _interopRequireDefault(_tunable);
+
+ var _tweenable = __webpack_require__(100);
+
+ var _tweenable2 = _interopRequireDefault(_tweenable);
+
+ var _tween = __webpack_require__(101);
+
+ var _tween2 = _interopRequireDefault(_tween);
+
+ var _timeline = __webpack_require__(110);
+
+ var _timeline2 = _interopRequireDefault(_timeline);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ var h = __webpack_require__(71);
+ var Bit = __webpack_require__(73);
+ var shapesMap = __webpack_require__(72);
+
+ // TODO
+ // - refactor
+ // - add setIfChanged to Module
+ // --
+ // - tween for every prop
+
+ var Shape = function (_Tunable) {
+ (0, _inherits3.default)(Shape, _Tunable);
+
+ function Shape() {
+ (0, _classCallCheck3.default)(this, Shape);
+ return (0, _possibleConstructorReturn3.default)(this, _Tunable.apply(this, arguments));
+ }
+
+ /*
+ Method to declare module's defaults.
+ @private
+ */
+ Shape.prototype._declareDefaults = function _declareDefaults() {
+ // DEFAULTS / APIs
+ this._defaults = {
+ // where to append the module to [selector, HTMLElement]
+ parent: document.body,
+ // class name for the `el`
+ className: '',
+ // Possible values: [circle, line, zigzag, rect, polygon, cross, equal ]
+ shape: 'circle',
+ // ∆ :: Possible values: [color name, rgb, rgba, hex]
+ stroke: 'transparent',
+ // ∆ :: Possible values: [ 0..1 ]
+ strokeOpacity: 1,
+ // Possible values: ['butt' | 'round' | 'square']
+ strokeLinecap: '',
+ // ∆ :: Possible values: [ number ]
+ strokeWidth: 2,
+ // ∆ :: Units :: Possible values: [ number, string ]
+ strokeDasharray: 0,
+ // ∆ :: Units :: Possible values: [ number, string ]
+ strokeDashoffset: 0,
+ // ∆ :: Possible values: [color name, rgb, rgba, hex]
+ fill: 'deeppink',
+ // ∆ :: Possible values: [ 0..1 ]
+ fillOpacity: 1,
+ // {Boolean} - if should hide module with `opacity` instead of `display`
+ isSoftHide: true,
+ // {Boolean} - if should trigger composite layer for the `el`
+ isForce3d: false,
+ // ∆ :: Units :: Possible values: [ number, string ]
+ left: '50%',
+ // ∆ :: Units :: Possible values: [ number, string ]
+ top: '50%',
+ // ∆ :: Units :: Possible values: [ number, string ]
+ x: 0,
+ // ∆ :: Units :: Possible values: [ number, string ]
+ y: 0,
+ // ∆ :: Possible values: [ number ]
+ angle: 0,
+ // ∆ :: Possible values: [ number ]
+ scale: 1,
+ // ∆ :: Possible values: [ number ] Fallbacks to `scale`.
+ scaleX: null,
+ // ∆ :: Possible values: [ number ] Fallbacks to `scale`.
+ scaleY: null,
+ // ∆ :: Possible values: [ number, string ]
+ origin: '50% 50%',
+ // ∆ :: Possible values: [ 0..1 ]
+ opacity: 1,
+ // ∆ :: Units :: Possible values: [ number, string ]
+ rx: 0,
+ // ∆ :: Units :: Possible values: [ number, string ]
+ ry: 0,
+ // ∆ :: Possible values: [ number ]
+ points: 3,
+ // ∆ :: Possible values: [ number ]
+ radius: 50,
+ // ∆ :: Possible values: [ number ]
+ radiusX: null,
+ // ∆ :: Possible values: [ number ]
+ radiusY: null,
+ // Possible values: [ boolean ]
+ isShowStart: false,
+ // Possible values: [ boolean ]
+ isShowEnd: true,
+ // Possible values: [ boolean ]
+ isRefreshState: true,
+ // Possible values: [ number > 0 ]
+ duration: 400,
+ // Possible values: [ number ]
+
+ /* technical ones: */
+ // explicit width of the module canvas
+ width: null,
+ // explicit height of the module canvas
+ height: null,
+ // Possible values: [ number ]
+ // sizeGap: 0,
+ /* [boolean] :: If should have child shape. */
+ isWithShape: true,
+ // context for all the callbacks
+ callbacksContext: this
+ };
+ };
+ /*
+ Method to start the animation with optional new options.
+ @public
+ @overrides @ Tunable
+ @param {Object} New options to set on the run.
+ @returns {Object} this.
+ */
+
+
+ Shape.prototype.tune = function tune(o) {
+ _Tunable.prototype.tune.call(this, o);
+ // update shapeModule's size to the max in `then` chain
+ this._getMaxSizeInChain();
+ return this;
+ };
+ /*
+ Method to create a then record for the module.
+ @public
+ @overrides @ Thenable
+ @param {Object} Options for the next animation.
+ @returns {Object} this.
+ */
+
+
+ Shape.prototype.then = function then(o) {
+ // this._makeTimeline()
+ _Tunable.prototype.then.call(this, o);
+ // update shapeModule's size to the max in `then` chain
+ this._getMaxSizeInChain();
+ return this;
+ };
+
+ // ^ PUBLIC METHOD(S) ^
+ // v PRIVATE METHOD(S) v
+
+ /*
+ Method to declare variables.
+ @overrides Thenable
+ */
+
+
+ Shape.prototype._vars = function _vars() {
+ // call _vars method on Thenable
+ _Tunable.prototype._vars.call(this);
+ this._lastSet = {};
+ // save previous module in the chain
+ this._prevChainModule = this._o.prevChainModule;
+ // should draw on foreign svg canvas
+ this.isForeign = !!this._o.ctx;
+ // this._o.isTimelineLess = true;
+ // should take an svg element as self bit
+ return this.isForeignBit = !!this._o.shape;
+ };
+ /*
+ Method to initialize modules presentation.
+ @private
+ @overrides Module
+ */
+
+
+ Shape.prototype._render = function _render() {
+ if (!this._isRendered && !this._isChained) {
+ // create `mojs` shape element
+ this.el = document.createElement('div');
+ // set name on the `el`
+ this.el.setAttribute('data-name', 'mojs-shape');
+ // set class on the `el`
+ this.el.setAttribute('class', this._props.className);
+ // create shape module
+ this._createShape();
+ // append `el` to parent
+ this._props.parent.appendChild(this.el);
+ // set position styles on the el
+ this._setElStyles();
+ // set initial position for the first module in the chain
+ this._setProgress(0, 0);
+ // show at start if `isShowStart`
+ if (this._props.isShowStart) {
+ this._show();
+ } else {
+ this._hide();
+ }
+ // set `_isRendered` hatch
+ this._isRendered = true;
+ } else if (this._isChained) {
+ // save elements from master module
+ this.el = this._masterModule.el;
+ this.shapeModule = this._masterModule.shapeModule;
+ }
+
+ return this;
+ };
+ /*
+ Method to set el styles on initialization.
+ @private
+ */
+
+
+ Shape.prototype._setElStyles = function _setElStyles() {
+ if (!this.el) {
+ return;
+ }
+ // if (!this.isForeign) {
+ var p = this._props,
+ style = this.el.style,
+ width = p.shapeWidth,
+ height = p.shapeHeight;
+
+ style.position = 'absolute';
+ this._setElSizeStyles(width, height);
+
+ if (p.isForce3d) {
+ var name = 'backface-visibility';
+ style['' + name] = 'hidden';
+ style['' + h.prefix.css + name] = 'hidden';
+ }
+ // }
+ };
+ /*
+ Method to set `width`/`height`/`margins` to the `el` styles.
+ @param {Number} Width.
+ @param {height} Height.
+ */
+
+
+ Shape.prototype._setElSizeStyles = function _setElSizeStyles(width, height) {
+ var style = this.el.style;
+ style.width = width + 'px';
+ style.height = height + 'px';
+ style['margin-left'] = -width / 2 + 'px';
+ style['margin-top'] = -height / 2 + 'px';
+ };
+ /*
+ Method to draw shape.
+ @private
+ */
+
+
+ Shape.prototype._draw = function _draw() {
+ if (!this.shapeModule) {
+ return;
+ }
+
+ var p = this._props,
+ bP = this.shapeModule._props;
+ // set props on bit
+ // bP.x = this._origin.x;
+ // bP.y = this._origin.y;
+ bP.rx = p.rx;
+ bP.ry = p.ry;
+ bP.stroke = p.stroke;
+ bP['stroke-width'] = p.strokeWidth;
+ bP['stroke-opacity'] = p.strokeOpacity;
+ bP['stroke-dasharray'] = p.strokeDasharray;
+ bP['stroke-dashoffset'] = p.strokeDashoffset;
+ bP['stroke-linecap'] = p.strokeLinecap;
+ bP['fill'] = p.fill;
+ bP['fill-opacity'] = p.fillOpacity;
+ bP.radius = p.radius;
+ bP.radiusX = p.radiusX;
+ bP.radiusY = p.radiusY;
+ bP.points = p.points;
+
+ this.shapeModule._draw();
+ this._drawEl();
+ };
+ /*
+ Method to set current modules props to main div el.
+ @private
+ */
+
+
+ Shape.prototype._drawEl = function _drawEl() {
+ // return;
+ if (this.el == null) {
+ return true;
+ }
+ var p = this._props;
+ var style = this.el.style;
+
+ // style.opacity = p.opacity;
+ this._isPropChanged('opacity') && (style.opacity = p.opacity);
+ if (!this.isForeign) {
+ this._isPropChanged('left') && (style.left = p.left);
+ this._isPropChanged('top') && (style.top = p.top);
+
+ var isX = this._isPropChanged('x'),
+ isY = this._isPropChanged('y'),
+ isTranslate = isX || isY,
+ isScaleX = this._isPropChanged('scaleX'),
+ isScaleY = this._isPropChanged('scaleY'),
+ isScale = this._isPropChanged('scale'),
+ isScale = isScale || isScaleX || isScaleY,
+ isRotate = this._isPropChanged('angle');
+
+ if (isTranslate || isScale || isRotate) {
+ var transform = this._fillTransform();
+ style[h.prefix.css + 'transform'] = transform;
+ style['transform'] = transform;
+ }
+
+ if (this._isPropChanged('origin') || this._deltas['origin']) {
+ var origin = this._fillOrigin();
+ style[h.prefix.css + 'transform-origin'] = origin;
+ style['transform-origin'] = origin;
+ }
+ }
+ };
+ /*
+ Method to check if property changed after the latest check.
+ @private
+ @param {String} Name of the property to check.
+ @returns {Boolean}
+ */
+
+
+ Shape.prototype._isPropChanged = function _isPropChanged(name) {
+ // if there is no recod for the property - create it
+ if (this._lastSet[name] == null) {
+ this._lastSet[name] = {};
+ }
+ if (this._lastSet[name].value !== this._props[name]) {
+ this._lastSet[name].value = this._props[name];
+ return true;
+ } else {
+ return false;
+ }
+ };
+ /*
+ Method to tune new option on run.
+ @private
+ @override @ Module
+ @param {Object} Option to tune on run.
+ */
+
+
+ Shape.prototype._tuneNewOptions = function _tuneNewOptions(o) {
+ // call super on Module
+ _Tunable.prototype._tuneNewOptions.call(this, o);
+ // return if empty object
+ if (!(o != null && (0, _keys2.default)(o).length)) {
+ return 1;
+ }
+
+ // this._calcSize();
+ this._setElStyles();
+ };
+ /*
+ Method to get max radiusX value.
+ @private
+ @param {String} Radius name.
+ */
+
+
+ Shape.prototype._getMaxRadius = function _getMaxRadius(name) {
+ var selfSize, selfSizeX;
+ selfSize = this._getRadiusSize('radius');
+ return this._getRadiusSize(name, selfSize);
+ };
+ /*
+ Method to increase calculated size based on easing.
+ @private
+ */
+
+
+ Shape.prototype._increaseSizeWithEasing = function _increaseSizeWithEasing() {
+ var p = this._props,
+ easing = this._o.easing,
+ isStringEasing = easing && typeof easing === 'string';
+
+ switch (isStringEasing && easing.toLowerCase()) {
+ case 'elastic.out':
+ case 'elastic.inout':
+ p.size *= 1.25;
+ break;
+ case 'back.out':
+ case 'back.inout':
+ p.size *= 1.1;
+ }
+ };
+ /*
+ Method to increase calculated size based on bit ratio.
+ @private
+ */
+ // _increaseSizeWithBitRatio () {
+ // var p = this._props;
+ // // p.size *= this.shape._props.ratio;
+ // p.size += 2 * p.sizeGap;
+ // }
+ /*
+ Method to get maximum radius size with optional fallback.
+ @private
+ @param {Object}
+ @param key {String} Name of the radius - [radius|radiusX|radiusY].
+ @param @optional fallback {Number} Optional number to set if there
+ is no value for the key.
+ */
+
+
+ Shape.prototype._getRadiusSize = function _getRadiusSize(name) {
+ var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+ var delta = this._deltas[name];
+ // if value is delta value
+ if (delta != null) {
+ // get maximum number between start and end values of the delta
+ return Math.max(Math.abs(delta.end), Math.abs(delta.start));
+ } else if (this._props[name] != null) {
+ // else get the value from props object
+ return parseFloat(this._props[name]);
+ } else {
+ return fallback;
+ }
+ };
+ /*
+ Method to get max shape canvas size and save it to _props.
+ @private
+ */
+
+
+ Shape.prototype._getShapeSize = function _getShapeSize() {
+ var p = this._props,
+
+ // get maximum stroke value
+ stroke = this._getMaxStroke();
+ // save shape `width` and `height` to `_props`
+ p.shapeWidth = p.width != null ? p.width : 2 * this._getMaxRadius('radiusX') + stroke;
+
+ p.shapeHeight = p.height != null ? p.height : 2 * this._getMaxRadius('radiusY') + stroke;
+ };
+ /*
+ Method to create shape.
+ @private
+ */
+
+
+ Shape.prototype._createShape = function _createShape() {
+ // calculate max shape canvas size and set to _props
+ this._getShapeSize();
+ // don't create actual shape if !`isWithShape`
+ if (!this._props.isWithShape) {
+ return;
+ }
+
+ var p = this._props;
+ // get shape's class
+ var Shape = shapesMap.getShape(this._props.shape);
+ // create `_shape` module
+ this.shapeModule = new Shape({
+ width: p.shapeWidth,
+ height: p.shapeHeight,
+ parent: this.el
+ });
+ };
+ /*
+ Method to get max size in `then` chain
+ @private
+ */
+
+
+ Shape.prototype._getMaxSizeInChain = function _getMaxSizeInChain() {
+ var p = this._props,
+ maxW = 0,
+ maxH = 0;
+
+ for (var i = 0; i < this._modules.length; i++) {
+ this._modules[i]._getShapeSize();
+ maxW = Math.max(maxW, this._modules[i]._props.shapeWidth);
+ maxH = Math.max(maxH, this._modules[i]._props.shapeHeight);
+ }
+
+ this.shapeModule && this.shapeModule._setSize(maxW, maxH);
+ this._setElSizeStyles(maxW, maxH);
+ };
+ /*
+ Method to get max value of the strokeWidth.
+ @private
+ */
+
+
+ Shape.prototype._getMaxStroke = function _getMaxStroke() {
+ var p = this._props;
+ var dStroke = this._deltas['strokeWidth'];
+ return dStroke != null ? Math.max(dStroke.start, dStroke.end) : p.strokeWidth;
+ };
+ /*
+ Method to draw current progress of the deltas.
+ @private
+ @override @ Module
+ @param {Number} EasedProgress to set - [0..1].
+ @param {Number} Progress to set - [0..1].
+ */
+
+
+ Shape.prototype._setProgress = function _setProgress(easedProgress, progress) {
+ // call the super on Module
+ _module2.default.prototype._setProgress.call(this, easedProgress, progress);
+ // draw current progress
+ this._draw(easedProgress);
+ };
+ /*
+ Method to add callback overrides to passed object.
+ @private
+ @param {Object} Object to add the overrides to.
+ */
+
+
+ Shape.prototype._applyCallbackOverrides = function _applyCallbackOverrides(obj) {
+ var it = this,
+ p = this._props;
+ // specify control functions for the module
+ obj.callbackOverrides = {
+ onUpdate: function onUpdate(ep, p) {
+ return it._setProgress(ep, p);
+ },
+ onStart: function onStart(isFwd) {
+ // don't touch main `el` onStart in chained elements
+ if (it._isChained) {
+ return;
+ };
+ if (isFwd) {
+ it._show();
+ } else {
+ if (!p.isShowStart) {
+ it._hide();
+ }
+ }
+ },
+ onComplete: function onComplete(isFwd) {
+ // don't touch main `el` if not the last in `then` chain
+ if (!it._isLastInChain()) {
+ return;
+ }
+ if (isFwd) {
+ if (!p.isShowEnd) {
+ it._hide();
+ }
+ } else {
+ it._show();
+ }
+ },
+ onRefresh: function onRefresh(isBefore) {
+ p.isRefreshState && isBefore && it._refreshBefore();
+ }
+ };
+ };
+ /*
+ Method to setup tween and timeline options before creating them.
+ @override @ Tweenable
+ @private
+ */
+
+
+ Shape.prototype._transformTweenOptions = function _transformTweenOptions() {
+ this._applyCallbackOverrides(this._o);
+ };
+ /*
+ Method to create transform string.
+ @private
+ @returns {String} Transform string.
+ */
+
+
+ Shape.prototype._fillTransform = function _fillTransform() {
+ var p = this._props,
+ scaleX = p.scaleX != null ? p.scaleX : p.scale,
+ scaleY = p.scaleY != null ? p.scaleY : p.scale,
+ scale = scaleX + ', ' + scaleY;
+ return 'translate(' + p.x + ', ' + p.y + ') rotate(' + p.angle + 'deg) scale(' + scale + ')';
+ };
+ /*
+ Method to create transform-origin string.
+ @private
+ @returns {String} Transform string.
+ */
+
+
+ Shape.prototype._fillOrigin = function _fillOrigin() {
+ var p = this._props,
+ str = '';
+ for (var i = 0; i < p.origin.length; i++) {
+ str += p.origin[i].string + ' ';
+ }
+ return str;
+ };
+ /*
+ Method to refresh state befor startTime.
+ @private
+ */
+
+
+ Shape.prototype._refreshBefore = function _refreshBefore() {
+ // call setProgress with eased and normal progress
+ this._setProgress(this.tween._props.easing(0), 0);
+
+ if (this._props.isShowStart) {
+ this._show();
+ } else {
+ this._hide();
+ }
+ };
+ /*
+ Method that gets called on `soft` show of the module,
+ it should restore transform styles of the module.
+ @private
+ @overrides @ Module
+ */
+
+
+ Shape.prototype._showByTransform = function _showByTransform() {
+ // reset the cache of the scale prop
+ this._lastSet.scale = null;
+ // draw el accroding to it's props
+ this._drawEl();
+ };
+
+ return Shape;
+ }(_tunable2.default);
+
+ exports.default = Shape;
+
+/***/ }),
+/* 95 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ module.exports = { "default": __webpack_require__(96), __esModule: true };
+
+/***/ }),
+/* 96 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ __webpack_require__(97);
+ module.exports = __webpack_require__(14).Object.keys;
+
+/***/ }),
+/* 97 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // 19.1.2.14 Object.keys(O)
+ var toObject = __webpack_require__(49)
+ , $keys = __webpack_require__(33);
+
+ __webpack_require__(98)('keys', function(){
+ return function keys(it){
+ return $keys(toObject(it));
+ };
+ });
+
+/***/ }),
+/* 98 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // most Object methods by ES6 should accept primitives
+ var $export = __webpack_require__(12)
+ , core = __webpack_require__(14)
+ , fails = __webpack_require__(23);
+ module.exports = function(KEY, exec){
+ var fn = (core.Object || {})[KEY] || Object[KEY]
+ , exp = {};
+ exp[KEY] = exec(fn);
+ $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);
+ };
+
+/***/ }),
+/* 99 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _keys = __webpack_require__(95);
+
+ var _keys2 = _interopRequireDefault(_keys);
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _possibleConstructorReturn2 = __webpack_require__(75);
+
+ var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+ var _inherits2 = __webpack_require__(76);
+
+ var _inherits3 = _interopRequireDefault(_inherits2);
+
+ var _tweenable = __webpack_require__(100);
+
+ var _tweenable2 = _interopRequireDefault(_tweenable);
+
+ var _h = __webpack_require__(71);
+
+ var _h2 = _interopRequireDefault(_h);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ /*
+ The Thenable class adds .then public method and
+ the ability to chain API calls.
+ */
+ var Thenable = function (_Tweenable) {
+ (0, _inherits3.default)(Thenable, _Tweenable);
+
+ function Thenable() {
+ (0, _classCallCheck3.default)(this, Thenable);
+ return (0, _possibleConstructorReturn3.default)(this, _Tweenable.apply(this, arguments));
+ }
+
+ /*
+ Method to create a then record for the module.
+ @public
+ @param {Object} Options for the next animation.
+ @returns {Object} this.
+ */
+ Thenable.prototype.then = function then(o) {
+ // return if nothing was passed
+ if (o == null || !(0, _keys2.default)(o).length) {
+ return 1;
+ }
+ // merge then options with the current ones
+ var prevRecord = this._history[this._history.length - 1],
+ prevModule = this._modules[this._modules.length - 1],
+ merged = this._mergeThenOptions(prevRecord, o);
+
+ this._resetMergedFlags(merged);
+ // create a submodule of the same type as the master module
+ var module = new this.constructor(merged);
+ // set `this` as amster module of child module
+ module._masterModule = this;
+ // save the modules to the _modules array
+ this._modules.push(module);
+ // add module's tween into master timeline
+ this.timeline.append(module);
+
+ return this;
+ };
+
+ // ^ PUBLIC METHOD(S) ^
+ // v PRIVATE METHOD(S) v
+
+ /*
+ Method to reset some flags on merged options object.
+ @private
+ @param {Object} Options object.
+ @returns {Object} Options object.
+ */
+
+
+ Thenable.prototype._resetMergedFlags = function _resetMergedFlags(obj) {
+ // set the submodule to be without timeline for perf reasons
+ obj.isTimelineLess = true;
+ // reset isShowStart flag for the submodules
+ obj.isShowStart = false;
+ // reset isRefreshState flag for the submodules
+ obj.isRefreshState = false;
+ // set the submodule callbacks context
+ obj.callbacksContext = this._props.callbacksContext || this;
+ // set previous module
+ obj.prevChainModule = _h2.default.getLastItem(this._modules);
+ // pass the `this` as master module
+ obj.masterModule = this;
+ return obj;
+ };
+ /*
+ Method to initialize properties.
+ @private
+ */
+
+
+ Thenable.prototype._vars = function _vars() {
+ _Tweenable.prototype._vars.call(this);
+ // save _master module
+ this._masterModule = this._o.masterModule;
+ // set isChained flag based on prevChainModule option
+ this._isChained = !!this._masterModule;
+ // we are expect that the _o object
+ // have been already extended by defaults
+ var initialRecord = _h2.default.cloneObj(this._props);
+ for (var key in this._arrayPropertyMap) {
+ if (this._o[key]) {
+ var preParsed = this._parsePreArrayProperty(key, this._o[key]);
+ initialRecord[key] = preParsed;
+ }
+ }
+
+ this._history = [initialRecord];
+ // the array holds all modules in the then chain
+ this._modules = [this];
+ // the props that to exclude from then merge
+ this._nonMergeProps = { shape: 1 };
+ };
+ /*
+ Method to merge two options into one. Used in .then chains.
+ @private
+ @param {Object} Start options for the merge.
+ @param {Object} End options for the merge.
+ @returns {Object} Merged options.
+ */
+
+
+ Thenable.prototype._mergeThenOptions = function _mergeThenOptions(start, end) {
+ var o = {};
+ this._mergeStartLoop(o, start);
+ this._mergeEndLoop(o, start, end);
+ this._history.push(o);
+ return o;
+ };
+ /*
+ Method to pipe startValue of the delta.
+ @private
+ @param {String} Start property name.
+ @param {Any} Start property value.
+ @returns {Any} Start property value.
+ */
+
+
+ Thenable.prototype._checkStartValue = function _checkStartValue(name, value) {
+ return value;
+ };
+ /*
+ Originally part of the _mergeThenOptions.
+ Loops thru start object and copies all the props from it.
+ @param {Object} An object to copy in.
+ @parma {Object} Start options object.
+ */
+
+
+ Thenable.prototype._mergeStartLoop = function _mergeStartLoop(o, start) {
+ // loop thru start options object
+ for (var key in start) {
+ var value = start[key];
+ if (start[key] == null) {
+ continue;
+ };
+ // copy all values from start if not tween prop or duration
+ if (!_h2.default.isTweenProp(key) || key === 'duration') {
+ // if delta - copy only the end value
+ if (this._isDelta(value)) {
+ o[key] = _h2.default.getDeltaEnd(value);
+ } else {
+ o[key] = value;
+ }
+ }
+ }
+ };
+ /*
+ Originally part of the _mergeThenOptions.
+ Loops thru start object and merges all the props from it.
+ @param {Object} An object to copy in.
+ @parma {Object} Start options object.
+ @parma {Object} End options object.
+ */
+
+
+ Thenable.prototype._mergeEndLoop = function _mergeEndLoop(o, start, end) {
+ var endKeys = (0, _keys2.default)(end);
+
+ for (var key in end) {
+ // just copy parent option
+ if (key == 'parent') {
+ o[key] = end[key];continue;
+ };
+
+ // get key/value of the end object
+ // endKey - name of the property, endValue - value of the property
+ var endValue = end[key],
+ startValue = start[key] != null ? start[key] : this._defaults[key];
+
+ startValue = this._checkStartValue(key, startValue);
+ if (endValue == null) {
+ continue;
+ };
+ // make ∆ of start -> end
+ // if key name is radiusX/radiusY and
+ // the startValue is not set fallback to radius value
+ var isSubRadius = key === 'radiusX' || key === 'radiusY';
+ if (isSubRadius && startValue == null) {
+ startValue = start.radius;
+ }
+
+ var isSubRadius = key === 'scaleX' || key === 'scaleY';
+ if (isSubRadius && startValue == null) {
+ startValue = start.scale;
+ }
+
+ o[key] = this._mergeThenProperty(key, startValue, endValue);
+ }
+ };
+ /*
+ Method to merge `start` and `end` for a property in then record.
+ @private
+ @param {String} Property name.
+ @param {Any} Start value of the property.
+ @param {Any} End value of the property.
+ */
+
+
+ Thenable.prototype._mergeThenProperty = function _mergeThenProperty(key, startValue, endValue) {
+ // if isnt tween property
+ var isBoolean = typeof endValue === 'boolean',
+ curve,
+ easing;
+
+ if (!_h2.default.isTweenProp(key) && !this._nonMergeProps[key] && !isBoolean) {
+
+ if (_h2.default.isObject(endValue) && endValue.to != null) {
+ curve = endValue.curve;
+ easing = endValue.easing;
+ endValue = endValue.to;
+ }
+
+ // if end value is delta - just save it
+ if (this._isDelta(endValue)) {
+ return this._parseDeltaValues(key, endValue);
+ } else {
+ var parsedEndValue = this._parsePreArrayProperty(key, endValue);
+ // if end value is not delta - merge with start value
+ if (this._isDelta(startValue)) {
+ var _ref;
+
+ // if start value is delta - take the end value
+ // as start value of the new delta
+ return _ref = {}, _ref[_h2.default.getDeltaEnd(startValue)] = parsedEndValue, _ref.easing = easing, _ref.curve = curve, _ref;
+ // if both start and end value are not ∆ - make ∆
+ } else {
+ var _ref2;
+
+ return _ref2 = {}, _ref2[startValue] = parsedEndValue, _ref2.easing = easing, _ref2.curve = curve, _ref2;
+ }
+ }
+ // copy the tween values unattended
+ } else {
+ return endValue;
+ }
+ };
+ /*
+ Method to retreive array's length and return -1 for
+ all other types.
+ @private
+ @param {Array, Any} Array to get the width for.
+ @returns {Number} Array length or -1 if not array.
+ */
+
+
+ Thenable.prototype._getArrayLength = function _getArrayLength(arr) {
+ return _h2.default.isArray(arr) ? arr.length : -1;
+ };
+ /*
+ Method to check if the property is delta property.
+ @private
+ @param {Any} Parameter value to check.
+ @returns {Boolean}
+ */
+
+
+ Thenable.prototype._isDelta = function _isDelta(optionsValue) {
+ var isObject = _h2.default.isObject(optionsValue);
+ isObject = isObject && !optionsValue.unit;
+ return !(!isObject || _h2.default.isArray(optionsValue) || _h2.default.isDOM(optionsValue));
+ };
+ /*
+ Method to check if the module is first in `then` chain.
+ @private
+ @returns {Boolean} If the module is the first in module chain.
+ */
+
+
+ Thenable.prototype._isFirstInChain = function _isFirstInChain() {
+ return !this._masterModule;
+ };
+ /*
+ Method to check if the module is last in `then` chain.
+ @private
+ @returns {Boolean} If the module is the last in module chain.
+ */
+
+
+ Thenable.prototype._isLastInChain = function _isLastInChain() {
+ var master = this._masterModule;
+ // if there is no master field - check the modules length
+ // if module length is 1 thus there is no modules chain
+ // it is the last one, otherwise it isnt
+ if (!master) {
+ return this._modules.length === 1;
+ }
+ // if there is master - check if it is the last item in _modules chain
+ return this === _h2.default.getLastItem(master._modules);
+ };
+
+ return Thenable;
+ }(_tweenable2.default);
+
+ exports.default = Thenable;
+
+/***/ }),
+/* 100 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _possibleConstructorReturn2 = __webpack_require__(75);
+
+ var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+ var _inherits2 = __webpack_require__(76);
+
+ var _inherits3 = _interopRequireDefault(_inherits2);
+
+ var _tween = __webpack_require__(101);
+
+ var _tween2 = _interopRequireDefault(_tween);
+
+ var _timeline = __webpack_require__(110);
+
+ var _timeline2 = _interopRequireDefault(_timeline);
+
+ var _module = __webpack_require__(84);
+
+ var _module2 = _interopRequireDefault(_module);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ /*
+ Class to define a module ancestor
+ with timeline and tween options and functionality.
+ All runable modules should inherit from this class.
+
+ @class Tweenable
+ */
+ var Tweenable = function (_Module) {
+ (0, _inherits3.default)(Tweenable, _Module);
+
+ /*
+ `play` method for the timeline.
+ @public
+ @param {Number} Time shift.
+ @returns this.
+ */
+ Tweenable.prototype.play = function play() {
+ this.timeline.play.apply(this.timeline, arguments);
+ return this;
+ };
+ /*
+ `playBackward` method for the timeline.
+ @public
+ @param {Number} Time shift.
+ @returns this.
+ */
+
+
+ Tweenable.prototype.playBackward = function playBackward() {
+ this.timeline.playBackward.apply(this.timeline, arguments);
+ return this;
+ };
+ /*
+ `pause` method for the timeline.
+ @public
+ @returns this.
+ */
+
+
+ Tweenable.prototype.pause = function pause() {
+ this.timeline.pause.apply(this.timeline, arguments);
+ return this;
+ };
+ /*
+ `stop` method for the timeline.
+ @public
+ @param {Number} [0...1] Progress to set on stop.
+ *Default* is `0` if `play`
+ and `1` if `playBAckward`.
+ @returns this.
+ */
+
+
+ Tweenable.prototype.stop = function stop() {
+ this.timeline.stop.apply(this.timeline, arguments);
+ return this;
+ };
+ /*
+ `reset` method for the timeline.
+ @public
+ @returns this.
+ */
+
+
+ Tweenable.prototype.reset = function reset() {
+ this.timeline.reset.apply(this.timeline, arguments);
+ return this;
+ };
+ /*
+ `replay` method for the timeline.
+ @public
+ @returns this.
+ */
+
+
+ Tweenable.prototype.replay = function replay() {
+ this.timeline.replay.apply(this.timeline, arguments);
+ return this;
+ };
+ /*
+ `replay` method for the timeline.
+ @public
+ @returns this.
+ */
+
+
+ Tweenable.prototype.replayBackward = function replayBackward() {
+ this.timeline.replayBackward.apply(this.timeline, arguments);
+ return this;
+ };
+ /*
+ `resume` method for the timeline.
+ @public
+ @param {Number} Time shift.
+ @returns this.
+ */
+
+
+ Tweenable.prototype.resume = function resume() {
+ var shift = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+
+ this.timeline.resume.apply(this.timeline, arguments);
+ return this;
+ };
+ /*
+ `setProgress` method for the timeline.
+ @public
+ @param {Number} [0...1] Progress value.
+ @returns this.
+ */
+
+
+ Tweenable.prototype.setProgress = function setProgress() {
+ this.timeline.setProgress.apply(this.timeline, arguments);
+ return this;
+ };
+ /*
+ setSpeed method for the timeline.
+ @param {Number} Speed value.
+ @returns this.
+ */
+
+
+ Tweenable.prototype.setSpeed = function setSpeed(speed) {
+ this.timeline.setSpeed.apply(this.timeline, arguments);
+ return this;
+ };
+
+ // ^ PUBLIC METHOD(S) ^
+ // v PRIVATE METHOD(S) v
+
+ function Tweenable() {
+ var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+ (0, _classCallCheck3.default)(this, Tweenable);
+
+ // pipe function for _o object
+ // before creating tween/timeline
+ var _this = (0, _possibleConstructorReturn3.default)(this, _Module.call(this, o));
+ // super of Module
+
+
+ _this._transformTweenOptions();
+ // make tween only if isTweenLess option is not set
+ !_this._o.isTweenLess && _this._makeTween();
+ // make timeline only if isTimelineLess option is not set
+ !_this._o.isTimelineLess && _this._makeTimeline();
+ return _this;
+ }
+ /*
+ Placeholder method that should be overrided
+ and will be called before tween/timeline creation.
+ @private
+ */
+
+
+ Tweenable.prototype._transformTweenOptions = function _transformTweenOptions() {};
+ /*
+ Method to create tween.
+ @private
+ */
+
+
+ Tweenable.prototype._makeTween = function _makeTween() {
+ // pass callbacks context
+ this._o.callbacksContext = this._o.callbacksContext || this;
+ this.tween = new _tween2.default(this._o);
+ // make timeline property point to tween one is "no timeline" mode
+ this._o.isTimelineLess && (this.timeline = this.tween);
+ };
+ /*
+ Method to create timeline.
+ @private
+ @param {Object} Timeline's options.
+ An object which contains "timeline" property with
+ timeline options.
+ */
+
+
+ Tweenable.prototype._makeTimeline = function _makeTimeline() {
+ // pass callbacks context
+ this._o.timeline = this._o.timeline || {};
+ this._o.timeline.callbacksContext = this._o.callbacksContext || this;
+ this.timeline = new _timeline2.default(this._o.timeline);
+ // set the flag to indicate that real timeline is present
+ this._isTimeline = true;
+ // if tween exist - add it to the timeline there is some
+ // modules like burst and stagger that have no tween
+ this.tween && this.timeline.add(this.tween);
+ };
+
+ return Tweenable;
+ }(_module2.default);
+
+ exports.default = Tweenable;
+
+/***/ }),
+/* 101 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _possibleConstructorReturn2 = __webpack_require__(75);
+
+ var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+ var _inherits2 = __webpack_require__(76);
+
+ var _inherits3 = _interopRequireDefault(_inherits2);
+
+ var _h = __webpack_require__(71);
+
+ var _h2 = _interopRequireDefault(_h);
+
+ var _tweener = __webpack_require__(102);
+
+ var _tweener2 = _interopRequireDefault(_tweener);
+
+ var _easing = __webpack_require__(105);
+
+ var _easing2 = _interopRequireDefault(_easing);
+
+ var _module = __webpack_require__(84);
+
+ var _module2 = _interopRequireDefault(_module);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ // import h from '../h';
+ var Tween = function (_Module) {
+ (0, _inherits3.default)(Tween, _Module);
+
+ /*
+ Method do declare defaults with this._defaults object.
+ @private
+ */
+ Tween.prototype._declareDefaults = function _declareDefaults() {
+ // DEFAULTS
+ this._defaults = {
+ /* duration of the tween [0..∞] */
+ duration: 350,
+ /* delay of the tween [-∞..∞] */
+ delay: 0,
+ /* repeat of the tween [0..∞], means how much to
+ repeat the tween regardless first run,
+ for instance repeat: 2 will make the tween run 3 times */
+ repeat: 0,
+ /* speed of playback [0..∞], speed that is less then 1
+ will slowdown playback, for instance .5 will make tween
+ run 2x slower. Speed of 2 will speedup the tween to 2x. */
+ speed: 1,
+ /* flip onUpdate's progress on each even period.
+ note that callbacks order won't flip at least
+ for now (under consideration). */
+ isYoyo: false,
+ /* easing for the tween, could be any easing type [link to easing-types.md] */
+ easing: 'Sin.Out',
+ /*
+ Easing for backward direction of the tweenthe tween,
+ if `null` - fallbacks to `easing` property.
+ forward direction in `yoyo` period is treated as backward for the easing.
+ */
+ backwardEasing: null,
+ /* custom tween's name */
+ name: null,
+ /* custom tween's base name */
+ nameBase: 'Tween',
+ /*
+ onProgress callback runs before any other callback.
+ @param {Number} The entire, not eased, progress
+ of the tween regarding repeat option.
+ @param {Boolean} The direction of the tween.
+ `true` for forward direction.
+ `false` for backward direction(tween runs in reverse).
+ */
+ onProgress: null,
+ /*
+ onStart callback runs on very start of the tween just after onProgress
+ one. Runs on very end of the tween if tween is reversed.
+ @param {Boolean} Direction of the tween.
+ `true` for forward direction.
+ `false` for backward direction(tween runs in reverse).
+ */
+ onStart: null,
+ onRefresh: null,
+ onComplete: null,
+ onRepeatStart: null,
+ onRepeatComplete: null,
+ onFirstUpdate: null,
+ onUpdate: null,
+ isChained: false,
+ // playback callbacks
+ onPlaybackStart: null,
+ onPlaybackPause: null,
+ onPlaybackStop: null,
+ onPlaybackComplete: null,
+ // context which all callbacks will be called with
+ callbacksContext: null
+ };
+ };
+ /*
+ API method to play the Tween.
+ @public
+ @param {Number} Shift time in milliseconds.
+ @return {Object} Self.
+ */
+
+
+ Tween.prototype.play = function play() {
+ var shift = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+
+ if (this._state === 'play' && this._isRunning) {
+ return this;
+ }
+ this._props.isReversed = false;
+ this._subPlay(shift, 'play');
+ this._setPlaybackState('play');
+ return this;
+ };
+ /*
+ API method to play the Tween in reverse.
+ @public
+ @param {Number} Shift time in milliseconds.
+ @return {Object} Self.
+ */
+
+
+ Tween.prototype.playBackward = function playBackward() {
+ var shift = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+
+ if (this._state === 'reverse' && this._isRunning) {
+ return this;
+ }
+ this._props.isReversed = true;
+ this._subPlay(shift, 'reverse');
+ this._setPlaybackState('reverse');
+ return this;
+ };
+ /*
+ API method to pause Tween.
+ @public
+ @returns {Object} Self.
+ */
+
+
+ Tween.prototype.pause = function pause() {
+ if (this._state === 'pause' || this._state === 'stop') {
+ return this;
+ }
+ this._removeFromTweener();
+ this._setPlaybackState('pause');
+ return this;
+ };
+ /*
+ API method to stop the Tween.
+ @public
+ @param {Number} Progress [0..1] to set when stopped.
+ @returns {Object} Self.
+ */
+
+
+ Tween.prototype.stop = function stop(progress) {
+ if (this._state === 'stop') {
+ return this;
+ }
+
+ this._wasUknownUpdate = undefined;
+
+ var stopProc = progress != null ? progress
+ /* if no progress passsed - set 1 if tween
+ is playingBackward, otherwise set to 0 */
+ : this._state === 'reverse' ? 1 : 0;
+
+ this.setProgress(stopProc);
+
+ this.reset();
+ return this;
+ };
+ /*
+ API method to replay(restart) the Tween.
+ @public
+ @param {Number} Shift time in milliseconds.
+ @returns {Object} Self.
+ */
+
+
+ Tween.prototype.replay = function replay() {
+ var shift = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+
+ this.reset();
+ this.play(shift);
+ return this;
+ };
+ /*
+ API method to replay(restart) backward the Tween.
+ @public
+ @param {Number} Shift time in milliseconds.
+ @returns {Object} Self.
+ */
+
+
+ Tween.prototype.replayBackward = function replayBackward() {
+ var shift = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+
+ this.reset();
+ this.playBackward(shift);
+ return this;
+ };
+ /*
+ API method to resume the Tween.
+ @public
+ @param {Number} Shift time in milliseconds.
+ @return {Object} Self.
+ */
+
+
+ Tween.prototype.resume = function resume() {
+ var shift = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+
+ if (this._state !== 'pause') {
+ return this;
+ }
+
+ switch (this._prevState) {
+ case 'play':
+ this.play(shift);
+ break;
+ case 'reverse':
+ this.playBackward(shift);
+ break;
+ }
+
+ return this;
+ };
+ /*
+ API method to set progress on tween.
+ @public
+ @param {Number} Progress to set.
+ @returns {Object} Self.
+ */
+
+
+ Tween.prototype.setProgress = function setProgress(progress) {
+ var p = this._props;
+ // set start time if there is no one yet.
+ !p.startTime && this._setStartTime();
+ // reset play time
+ this._playTime = null;
+ // progress should be in range of [0..1]
+ progress < 0 && (progress = 0);
+ progress > 1 && (progress = 1);
+ // update self with calculated time
+ this._update(p.startTime - p.delay + progress * p.repeatTime);
+ return this;
+ };
+ /*
+ Method to set tween's speed.
+ @public
+ @param {Number} Speed value.
+ @returns this.
+ */
+
+
+ Tween.prototype.setSpeed = function setSpeed(speed) {
+ this._props.speed = speed;
+ // if playing - normalize _startTime and _prevTime to the current point.
+ if (this._state === 'play' || this._state === 'reverse') {
+ this._setResumeTime(this._state);
+ }
+ return this;
+ };
+ /*
+ Method to reset tween's state and properties.
+ @public
+ @returns this.
+ */
+
+
+ Tween.prototype.reset = function reset() {
+ this._removeFromTweener();
+ this._setPlaybackState('stop');
+ this._progressTime = 0;
+ this._isCompleted = false;
+ this._isStarted = false;
+ this._isFirstUpdate = false;
+ this._wasUknownUpdate = undefined;
+ this._prevTime = undefined;
+ this._prevYoyo = undefined;
+ // this._props.startTime = undefined;
+ this._props.isReversed = false;
+ return this;
+ };
+
+ // ^ PUBLIC METHOD(S) ^
+ // v PRIVATE METHOD(S) v
+
+ /*
+ Method to launch play. Used as launch
+ method for bothplay and reverse methods.
+ @private
+ @param {Number} Shift time in milliseconds.
+ @param {String} Play or reverse state.
+ @return {Object} Self.
+ */
+
+
+ Tween.prototype._subPlay = function _subPlay() {
+ var shift = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+ var state = arguments[1];
+
+ var resumeTime,
+ startTime,
+ p = this._props,
+
+ // check if direction of playback changes,
+ // if so, the _progressTime needs to be flipped
+ _state = this._state,
+ _prevState = this._prevState,
+ isPause = _state === 'pause',
+ wasPlay = _state === 'play' || isPause && _prevState === 'play',
+ wasReverse = _state === 'reverse' || isPause && _prevState === 'reverse',
+ isFlip = wasPlay && state === 'reverse' || wasReverse && state === 'play';
+
+ // if tween was ended, set progress to 0 if not, set to elapsed progress
+ this._progressTime = this._progressTime >= p.repeatTime ? 0 : this._progressTime;
+ // flip the _progressTime if playback direction changed
+ if (isFlip) {
+ this._progressTime = p.repeatTime - this._progressTime;
+ }
+ // set resume time and normalize prev/start times
+ this._setResumeTime(state, shift);
+ // add self to tweener = play
+ _tweener2.default.add(this);
+ return this;
+ };
+ /*
+ Method to set _resumeTime, _startTime and _prevTime.
+ @private
+ @param {String} Current state. [play, reverse]
+ @param {Number} Time shift. *Default* is 0.
+ */
+
+
+ Tween.prototype._setResumeTime = function _setResumeTime(state) {
+ var shift = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+ // get current moment as resume time
+ this._resumeTime = performance.now();
+ // set start time regarding passed `shift` and `procTime`
+ var startTime = this._resumeTime - Math.abs(shift) - this._progressTime;
+ this._setStartTime(startTime, false);
+ // if we have prevTime - we need to normalize
+ // it for the current resume time
+ if (this._prevTime != null) {
+ this._prevTime = state === 'play' ? this._normPrevTimeForward() : this._props.endTime - this._progressTime;
+ }
+ };
+ /*
+ Method recalculate _prevTime for forward direction.
+ @private
+ @return {Number} Normalized prev time.
+ */
+
+
+ Tween.prototype._normPrevTimeForward = function _normPrevTimeForward() {
+ var p = this._props;
+ return p.startTime + this._progressTime - p.delay;
+ };
+ /*
+ Constructor of the class.
+ @private
+ */
+
+
+ function Tween() {
+ var _ret;
+
+ var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+ (0, _classCallCheck3.default)(this, Tween);
+
+ var _this = (0, _possibleConstructorReturn3.default)(this, _Module.call(this, o));
+
+ _this._props.name == null && _this._setSelfName();
+ return _ret = _this, (0, _possibleConstructorReturn3.default)(_this, _ret);
+ }
+ /*
+ Method to set self name to generic one.
+ @private
+ */
+
+
+ Tween.prototype._setSelfName = function _setSelfName() {
+ var globalName = '_' + this._props.nameBase + 's';
+ // track amount of tweens globally
+ _tweener2.default[globalName] = _tweener2.default[globalName] == null ? 1 : ++_tweener2.default[globalName];
+ // and set generic tween's name || Tween # ||
+ this._props.name = this._props.nameBase + ' ' + _tweener2.default[globalName];
+ };
+ /*
+ Method set playback state string.
+ @private
+ @param {String} State name
+ */
+
+
+ Tween.prototype._setPlaybackState = function _setPlaybackState(state) {
+ // save previous state
+ this._prevState = this._state;
+ this._state = state;
+
+ // callbacks
+ var wasPause = this._prevState === 'pause',
+ wasStop = this._prevState === 'stop',
+ wasPlay = this._prevState === 'play',
+ wasReverse = this._prevState === 'reverse',
+ wasPlaying = wasPlay || wasReverse,
+ wasStill = wasStop || wasPause;
+
+ if ((state === 'play' || state === 'reverse') && wasStill) {
+ this._playbackStart();
+ }
+ if (state === 'pause' && wasPlaying) {
+ this._playbackPause();
+ }
+ if (state === 'stop' && (wasPlaying || wasPause)) {
+ this._playbackStop();
+ }
+ };
+ /*
+ Method to declare some vars.
+ @private
+ */
+
+
+ Tween.prototype._vars = function _vars() {
+ this.progress = 0;
+ this._prevTime = undefined;
+ this._progressTime = 0;
+ this._negativeShift = 0;
+ this._state = 'stop';
+ // if negative delay was specified,
+ // save it to _negativeShift property and
+ // reset it back to 0
+ if (this._props.delay < 0) {
+ this._negativeShift = this._props.delay;
+ this._props.delay = 0;
+ }
+
+ return this._calcDimentions();
+ };
+ /*
+ Method to calculate tween's dimentions.
+ @private
+ */
+
+
+ Tween.prototype._calcDimentions = function _calcDimentions() {
+ this._props.time = this._props.duration + this._props.delay;
+ this._props.repeatTime = this._props.time * (this._props.repeat + 1);
+ };
+ /*
+ Method to extend defaults by options and put them in _props.
+ @private
+ */
+
+
+ Tween.prototype._extendDefaults = function _extendDefaults() {
+ // save callback overrides object with fallback to empty one
+ this._callbackOverrides = this._o.callbackOverrides || {};
+ delete this._o.callbackOverrides;
+ // call the _extendDefaults @ Module
+ _Module.prototype._extendDefaults.call(this);
+
+ var p = this._props;
+ p.easing = _easing2.default.parseEasing(p.easing);
+ p.easing._parent = this;
+
+ // parse only present backward easing to prevent parsing as `linear.none`
+ // because we need to fallback to `easing` in `_setProgress` method
+ if (p.backwardEasing != null) {
+ p.backwardEasing = _easing2.default.parseEasing(p.backwardEasing);
+ p.backwardEasing._parent = this;
+ }
+ };
+ /*
+ Method for setting start and end time to props.
+ @private
+ @param {Number(Timestamp)}, {Null} Start time.
+ @param {Boolean} Should reset flags.
+ @returns this
+ */
+
+
+ Tween.prototype._setStartTime = function _setStartTime(time) {
+ var isResetFlags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+ var p = this._props,
+ shiftTime = p.shiftTime || 0;
+ // reset flags
+ if (isResetFlags) {
+ this._isCompleted = false;this._isRepeatCompleted = false;
+ this._isStarted = false;
+ }
+ // set start time to passed time or to the current moment
+ var startTime = time == null ? performance.now() : time;
+ // calculate bounds
+ // - negativeShift is negative delay in options hash
+ // - shift time is shift of the parent
+ p.startTime = startTime + p.delay + this._negativeShift + shiftTime;
+ p.endTime = p.startTime + p.repeatTime - p.delay;
+ // set play time to the startTimes
+ // if playback controls are used - use _resumeTime as play time,
+ // else use shifted startTime -- shift is needed for timelines append chains
+ this._playTime = this._resumeTime != null ? this._resumeTime : startTime + shiftTime;
+ this._resumeTime = null;
+
+ return this;
+ };
+ /*
+ Method to update tween's progress.
+ @private
+ @param {Number} Current update time.
+ -- next params only present when parent Timeline calls the method.
+ @param {Number} Previous Timeline's update time.
+ @param {Boolean} Was parent in yoyo period.
+ @param {Number} [-1, 0, 1] If update is on edge.
+ -1 = edge jump in negative direction.
+ 0 = no edge jump.
+ 1 = edge jump in positive direction.
+ */
+
+
+ Tween.prototype._update = function _update(time, timelinePrevTime, wasYoyo, onEdge) {
+ var p = this._props;
+ // if we don't the _prevTime thus the direction we are heading to,
+ // but prevTime was passed thus we are child of a Timeline
+ // set _prevTime to passed one and pretent that there was unknown
+ // update to not to block start/complete callbacks
+ if (this._prevTime == null && timelinePrevTime != null) {
+
+ if (this._props.speed && this._playTime) {
+ // play point + ( speed * delta )
+ this._prevTime = this._playTime + this._props.speed * (timelinePrevTime - this._playTime);
+ }
+ // this._prevTime = timelinePrevTime;
+ this._wasUknownUpdate = true;
+ }
+
+ // var before = time;
+ // cache vars
+ var startPoint = p.startTime - p.delay;
+ // if speed param was defined - calculate
+ // new time regarding speed
+ if (p.speed && this._playTime) {
+ // play point + ( speed * delta )
+ time = this._playTime + p.speed * (time - this._playTime);
+ }
+
+ // due to javascript precision issues, after speed mapping
+ // we can get very close number that was made from progress of 1
+ // and in fact represents `endTime` if so, set the time to `endTime`
+ if (Math.abs(p.endTime - time) < 0.00000001) {
+ time = p.endTime;
+ }
+
+ // if parent is onEdge but not very start nor very end
+ if (onEdge && wasYoyo != null) {
+ var T = this._getPeriod(time),
+ isYoyo = !!(p.isYoyo && this._props.repeat && T % 2 === 1);
+
+ // for timeline
+ // notify children about edge jump
+ if (this._timelines) {
+ for (var i = 0; i < this._timelines.length; i++) {
+ this._timelines[i]._update(time, timelinePrevTime, wasYoyo, onEdge);
+ }
+ }
+ // forward edge direction
+ if (onEdge === 1) {
+ // jumped from yoyo period?
+ if (wasYoyo) {
+ this._prevTime = time + 1;
+ this._repeatStart(time, isYoyo);
+ this._start(time, isYoyo);
+ } else {
+ this._prevTime = time - 1;
+ this._repeatComplete(time, isYoyo);
+ this._complete(time, isYoyo);
+ }
+ // backward edge direction
+ } else if (onEdge === -1) {
+ // jumped from yoyo period?
+ if (wasYoyo) {
+ this._prevTime = time - 1;
+ this._repeatComplete(time, isYoyo);
+ this._complete(time, isYoyo);
+ } else {
+ // call _start callbacks only if prev time was in active area
+ // not always true for append chains
+ if (this._prevTime >= p.startTime && this._prevTime <= p.endTime) {
+ this._prevTime = time + 1;
+ this._repeatStart(time, isYoyo);
+ this._start(time, isYoyo);
+ // reset isCOmpleted immediately to prevent onComplete cb
+ this._isCompleted = true;
+ }
+ }
+ }
+ // reset the _prevTime - drop one frame to undestand
+ // where we are heading
+ this._prevTime = undefined;
+ }
+ // if in active area and not ended - save progress time
+ // for pause/play purposes.
+ if (time > startPoint && time < p.endTime) {
+ this._progressTime = time - startPoint;
+ }
+ // else if not started or ended set progress time to 0
+ else if (time <= startPoint) {
+ this._progressTime = 0;
+ } else if (time >= p.endTime) {
+ // set progress time to repeat time + tiny cofficient
+ // to make it extend further than the end time
+ this._progressTime = p.repeatTime + .00000000001;
+ }
+ // reverse time if _props.isReversed is set
+ if (p.isReversed) {
+ time = p.endTime - this._progressTime;
+ }
+ // We need to know what direction we are heading to,
+ // so if we don't have the previous update value - this is very first
+ // update, - skip it entirely and wait for the next value
+ if (this._prevTime == null) {
+ this._prevTime = time;
+ this._wasUknownUpdate = true;
+ return false;
+ }
+
+ // ====== AFTER SKIPPED FRAME ======
+
+ // handle onProgress callback
+ if (time >= startPoint && time <= p.endTime) {
+ this._progress((time - startPoint) / p.repeatTime, time);
+ }
+ /*
+ if time is inside the active area of the tween.
+ active area is the area from start time to end time,
+ with all the repeat and delays in it
+ */
+ if (time >= p.startTime && time <= p.endTime) {
+ this._updateInActiveArea(time);
+ } else {
+ // if was in active area - update in inactive area but just once -
+ // right after the active area
+ if (this._isInActiveArea) {
+ this._updateInInactiveArea(time);
+ } else if (!this._isRefreshed) {
+ // onRefresh callback
+ // before startTime
+ if (time < p.startTime && this.progress !== 0) {
+ this._refresh(true);
+ this._isRefreshed = true;
+ // after endTime
+ }
+ // else if ( time > p.endTime ) { }
+ }
+ }
+
+ this._prevTime = time;
+ return time >= p.endTime || time <= startPoint;
+ };
+ /*
+ Method to handle tween's progress in inactive area.
+ @private
+ @param {Number} Current update time.
+ */
+
+
+ Tween.prototype._updateInInactiveArea = function _updateInInactiveArea(time) {
+ if (!this._isInActiveArea) {
+ return;
+ }
+ var p = this._props;
+ // complete if time is larger then end time
+ if (time > p.endTime && !this._isCompleted) {
+ this._progress(1, time);
+ // get period number
+ var T = this._getPeriod(p.endTime),
+ isYoyo = p.isYoyo && T % 2 === 0;
+
+ this._setProgress(isYoyo ? 0 : 1, time, isYoyo);
+ this._repeatComplete(time, isYoyo);
+ this._complete(time, isYoyo);
+ }
+ // if was active and went to - inactive area "-"
+ if (time < this._prevTime && time < p.startTime && !this._isStarted && !this._isCompleted) {
+ // if was in active area and didn't fire onStart callback
+ this._progress(0, time, false);
+ this._setProgress(0, time, false);
+ this._isRepeatStart = false;
+ this._repeatStart(time, false);
+ this._start(time, false);
+ }
+ this._isInActiveArea = false;
+ };
+ /*
+ Method to handle tween's progress in active area.
+ @private
+ @param {Number} Current update time.
+ */
+
+
+ Tween.prototype._updateInActiveArea = function _updateInActiveArea(time) {
+
+ var props = this._props,
+ delayDuration = props.delay + props.duration,
+ startPoint = props.startTime - props.delay,
+ elapsed = (time - props.startTime + props.delay) % delayDuration,
+ TCount = Math.round((props.endTime - props.startTime + props.delay) / delayDuration),
+ T = this._getPeriod(time),
+ TValue = this._delayT,
+ prevT = this._getPeriod(this._prevTime),
+ TPrevValue = this._delayT;
+
+ // "zero" and "one" value regarding yoyo and it's period
+ var isYoyo = props.isYoyo && T % 2 === 1,
+ isYoyoPrev = props.isYoyo && prevT % 2 === 1,
+ yoyoZero = isYoyo ? 1 : 0,
+ yoyoOne = 1 - yoyoZero;
+
+ if (time === props.endTime) {
+ this._wasUknownUpdate = false;
+ // if `time` is equal to `endTime`, T represents the next period,
+ // so we need to decrement T and calculate "one" value regarding yoyo
+ var isYoyo = props.isYoyo && (T - 1) % 2 === 1;
+ this._setProgress(isYoyo ? 0 : 1, time, isYoyo);
+ if (time > this._prevTime) {
+ this._isRepeatCompleted = false;
+ }
+ this._repeatComplete(time, isYoyo);
+ return this._complete(time, isYoyo);
+ }
+
+ // reset callback flags
+ this._isCompleted = false;
+ this._isRefreshed = false;
+ // if time is inside the duration area of the tween
+ if (startPoint + elapsed >= props.startTime) {
+ this._isInActiveArea = true;this._isRepeatCompleted = false;
+ this._isRepeatStart = false;this._isStarted = false;
+ // active zone or larger then end
+ var elapsed2 = (time - props.startTime) % delayDuration,
+ proc = elapsed2 / props.duration;
+ // |=====|=====|=====| >>>
+ // ^1^2
+ var isOnEdge = T > 0 && prevT < T;
+ // |=====|=====|=====| <<<
+ // ^2^1
+ var isOnReverseEdge = prevT > T;
+
+ // for use in timeline
+ this._onEdge = 0;
+ isOnEdge && (this._onEdge = 1);
+ isOnReverseEdge && (this._onEdge = -1);
+
+ if (this._wasUknownUpdate) {
+ if (time > this._prevTime) {
+ this._start(time, isYoyo);
+ this._repeatStart(time, isYoyo);
+ this._firstUpdate(time, isYoyo);
+ }
+ // if backward direction and
+ // if ( time < this._prevTime && time !== this._props.startTime ) {
+ if (time < this._prevTime) {
+ this._complete(time, isYoyo);
+ this._repeatComplete(time, isYoyo);
+ this._firstUpdate(time, isYoyo);
+ // reset isCompleted immediately
+ this._isCompleted = false;
+ }
+ }
+
+ if (isOnEdge) {
+ // if not just after delay
+ // |---=====|---=====|---=====| >>>
+ // ^1 ^2
+ // because we have already handled
+ // 1 and onRepeatComplete in delay gap
+ if (this.progress !== 1) {
+ // prevT
+ var isThisYoyo = props.isYoyo && (T - 1) % 2 === 1;
+ this._repeatComplete(time, isThisYoyo);
+ }
+ // if on edge but not at very start
+ // |=====|=====|=====| >>>
+ // ^! ^here ^here
+ if (prevT >= 0) {
+ this._repeatStart(time, isYoyo);
+ }
+ }
+
+ if (time > this._prevTime) {
+ // |=====|=====|=====| >>>
+ // ^1 ^2
+ if (!this._isStarted && this._prevTime <= props.startTime) {
+ this._start(time, isYoyo);
+ this._repeatStart(time, isYoyo);
+ // it was zero anyways
+
+ // restart flags immediately in case if we will
+ // return to '-' inactive area on the next step
+ this._isStarted = false;
+ this._isRepeatStart = false;
+ }
+ this._firstUpdate(time, isYoyo);
+ }
+
+ if (isOnReverseEdge) {
+ // if on edge but not at very end
+ // |=====|=====|=====| <<<
+ // ^here ^here ^not here
+ if (this.progress !== 0 && this.progress !== 1 && prevT != TCount) {
+ this._repeatStart(time, isYoyoPrev);
+ }
+ // if on very end edge
+ // |=====|=====|=====| <<<
+ // ^! ^! ^2 ^1
+ // we have handled the case in this._wasUknownUpdate
+ // block so filter that
+ if (prevT === TCount && !this._wasUknownUpdate) {
+ this._complete(time, isYoyo);
+ this._repeatComplete(time, isYoyo);
+ this._firstUpdate(time, isYoyo);
+ // reset isComplete flag call
+ // cuz we returned to active area
+ // this._isRepeatCompleted = false;
+ this._isCompleted = false;
+ }
+ this._repeatComplete(time, isYoyo);
+ }
+
+ if (prevT === 'delay') {
+ // if just before delay gap
+ // |---=====|---=====|---=====| <<<
+ // ^2 ^1
+ if (T < TPrevValue) {
+ this._repeatComplete(time, isYoyo);
+ }
+ // if just after delay gap
+ // |---=====|---=====|---=====| >>>
+ // ^1 ^2
+ if (T === TPrevValue && T > 0) {
+ this._repeatStart(time, isYoyo);
+ }
+ }
+
+ // swap progress and repeatStart based on direction
+ if (time > this._prevTime) {
+ // if progress is equal 0 and progress grows
+ if (proc === 0) {
+ this._repeatStart(time, isYoyo);
+ }
+ if (time !== props.endTime) {
+ this._setProgress(isYoyo ? 1 - proc : proc, time, isYoyo);
+ }
+ } else {
+ if (time !== props.endTime) {
+ this._setProgress(isYoyo ? 1 - proc : proc, time, isYoyo);
+ }
+ // if progress is equal 0 and progress grows
+ if (proc === 0) {
+ this._repeatStart(time, isYoyo);
+ }
+ }
+
+ if (time === props.startTime) {
+ this._start(time, isYoyo);
+ }
+ // delay gap - react only once
+ } else if (this._isInActiveArea) {
+ // because T will be string of "delay" here,
+ // let's normalize it be setting to TValue
+ var t = T === 'delay' ? TValue : T,
+ isGrows = time > this._prevTime;
+ // decrement period if forward direction of update
+ isGrows && t--;
+ // calculate normalized yoyoZero value
+ yoyoZero = props.isYoyo && t % 2 === 1 ? 1 : 0;
+ // if was in active area and previous time was larger
+ // |---=====|---=====|---=====| <<<
+ // ^2 ^1 ^2 ^1 ^2 ^1
+ if (time < this._prevTime) {
+ this._setProgress(yoyoZero, time, yoyoZero === 1);
+ this._repeatStart(time, yoyoZero === 1);
+ }
+ // set 1 or 0 regarding direction and yoyo
+ this._setProgress(isGrows ? 1 - yoyoZero : yoyoZero, time, yoyoZero === 1);
+ // if time grows
+ if (time > this._prevTime) {
+ // if reverse direction and in delay gap, then progress will be 0
+ // if so we don't need to call the onRepeatComplete callback
+ // |---=====|---=====|---=====| <<<
+ // ^0 ^0 ^0
+ // OR we have flipped 0 to 1 regarding yoyo option
+ if (this.progress !== 0 || yoyoZero === 1) {
+ // since we repeatComplete for previous period
+ // invert isYoyo option
+ // is elapsed is 0 - count as previous period
+ this._repeatComplete(time, yoyoZero === 1);
+ }
+ }
+ // set flag to indicate inactive area
+ this._isInActiveArea = false;
+ }
+ // we've got the first update now
+ this._wasUknownUpdate = false;
+ };
+ /*
+ Method to remove the Tween from the tweener.
+ @private
+ @returns {Object} Self.
+ */
+
+
+ Tween.prototype._removeFromTweener = function _removeFromTweener() {
+ _tweener2.default.remove(this);return this;
+ };
+ /*
+ Method to get current period number.
+ @private
+ @param {Number} Time to get the period for.
+ @returns {Number} Current period number.
+ */
+
+
+ Tween.prototype._getPeriod = function _getPeriod(time) {
+ var p = this._props,
+ TTime = p.delay + p.duration,
+ dTime = p.delay + time - p.startTime,
+ T = dTime / TTime,
+
+ // if time if equal to endTime we need to set the elapsed
+ // time to 0 to fix the occasional precision js bug, which
+ // causes 0 to be something like 1e-12
+ elapsed = time < p.endTime ? dTime % TTime : 0;
+ // If the latest period, round the result, otherwise floor it.
+ // Basically we always can floor the result, but because of js
+ // precision issues, sometimes the result is 2.99999998 which
+ // will result in 2 instead of 3 after the floor operation.
+ T = time >= p.endTime ? Math.round(T) : Math.floor(T);
+ // if time is larger then the end time
+ if (time > p.endTime) {
+ // set equal to the periods count
+ T = Math.round((p.endTime - p.startTime + p.delay) / TTime);
+ // if in delay gap, set _delayT to current
+ // period number and return "delay"
+ } else if (elapsed > 0 && elapsed < p.delay) {
+ this._delayT = T;T = 'delay';
+ }
+ // if the end of period and there is a delay
+ return T;
+ };
+ /*
+ Method to set Tween's progress and call onUpdate callback.
+ @private
+ @override @ Module
+ @param {Number} Progress to set.
+ @param {Number} Current update time.
+ @param {Boolean} Is yoyo perido. Used in Timeline to pass to Tween.
+ @returns {Object} Self.
+ */
+
+
+ Tween.prototype._setProgress = function _setProgress(proc, time, isYoyo) {
+ var p = this._props,
+ isYoyoChanged = p.wasYoyo !== isYoyo,
+ isForward = time > this._prevTime;
+
+ this.progress = proc;
+ // get the current easing for `forward` direction regarding `yoyo`
+ if (isForward && !isYoyo || !isForward && isYoyo) {
+ this.easedProgress = p.easing(proc);
+ // get the current easing for `backward` direction regarding `yoyo`
+ } else if (!isForward && !isYoyo || isForward && isYoyo) {
+ var easing = p.backwardEasing != null ? p.backwardEasing : p.easing;
+
+ this.easedProgress = easing(proc);
+ }
+
+ if (p.prevEasedProgress !== this.easedProgress || isYoyoChanged) {
+ if (p.onUpdate != null && typeof p.onUpdate === 'function') {
+ p.onUpdate.call(p.callbacksContext || this, this.easedProgress, this.progress, isForward, isYoyo);
+ }
+ }
+ p.prevEasedProgress = this.easedProgress;
+ p.wasYoyo = isYoyo;
+ return this;
+ };
+ /*
+ Method to set tween's state to start and call onStart callback.
+ @method _start
+ @private
+ @param {Number} Progress to set.
+ @param {Boolean} Is yoyo period.
+ */
+
+
+ Tween.prototype._start = function _start(time, isYoyo) {
+ if (this._isStarted) {
+ return;
+ }
+ var p = this._props;
+ if (p.onStart != null && typeof p.onStart === 'function') {
+ p.onStart.call(p.callbacksContext || this, time > this._prevTime, isYoyo);
+ }
+ this._isCompleted = false;this._isStarted = true;
+ this._isFirstUpdate = false;
+ };
+ /*
+ Method to call onPlaybackStart callback
+ @private
+ */
+
+
+ Tween.prototype._playbackStart = function _playbackStart() {
+ var p = this._props;
+ if (p.onPlaybackStart != null && typeof p.onPlaybackStart === 'function') {
+ p.onPlaybackStart.call(p.callbacksContext || this);
+ }
+ };
+ /*
+ Method to call onPlaybackPause callback
+ @private
+ */
+
+
+ Tween.prototype._playbackPause = function _playbackPause() {
+ var p = this._props;
+ if (p.onPlaybackPause != null && typeof p.onPlaybackPause === 'function') {
+ p.onPlaybackPause.call(p.callbacksContext || this);
+ }
+ };
+ /*
+ Method to call onPlaybackStop callback
+ @private
+ */
+
+
+ Tween.prototype._playbackStop = function _playbackStop() {
+ var p = this._props;
+ if (p.onPlaybackStop != null && typeof p.onPlaybackStop === 'function') {
+ p.onPlaybackStop.call(p.callbacksContext || this);
+ }
+ };
+ /*
+ Method to call onPlaybackComplete callback
+ @private
+ */
+
+
+ Tween.prototype._playbackComplete = function _playbackComplete() {
+ var p = this._props;
+ if (p.onPlaybackComplete != null && typeof p.onPlaybackComplete === 'function') {
+ p.onPlaybackComplete.call(p.callbacksContext || this);
+ }
+ };
+ /*
+ Method to set tween's state to complete.
+ @method _complete
+ @private
+ @param {Number} Current time.
+ @param {Boolean} Is yoyo period.
+ */
+
+
+ Tween.prototype._complete = function _complete(time, isYoyo) {
+ if (this._isCompleted) {
+ return;
+ }
+ var p = this._props;
+ if (p.onComplete != null && typeof p.onComplete === 'function') {
+ p.onComplete.call(p.callbacksContext || this, time > this._prevTime, isYoyo);
+ }
+
+ this._isCompleted = true;this._isStarted = false;
+ this._isFirstUpdate = false;
+ // reset _prevYoyo for timeline usage
+ this._prevYoyo = undefined;
+ };
+
+ /*
+ Method to run onFirstUpdate callback.
+ @method _firstUpdate
+ @private
+ @param {Number} Current update time.
+ @param {Boolean} Is yoyo period.
+ */
+
+
+ Tween.prototype._firstUpdate = function _firstUpdate(time, isYoyo) {
+ if (this._isFirstUpdate) {
+ return;
+ }
+ var p = this._props;
+ if (p.onFirstUpdate != null && typeof p.onFirstUpdate === 'function') {
+ // onFirstUpdate should have tween pointer
+ p.onFirstUpdate.tween = this;
+ p.onFirstUpdate.call(p.callbacksContext || this, time > this._prevTime, isYoyo);
+ }
+ this._isFirstUpdate = true;
+ };
+ /*
+ Method call onRepeatComplete calback and set flags.
+ @private
+ @param {Number} Current update time.
+ @param {Boolean} Is repeat period.
+ */
+
+
+ Tween.prototype._repeatComplete = function _repeatComplete(time, isYoyo) {
+ if (this._isRepeatCompleted) {
+ return;
+ }
+ var p = this._props;
+ if (p.onRepeatComplete != null && typeof p.onRepeatComplete === 'function') {
+ p.onRepeatComplete.call(p.callbacksContext || this, time > this._prevTime, isYoyo);
+ }
+ this._isRepeatCompleted = true;
+ // this._prevYoyo = null;
+ };
+
+ /*
+ Method call onRepeatStart calback and set flags.
+ @private
+ @param {Number} Current update time.
+ @param {Boolean} Is yoyo period.
+ */
+
+
+ Tween.prototype._repeatStart = function _repeatStart(time, isYoyo) {
+ if (this._isRepeatStart) {
+ return;
+ }
+ var p = this._props;
+ if (p.onRepeatStart != null && typeof p.onRepeatStart === 'function') {
+ p.onRepeatStart.call(p.callbacksContext || this, time > this._prevTime, isYoyo);
+ }
+ this._isRepeatStart = true;
+ };
+ /*
+ Method to launch onProgress callback.
+ @method _progress
+ @private
+ @param {Number} Progress to set.
+ */
+
+
+ Tween.prototype._progress = function _progress(progress, time) {
+ var p = this._props;
+ if (p.onProgress != null && typeof p.onProgress === 'function') {
+ p.onProgress.call(p.callbacksContext || this, progress, time > this._prevTime);
+ }
+ };
+ /*
+ Method to launch onRefresh callback.
+ @method _refresh
+ @private
+ @param {Boolean} If refresh even before start time.
+ */
+
+
+ Tween.prototype._refresh = function _refresh(isBefore) {
+ var p = this._props;
+ if (p.onRefresh != null) {
+ var context = p.callbacksContext || this,
+ progress = isBefore ? 0 : 1;
+
+ p.onRefresh.call(context, isBefore, p.easing(progress), progress);
+ }
+ };
+ /*
+ Method which is called when the tween is removed from tweener.
+ @private
+ */
+
+
+ Tween.prototype._onTweenerRemove = function _onTweenerRemove() {};
+ /*
+ Method which is called when the tween is removed
+ from tweener when finished.
+ @private
+ */
+
+
+ Tween.prototype._onTweenerFinish = function _onTweenerFinish() {
+ this._setPlaybackState('stop');
+ this._playbackComplete();
+ };
+ /*
+ Method to set property[s] on Tween.
+ @private
+ @override @ Module
+ @param {Object, String} Hash object of key/value pairs, or property name.
+ @param {_} Property's value to set.
+ */
+
+
+ Tween.prototype._setProp = function _setProp(obj, value) {
+ _Module.prototype._setProp.call(this, obj, value);
+ this._calcDimentions();
+ };
+ /*
+ Method to set single property.
+ @private
+ @override @ Module
+ @param {String} Name of the property.
+ @param {Any} Value for the property.
+ */
+
+
+ Tween.prototype._assignProp = function _assignProp(key, value) {
+ // fallback to defaults
+ if (value == null) {
+ value = this._defaults[key];
+ }
+ // parse easing
+ if (key === 'easing') {
+ value = _easing2.default.parseEasing(value);
+ value._parent = this;
+ }
+ // handle control callbacks overrides
+ var control = this._callbackOverrides[key],
+ isntOverriden = !value || !value.isMojsCallbackOverride;
+ if (control && isntOverriden) {
+ value = this._overrideCallback(value, control);
+ }
+ // call super on Module
+ _Module.prototype._assignProp.call(this, key, value);
+ };
+ /*
+ Method to override callback for controll pupropes.
+ @private
+ @param {String} Callback name.
+ @parma {Function} Method to call
+ */
+
+
+ Tween.prototype._overrideCallback = function _overrideCallback(callback, fun) {
+ var isCallback = callback && typeof callback === 'function',
+ override = function callbackOverride() {
+ // call overriden callback if it exists
+ isCallback && callback.apply(this, arguments);
+ // call the passed cleanup function
+ fun.apply(this, arguments);
+ };
+ // add overridden flag
+ override.isMojsCallbackOverride = true;
+ return override;
+ };
+
+ // _visualizeProgress(time) {
+ // var str = '|',
+ // procStr = ' ',
+ // p = this._props,
+ // proc = p.startTime - p.delay;
+
+ // while ( proc < p.endTime ) {
+ // if (p.delay > 0 ) {
+ // var newProc = proc + p.delay;
+ // if ( time > proc && time < newProc ) {
+ // procStr += ' ^ ';
+ // } else {
+ // procStr += ' ';
+ // }
+ // proc = newProc;
+ // str += '---';
+ // }
+ // var newProc = proc + p.duration;
+ // if ( time > proc && time < newProc ) {
+ // procStr += ' ^ ';
+ // } else if (time === proc) {
+ // procStr += '^ ';
+ // } else if (time === newProc) {
+ // procStr += ' ^ ';
+ // } else {
+ // procStr += ' ';
+ // }
+ // proc = newProc;
+ // str += '=====|';
+ // }
+
+ // console.log(str);
+ // console.log(procStr);
+ // }
+
+
+ return Tween;
+ }(_module2.default);
+
+ exports.default = Tween;
+
+/***/ }),
+/* 102 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ __webpack_require__(103);
+
+ __webpack_require__(104);
+
+ var _h = __webpack_require__(71);
+
+ var _h2 = _interopRequireDefault(_h);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ var Tweener = function () {
+ function Tweener() {
+ (0, _classCallCheck3.default)(this, Tweener);
+
+ this._vars();
+ this._listenVisibilityChange();
+ return this;
+ }
+
+ Tweener.prototype._vars = function _vars() {
+ this.tweens = [];
+ this._savedTweens = [];
+ this._loop = this._loop.bind(this);
+ this._onVisibilityChange = this._onVisibilityChange.bind(this);
+ };
+ /*
+ Main animation loop. Should have only one concurrent loop.
+ @private
+ @returns this
+ */
+
+
+ Tweener.prototype._loop = function _loop() {
+ if (!this._isRunning) {
+ return false;
+ }
+ this._update(window.performance.now());
+ if (!this.tweens.length) {
+ return this._isRunning = false;
+ }
+ requestAnimationFrame(this._loop);
+ return this;
+ };
+ /*
+ Method to start animation loop.
+ @private
+ */
+
+
+ Tweener.prototype._startLoop = function _startLoop() {
+ if (this._isRunning) {
+ return;
+ };this._isRunning = true;
+ requestAnimationFrame(this._loop);
+ };
+ /*
+ Method to stop animation loop.
+ @private
+ */
+
+
+ Tweener.prototype._stopLoop = function _stopLoop() {
+ this._isRunning = false;
+ };
+ /*
+ Method to update every tween/timeline on animation frame.
+ @private
+ */
+
+
+ Tweener.prototype._update = function _update(time) {
+ var i = this.tweens.length;
+ while (i--) {
+ // cache the current tween
+ var tween = this.tweens[i];
+ if (tween && tween._update(time) === true) {
+ this.remove(tween);
+ tween._onTweenerFinish();
+ tween._prevTime = undefined;
+ }
+ }
+ };
+ /*
+ Method to add a Tween/Timeline to loop pool.
+ @param {Object} Tween/Timeline to add.
+ */
+
+
+ Tweener.prototype.add = function add(tween) {
+ // return if tween is already running
+ if (tween._isRunning) {
+ return;
+ }
+ tween._isRunning = true;
+ this.tweens.push(tween);
+ this._startLoop();
+ };
+ /*
+ Method stop updating all the child tweens/timelines.
+ @private
+ */
+
+
+ Tweener.prototype.removeAll = function removeAll() {
+ this.tweens.length = 0;
+ };
+ /*
+ Method to remove specific tween/timeline form updating.
+ @private
+ */
+
+
+ Tweener.prototype.remove = function remove(tween) {
+ var index = typeof tween === 'number' ? tween : this.tweens.indexOf(tween);
+
+ if (index !== -1) {
+ tween = this.tweens[index];
+ if (tween) {
+ tween._isRunning = false;
+ this.tweens.splice(index, 1);
+ tween._onTweenerRemove();
+ }
+ }
+ };
+
+ /*
+ Method to initialize event listeners to visibility change events.
+ @private
+ */
+
+
+ Tweener.prototype._listenVisibilityChange = function _listenVisibilityChange() {
+ if (typeof document.hidden !== "undefined") {
+ this._visibilityHidden = "hidden";
+ this._visibilityChange = "visibilitychange";
+ } else if (typeof document.mozHidden !== "undefined") {
+ this._visibilityHidden = "mozHidden";
+ this._visibilityChange = "mozvisibilitychange";
+ } else if (typeof document.msHidden !== "undefined") {
+ this._visibilityHidden = "msHidden";
+ this._visibilityChange = "msvisibilitychange";
+ } else if (typeof document.webkitHidden !== "undefined") {
+ this._visibilityHidden = "webkitHidden";
+ this._visibilityChange = "webkitvisibilitychange";
+ }
+
+ document.addEventListener(this._visibilityChange, this._onVisibilityChange, false);
+ };
+ /*
+ Method that will fire on visibility change.
+ */
+
+
+ Tweener.prototype._onVisibilityChange = function _onVisibilityChange() {
+ if (document[this._visibilityHidden]) {
+ this._savePlayingTweens();
+ } else {
+ this._restorePlayingTweens();
+ }
+ };
+ /*
+ Method to save all playing tweens.
+ @private
+ */
+
+
+ Tweener.prototype._savePlayingTweens = function _savePlayingTweens() {
+ this._savedTweens = this.tweens.slice(0);
+ for (var i = 0; i < this._savedTweens.length; i++) {
+ this._savedTweens[i].pause();
+ }
+ };
+ /*
+ Method to restore all playing tweens.
+ @private
+ */
+
+
+ Tweener.prototype._restorePlayingTweens = function _restorePlayingTweens() {
+ for (var i = 0; i < this._savedTweens.length; i++) {
+ this._savedTweens[i].resume();
+ }
+ };
+
+ return Tweener;
+ }();
+
+ var t = new Tweener();
+ exports.default = t;
+
+/***/ }),
+/* 103 */
+/***/ (function(module, exports) {
+
+
+ /* istanbul ignore next */
+ (function() {
+ 'use strict';
+ var cancel, i, isOldBrowser, lastTime, vendors, vp, w;
+ vendors = ['webkit', 'moz'];
+ i = 0;
+ w = window;
+ while (i < vendors.length && !w.requestAnimationFrame) {
+ vp = vendors[i];
+ w.requestAnimationFrame = w[vp + 'RequestAnimationFrame'];
+ cancel = w[vp + 'CancelAnimationFrame'];
+ w.cancelAnimationFrame = cancel || w[vp + 'CancelRequestAnimationFrame'];
+ ++i;
+ }
+ isOldBrowser = !w.requestAnimationFrame || !w.cancelAnimationFrame;
+ if (/iP(ad|hone|od).*OS 6/.test(w.navigator.userAgent) || isOldBrowser) {
+ lastTime = 0;
+ w.requestAnimationFrame = function(callback) {
+ var nextTime, now;
+ now = Date.now();
+ nextTime = Math.max(lastTime + 16, now);
+ return setTimeout((function() {
+ callback(lastTime = nextTime);
+ }), nextTime - now);
+ };
+ w.cancelAnimationFrame = clearTimeout;
+ }
+ })();
+
+
+/***/ }),
+/* 104 */
+/***/ (function(module, exports) {
+
+
+ /* istanbul ignore next */
+ (function(root) {
+ var offset, ref, ref1;
+ if (root.performance == null) {
+ root.performance = {};
+ }
+ Date.now = Date.now || function() {
+ return (new Date).getTime();
+ };
+ if (root.performance.now == null) {
+ offset = ((ref = root.performance) != null ? (ref1 = ref.timing) != null ? ref1.navigationStart : void 0 : void 0) ? performance.timing.navigationStart : Date.now();
+ return root.performance.now = function() {
+ return Date.now() - offset;
+ };
+ }
+ })(window);
+
+
+/***/ }),
+/* 105 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var Easing, PI, PathEasing, approximate, bezier, easing, h, mix, sin;
+
+ bezier = __webpack_require__(106);
+
+ PathEasing = __webpack_require__(107);
+
+ mix = __webpack_require__(108);
+
+ h = __webpack_require__(71);
+
+ approximate = __webpack_require__(109)["default"] || __webpack_require__(109);
+
+ sin = Math.sin;
+
+ PI = Math.PI;
+
+ Easing = (function() {
+ function Easing() {}
+
+ Easing.prototype.bezier = bezier;
+
+ Easing.prototype.PathEasing = PathEasing;
+
+ Easing.prototype.path = (new PathEasing('creator')).create;
+
+ Easing.prototype.approximate = approximate;
+
+ Easing.prototype.inverse = function(p) {
+ return 1 - p;
+ };
+
+ Easing.prototype.linear = {
+ none: function(k) {
+ return k;
+ }
+ };
+
+ Easing.prototype.ease = {
+ "in": bezier.apply(Easing, [0.42, 0, 1, 1]),
+ out: bezier.apply(Easing, [0, 0, 0.58, 1]),
+ inout: bezier.apply(Easing, [0.42, 0, 0.58, 1])
+ };
+
+ Easing.prototype.sin = {
+ "in": function(k) {
+ return 1 - Math.cos(k * PI / 2);
+ },
+ out: function(k) {
+ return sin(k * PI / 2);
+ },
+ inout: function(k) {
+ return 0.5 * (1 - Math.cos(PI * k));
+ }
+ };
+
+ Easing.prototype.quad = {
+ "in": function(k) {
+ return k * k;
+ },
+ out: function(k) {
+ return k * (2 - k);
+ },
+ inout: function(k) {
+ if ((k *= 2) < 1) {
+ return 0.5 * k * k;
+ }
+ return -0.5 * (--k * (k - 2) - 1);
+ }
+ };
+
+ Easing.prototype.cubic = {
+ "in": function(k) {
+ return k * k * k;
+ },
+ out: function(k) {
+ return --k * k * k + 1;
+ },
+ inout: function(k) {
+ if ((k *= 2) < 1) {
+ return 0.5 * k * k * k;
+ }
+ return 0.5 * ((k -= 2) * k * k + 2);
+ }
+ };
+
+ Easing.prototype.quart = {
+ "in": function(k) {
+ return k * k * k * k;
+ },
+ out: function(k) {
+ return 1 - (--k * k * k * k);
+ },
+ inout: function(k) {
+ if ((k *= 2) < 1) {
+ return 0.5 * k * k * k * k;
+ }
+ return -0.5 * ((k -= 2) * k * k * k - 2);
+ }
+ };
+
+ Easing.prototype.quint = {
+ "in": function(k) {
+ return k * k * k * k * k;
+ },
+ out: function(k) {
+ return --k * k * k * k * k + 1;
+ },
+ inout: function(k) {
+ if ((k *= 2) < 1) {
+ return 0.5 * k * k * k * k * k;
+ }
+ return 0.5 * ((k -= 2) * k * k * k * k + 2);
+ }
+ };
+
+ Easing.prototype.expo = {
+ "in": function(k) {
+ if (k === 0) {
+ return 0;
+ } else {
+ return Math.pow(1024, k - 1);
+ }
+ },
+ out: function(k) {
+ if (k === 1) {
+ return 1;
+ } else {
+ return 1 - Math.pow(2, -10 * k);
+ }
+ },
+ inout: function(k) {
+ if (k === 0) {
+ return 0;
+ }
+ if (k === 1) {
+ return 1;
+ }
+ if ((k *= 2) < 1) {
+ return 0.5 * Math.pow(1024, k - 1);
+ }
+ return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);
+ }
+ };
+
+ Easing.prototype.circ = {
+ "in": function(k) {
+ return 1 - Math.sqrt(1 - k * k);
+ },
+ out: function(k) {
+ return Math.sqrt(1 - (--k * k));
+ },
+ inout: function(k) {
+ if ((k *= 2) < 1) {
+ return -0.5 * (Math.sqrt(1 - k * k) - 1);
+ }
+ return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);
+ }
+ };
+
+ Easing.prototype.back = {
+ "in": function(k) {
+ var s;
+ s = 1.70158;
+ return k * k * ((s + 1) * k - s);
+ },
+ out: function(k) {
+ var s;
+ s = 1.70158;
+ return --k * k * ((s + 1) * k + s) + 1;
+ },
+ inout: function(k) {
+ var s;
+ s = 1.70158 * 1.525;
+ if ((k *= 2) < 1) {
+ return 0.5 * (k * k * ((s + 1) * k - s));
+ }
+ return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);
+ }
+ };
+
+ Easing.prototype.elastic = {
+ "in": function(k) {
+ var a, p, s;
+ s = void 0;
+ p = 0.4;
+ if (k === 0) {
+ return 0;
+ }
+ if (k === 1) {
+ return 1;
+ }
+ a = 1;
+ s = p / 4;
+ return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
+ },
+ out: function(k) {
+ var a, p, s;
+ s = void 0;
+ p = 0.4;
+ if (k === 0) {
+ return 0;
+ }
+ if (k === 1) {
+ return 1;
+ }
+ a = 1;
+ s = p / 4;
+ return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;
+ },
+ inout: function(k) {
+ var a, p, s;
+ s = void 0;
+ p = 0.4;
+ if (k === 0) {
+ return 0;
+ }
+ if (k === 1) {
+ return 1;
+ }
+ a = 1;
+ s = p / 4;
+ if ((k *= 2) < 1) {
+ return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
+ }
+ return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;
+ }
+ };
+
+ Easing.prototype.bounce = {
+ "in": function(k) {
+ return 1 - easing.bounce.out(1 - k);
+ },
+ out: function(k) {
+ if (k < (1 / 2.75)) {
+ return 7.5625 * k * k;
+ } else if (k < (2 / 2.75)) {
+ return 7.5625 * (k -= 1.5 / 2.75) * k + 0.75;
+ } else if (k < (2.5 / 2.75)) {
+ return 7.5625 * (k -= 2.25 / 2.75) * k + 0.9375;
+ } else {
+ return 7.5625 * (k -= 2.625 / 2.75) * k + 0.984375;
+ }
+ },
+ inout: function(k) {
+ if (k < 0.5) {
+ return easing.bounce["in"](k * 2) * 0.5;
+ }
+ return easing.bounce.out(k * 2 - 1) * 0.5 + 0.5;
+ }
+ };
+
+ Easing.prototype.parseEasing = function(easing) {
+ var easingParent, type;
+ if (easing == null) {
+ easing = 'linear.none';
+ }
+ type = typeof easing;
+ if (type === 'string') {
+ if (easing.charAt(0).toLowerCase() === 'm') {
+ return this.path(easing);
+ } else {
+ easing = this._splitEasing(easing);
+ easingParent = this[easing[0]];
+ if (!easingParent) {
+ h.error("Easing with name \"" + easing[0] + "\" was not found, fallback to \"linear.none\" instead");
+ return this['linear']['none'];
+ }
+ return easingParent[easing[1]];
+ }
+ }
+ if (h.isArray(easing)) {
+ return this.bezier.apply(this, easing);
+ }
+ if ('function') {
+ return easing;
+ }
+ };
+
+ Easing.prototype._splitEasing = function(string) {
+ var firstPart, secondPart, split;
+ if (typeof string === 'function') {
+ return string;
+ }
+ if (typeof string === 'string' && string.length) {
+ split = string.split('.');
+ firstPart = split[0].toLowerCase() || 'linear';
+ secondPart = split[1].toLowerCase() || 'none';
+ return [firstPart, secondPart];
+ } else {
+ return ['linear', 'none'];
+ }
+ };
+
+ return Easing;
+
+ })();
+
+ easing = new Easing;
+
+ easing.mix = mix(easing);
+
+ module.exports = easing;
+
+
+/***/ }),
+/* 106 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ /* WEBPACK VAR INJECTION */(function(global) {var BezierEasing, bezierEasing, h,
+ indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+ h = __webpack_require__(71);
+
+
+ /**
+ * Copyright (c) 2014 Gaëtan Renaudeau http://goo.gl/El3k7u
+ * Adopted from https://github.com/gre/bezier-easing
+ */
+
+ BezierEasing = (function() {
+ function BezierEasing(o) {
+ this.vars();
+ return this.generate;
+ }
+
+ BezierEasing.prototype.vars = function() {
+ return this.generate = h.bind(this.generate, this);
+ };
+
+ BezierEasing.prototype.generate = function(mX1, mY1, mX2, mY2) {
+ var A, B, C, NEWTON_ITERATIONS, NEWTON_MIN_SLOPE, SUBDIVISION_MAX_ITERATIONS, SUBDIVISION_PRECISION, _precomputed, arg, binarySubdivide, calcBezier, calcSampleValues, f, float32ArraySupported, getSlope, getTForX, i, j, kSampleStepSize, kSplineTableSize, mSampleValues, newtonRaphsonIterate, precompute, str;
+ if (arguments.length < 4) {
+ return this.error('Bezier function expects 4 arguments');
+ }
+ for (i = j = 0; j < 4; i = ++j) {
+ arg = arguments[i];
+ if (typeof arg !== "number" || isNaN(arg) || !isFinite(arg)) {
+ return this.error('Bezier function expects 4 arguments');
+ }
+ }
+ if (mX1 < 0 || mX1 > 1 || mX2 < 0 || mX2 > 1) {
+ return this.error('Bezier x values should be > 0 and < 1');
+ }
+ NEWTON_ITERATIONS = 4;
+ NEWTON_MIN_SLOPE = 0.001;
+ SUBDIVISION_PRECISION = 0.0000001;
+ SUBDIVISION_MAX_ITERATIONS = 10;
+ kSplineTableSize = 11;
+ kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);
+ float32ArraySupported = indexOf.call(global, 'Float32Array') >= 0;
+ A = function(aA1, aA2) {
+ return 1.0 - 3.0 * aA2 + 3.0 * aA1;
+ };
+ B = function(aA1, aA2) {
+ return 3.0 * aA2 - 6.0 * aA1;
+ };
+ C = function(aA1) {
+ return 3.0 * aA1;
+ };
+ calcBezier = function(aT, aA1, aA2) {
+ return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;
+ };
+ getSlope = function(aT, aA1, aA2) {
+ return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);
+ };
+ newtonRaphsonIterate = function(aX, aGuessT) {
+ var currentSlope, currentX;
+ i = 0;
+ while (i < NEWTON_ITERATIONS) {
+ currentSlope = getSlope(aGuessT, mX1, mX2);
+
+ /* istanbul ignore if */
+ if (currentSlope === 0.0) {
+ return aGuessT;
+ }
+ currentX = calcBezier(aGuessT, mX1, mX2) - aX;
+ aGuessT -= currentX / currentSlope;
+ ++i;
+ }
+ return aGuessT;
+ };
+ calcSampleValues = function() {
+ i = 0;
+ while (i < kSplineTableSize) {
+ mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);
+ ++i;
+ }
+ };
+
+ /* istanbul ignore next */
+ binarySubdivide = function(aX, aA, aB) {
+ var currentT, currentX, isBig;
+ currentX = void 0;
+ currentT = void 0;
+ i = 0;
+ while (true) {
+ currentT = aA + (aB - aA) / 2.0;
+ currentX = calcBezier(currentT, mX1, mX2) - aX;
+ if (currentX > 0.0) {
+ aB = currentT;
+ } else {
+ aA = currentT;
+ }
+ isBig = Math.abs(currentX) > SUBDIVISION_PRECISION;
+ if (!(isBig && ++i < SUBDIVISION_MAX_ITERATIONS)) {
+ break;
+ }
+ }
+ return currentT;
+ };
+ getTForX = function(aX) {
+ var currentSample, delta, dist, guessForT, initialSlope, intervalStart, lastSample;
+ intervalStart = 0.0;
+ currentSample = 1;
+ lastSample = kSplineTableSize - 1;
+ while (currentSample !== lastSample && mSampleValues[currentSample] <= aX) {
+ intervalStart += kSampleStepSize;
+ ++currentSample;
+ }
+ --currentSample;
+ delta = mSampleValues[currentSample + 1] - mSampleValues[currentSample];
+ dist = (aX - mSampleValues[currentSample]) / delta;
+ guessForT = intervalStart + dist * kSampleStepSize;
+ initialSlope = getSlope(guessForT, mX1, mX2);
+ if (initialSlope >= NEWTON_MIN_SLOPE) {
+ return newtonRaphsonIterate(aX, guessForT);
+ } else {
+
+ /* istanbul ignore next */
+ if (initialSlope === 0.0) {
+ return guessForT;
+ } else {
+ return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);
+ }
+ }
+ };
+ precompute = function() {
+ var _precomputed;
+ _precomputed = true;
+ if (mX1 !== mY1 || mX2 !== mY2) {
+ return calcSampleValues();
+ }
+ };
+ mSampleValues = !float32ArraySupported ? new Array(kSplineTableSize) : new Float32Array(kSplineTableSize);
+ _precomputed = false;
+ f = function(aX) {
+ if (!_precomputed) {
+ precompute();
+ }
+ if (mX1 === mY1 && mX2 === mY2) {
+ return aX;
+ }
+ if (aX === 0) {
+ return 0;
+ }
+ if (aX === 1) {
+ return 1;
+ }
+ return calcBezier(getTForX(aX), mY1, mY2);
+ };
+ str = "bezier(" + [mX1, mY1, mX2, mY2] + ")";
+ f.toStr = function() {
+ return str;
+ };
+ return f;
+ };
+
+ BezierEasing.prototype.error = function(msg) {
+ return h.error(msg);
+ };
+
+ return BezierEasing;
+
+ })();
+
+ bezierEasing = new BezierEasing;
+
+ module.exports = bezierEasing;
+
+ /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
+
+/***/ }),
+/* 107 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var PathEasing, h;
+
+ h = __webpack_require__(71);
+
+ PathEasing = (function() {
+ PathEasing.prototype._vars = function() {
+ this._precompute = h.clamp(this.o.precompute || 1450, 100, 10000);
+ this._step = 1 / this._precompute;
+ this._rect = this.o.rect || 100;
+ this._approximateMax = this.o.approximateMax || 5;
+ this._eps = this.o.eps || 0.001;
+ return this._boundsPrevProgress = -1;
+ };
+
+ function PathEasing(path, o1) {
+ this.o = o1 != null ? o1 : {};
+ if (path === 'creator') {
+ return;
+ }
+ this.path = h.parsePath(path);
+ if (this.path == null) {
+ return h.error('Error while parsing the path');
+ }
+ this._vars();
+ this.path.setAttribute('d', this._normalizePath(this.path.getAttribute('d')));
+ this.pathLength = this.path.getTotalLength();
+ this.sample = h.bind(this.sample, this);
+ this._hardSample = h.bind(this._hardSample, this);
+ this._preSample();
+ this;
+ }
+
+ PathEasing.prototype._preSample = function() {
+ var i, j, length, point, progress, ref, results;
+ this._samples = [];
+ results = [];
+ for (i = j = 0, ref = this._precompute; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) {
+ progress = i * this._step;
+ length = this.pathLength * progress;
+ point = this.path.getPointAtLength(length);
+ results.push(this._samples[i] = {
+ point: point,
+ length: length,
+ progress: progress
+ });
+ }
+ return results;
+ };
+
+ PathEasing.prototype._findBounds = function(array, p) {
+ var buffer, direction, end, i, j, len, loopEnd, pointP, pointX, ref, ref1, start, value;
+ if (p === this._boundsPrevProgress) {
+ return this._prevBounds;
+ }
+ if (this._boundsStartIndex == null) {
+ this._boundsStartIndex = 0;
+ }
+ len = array.length;
+ if (this._boundsPrevProgress > p) {
+ loopEnd = 0;
+ direction = 'reverse';
+ } else {
+ loopEnd = len;
+ direction = 'forward';
+ }
+ if (direction === 'forward') {
+ start = array[0];
+ end = array[array.length - 1];
+ } else {
+ start = array[array.length - 1];
+ end = array[0];
+ }
+ for (i = j = ref = this._boundsStartIndex, ref1 = loopEnd; ref <= ref1 ? j < ref1 : j > ref1; i = ref <= ref1 ? ++j : --j) {
+ value = array[i];
+ pointX = value.point.x / this._rect;
+ pointP = p;
+ if (direction === 'reverse') {
+ buffer = pointX;
+ pointX = pointP;
+ pointP = buffer;
+ }
+ if (pointX < pointP) {
+ start = value;
+ this._boundsStartIndex = i;
+ } else {
+ end = value;
+ break;
+ }
+ }
+ this._boundsPrevProgress = p;
+ return this._prevBounds = {
+ start: start,
+ end: end
+ };
+ };
+
+ PathEasing.prototype.sample = function(p) {
+ var bounds, res;
+ p = h.clamp(p, 0, 1);
+ bounds = this._findBounds(this._samples, p);
+ res = this._checkIfBoundsCloseEnough(p, bounds);
+ if (res != null) {
+ return res;
+ }
+ return this._findApproximate(p, bounds.start, bounds.end);
+ };
+
+ PathEasing.prototype._checkIfBoundsCloseEnough = function(p, bounds) {
+ var point, y;
+ point = void 0;
+ y = this._checkIfPointCloseEnough(p, bounds.start.point);
+ if (y != null) {
+ return y;
+ }
+ return this._checkIfPointCloseEnough(p, bounds.end.point);
+ };
+
+ PathEasing.prototype._checkIfPointCloseEnough = function(p, point) {
+ if (h.closeEnough(p, point.x / this._rect, this._eps)) {
+ return this._resolveY(point);
+ }
+ };
+
+ PathEasing.prototype._approximate = function(start, end, p) {
+ var deltaP, percentP;
+ deltaP = end.point.x - start.point.x;
+ percentP = (p - (start.point.x / this._rect)) / (deltaP / this._rect);
+ return start.length + percentP * (end.length - start.length);
+ };
+
+ PathEasing.prototype._findApproximate = function(p, start, end, approximateMax) {
+ var approximation, args, newPoint, point, x;
+ if (approximateMax == null) {
+ approximateMax = this._approximateMax;
+ }
+ approximation = this._approximate(start, end, p);
+ point = this.path.getPointAtLength(approximation);
+ x = point.x / this._rect;
+ if (h.closeEnough(p, x, this._eps)) {
+ return this._resolveY(point);
+ } else {
+ if (--approximateMax < 1) {
+ return this._resolveY(point);
+ }
+ newPoint = {
+ point: point,
+ length: approximation
+ };
+ args = p < x ? [p, start, newPoint, approximateMax] : [p, newPoint, end, approximateMax];
+ return this._findApproximate.apply(this, args);
+ }
+ };
+
+ PathEasing.prototype._resolveY = function(point) {
+ return 1 - (point.y / this._rect);
+ };
+
+ PathEasing.prototype._normalizePath = function(path) {
+ var commands, endIndex, normalizedPath, points, startIndex, svgCommandsRegexp;
+ svgCommandsRegexp = /[M|L|H|V|C|S|Q|T|A]/gim;
+ points = path.split(svgCommandsRegexp);
+ points.shift();
+ commands = path.match(svgCommandsRegexp);
+ startIndex = 0;
+ points[startIndex] = this._normalizeSegment(points[startIndex]);
+ endIndex = points.length - 1;
+ points[endIndex] = this._normalizeSegment(points[endIndex], this._rect || 100);
+ return normalizedPath = this._joinNormalizedPath(commands, points);
+ };
+
+ PathEasing.prototype._joinNormalizedPath = function(commands, points) {
+ var command, i, j, len1, normalizedPath, space;
+ normalizedPath = '';
+ for (i = j = 0, len1 = commands.length; j < len1; i = ++j) {
+ command = commands[i];
+ space = i === 0 ? '' : ' ';
+ normalizedPath += "" + space + command + (points[i].trim());
+ }
+ return normalizedPath;
+ };
+
+ PathEasing.prototype._normalizeSegment = function(segment, value) {
+ var i, j, lastPoint, len1, nRgx, pairs, parsedX, point, space, x;
+ if (value == null) {
+ value = 0;
+ }
+ segment = segment.trim();
+ nRgx = /(-|\+)?((\d+(\.(\d|\e(-|\+)?)+)?)|(\.?(\d|\e|(\-|\+))+))/gim;
+ pairs = this._getSegmentPairs(segment.match(nRgx));
+ lastPoint = pairs[pairs.length - 1];
+ x = lastPoint[0];
+ parsedX = Number(x);
+ if (parsedX !== value) {
+ segment = '';
+ lastPoint[0] = value;
+ for (i = j = 0, len1 = pairs.length; j < len1; i = ++j) {
+ point = pairs[i];
+ space = i === 0 ? '' : ' ';
+ segment += "" + space + point[0] + "," + point[1];
+ }
+ }
+ return segment;
+ };
+
+ PathEasing.prototype._getSegmentPairs = function(array) {
+ var i, j, len1, newArray, pair, value;
+ if (array.length % 2 !== 0) {
+ h.error('Failed to parse the path - segment pairs are not even.', array);
+ }
+ newArray = [];
+ for (i = j = 0, len1 = array.length; j < len1; i = j += 2) {
+ value = array[i];
+ pair = [array[i], array[i + 1]];
+ newArray.push(pair);
+ }
+ return newArray;
+ };
+
+ PathEasing.prototype.create = function(path, o) {
+ var handler;
+ handler = new PathEasing(path, o);
+ handler.sample.path = handler.path;
+ return handler.sample;
+ };
+
+ return PathEasing;
+
+ })();
+
+ module.exports = PathEasing;
+
+
+/***/ }),
+/* 108 */
+/***/ (function(module, exports) {
+
+ var create, easing, getNearest, mix, parseIfEasing, sort,
+ slice = [].slice;
+
+ easing = null;
+
+ parseIfEasing = function(item) {
+ if (typeof item.value === 'number') {
+ return item.value;
+ } else {
+ return easing.parseEasing(item.value);
+ }
+ };
+
+ sort = function(a, b) {
+ var returnValue;
+ a.value = parseIfEasing(a);
+ b.value = parseIfEasing(b);
+ returnValue = 0;
+ a.to < b.to && (returnValue = -1);
+ a.to > b.to && (returnValue = 1);
+ return returnValue;
+ };
+
+ getNearest = function(array, progress) {
+ var i, index, j, len, value;
+ index = 0;
+ for (i = j = 0, len = array.length; j < len; i = ++j) {
+ value = array[i];
+ index = i;
+ if (value.to > progress) {
+ break;
+ }
+ }
+ return index;
+ };
+
+ mix = function() {
+ var args;
+ args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+ if (args.length > 1) {
+ args = args.sort(sort);
+ } else {
+ args[0].value = parseIfEasing(args[0]);
+ }
+ return function(progress) {
+ var index, value;
+ index = getNearest(args, progress);
+ if (index !== -1) {
+ value = args[index].value;
+ if (index === args.length - 1 && progress > args[index].to) {
+ return 1;
+ }
+ if (typeof value === 'function') {
+ return value(progress);
+ } else {
+ return value;
+ }
+ }
+ };
+ };
+
+ create = function(e) {
+ easing = e;
+ return mix;
+ };
+
+ module.exports = create;
+
+
+/***/ }),
+/* 109 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _typeof2 = __webpack_require__(3);
+
+ var _typeof3 = _interopRequireDefault(_typeof2);
+
+ var _h = __webpack_require__(71);
+
+ var _h2 = _interopRequireDefault(_h);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ /*
+ Method to bootstrap approximation function.
+ @private
+ @param {Object} Samples Object.
+ @returns {Function} Approximate function.
+ */
+ var _proximate = function _proximate(samples) {
+ var n = samples.base,
+ samplesAmount = Math.pow(10, n),
+ samplesStep = 1 / samplesAmount;
+
+ function RoundNumber(input, numberDecimals) {
+ numberDecimals = +numberDecimals || 0; // +var magic!
+
+ var multiplyer = Math.pow(10.0, numberDecimals);
+
+ return Math.round(input * multiplyer) / multiplyer;
+ }
+
+ var cached = function cached(p) {
+ var newKey = RoundNumber(p, n),
+ sample = samples[newKey.toString()];
+
+ if (Math.abs(p - newKey) < samplesStep) {
+ return sample;
+ }
+
+ if (p > newKey) {
+ var nextIndex = newKey + samplesStep;
+ var nextValue = samples[nextIndex];
+ } else {
+ var nextIndex = newKey - samplesStep;
+ var nextValue = samples[nextIndex];
+ }
+
+ var dLength = nextIndex - newKey;
+ var dValue = nextValue - sample;
+ if (dValue < samplesStep) {
+ return sample;
+ }
+
+ var progressScale = (p - newKey) / dLength;
+ var coef = nextValue > sample ? -1 : 1;
+ var scaledDifference = coef * progressScale * dValue;
+
+ return sample + scaledDifference;
+ };
+
+ cached.getSamples = function () {
+ return samples;
+ };
+
+ return cached;
+ };
+ /*
+ Method to take samples of the function and call the _proximate
+ method with the dunction and samples. Or if samples passed - pipe
+ them to the _proximate method without sampling.
+ @private
+ @param {Function} Function to sample.
+ @param {Number, Object, String} Precision or precomputed samples.
+ */
+ var _sample = function _sample(fn) {
+ var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 4;
+
+
+ var nType = typeof n === 'undefined' ? 'undefined' : (0, _typeof3.default)(n);
+
+ var samples = {};
+ if (nType === 'number') {
+ var p = 0,
+ samplesCount = Math.pow(10, n),
+ step = 1 / samplesCount;
+
+ samples[0] = fn(0);
+ for (var i = 0; i < samplesCount - 1; i++) {
+ p += step;
+
+ var index = parseFloat(p.toFixed(n));
+ samples[index] = fn(p);
+ }
+ samples[1] = fn(1);
+
+ samples.base = n;
+ } else if (nType === 'object') {
+ samples = n;
+ } else if (nType === 'string') {
+ samples = JSON.parse(n);
+ }
+
+ return Approximate._sample._proximate(samples);
+ };
+
+ var Approximate = { _sample: _sample, _proximate: _proximate };
+ Approximate._sample._proximate = Approximate._proximate;
+
+ exports.default = Approximate._sample;
+
+/***/ }),
+/* 110 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _getIterator2 = __webpack_require__(111);
+
+ var _getIterator3 = _interopRequireDefault(_getIterator2);
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _possibleConstructorReturn2 = __webpack_require__(75);
+
+ var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+ var _inherits2 = __webpack_require__(76);
+
+ var _inherits3 = _interopRequireDefault(_inherits2);
+
+ var _h = __webpack_require__(71);
+
+ var _h2 = _interopRequireDefault(_h);
+
+ var _tweener = __webpack_require__(102);
+
+ var _tweener2 = _interopRequireDefault(_tweener);
+
+ var _tween = __webpack_require__(101);
+
+ var _tween2 = _interopRequireDefault(_tween);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ var Timeline = function (_Tween) {
+ (0, _inherits3.default)(Timeline, _Tween);
+
+ /*
+ API method to add child tweens/timelines.
+ @public
+ @param {Object, Array} Tween/Timeline or an array of such.
+ @returns {Object} Self.
+ */
+ Timeline.prototype.add = function add() {
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ this._pushTimelineArray(args);
+ this._calcDimentions();
+ return this;
+ };
+ /*
+ API method to append the Tween/Timeline to the end of the
+ timeline. Each argument is treated as a new append.
+ Array of tweens is treated as a parallel sequence.
+ @public
+ @param {Object, Array} Tween/Timeline to append or array of such.
+ @returns {Object} Self.
+ */
+
+
+ Timeline.prototype.append = function append() {
+ for (var _len2 = arguments.length, timeline = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ timeline[_key2] = arguments[_key2];
+ }
+
+ for (var _iterator = timeline, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var tm = _ref;
+
+ if (_h2.default.isArray(tm)) {
+ this._appendTimelineArray(tm);
+ } else {
+ this._appendTimeline(tm, this._timelines.length);
+ }
+ this._calcDimentions();
+ }
+ return this;
+ };
+ /*
+ API method to stop the Tween.
+ @public
+ @param {Number} Progress [0..1] to set when stopped.
+ @returns {Object} Self.
+ */
+
+
+ Timeline.prototype.stop = function stop(progress) {
+ _Tween.prototype.stop.call(this, progress);
+ this._stopChildren(progress);
+ return this;
+ };
+ /*
+ Method to reset tween's state and properties.
+ @public
+ @overrides @ Tween
+ @returns this.
+ */
+
+
+ Timeline.prototype.reset = function reset() {
+ _Tween.prototype.reset.call(this);
+ this._resetChildren();
+ return this;
+ };
+ /*
+ Method to call `reset` method on all children.
+ @private
+ */
+
+
+ Timeline.prototype._resetChildren = function _resetChildren() {
+ for (var i = 0; i < this._timelines.length; i++) {
+ this._timelines[i].reset();
+ }
+ };
+ /*
+ Method to call `stop` method on all children.
+ @private
+ @param {Number} Progress [0..1] to set when stopped.
+ */
+
+
+ Timeline.prototype._stopChildren = function _stopChildren(progress) {
+ for (var i = this._timelines.length - 1; i >= 0; i--) {
+ this._timelines[i].stop(progress);
+ }
+ };
+ /*
+ Method to set tween's state to complete.
+ @private
+ @overrides @ Tween
+ @param {Number} Current time.
+ @param {Boolean} Is yoyo period.
+ */
+ // _complete ( time, isYoyo ) {
+ // // this._updateChildren( 1, time, isYoyo );
+ // // this._setProgress( 1, time, isYoyo );
+ // super._complete( time, isYoyo );
+ // // this._resetChildren();
+ // }
+
+ // ^ PUBLIC METHOD(S) ^
+ // v PRIVATE METHOD(S) v
+
+ /*
+ Method to append Tween/Timeline array or mix of such.
+ @private
+ @param {Array} Array of Tweens/Timelines.
+ */
+
+
+ Timeline.prototype._appendTimelineArray = function _appendTimelineArray(timelineArray) {
+ var i = timelineArray.length,
+ time = this._props.repeatTime - this._props.delay,
+ len = this._timelines.length;
+
+ while (i--) {
+ this._appendTimeline(timelineArray[i], len, time);
+ }
+ };
+ /*
+ Method to append a single timeline to the Timeline.
+ @private
+ @param {Object} Tween/Timline to append.
+ @param {Number} Index of the append.
+ @param {Number} Shift time.
+ */
+
+
+ Timeline.prototype._appendTimeline = function _appendTimeline(timeline, index, time) {
+ // if timeline is a module with timeline property then extract it
+ if (timeline.timeline instanceof Timeline) {
+ timeline = timeline.timeline;
+ }
+ if (timeline.tween instanceof _tween2.default) {
+ timeline = timeline.tween;
+ }
+
+ var shift = time != null ? time : this._props.duration;
+ shift += timeline._props.shiftTime || 0;
+ timeline.index = index;this._pushTimeline(timeline, shift);
+ };
+ /*
+ PrivateMethod to push Tween/Timeline array.
+ @private
+ @param {Array} Array of Tweens/Timelines.
+ */
+
+
+ Timeline.prototype._pushTimelineArray = function _pushTimelineArray(array) {
+ for (var i = 0; i < array.length; i++) {
+ var tm = array[i];
+ // recursive push to handle arrays of arrays
+ if (_h2.default.isArray(tm)) {
+ this._pushTimelineArray(tm);
+ } else {
+ this._pushTimeline(tm);
+ }
+ };
+ };
+ /*
+ Method to push a single Tween/Timeline.
+ @private
+ @param {Object} Tween or Timeline to push.
+ @param {Number} Number of milliseconds to shift the start time
+ of the Tween/Timeline.
+ */
+
+
+ Timeline.prototype._pushTimeline = function _pushTimeline(timeline, shift) {
+ // if timeline is a module with timeline property then extract it
+ if (timeline.timeline instanceof Timeline) {
+ timeline = timeline.timeline;
+ }
+ if (timeline.tween instanceof _tween2.default) {
+ timeline = timeline.tween;
+ }
+ // add self delay to the timeline
+ shift != null && timeline._setProp({ 'shiftTime': shift });
+ this._timelines.push(timeline);
+ this._recalcDuration(timeline);
+ };
+ /*
+ Method set progress on self and child Tweens/Timelines.
+ @private
+ @param {Number} Progress to set.
+ @param {Number} Current update time.
+ */
+
+
+ Timeline.prototype._setProgress = function _setProgress(p, time, isYoyo) {
+ // we need to pass self previous time to children
+ // to prevent initial _wasUnknownUpdate nested waterfall
+ // if not yoyo option set, pass the previous time
+ // otherwise, pass previous or next time regarding yoyo period.
+
+ // COVER CURRENT SWAPPED ORDER
+ this._updateChildren(p, time, isYoyo);
+
+ _tween2.default.prototype._setProgress.call(this, p, time);
+ };
+
+ Timeline.prototype._updateChildren = function _updateChildren(p, time, isYoyo) {
+ var coef = time > this._prevTime ? -1 : 1;
+ if (this._props.isYoyo && isYoyo) {
+ coef *= -1;
+ }
+ var timeToTimelines = this._props.startTime + p * this._props.duration,
+ prevTimeToTimelines = timeToTimelines + coef,
+ len = this._timelines.length;
+
+ for (var i = 0; i < len; i++) {
+ // specify the children's array update loop direction
+ // if time > prevTime go from 0->length else from length->0
+ // var j = ( time > this._prevTime ) ? i : (len-1) - i ;
+ var j = timeToTimelines > prevTimeToTimelines ? i : len - 1 - i;
+ this._timelines[j]._update(timeToTimelines, prevTimeToTimelines, this._prevYoyo, this._onEdge);
+ }
+ this._prevYoyo = isYoyo;
+ };
+ /*
+ Method calculate self duration based on timeline's duration.
+ @private
+ @param {Object} Tween or Timeline to calculate.
+ */
+
+
+ Timeline.prototype._recalcDuration = function _recalcDuration(timeline) {
+ var p = timeline._props,
+ timelineTime = p.repeatTime / p.speed + (p.shiftTime || 0) + timeline._negativeShift;
+
+ this._props.duration = Math.max(timelineTime, this._props.duration);
+ };
+ /*
+ Method calculate self duration from skretch.
+ @private
+ */
+
+
+ Timeline.prototype._recalcTotalDuration = function _recalcTotalDuration() {
+ var i = this._timelines.length;
+ this._props.duration = 0;
+ while (i--) {
+ var tm = this._timelines[i];
+ // recalc total duration on child timelines
+ tm._recalcTotalDuration && tm._recalcTotalDuration();
+ // add the timeline's duration to selft duration
+ this._recalcDuration(tm);
+ }
+ this._calcDimentions();
+ };
+ /*
+ Method set start and end times.
+ @private
+ @param {Number, Null} Time to start with.
+ */
+
+
+ Timeline.prototype._setStartTime = function _setStartTime(time) {
+ var isReset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+ _Tween.prototype._setStartTime.call(this, time);
+ this._startTimelines(this._props.startTime, isReset);
+ };
+ /*
+ Method calculate self duration based on timeline's duration.
+ @private
+ @param {Number, Null} Time to start with.
+ */
+
+
+ Timeline.prototype._startTimelines = function _startTimelines(time) {
+ var isReset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+ var p = this._props,
+ isStop = this._state === 'stop';
+
+ time == null && (time = this._props.startTime);
+
+ for (var i = 0; i < this._timelines.length; i++) {
+ var tm = this._timelines[i];
+ tm._setStartTime(time, isReset);
+ // if from `_subPlay` and `_prevTime` is set and state is `stop`
+ // prevTime normalizing is for play/pause functionality, so no
+ // need to normalize if the timeline is in `stop` state.
+ if (!isReset && tm._prevTime != null && !isStop) {
+ tm._prevTime = tm._normPrevTimeForward();
+ }
+ }
+ };
+ /*
+ Method to launch onRefresh callback.
+ @method _refresh
+ @private
+ @overrides @ Tween
+ @param {Boolean} If refresh even before start time.
+ */
+
+
+ Timeline.prototype._refresh = function _refresh(isBefore) {
+ var len = this._timelines.length;
+ for (var i = 0; i < len; i++) {
+ this._timelines[i]._refresh(isBefore);
+ }
+ _Tween.prototype._refresh.call(this, isBefore);
+ };
+ /*
+ Method do declare defaults by this._defaults object
+ @private
+ */
+
+
+ Timeline.prototype._declareDefaults = function _declareDefaults() {
+ // if duration was passed on initialization stage, warn user and reset it.
+ if (this._o.duration != null) {
+ _h2.default.error('Duration can not be declared on Timeline, but "' + this._o.duration + '" is. You probably want to use Tween instead.');
+ this._o.duration = 0;
+ }
+ _Tween.prototype._declareDefaults.call(this);
+ // remove default
+ this._defaults.duration = 0;
+ this._defaults.easing = 'Linear.None';
+ this._defaults.backwardEasing = 'Linear.None';
+ this._defaults.nameBase = 'Timeline';
+ };
+
+ function Timeline() {
+ var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+ (0, _classCallCheck3.default)(this, Timeline);
+ return (0, _possibleConstructorReturn3.default)(this, _Tween.call(this, o));
+ }
+ /*
+ Method to declare some vars.
+ @private
+ */
+
+
+ Timeline.prototype._vars = function _vars() {
+ this._timelines = [];
+ _Tween.prototype._vars.call(this);
+ };
+
+ return Timeline;
+ }(_tween2.default);
+
+ exports.default = Timeline;
+
+/***/ }),
+/* 111 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ module.exports = { "default": __webpack_require__(112), __esModule: true };
+
+/***/ }),
+/* 112 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ __webpack_require__(50);
+ __webpack_require__(6);
+ module.exports = __webpack_require__(113);
+
+/***/ }),
+/* 113 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var anObject = __webpack_require__(19)
+ , get = __webpack_require__(114);
+ module.exports = __webpack_require__(14).getIterator = function(it){
+ var iterFn = get(it);
+ if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!');
+ return anObject(iterFn.call(it));
+ };
+
+/***/ }),
+/* 114 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var classof = __webpack_require__(115)
+ , ITERATOR = __webpack_require__(47)('iterator')
+ , Iterators = __webpack_require__(29);
+ module.exports = __webpack_require__(14).getIteratorMethod = function(it){
+ if(it != undefined)return it[ITERATOR]
+ || it['@@iterator']
+ || Iterators[classof(it)];
+ };
+
+/***/ }),
+/* 115 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // getting tag from 19.1.3.6 Object.prototype.toString()
+ var cof = __webpack_require__(37)
+ , TAG = __webpack_require__(47)('toStringTag')
+ // ES3 wrong here
+ , ARG = cof(function(){ return arguments; }()) == 'Arguments';
+
+ // fallback for IE11 Script Access Denied error
+ var tryGet = function(it, key){
+ try {
+ return it[key];
+ } catch(e){ /* empty */ }
+ };
+
+ module.exports = function(it){
+ var O, T, B;
+ return it === undefined ? 'Undefined' : it === null ? 'Null'
+ // @@toStringTag case
+ : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
+ // builtinTag case
+ : ARG ? cof(O)
+ // ES3 arguments fallback
+ : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
+ };
+
+/***/ }),
+/* 116 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _keys = __webpack_require__(95);
+
+ var _keys2 = _interopRequireDefault(_keys);
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _possibleConstructorReturn2 = __webpack_require__(75);
+
+ var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+ var _inherits2 = __webpack_require__(76);
+
+ var _inherits3 = _interopRequireDefault(_inherits2);
+
+ var _h = __webpack_require__(71);
+
+ var _h2 = _interopRequireDefault(_h);
+
+ var _thenable = __webpack_require__(99);
+
+ var _thenable2 = _interopRequireDefault(_thenable);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ var Tuneable = function (_Thenable) {
+ (0, _inherits3.default)(Tuneable, _Thenable);
+
+ function Tuneable() {
+ (0, _classCallCheck3.default)(this, Tuneable);
+ return (0, _possibleConstructorReturn3.default)(this, _Thenable.apply(this, arguments));
+ }
+
+ /*
+ Method to start the animation with optional new options.
+ @public
+ @param {Object} New options to set on the run.
+ @returns {Object} this.
+ */
+ Tuneable.prototype.tune = function tune(o) {
+ // if options object was passed
+ if (o && (0, _keys2.default)(o).length) {
+ this._transformHistory(o);
+ this._tuneNewOptions(o);
+ // restore array prop values because _props
+ // contain them as parsed arrays
+ // but we need the as strings to store in history
+ // and merge in history chains
+ this._history[0] = _h2.default.cloneObj(this._props);
+ for (var key in this._arrayPropertyMap) {
+ if (o[key] != null) {
+ this._history[0][key] = this._preparsePropValue(key, o[key]);
+ }
+ }
+
+ this._tuneSubModules();
+ this._resetTweens();
+ }
+ return this;
+ };
+ /*
+ Method to regenerate all the random properties form initial object.
+ @public
+ @returns this.
+ */
+
+
+ Tuneable.prototype.generate = function generate() {
+ return this.tune(this._o);
+ };
+
+ // ^ PUBLIC METHOD(S) ^
+ // v PRIVATE METHOD(S) v
+
+ /*
+ Method to preparse options in object.
+ @private
+ @param {Object} Object to preparse properties on.
+ @returns {Object} Passed object with preparsed props.
+ */
+ // _preParseOptions ( o ) {
+ // for (var key in o) {
+ // o[key] = this._preparsePropValue( key, o[key] );
+ // }
+ // return o;
+ // }
+ /*
+ Method to transform history rewrite new options object chain on run.
+ @private
+ @param {Object} New options to tune for.
+ */
+
+
+ Tuneable.prototype._transformHistory = function _transformHistory(o) {
+ for (var key in o) {
+ var value = o[key];
+ // don't transform for childOptions
+ // if ( key === 'childOptions' ) { continue; }
+ this._transformHistoryFor(key, this._preparsePropValue(key, value));
+ }
+ };
+ /*
+ Method to transform history chain for specific key/value.
+ @param {String} Name of the property to transform history for.
+ @param {Any} The new property's value.
+ */
+
+
+ Tuneable.prototype._transformHistoryFor = function _transformHistoryFor(key, value) {
+ for (var i = 0; i < this._history.length; i++) {
+ if (value = this._transformHistoryRecord(i, key, value)) {
+ // break if no further history modifications needed
+ if (value == null) {
+ break;
+ }
+ }
+ }
+ };
+ /*
+ Method to transform history recod with key/value.
+ @param {Number} Index of the history record to transform.
+ @param {String} Property name to transform.
+ @param {Any} Property value to transform to.
+ @param {Object} Optional the current history record.
+ @param {Object} Optional the next history record.
+ @returns {Boolean} Returns true if no further
+ history modifications is needed.
+ */
+
+
+ Tuneable.prototype._transformHistoryRecord = function _transformHistoryRecord(index, key, newVal, currRecord, nextRecord) {
+ // newVal = this._parseProperty( key, newVal );
+ if (newVal == null) {
+ return null;
+ }
+
+ // fallback to history records, if wasn't specified
+ currRecord = currRecord == null ? this._history[index] : currRecord;
+ nextRecord = nextRecord == null ? this._history[index + 1] : nextRecord;
+
+ var oldVal = currRecord[key],
+ nextVal = nextRecord == null ? null : nextRecord[key];
+
+ // if index is 0 - always save the newVal
+ // and return non-delta for subsequent modifications
+ if (index === 0) {
+ currRecord[key] = newVal;
+ // always return on tween properties
+ if (_h2.default.isTweenProp(key) && key !== 'duration') {
+ return null;
+ }
+ // nontween properties
+ var isRewriteNext = this._isRewriteNext(oldVal, nextVal),
+ returnVal = this._isDelta(newVal) ? _h2.default.getDeltaEnd(newVal) : newVal;
+ return isRewriteNext ? returnVal : null;
+ } else {
+ // if was delta and came none-deltta - rewrite
+ // the start of the delta and stop
+ if (this._isDelta(oldVal)) {
+ var _currRecord$key;
+
+ currRecord[key] = (_currRecord$key = {}, _currRecord$key[newVal] = _h2.default.getDeltaEnd(oldVal), _currRecord$key);
+ return null;
+ } else {
+ // if the old value is not delta and the new one is
+ currRecord[key] = newVal;
+ // if the next item has the same value - return the
+ // item for subsequent modifications or stop
+ return this._isRewriteNext(oldVal, nextVal) ? newVal : null;
+ }
+ }
+ };
+ /*
+ Method to check if the next item should
+ be rewrited in transform history operation.
+ @private
+ @param {Any} Current value.
+ @param {Any} Next value.
+ @returns {Boolean} If need to rewrite the next value.
+ */
+
+
+ Tuneable.prototype._isRewriteNext = function _isRewriteNext(currVal, nextVal) {
+ // return false if nothing to rewrite next
+ if (nextVal == null && currVal != null) {
+ return false;
+ }
+
+ var isEqual = currVal === nextVal,
+ isNextDelta = this._isDelta(nextVal),
+ isDelta = this._isDelta(currVal),
+ isValueDeltaChain = false,
+ isDeltaChain = false;
+
+ if (isDelta && isNextDelta) {
+ if (_h2.default.getDeltaEnd(currVal) == _h2.default.getDeltaStart(nextVal)) {
+ isDeltaChain = true;
+ }
+ } else if (isNextDelta) {
+ isValueDeltaChain = _h2.default.getDeltaStart(nextVal) === '' + currVal;
+ }
+
+ return isEqual || isValueDeltaChain || isDeltaChain;
+ };
+ /*
+ Method to tune new history options to all the submodules.
+ @private
+ */
+
+
+ Tuneable.prototype._tuneSubModules = function _tuneSubModules() {
+ for (var i = 1; i < this._modules.length; i++) {
+ this._modules[i]._tuneNewOptions(this._history[i]);
+ }
+ };
+ /*
+ Method to set new options on run.
+ @param {Boolean} If foreign context.
+ @private
+ */
+
+
+ Tuneable.prototype._resetTweens = function _resetTweens() {
+ var i = 0,
+ shift = 0,
+ tweens = this.timeline._timelines;
+
+ // if `isTimelineLess` return
+ if (tweens == null) {
+ return;
+ }
+
+ for (var i = 0; i < tweens.length; i++) {
+ var tween = tweens[i],
+ prevTween = tweens[i - 1];
+
+ shift += prevTween ? prevTween._props.repeatTime : 0;
+ this._resetTween(tween, this._history[i], shift);
+ }
+ this.timeline._setProp(this._props.timeline);
+ this.timeline._recalcTotalDuration();
+ };
+ /*
+ Method to reset tween with new options.
+ @param {Object} Tween to reset.
+ @param {Object} Tween's to reset tween with.
+ @param {Number} Optional number to shift tween start time.
+ */
+
+
+ Tuneable.prototype._resetTween = function _resetTween(tween, o) {
+ var shift = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+
+ o.shiftTime = shift;tween._setProp(o);
+ };
+
+ return Tuneable;
+ }(_thenable2.default);
+
+ exports.default = Tuneable;
+
+/***/ }),
+/* 117 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _possibleConstructorReturn2 = __webpack_require__(75);
+
+ var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+ var _inherits2 = __webpack_require__(76);
+
+ var _inherits3 = _interopRequireDefault(_inherits2);
+
+ var _shape = __webpack_require__(94);
+
+ var _shape2 = _interopRequireDefault(_shape);
+
+ var _h = __webpack_require__(71);
+
+ var _h2 = _interopRequireDefault(_h);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ /*
+ *TODO:*
+ ---
+ - tweak then chains
+ */
+
+ var ShapeSwirl = function (_Shape) {
+ (0, _inherits3.default)(ShapeSwirl, _Shape);
+
+ function ShapeSwirl() {
+ (0, _classCallCheck3.default)(this, ShapeSwirl);
+ return (0, _possibleConstructorReturn3.default)(this, _Shape.apply(this, arguments));
+ }
+
+ /*
+ Method to declare _defaults and other default objects.
+ @private
+ @override @ Shape
+ */
+ ShapeSwirl.prototype._declareDefaults = function _declareDefaults() {
+ _Shape.prototype._declareDefaults.call(this);
+
+ /* _DEFAULTS ARE - Shape DEFAULTS + THESE: */
+
+ /* [boolean] :: If shape should follow sinusoidal path. */
+ this._defaults.isSwirl = true;
+ /* ∆ :: [number > 0] :: Degree size of the sinusoidal path. */
+ this._defaults.swirlSize = 10;
+ /* ∆ :: [number > 0] :: Frequency of the sinusoidal path. */
+ this._defaults.swirlFrequency = 3;
+ /* ∆ :: [number > 0] :: Sinusoidal path length scale. */
+ this._defaults.pathScale = 1;
+ /* ∆ :: [number] :: Degree shift for the sinusoidal path. */
+ this._defaults.degreeShift = 0;
+ /* ∆ :: [number] :: Radius of the shape. */
+ this._defaults.radius = 5;
+ // ∆ :: Units :: Possible values: [ number, string ]
+ this._defaults.x = 0;
+ // ∆ :: Units :: Possible values: [ number, string ]
+ this._defaults.y = 0;
+ // ∆ :: Possible values: [ number ]
+ this._defaults.scale = { 1: 0 };
+ /* [number: -1, 1] :: Directon of Swirl. */
+ this._defaults.direction = 1;
+ };
+
+ // ^ PUBLIC METHOD(S) ^
+ // v PRIVATE METHOD(S) v
+
+ /*
+ Method to copy _o options to _props with
+ fallback to _defaults.
+ @private
+ @override @ Module
+ */
+
+
+ ShapeSwirl.prototype._extendDefaults = function _extendDefaults() {
+ _Shape.prototype._extendDefaults.call(this);
+ this._calcPosData();
+ };
+ /*
+ Method to tune new oprions to _o and _props object.
+ @private
+ @overrides @ Module
+ @param {Object} Options object to tune to.
+ */
+
+
+ ShapeSwirl.prototype._tuneNewOptions = function _tuneNewOptions(o) {
+ if (o == null) {
+ return;
+ }
+
+ _Shape.prototype._tuneNewOptions.call(this, o);
+ if (o.x != null || o.y != null) {
+ this._calcPosData();
+ }
+ };
+ /*
+ Method to calculate Swirl's position data.
+ @private
+ */
+
+
+ ShapeSwirl.prototype._calcPosData = function _calcPosData() {
+ var x = this._getPosValue('x'),
+ y = this._getPosValue('y'),
+ angle = 90 + Math.atan(y.delta / x.delta || 0) * _h2.default.RAD_TO_DEG;
+
+ this._posData = {
+ radius: Math.sqrt(x.delta * x.delta + y.delta * y.delta),
+ angle: x.delta < 0 ? angle + 180 : angle,
+ x: x, y: y
+ };
+ // set the last position to _props
+ // this._calcSwirlXY( 1 );
+ };
+ /*
+ Gets `x` or `y` position value.
+ @private
+ @param {String} Name of the property.
+ */
+
+
+ ShapeSwirl.prototype._getPosValue = function _getPosValue(name) {
+ var delta = this._deltas[name];
+ if (delta) {
+ // delete from deltas to prevent normal
+ delete this._deltas[name];
+ return {
+ start: delta.start.value,
+ end: delta.end.value,
+ delta: delta.delta,
+ units: delta.end.unit
+ };
+ } else {
+ var pos = _h2.default.parseUnit(this._props[name]);
+ return { start: pos.value, end: pos.value, delta: 0, units: pos.unit };
+ }
+ };
+ /*
+ Method to calculate the progress of the Swirl.
+ @private
+ @overrides @ Shape
+ @param {Numer} Eased progress of the Swirl in range of [0..1]
+ @param {Numer} Progress of the Swirl in range of [0..1]
+ */
+
+
+ ShapeSwirl.prototype._setProgress = function _setProgress(easedProgress, progress) {
+ this._progress = easedProgress;
+ this._calcCurrentProps(easedProgress, progress);
+ this._calcSwirlXY(easedProgress);
+ // this._calcOrigin();
+ this._draw(easedProgress);
+ };
+ /*
+ Method to calculate x/y for Swirl's progress
+ @private
+ @mutates _props
+ @param {Number} Current progress in [0...1]
+ */
+
+
+ ShapeSwirl.prototype._calcSwirlXY = function _calcSwirlXY(proc) {
+ var p = this._props,
+ angle = this._posData.angle + p.degreeShift,
+ point = _h2.default.getRadialPoint({
+ angle: p.isSwirl ? angle + this._getSwirl(proc) : angle,
+ radius: proc * this._posData.radius * p.pathScale,
+ center: {
+ x: this._posData.x.start,
+ y: this._posData.y.start
+ }
+ });
+ // if foreign svg canvas - set position without units
+ var x = point.x,
+ y = point.y,
+ smallNumber = 0.000001;
+
+ // remove very small numbers to prevent exponential forms
+ if (x > 0 && x < smallNumber) {
+ x = smallNumber;
+ }
+ if (y > 0 && y < smallNumber) {
+ y = smallNumber;
+ }
+ if (x < 0 && x > -smallNumber) {
+ x = -smallNumber;
+ }
+ if (y < 0 && y > -smallNumber) {
+ y = -smallNumber;
+ }
+
+ p.x = this._o.ctx ? x : '' + x + this._posData.x.units;
+ p.y = this._o.ctx ? y : '' + y + this._posData.y.units;
+ };
+ /*
+ Method to get progress of the swirl.
+ @private
+ @param {Number} Progress of the Swirl.
+ @returns {Number} Progress of the swirl.
+ */
+
+
+ ShapeSwirl.prototype._getSwirl = function _getSwirl(proc) {
+ var p = this._props;
+ return p.direction * p.swirlSize * Math.sin(p.swirlFrequency * proc);
+ };
+ /*
+ Method to draw shape.
+ If !isWithShape - draw self el only, but not shape.
+ @private
+ @overrides @ Shape.
+ */
+
+
+ ShapeSwirl.prototype._draw = function _draw() {
+ // call _draw or just _drawEl @ Shape depending if there is `shape`
+ var methodName = this._props.isWithShape ? '_draw' : '_drawEl';
+ _shape2.default.prototype[methodName].call(this);
+ };
+
+ return ShapeSwirl;
+ }(_shape2.default);
+
+ exports.default = ShapeSwirl;
+
+/***/ }),
+/* 118 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _keys = __webpack_require__(95);
+
+ var _keys2 = _interopRequireDefault(_keys);
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _possibleConstructorReturn2 = __webpack_require__(75);
+
+ var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+ var _inherits2 = __webpack_require__(76);
+
+ var _inherits3 = _interopRequireDefault(_inherits2);
+
+ var _timeline = __webpack_require__(110);
+
+ var _timeline2 = _interopRequireDefault(_timeline);
+
+ var _shapeSwirl = __webpack_require__(117);
+
+ var _shapeSwirl2 = _interopRequireDefault(_shapeSwirl);
+
+ var _tunable = __webpack_require__(116);
+
+ var _tunable2 = _interopRequireDefault(_tunable);
+
+ var _h = __webpack_require__(71);
+
+ var _h2 = _interopRequireDefault(_h);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ // import Shape from './shape';
+ var Burst = function (_Tunable) {
+ (0, _inherits3.default)(Burst, _Tunable);
+
+ function Burst() {
+ (0, _classCallCheck3.default)(this, Burst);
+ return (0, _possibleConstructorReturn3.default)(this, _Tunable.apply(this, arguments));
+ }
+
+ /*
+ Method to declare defaults.
+ @override @ ShapeSwirl.
+ */
+ Burst.prototype._declareDefaults = function _declareDefaults() {
+ this._defaults = {
+ /* [number > 0] :: Quantity of Burst particles. */
+ count: 5,
+ /* [0 < number < 360] :: Degree of the Burst. */
+ degree: 360,
+ /* ∆ :: [number > 0] :: Radius of the Burst. */
+ radius: { 0: 50 },
+ /* ∆ :: [number > 0] :: X radius of the Burst. */
+ radiusX: null,
+ /* ∆ :: [number > 0] :: Y radius of the Burst. */
+ radiusY: null,
+ /* [number >= 0] :: width of the main swirl. */
+ width: 0,
+ /* [number >= 0] :: height of the main swirl. */
+ height: 0
+ };
+ };
+ /*
+ Method to create a then record for the module.
+ @public
+ overrides @ Thenable
+ @param {Object} Options for the next animation.
+ @returns {Object} this.
+ */
+
+
+ Burst.prototype.then = function then(o) {
+ // remove tween properties (not callbacks)
+ this._removeTweenProperties(o);
+
+ var newMaster = this._masterThen(o),
+ newSwirls = this._childThen(o);
+
+ this._setSwirlDuration(newMaster, this._calcPackTime(newSwirls));
+
+ this.timeline._recalcTotalDuration();
+ return this;
+ };
+ /*
+ Method to start the animation with optional new options.
+ @public
+ @param {Object} New options to set on the run.
+ @returns {Object} this.
+ */
+
+
+ Burst.prototype.tune = function tune(o) {
+ if (o == null) {
+ return this;
+ }
+ // save timeline options to _timelineOptions
+ // and delete the timeline options on o
+ // cuz masterSwirl should not get them
+ this._saveTimelineOptions(o);
+
+ // add new timeline properties to timeline
+ this.timeline._setProp(this._timelineOptions);
+
+ // remove tween options (not callbacks)
+ this._removeTweenProperties(o);
+
+ // tune _props
+ this._tuneNewOptions(o);
+
+ // tune master swirl
+ this.masterSwirl.tune(o);
+
+ // tune child swirls
+ this._tuneSwirls(o);
+
+ // recalc time for modules
+ this._recalcModulesTime();
+ return this;
+ };
+
+ // ^ PUBLIC METHODS ^
+ // v PRIVATE METHODS v
+
+ /*
+ Method to copy `_o` options to `_props` object
+ with fallback to `_defaults`.
+ @private
+ @overrides @ Module
+ */
+
+
+ Burst.prototype._extendDefaults = function _extendDefaults() {
+ // remove tween properties (not callbacks)
+ this._removeTweenProperties(this._o);
+ _Tunable.prototype._extendDefaults.call(this);
+ };
+ /*
+ Method to remove all tween (excluding
+ callbacks) props from object.
+ @private
+ @param {Object} Object which should be cleaned
+ up from tween properties.
+ */
+
+
+ Burst.prototype._removeTweenProperties = function _removeTweenProperties(o) {
+ for (var key in _h2.default.tweenOptionMap) {
+ // remove all items that are not declared in _defaults
+ if (this._defaults[key] == null) {
+ delete o[key];
+ }
+ }
+ };
+ /*
+ Method to recalc modules chain tween
+ times after tuning new options.
+ @private
+ */
+
+
+ Burst.prototype._recalcModulesTime = function _recalcModulesTime() {
+ var modules = this.masterSwirl._modules,
+ swirls = this._swirls,
+ shiftTime = 0;
+
+ for (var i = 0; i < modules.length; i++) {
+ var tween = modules[i].tween,
+ packTime = this._calcPackTime(swirls[i]);
+ tween._setProp({ 'duration': packTime, 'shiftTime': shiftTime });
+ shiftTime += packTime;
+ }
+
+ this.timeline._recalcTotalDuration();
+ };
+ /*
+ Method to tune Swirls with new options.
+ @private
+ @param {Object} New options.
+ */
+
+
+ Burst.prototype._tuneSwirls = function _tuneSwirls(o) {
+ // get swirls in first pack
+ var pack0 = this._swirls[0];
+ for (var i = 0; i < pack0.length; i++) {
+ var swirl = pack0[i],
+ option = this._getChildOption(o || {}, i);
+
+ // since the `degreeShift` participate in
+ // children position calculations, we need to keep
+ // the old `degreeShift` value if new not set
+ var isDegreeShift = option.degreeShift != null;
+ if (!isDegreeShift) {
+ option.degreeShift = this._swirls[0][i]._props.degreeShift;
+ }
+
+ this._addBurstProperties(option, i);
+
+ // after burst position calculation - delete the old `degreeShift`
+ // from the options, since anyways we have copied it from the swirl
+ if (!isDegreeShift) {
+ delete option.degreeShift;
+ }
+
+ swirl.tune(option);
+ this._refreshBurstOptions(swirl._modules, i);
+ }
+ };
+ /*
+ Method to refresh burst x/y/angle options on further chained
+ swirls, because they will be overriden after `tune` call on
+ very first swirl.
+ @param {Array} Chained modules array
+ param {Number} Index of the first swirl in the chain.
+ */
+
+
+ Burst.prototype._refreshBurstOptions = function _refreshBurstOptions(modules, i) {
+ for (var j = 1; j < modules.length; j++) {
+ var module = modules[j],
+ options = {};
+ this._addBurstProperties(options, i, j);
+ module._tuneNewOptions(options);
+ }
+ };
+ /*
+ Method to call then on masterSwirl.
+ @param {Object} Then options.
+ @returns {Object} New master swirl.
+ */
+
+
+ Burst.prototype._masterThen = function _masterThen(o) {
+ this.masterSwirl.then(o);
+ // get the latest master swirl in then chain
+ var newMasterSwirl = _h2.default.getLastItem(this.masterSwirl._modules);
+ // save to masterSwirls
+ this._masterSwirls.push(newMasterSwirl);
+ return newMasterSwirl;
+ };
+ /*
+ Method to call then on child swilrs.
+ @param {Object} Then options.
+ @return {Array} Array of new Swirls.
+ */
+
+
+ Burst.prototype._childThen = function _childThen(o) {
+ var pack = this._swirls[0],
+ newPack = [];
+
+ for (var i = 0; i < pack.length; i++) {
+ // get option by modulus
+ var options = this._getChildOption(o, i);
+ var swirl = pack[i];
+ var lastSwirl = _h2.default.getLastItem(swirl._modules);
+ // add new Master Swirl as parent of new childswirl
+ options.parent = this.el;
+
+ this._addBurstProperties(options, i, this._masterSwirls.length - 1);
+
+ swirl.then(options);
+
+ // save the new item in `then` chain
+ newPack.push(_h2.default.getLastItem(swirl._modules));
+ }
+ // save the pack to _swirls object
+ this._swirls[this._masterSwirls.length - 1] = newPack;
+ return newPack;
+ };
+ /*
+ Method to initialize properties.
+ @private
+ @overrides @ Thenable
+ */
+
+
+ Burst.prototype._vars = function _vars() {
+ _Tunable.prototype._vars.call(this);
+ // just buffer timeline for calculations
+ this._bufferTimeline = new _timeline2.default();
+ };
+ /*
+ Method for initial render of the module.
+ */
+
+
+ Burst.prototype._render = function _render() {
+ this._o.isWithShape = false;
+ this._o.isSwirl = this._props.isSwirl;
+ this._o.callbacksContext = this;
+ // save timeline options and remove from _o
+ // cuz the master swirl should not get them
+ this._saveTimelineOptions(this._o);
+
+ this.masterSwirl = new MainSwirl(this._o);
+ this._masterSwirls = [this.masterSwirl];
+ this.el = this.masterSwirl.el;
+
+ this._renderSwirls();
+ };
+ /*
+ Method for initial render of swirls.
+ @private
+ */
+
+
+ Burst.prototype._renderSwirls = function _renderSwirls() {
+ var p = this._props,
+ pack = [];
+
+ for (var i = 0; i < p.count; i++) {
+ var option = this._getChildOption(this._o, i);
+ pack.push(new ChildSwirl(this._addOptionalProps(option, i)));
+ }
+ this._swirls = { 0: pack };
+ this._setSwirlDuration(this.masterSwirl, this._calcPackTime(pack));
+ };
+ /*
+ Method to save timeline options to _timelineOptions
+ and delete the property on the object.
+ @private
+ @param {Object} The object to save the timeline options from.
+ */
+
+
+ Burst.prototype._saveTimelineOptions = function _saveTimelineOptions(o) {
+ this._timelineOptions = o.timeline;
+ delete o.timeline;
+ };
+ /*
+ Method to calculate total time of array of
+ concurrent tweens.
+ @param {Array} Pack to calculate the total time for.
+ @returns {Number} Total pack duration.
+ */
+
+
+ Burst.prototype._calcPackTime = function _calcPackTime(pack) {
+ var maxTime = 0;
+ for (var i = 0; i < pack.length; i++) {
+ var tween = pack[i].tween,
+ p = tween._props;
+
+ maxTime = Math.max(p.repeatTime / p.speed, maxTime);
+ }
+
+ return maxTime;
+ };
+ /*
+ Method to set duration for Swirl.
+ @param {Object} Swirl instance to set the duration to.
+ @param {Number} Duration to set.
+ */
+
+
+ Burst.prototype._setSwirlDuration = function _setSwirlDuration(swirl, duration) {
+ swirl.tween._setProp('duration', duration);
+ var isRecalc = swirl.timeline && swirl.timeline._recalcTotalDuration;
+ isRecalc && swirl.timeline._recalcTotalDuration();
+ };
+ /*
+ Method to get childOption form object call by modulus.
+ @private
+ @param {Object} Object to look in.
+ @param {Number} Index of the current Swirl.
+ @returns {Object} Options for the current swirl.
+ */
+
+
+ Burst.prototype._getChildOption = function _getChildOption(obj, i) {
+ var options = {};
+ for (var key in obj.children) {
+ options[key] = this._getPropByMod(key, i, obj.children);
+ }
+ return options;
+ };
+ /*
+ Method to get property by modulus.
+ @private
+ @param {String} Name of the property.
+ @param {Number} Index for the modulus.
+ @param {Object} Source object to check in.
+ @returns {Any} Property.
+ */
+
+
+ Burst.prototype._getPropByMod = function _getPropByMod(name, index) {
+ var sourceObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+
+ var prop = sourceObj[name];
+ return _h2.default.isArray(prop) ? prop[index % prop.length] : prop;
+ };
+ /*
+ Method to add optional Swirls' properties to passed object.
+ @private
+ @param {Object} Object to add the properties to.
+ @param {Number} Index of the property.
+ */
+
+
+ Burst.prototype._addOptionalProps = function _addOptionalProps(options, index) {
+ options.index = index;
+ options.parent = this.masterSwirl.el;
+
+ this._addBurstProperties(options, index);
+
+ return options;
+ };
+ /*
+ Method to add Burst options to object.
+ @private
+ @param {Object} Options to add the properties to.
+ @param {Number} Index of the Swirl.
+ @param {Number} Index of the main swirl.
+ */
+
+
+ Burst.prototype._addBurstProperties = function _addBurstProperties(options, index, i) {
+ // save index of the module
+ var mainIndex = this._index;
+ // temporary change the index to parse index based properties like stagger
+ this._index = index;
+ // parse degree shift for the bit
+ var degreeShift = this._parseProperty('degreeShift', options.degreeShift || 0);
+ // put the index of the module back
+ this._index = mainIndex;
+
+ var p = this._props,
+ degreeCnt = p.degree % 360 === 0 ? p.count : p.count - 1 || 1,
+ step = p.degree / degreeCnt,
+ pointStart = this._getSidePoint('start', index * step + degreeShift, i),
+ pointEnd = this._getSidePoint('end', index * step + degreeShift, i);
+
+ options.x = this._getDeltaFromPoints('x', pointStart, pointEnd);
+ options.y = this._getDeltaFromPoints('y', pointStart, pointEnd);
+
+ options.angle = this._getBitAngle(options.angle || 0, degreeShift, index);
+ };
+ /*
+ Method to get shapes angle in burst so
+ it will follow circular shape.
+
+ @param {Number, Object} Base angle.
+ @param {Number} Angle shift for the bit
+ @param {Number} Shape's index in burst.
+ @returns {Number} Angle in burst.
+ */
+
+
+ Burst.prototype._getBitAngle = function _getBitAngle() {
+ var angleProperty = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+ var angleShift = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+ var i = arguments[2];
+
+ var p = this._props,
+ degCnt = p.degree % 360 === 0 ? p.count : p.count - 1 || 1,
+ step = p.degree / degCnt,
+ angle = i * step + 90;
+
+ angle += angleShift;
+ // if not delta option
+ if (!this._isDelta(angleProperty)) {
+ angleProperty += angle;
+ } else {
+ var delta = {},
+ keys = (0, _keys2.default)(angleProperty),
+ start = keys[0],
+ end = angleProperty[start];
+
+ start = _h2.default.parseStringOption(start, i);
+ end = _h2.default.parseStringOption(end, i);
+ // new start = newEnd
+ delta[parseFloat(start) + angle] = parseFloat(end) + angle;
+
+ angleProperty = delta;
+ }
+ return angleProperty;
+ };
+ /*
+ Method to get radial point on `start` or `end`.
+ @private
+ @param {String} Name of the side - [start, end].
+ @param {Number} Angle of the radial point.
+ @param {Number} Index of the main swirl.
+ @returns radial point.
+ */
+
+
+ Burst.prototype._getSidePoint = function _getSidePoint(side, angle, i) {
+ var p = this._props,
+ sideRadius = this._getSideRadius(side, i);
+
+ return _h2.default.getRadialPoint({
+ radius: sideRadius.radius,
+ radiusX: sideRadius.radiusX,
+ radiusY: sideRadius.radiusY,
+ angle: angle,
+ // center: { x: p.center, y: p.center }
+ center: { x: 0, y: 0 }
+ });
+ };
+ /*
+ Method to get radius of the side.
+ @private
+ @param {String} Name of the side - [start, end].
+ @param {Number} Index of the main swirl.
+ @returns {Object} Radius.
+ */
+
+
+ Burst.prototype._getSideRadius = function _getSideRadius(side, i) {
+ return {
+ radius: this._getRadiusByKey('radius', side, i),
+ radiusX: this._getRadiusByKey('radiusX', side, i),
+ radiusY: this._getRadiusByKey('radiusY', side, i)
+ };
+ };
+ /*
+ Method to get radius from ∆ or plain property.
+ @private
+ @param {String} Key name.
+ @param {String} Side name - [start, end].
+ @param {Number} Index of the main swirl.
+ @returns {Number} Radius value.
+ */
+
+
+ Burst.prototype._getRadiusByKey = function _getRadiusByKey(key, side) {
+ var i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+
+ var swirl = this._masterSwirls[i],
+ deltas = swirl._deltas,
+ props = swirl._props;
+
+ if (deltas[key] != null) {
+ return deltas[key][side];
+ } else if (props[key] != null) {
+ return props[key];
+ }
+ };
+ /*
+ Method to get delta from start and end position points.
+ @private
+ @param {String} Key name.
+ @param {Object} Start position point.
+ @param {Object} End position point.
+ @returns {Object} Delta of the end/start.
+ */
+
+
+ Burst.prototype._getDeltaFromPoints = function _getDeltaFromPoints(key, pointStart, pointEnd) {
+ var delta = {};
+ if (pointStart[key] === pointEnd[key]) {
+ delta = pointStart[key];
+ } else {
+ delta[pointStart[key]] = pointEnd[key];
+ }
+ return delta;
+ };
+ /*
+ Method to create timeline.
+ @private
+ @override @ Tweenable
+ */
+
+
+ Burst.prototype._makeTimeline = function _makeTimeline() {
+ // restore timeline options that were deleted in _render method
+ this._o.timeline = this._timelineOptions;
+ _Tunable.prototype._makeTimeline.call(this);
+ this.timeline.add(this.masterSwirl, this._swirls[0]);
+ };
+ /*
+ Method to make Tween for the module.
+ @private
+ @override @ Tweenable
+ */
+
+
+ Burst.prototype._makeTween = function _makeTween() {} /* don't create any tween */
+ /*
+ Override `_hide` and `_show` methods on module
+ since we don't have to hide nor show on the module.
+ */
+ ;
+
+ Burst.prototype._hide = function _hide() {/* do nothing */};
+
+ Burst.prototype._show = function _show() {/* do nothing */};
+
+ return Burst;
+ }(_tunable2.default);
+
+ var ChildSwirl = function (_ShapeSwirl) {
+ (0, _inherits3.default)(ChildSwirl, _ShapeSwirl);
+
+ function ChildSwirl() {
+ (0, _classCallCheck3.default)(this, ChildSwirl);
+ return (0, _possibleConstructorReturn3.default)(this, _ShapeSwirl.apply(this, arguments));
+ }
+
+ ChildSwirl.prototype._declareDefaults = function _declareDefaults() {
+ _ShapeSwirl.prototype._declareDefaults.call(this);
+ this._defaults.isSwirl = false;
+ this._o.duration = this._o.duration != null ? this._o.duration : 700;
+ };
+ // disable degreeshift calculations
+
+
+ ChildSwirl.prototype._calcSwirlXY = function _calcSwirlXY(proc) {
+ var degreeShift = this._props.degreeShift;
+
+ this._props.degreeShift = 0;
+ _ShapeSwirl.prototype._calcSwirlXY.call(this, proc);
+ this._props.degreeShift = degreeShift;
+ };
+
+ return ChildSwirl;
+ }(_shapeSwirl2.default);
+
+ var MainSwirl = function (_ChildSwirl) {
+ (0, _inherits3.default)(MainSwirl, _ChildSwirl);
+
+ function MainSwirl() {
+ (0, _classCallCheck3.default)(this, MainSwirl);
+ return (0, _possibleConstructorReturn3.default)(this, _ChildSwirl.apply(this, arguments));
+ }
+
+ MainSwirl.prototype._declareDefaults = function _declareDefaults() {
+ _ChildSwirl.prototype._declareDefaults.call(this);
+ this._defaults.scale = 1;
+ this._defaults.width = 0;
+ this._defaults.height = 0;
+ this._defaults.radius = { 25: 75 };
+ // this._defaults.duration = 2000;
+ };
+
+ return MainSwirl;
+ }(ChildSwirl);
+
+ Burst.ChildSwirl = ChildSwirl;
+ Burst.MainSwirl = MainSwirl;
+
+ exports.default = Burst;
+
+/***/ }),
+/* 119 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _extends4 = __webpack_require__(120);
+
+ var _extends5 = _interopRequireDefault(_extends4);
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _possibleConstructorReturn2 = __webpack_require__(75);
+
+ var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+ var _inherits2 = __webpack_require__(76);
+
+ var _inherits3 = _interopRequireDefault(_inherits2);
+
+ var _keys = __webpack_require__(95);
+
+ var _keys2 = _interopRequireDefault(_keys);
+
+ var _thenable = __webpack_require__(99);
+
+ var _thenable2 = _interopRequireDefault(_thenable);
+
+ var _tween = __webpack_require__(101);
+
+ var _tween2 = _interopRequireDefault(_tween);
+
+ var _deltas = __webpack_require__(125);
+
+ var _deltas2 = _interopRequireDefault(_deltas);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ var h = __webpack_require__(71);
+
+
+ // get tween properties
+ var obj = {};
+ _tween2.default.prototype._declareDefaults.call(obj);
+ var keys = (0, _keys2.default)(obj._defaults);
+ for (var i = 0; i < keys.length; i++) {
+ obj._defaults[keys[i]] = 1;
+ }
+ obj._defaults['timeline'] = 1;
+ var TWEEN_PROPERTIES = obj._defaults;
+
+ /*
+ TODO:
+
+ - change _props to _propsObj for animations
+ - current values in deltas
+ */
+
+ var Html = function (_Thenable) {
+ (0, _inherits3.default)(Html, _Thenable);
+
+ function Html() {
+ (0, _classCallCheck3.default)(this, Html);
+ return (0, _possibleConstructorReturn3.default)(this, _Thenable.apply(this, arguments));
+ }
+
+ Html.prototype._declareDefaults = function _declareDefaults() {
+ this._defaults = {
+ x: 0,
+ y: 0,
+ z: 0,
+
+ skewX: 0,
+ skewY: 0,
+
+ // angle: 0,
+ angleX: 0,
+ angleY: 0,
+ angleZ: 0,
+
+ scale: 1,
+ scaleX: 1,
+ scaleY: 1,
+
+ isSoftHide: true,
+ isShowStart: true,
+ isShowEnd: true,
+ isForce3d: false,
+ isRefreshState: true
+
+ };
+ // exclude from automatic drawing
+ this._drawExclude = { el: 1 };
+ // properties that cause 3d layer
+ this._3dProperties = ['angleX', 'angleY', 'z'];
+ // properties that have array values
+ this._arrayPropertyMap = { transformOrigin: 1, backgroundPosition: 1 };
+ // properties that have no units
+ this._numberPropertyMap = {
+ opacity: 1, scale: 1, scaleX: 1, scaleY: 1,
+ // angle: 1,
+ angleX: 1, angleY: 1, angleZ: 1,
+ skewX: 1, skewY: 1
+ };
+ // properties that should be prefixed
+ this._prefixPropertyMap = { transform: 1, transformOrigin: 1 };
+ // save prefix
+ this._prefix = h.prefix.css;
+ };
+
+ Html.prototype.then = function then(o) {
+ // return if nothing was passed
+ if (o == null || !(0, _keys2.default)(o).length) {
+ return 1;
+ }
+
+ // get the last item in `then` chain
+ var prevModule = h.getLastItem(this._modules);
+ // set deltas to the finish state
+ prevModule.deltas.refresh(false);
+ // copy finish state to the last history record
+ this._history[this._history.length - 1] = prevModule._o;
+ // call super
+ _Thenable.prototype.then.call(this, o);
+ // restore the _props
+ prevModule.deltas.restore();
+
+ return this;
+ };
+ /*
+ Method to pipe startValue of the delta.
+ @private
+ @ovarrides @ Thenable
+ @param {String} Start property name.
+ @param {Any} Start property value.
+ @returns {Any} Start property value.
+ */
+
+
+ Html.prototype._checkStartValue = function _checkStartValue(key, value) {
+ if (value == null) {
+ // return default value for transforms
+ if (this._defaults[key] != null) {
+ return this._defaults[key];
+ }
+ // return default value from _customProps
+ if (this._customProps[key] != null) {
+ return this._customProps[key];
+ }
+ // try to get the default value
+ if (h.defaultStyles[key] != null) {
+ return h.defaultStyles[key];
+ }
+ // at the end return 0
+ return 0;
+ }
+
+ return value;
+ };
+ /*
+ Method to draw _props to el.
+ @private
+ */
+
+
+ Html.prototype._draw = function _draw() {
+ var p = this._props;
+ for (var i = 0; i < this._drawProps.length; i++) {
+ var name = this._drawProps[i];
+ this._setStyle(name, p[name]);
+ }
+ // draw transforms
+ this._drawTransform();
+ // call custom transform callback if exist
+ this._customDraw && this._customDraw(this._props.el, this._props);
+ };
+ /*
+ Method to set transform on element.
+ @private
+ */
+
+
+ Html.prototype._drawTransform = function _drawTransform() {
+ var p = this._props;
+ var string = !this._is3d ? 'translate(' + p.x + ', ' + p.y + ')\n rotate(' + p.angleZ + 'deg)\n skew(' + p.skewX + 'deg, ' + p.skewY + 'deg)\n scale(' + p.scaleX + ', ' + p.scaleY + ')' : 'translate3d(' + p.x + ', ' + p.y + ', ' + p.z + ')\n rotateX(' + p.angleX + 'deg)\n rotateY(' + p.angleY + 'deg)\n rotateZ(' + p.angleZ + 'deg)\n skew(' + p.skewX + 'deg, ' + p.skewY + 'deg)\n scale(' + p.scaleX + ', ' + p.scaleY + ')';
+
+ this._setStyle('transform', string);
+ };
+ /*
+ Method to render on initialization.
+ @private
+ @overrides @ Module
+ */
+
+
+ Html.prototype._render = function _render() {
+ // return immediately if not the first in `then` chain
+ if (this._o.prevChainModule) {
+ return;
+ }
+
+ var p = this._props;
+
+ for (var i = 0; i < this._renderProps.length; i++) {
+ var name = this._renderProps[i],
+ value = p[name];
+
+ value = typeof value === 'number' ? value + 'px' : value;
+ this._setStyle(name, value);
+ }
+
+ this._draw();
+
+ if (!p.isShowStart) {
+ this._hide();
+ }
+ };
+ /*
+ Method to set style on el.
+ @private
+ @param {String} Style property name.
+ @param {String} Style property value.
+ */
+
+
+ Html.prototype._setStyle = function _setStyle(name, value) {
+ if (this._state[name] !== value) {
+ var style = this._props.el.style;
+ // set style
+ style[name] = value;
+ // if prefix needed - set it
+ if (this._prefixPropertyMap[name]) {
+ style['' + this._prefix + name] = value;
+ }
+ // cache the last set value
+ this._state[name] = value;
+ }
+ };
+ /*
+ Method to copy `_o` options to `_props` object.
+ @private
+ */
+
+
+ Html.prototype._extendDefaults = function _extendDefaults() {
+ this._props = this._o.props || {};
+ // props for intial render only
+ this._renderProps = [];
+ // props for draw on every frame update
+ this._drawProps = [];
+ // save custom properties if present
+ this._saveCustomProperties(this._o);
+ // copy the options
+ var o = (0, _extends5.default)({}, this._o);
+ // extend options with defaults
+ o = this._addDefaults(o);
+
+ var keys = (0, _keys2.default)(o);
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
+ // include the property if it is not in drawExclude object
+ // and not in defaults = not a transform
+ var isInclude = !this._drawExclude[key] && // not in exclude map
+ this._defaults[key] == null && // not transform property
+ !TWEEN_PROPERTIES[key]; // not tween property
+
+ var isCustom = this._customProps[key];
+ // copy all non-delta properties to the props
+ // if not delta then add the property to render
+ // list that is called on initialization
+ // otherwise add it to the draw list that will
+ // be drawed on each frame
+ if (!h.isDelta(o[key]) && !TWEEN_PROPERTIES[key]) {
+ this._parseOption(key, o[key]);
+ if (key === 'el') {
+ this._props.el = h.parseEl(o.el);
+ this.el = this._props.el;
+ }
+ if (isInclude && !isCustom) {
+ this._renderProps.push(key);
+ }
+ // copy delta prop but not transforms
+ // otherwise push it to draw list that gets traversed on every draw
+ } else if (isInclude && !isCustom) {
+ this._drawProps.push(key);
+ }
+ }
+
+ this._createDeltas(o);
+ };
+ /*
+ Method to save customProperties to _customProps.
+ @param {Object} Options of the module.
+ */
+
+
+ Html.prototype._saveCustomProperties = function _saveCustomProperties() {
+ var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ this._customProps = o.customProperties || {};
+ this._customProps = (0, _extends5.default)({}, this._customProps);
+ this._customDraw = this._customProps.draw;
+ delete this._customProps.draw;
+ delete o.customProperties;
+
+ this._copyDefaultCustomProps();
+
+ // if ( this._customProps ) {}
+ // this._customProps = this._customProps || {};
+ };
+
+ Html.prototype._copyDefaultCustomProps = function _copyDefaultCustomProps() {
+ for (var key in this._customProps) {
+ if (this._o[key] == null) {
+ this._o[key] = this._customProps[key];
+ }
+ }
+ };
+ /*
+ Method to reset some flags on merged options object.
+ @private
+ @overrides @ Thenable
+ @param {Object} Options object.
+ @returns {Object} Options object.
+ */
+
+
+ Html.prototype._resetMergedFlags = function _resetMergedFlags(o) {
+ _Thenable.prototype._resetMergedFlags.call(this, o);
+ o.props = this._props;
+ o.customProperties = this._customProps;
+ return o;
+ };
+ /*
+ Method to parse option value.
+ @private
+ @param {String} Option name.
+ @param {Any} Option value.
+ */
+
+
+ Html.prototype._parseOption = function _parseOption(key, value) {
+ _Thenable.prototype._parseOption.call(this, key, value);
+ // at this point the property is parsed
+ var parsed = this._props[key];
+ // cast it to string if it is array
+ if (h.isArray(parsed)) {
+ this._props[key] = this._arrToString(parsed);
+ }
+ };
+ /*
+ Method cast array to string value.
+ @private
+ @param {Array} Array of parsed numbers with units.
+ @returns {String} Casted array.
+ */
+
+
+ Html.prototype._arrToString = function _arrToString(arr) {
+ var string = '';
+ for (var i = 0; i < arr.length; i++) {
+ string += arr[i].string + ' ';
+ }
+ return string;
+ };
+ /*
+ Method to add defauls to passed object.
+ @private
+ @param {Object} Object to add defaults to.
+ */
+
+
+ Html.prototype._addDefaults = function _addDefaults(obj) {
+ // flag that after all defaults are set will indicate
+ // if user have set the 3d transform
+ this._is3d = false;
+
+ for (var key in this._defaults) {
+ // skip property if it is listed in _skipProps
+ // if (this._skipProps && this._skipProps[key]) { continue; }
+
+ // copy the properties to the _o object
+ // if it's null - set the default value
+ if (obj[key] == null) {
+ // scaleX and scaleY should fallback to scale
+ if (key === 'scaleX' || key === 'scaleY') {
+ obj[key] = obj['scale'] != null ? obj['scale'] : this._defaults['scale'];
+ } else {
+ obj[key] = this._defaults[key];
+ }
+ } else {
+ // get if 3d property was set.
+ if (this._3dProperties.indexOf(key) !== -1) {
+ this._is3d = true;
+ }
+ }
+ }
+
+ if (this._o.isForce3d) {
+ this._is3d = true;
+ }
+
+ return obj;
+ };
+ /*
+ Lifecycle method to declare variables.
+ @private
+ */
+
+
+ Html.prototype._vars = function _vars() {
+ // set deltas to the last value, so the _props with
+ // end values will be copied to the _history, it is
+ // crucial for `then` chaining
+ this.deltas.refresh(false);
+ // call super vars
+ _Thenable.prototype._vars.call(this);
+ // state of set properties
+ this._state = {};
+ // restore delta values that we have refreshed before
+ this.deltas.restore(false);
+ };
+ /*
+ Method to create deltas from passed object.
+ @private
+ @param {Object} Options object to pass to the Deltas.
+ */
+
+
+ Html.prototype._createDeltas = function _createDeltas(options) {
+ this.deltas = new _deltas2.default({
+ options: options,
+ props: this._props,
+ arrayPropertyMap: this._arrayPropertyMap,
+ numberPropertyMap: this._numberPropertyMap,
+ customProps: this._customProps,
+ callbacksContext: options.callbacksContext || this,
+ isChained: !!this._o.prevChainModule
+ });
+
+ // if chained module set timeline to deltas' timeline
+ if (this._o.prevChainModule) {
+ this.timeline = this.deltas.timeline;
+ }
+ };
+ /* @overrides @ Tweenable */
+
+
+ Html.prototype._makeTween = function _makeTween() {};
+
+ Html.prototype._makeTimeline = function _makeTimeline() {
+ // do not create timeline if module if chained
+ if (this._o.prevChainModule) {
+ return;
+ }
+ // add callbacks overrides
+ this._o.timeline = this._o.timeline || {};
+ this._addCallbackOverrides(this._o.timeline);
+ _Thenable.prototype._makeTimeline.call(this);
+ this.timeline.add(this.deltas);
+ };
+ /*
+ Method to add callback overrides to passed object object.
+ @param {Object} Object to add overrides on.
+ */
+
+
+ Html.prototype._addCallbackOverrides = function _addCallbackOverrides(o) {
+ var it = this;
+ var p = this._props;
+ o.callbackOverrides = {
+ onUpdate: this._draw,
+ onRefresh: this._props.isRefreshState ? this._draw : void 0,
+ onStart: function onStart(isFwd) {
+ // don't touch main `el` onStart in chained elements
+ if (it._isChained) {
+ return;
+ };
+ // show if was hidden at start
+ if (isFwd && !p.isShowStart) {
+ it._show();
+ }
+ // hide if should be hidden at start
+ else {
+ if (!p.isShowStart) {
+ it._hide();
+ }
+ }
+ },
+ onComplete: function onComplete(isFwd) {
+ // don't touch main `el` if not the last in `then` chain
+ if (it._isChained) {
+ return;
+ }
+ if (isFwd) {
+ if (!p.isShowEnd) {
+ it._hide();
+ }
+ } else if (!p.isShowEnd) {
+ it._show();
+ }
+ }
+ };
+ };
+
+ /*
+ Method that gets called on `soft` show of the module,
+ it should restore transform styles of the module.
+ @private
+ @overrides @ Module
+ */
+
+
+ Html.prototype._showByTransform = function _showByTransform() {
+ this._drawTransform();
+ };
+
+ /*
+ Method to merge `start` and `end` for a property in then record.
+ @private
+ @param {String} Property name.
+ @param {Any} Start value of the property.
+ @param {Any} End value of the property.
+ */
+ // !! COVER !!
+
+
+ Html.prototype._mergeThenProperty = function _mergeThenProperty(key, startValue, endValue) {
+ // if isnt tween property
+ var isBoolean = typeof endValue === 'boolean',
+ curve,
+ easing;
+
+ if (!h.isTweenProp(key) && !this._nonMergeProps[key] && !isBoolean) {
+
+ var TWEEN_PROPS = {};
+ if (h.isObject(endValue) && endValue.to != null) {
+ for (var _key in endValue) {
+ if (TWEEN_PROPERTIES[_key] || _key === 'curve') {
+ TWEEN_PROPS[_key] = endValue[_key];
+ delete endValue[_key];
+ }
+ }
+ // curve = endValue.curve;
+ // easing = endValue.easing;
+ endValue = endValue.to;
+ }
+
+ // if end value is delta - just save it
+ if (this._isDelta(endValue)) {
+
+ var _TWEEN_PROPS = {};
+ for (var _key2 in endValue) {
+ if (TWEEN_PROPERTIES[_key2] || _key2 === 'curve') {
+ _TWEEN_PROPS[_key2] = endValue[_key2];
+ delete endValue[_key2];
+ }
+ }
+ var result = this._parseDeltaValues(key, endValue);
+
+ return (0, _extends5.default)({}, result, _TWEEN_PROPS);
+ } else {
+ var parsedEndValue = this._parsePreArrayProperty(key, endValue);
+ // if end value is not delta - merge with start value
+ if (this._isDelta(startValue)) {
+ var _extends2;
+
+ // if start value is delta - take the end value
+ // as start value of the new delta
+ return (0, _extends5.default)((_extends2 = {}, _extends2[h.getDeltaEnd(startValue)] = parsedEndValue, _extends2), TWEEN_PROPS);
+ // if both start and end value are not ∆ - make ∆
+ } else {
+ var _extends3;
+
+ return (0, _extends5.default)((_extends3 = {}, _extends3[startValue] = parsedEndValue, _extends3), TWEEN_PROPS);
+ }
+ }
+ // copy the tween values unattended
+ } else {
+ return endValue;
+ }
+ };
+
+ return Html;
+ }(_thenable2.default);
+
+ exports.default = Html;
+
+/***/ }),
+/* 120 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ "use strict";
+
+ exports.__esModule = true;
+
+ var _assign = __webpack_require__(121);
+
+ var _assign2 = _interopRequireDefault(_assign);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ exports.default = _assign2.default || function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+ };
+
+/***/ }),
+/* 121 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ module.exports = { "default": __webpack_require__(122), __esModule: true };
+
+/***/ }),
+/* 122 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ __webpack_require__(123);
+ module.exports = __webpack_require__(14).Object.assign;
+
+/***/ }),
+/* 123 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ // 19.1.3.1 Object.assign(target, source)
+ var $export = __webpack_require__(12);
+
+ $export($export.S + $export.F, 'Object', {assign: __webpack_require__(124)});
+
+/***/ }),
+/* 124 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+ // 19.1.2.1 Object.assign(target, source, ...)
+ var getKeys = __webpack_require__(33)
+ , gOPS = __webpack_require__(62)
+ , pIE = __webpack_require__(63)
+ , toObject = __webpack_require__(49)
+ , IObject = __webpack_require__(36)
+ , $assign = Object.assign;
+
+ // should work with symbols and should have deterministic property order (V8 bug)
+ module.exports = !$assign || __webpack_require__(23)(function(){
+ var A = {}
+ , B = {}
+ , S = Symbol()
+ , K = 'abcdefghijklmnopqrst';
+ A[S] = 7;
+ K.split('').forEach(function(k){ B[k] = k; });
+ return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
+ }) ? function assign(target, source){ // eslint-disable-line no-unused-vars
+ var T = toObject(target)
+ , aLen = arguments.length
+ , index = 1
+ , getSymbols = gOPS.f
+ , isEnum = pIE.f;
+ while(aLen > index){
+ var S = IObject(arguments[index++])
+ , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
+ , length = keys.length
+ , j = 0
+ , key;
+ while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
+ } return T;
+ } : $assign;
+
+/***/ }),
+/* 125 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _extends2 = __webpack_require__(120);
+
+ var _extends3 = _interopRequireDefault(_extends2);
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _keys = __webpack_require__(95);
+
+ var _keys2 = _interopRequireDefault(_keys);
+
+ var _timeline = __webpack_require__(110);
+
+ var _timeline2 = _interopRequireDefault(_timeline);
+
+ var _tween = __webpack_require__(101);
+
+ var _tween2 = _interopRequireDefault(_tween);
+
+ var _delta = __webpack_require__(126);
+
+ var _delta2 = _interopRequireDefault(_delta);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ /*
+ This module's target is to parse options object,
+ find deltas in it and send them to `Delta` classes.
+ The `Delta` class is dull - they expect actual parsed deltas
+ and separated tween options, so we should parse them here.
+ The timeline of the module controls the `Delta` modules' tweens.
+
+ @param {Object} props Object to set deltas result to (pass to the Delta classes).
+ @param {Object} options Object to parse the deltas from.
+ @param {Function} onUpdate onUpdate callback.
+ @param optional {Object} arrayPropertyMap List of properties with truthy
+ values which describe properties
+ that should be parsed as arrays.
+ @param optional {Object} numberPropertyMap List of properties with truthy
+ values which describe properties
+ that should be parsed as numbers
+ without units.
+ */
+
+ // TODO:
+ // - colors with curves change alpha level too
+ // const html = new mojs.Html({
+ // el: '#js-el',
+ // x: { 0: 100 },
+ // onUpdate () {
+ // console.log(this._props.originX);
+ // },
+ // originX: { 'white': 'black', curve: 'M0,100 L100, 0' },
+ // customProperties: {
+ // originX: {
+ // type: 'color',
+ // default: 'cyan'
+ // },
+ // draw() { console.log('draw'); }
+ // }
+ // });
+
+
+ var easing = __webpack_require__(105);
+ var h = __webpack_require__(71);
+
+
+ // get tween properties
+ var obj = {};
+ _tween2.default.prototype._declareDefaults.call(obj);
+ var keys = (0, _keys2.default)(obj._defaults);
+ for (var i = 0; i < keys.length; i++) {
+ obj._defaults[keys[i]] = 1;
+ }
+ obj._defaults['timeline'] = 1;
+ var TWEEN_PROPERTIES = obj._defaults;
+
+ var Deltas = function () {
+ function Deltas() {
+ var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+ (0, _classCallCheck3.default)(this, Deltas);
+
+ this._o = o;
+
+ this._shortColors = {
+ transparent: 'rgba(0,0,0,0)',
+ none: 'rgba(0,0,0,0)',
+ aqua: 'rgb(0,255,255)',
+ black: 'rgb(0,0,0)',
+ blue: 'rgb(0,0,255)',
+ fuchsia: 'rgb(255,0,255)',
+ gray: 'rgb(128,128,128)',
+ green: 'rgb(0,128,0)',
+ lime: 'rgb(0,255,0)',
+ maroon: 'rgb(128,0,0)',
+ navy: 'rgb(0,0,128)',
+ olive: 'rgb(128,128,0)',
+ purple: 'rgb(128,0,128)',
+ red: 'rgb(255,0,0)',
+ silver: 'rgb(192,192,192)',
+ teal: 'rgb(0,128,128)',
+ white: 'rgb(255,255,255)',
+ yellow: 'rgb(255,255,0)',
+ orange: 'rgb(255,128,0)'
+ };
+
+ this._ignoreDeltasMap = { prevChainModule: 1, masterModule: 1 };
+
+ this._parseDeltas(o.options);
+ this._createDeltas();
+ this._createTimeline(this._mainTweenOptions);
+ }
+ /*
+ Method to call `refresh` on all child `delta` objects.
+ @public
+ @param {Boolean} If before start time (true) or after end time (false).
+ */
+
+
+ Deltas.prototype.refresh = function refresh(isBefore) {
+ for (var i = 0; i < this._deltas.length; i++) {
+ this._deltas[i].refresh(isBefore);
+ }
+ return this;
+ };
+ /*
+ Method to call `restore` on all child `delta` objects.
+ @public
+ */
+
+
+ Deltas.prototype.restore = function restore() {
+ for (var i = 0; i < this._deltas.length; i++) {
+ this._deltas[i].restore();
+ }
+ return this;
+ };
+ /*
+ Method to create Timeline.
+ @private
+ @param {Object} Timeline options.
+ */
+
+
+ Deltas.prototype._createTimeline = function _createTimeline() {
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ // const o = this._o;
+ // opts.timeline = opts.timeline || {};
+ // opts.timeline.callbackOverrides = {
+ // onUpdate: o.onUpdate,
+ // onRefresh: o.onUpdate
+ // }
+ // send callbacksContext to timeline if set
+ // o.callbacksContext && (opts.timeline.callbacksContext = o.callbacksContext);
+ // opts.timeline
+ this.timeline = new _timeline2.default();
+ this.timeline.add(this._deltas);
+ };
+ /*
+ Method to create Deltas from parsed options.
+ @private
+ */
+
+
+ Deltas.prototype._createDeltas = function _createDeltas() {
+ this._deltas = [];
+
+ // create main delta object
+ this._deltas.push(this._createDelta(this._mainDeltas, this._mainTweenOptions));
+
+ // create child delta object
+ for (var i = 0; i < this._childDeltas.length; i++) {
+ var delta = this._childDeltas[i];
+ this._deltas.push(this._createDelta([delta.delta], delta.tweenOptions));
+ }
+ };
+ /*
+ Method to create Delta object with passed options.
+ @private
+ @param {Array} Array of deltas.
+ @param {Object} Tween properties.
+ @returns {Object} Delta object
+ */
+
+
+ Deltas.prototype._createDelta = function _createDelta(deltas, tweenOptions) {
+ var o = this._o;
+ return new _delta2.default({
+ deltas: deltas, tweenOptions: tweenOptions,
+ props: o.props,
+ isChained: o.isChained,
+ callbacksContext: o.callbacksContext
+ });
+ };
+ /*
+ Method to parse delta objects from options.
+ @private
+ @param {Object} Options object to parse the deltas from.
+ */
+
+
+ Deltas.prototype._parseDeltas = function _parseDeltas(obj) {
+ // spilt main animation properties and main tween properties
+ var mainSplit = this._splitTweenOptions(obj);
+ // main animation properties
+ var opts = mainSplit.delta;
+ // main tween properties
+ this._mainTweenOptions = mainSplit.tweenOptions;
+
+ this._mainDeltas = [];
+ this._childDeltas = [];
+ var keys = (0, _keys2.default)(opts);
+ // loop thru all properties without tween ones
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
+ // is property is delta - parse it
+ if (this._isDelta(opts[key]) && !this._ignoreDeltasMap[key]) {
+ var delta = this._splitAndParseDelta(key, opts[key]);
+ // if parsed object has no tween values - it's delta of the main object
+ if (!delta.tweenOptions) {
+ this._mainDeltas.push(delta.delta);
+ }
+ // otherwise it is distinct delta object
+ else {
+ this._childDeltas.push(delta);
+ }
+ }
+ }
+ };
+ /*
+ Method to split tween values and parse single delta record.
+ @private
+ @param {String} Property name.
+ @param {Object} Raw delta object.
+ @returns {Object} Split object.
+ @param {Object} tweenOptions Tween properties.
+ @param {Object} delta Parsed delta.
+ */
+
+
+ Deltas.prototype._splitAndParseDelta = function _splitAndParseDelta(name, object) {
+ var split = this._splitTweenOptions(object);
+ // parse delta in the object
+ split.delta = this._parseDelta(name, split.delta);
+ return split;
+ };
+ /*
+ Method to parse delta by delegating the variables to _parse*Delta methods.
+ @private
+ @param {String} Property name.
+ @param {Object} Raw delta object.
+ @param {Number} Module index.
+ */
+
+
+ Deltas.prototype._parseDelta = function _parseDelta(name, object, index) {
+ // if name is in _o.customProps - parse it regarding the type
+ return this._o.customProps && this._o.customProps[name] != null ? this._parseDeltaByCustom(name, object, index) : this._parseDeltaByGuess(name, object, index);
+ };
+ /**
+ Method to parse delta by taking the type from the customProps object.
+ @private
+ @param {String} Property name.
+ @param {Object} Raw delta object.
+ @param {Number} Module index.
+ */
+
+
+ Deltas.prototype._parseDeltaByCustom = function _parseDeltaByCustom(name, object, index) {
+ return this._parseNumberDelta(name, object, index);
+ // const customRecord = this._o.customProps[name];
+ // switch ( customRecord.type.toLowerCase() ) {
+ // case 'color': { return this._parseColorDelta( name, object ); }
+ // case 'array': { return this._parseArrayDelta( name, object ); }
+ // case 'number': { return this._parseNumberDelta( name, object, index ); }
+ // case 'unit': { return this._parseUnitDelta( name, object, index ); }
+ // }
+ };
+ /**
+ Method to parse delta by reasoning about it's value.
+ @private
+ @param {String} Property name.
+ @param {Object} Raw delta object.
+ @param {Number} Module index.
+ */
+
+
+ Deltas.prototype._parseDeltaByGuess = function _parseDeltaByGuess(name, object, index) {
+ var _preparseDelta2 = this._preparseDelta(object),
+ start = _preparseDelta2.start;
+
+ var o = this._o;
+
+ // color values
+ if (isNaN(parseFloat(start)) && !start.match(/rand\(/) && !start.match(/stagger\(/)) {
+ return this._parseColorDelta(name, object);
+ // array values
+ } else if (o.arrayPropertyMap && o.arrayPropertyMap[name]) {
+ return this._parseArrayDelta(name, object);
+ // unit or number values
+ } else {
+ return o.numberPropertyMap && o.numberPropertyMap[name] ?
+ // if the property is in the number property map - parse it like number
+ this._parseNumberDelta(name, object, index)
+ // otherwise - like number with units
+ : this._parseUnitDelta(name, object, index);
+ }
+ };
+ /*
+ Method to separate tween options from delta properties.
+ @param {Object} Object for separation.
+ @returns {Object} Object that contains 2 objects
+ - one delta options
+ - one tween options ( could be empty if no tween opts )
+ */
+
+
+ Deltas.prototype._splitTweenOptions = function _splitTweenOptions(delta) {
+ delta = (0, _extends3.default)({}, delta);
+
+ var keys = (0, _keys2.default)(delta),
+ tweenOptions = {};
+ var isTween = null;
+
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
+ if (TWEEN_PROPERTIES[key]) {
+ if (delta[key] != null) {
+ tweenOptions[key] = delta[key];
+ isTween = true;
+ }
+ delete delta[key];
+ }
+ }
+ return {
+ delta: delta,
+ tweenOptions: isTween ? tweenOptions : undefined
+ };
+ };
+ /*
+ Method to check if the property is delta property.
+ @private
+ @param {Any} Parameter value to check.
+ @returns {Boolean}
+ */
+
+
+ Deltas.prototype._isDelta = function _isDelta(optionsValue) {
+ var isObject = h.isObject(optionsValue);
+ isObject = isObject && !optionsValue.unit;
+ return !(!isObject || h.isArray(optionsValue) || h.isDOM(optionsValue));
+ };
+ /*
+ Method to parse color delta values.
+ @private
+ @param {String} Name of the property.
+ @param {Any} Property value.
+ @returns {Object} Parsed delta.
+ */
+
+
+ Deltas.prototype._parseColorDelta = function _parseColorDelta(key, value) {
+ if (key === 'strokeLinecap') {
+ h.warn('Sorry, stroke-linecap property is not animatable yet, using the start(#{start}) value instead', value);
+ return {};
+ }
+ var preParse = this._preparseDelta(value);
+
+ var startColorObj = this._makeColorObj(preParse.start),
+ endColorObj = this._makeColorObj(preParse.end);
+
+ var delta = {
+ type: 'color',
+ name: key,
+ start: startColorObj,
+ end: endColorObj,
+ curve: preParse.curve,
+ delta: {
+ r: endColorObj.r - startColorObj.r,
+ g: endColorObj.g - startColorObj.g,
+ b: endColorObj.b - startColorObj.b,
+ a: endColorObj.a - startColorObj.a
+ }
+ };
+ return delta;
+ };
+ /*
+ Method to parse array delta values.
+ @private
+ @param {String} Name of the property.
+ @param {Any} Property value.
+ @returns {Object} Parsed delta.
+ */
+
+
+ Deltas.prototype._parseArrayDelta = function _parseArrayDelta(key, value) {
+ var preParse = this._preparseDelta(value);
+
+ var startArr = this._strToArr(preParse.start),
+ endArr = this._strToArr(preParse.end);
+
+ h.normDashArrays(startArr, endArr);
+
+ for (var i = 0; i < startArr.length; i++) {
+ var end = endArr[i];
+ h.mergeUnits(startArr[i], end, key);
+ }
+
+ var delta = {
+ type: 'array',
+ name: key,
+ start: startArr,
+ end: endArr,
+ delta: h.calcArrDelta(startArr, endArr),
+ curve: preParse.curve
+ };
+
+ return delta;
+ };
+ /*
+ Method to parse numeric delta values with units.
+ @private
+ @param {String} Name of the property.
+ @param {Any} Property value.
+ @param {Number} Index of the module.
+ @returns {Object} Parsed delta.
+ */
+
+
+ Deltas.prototype._parseUnitDelta = function _parseUnitDelta(key, value, index) {
+ var preParse = this._preparseDelta(value);
+
+ var end = h.parseUnit(h.parseStringOption(preParse.end, index)),
+ start = h.parseUnit(h.parseStringOption(preParse.start, index));
+
+ h.mergeUnits(start, end, key);
+ var delta = {
+ type: 'unit',
+ name: key,
+ start: start,
+ end: end,
+ delta: end.value - start.value,
+ curve: preParse.curve
+ };
+ return delta;
+ };
+ /*
+ Method to parse numeric delta values without units.
+ @private
+ @param {String} Name of the property.
+ @param {Any} Property value.
+ @param {Number} Index of the module.
+ @returns {Object} Parsed delta.
+ */
+
+
+ Deltas.prototype._parseNumberDelta = function _parseNumberDelta(key, value, index) {
+ var preParse = this._preparseDelta(value);
+
+ var end = parseFloat(h.parseStringOption(preParse.end, index)),
+ start = parseFloat(h.parseStringOption(preParse.start, index));
+
+ var delta = {
+ type: 'number',
+ name: key,
+ start: start,
+ end: end,
+ delta: end - start,
+ curve: preParse.curve
+ };
+
+ return delta;
+ };
+ /*
+ Method to extract `curve` and `start`/`end` values.
+ @private
+ @param {Object} Delta object.
+ @returns {Object} Preparsed delta.
+ @property {String} Start value.
+ @property {String, Number} End value.
+ */
+
+
+ Deltas.prototype._preparseDelta = function _preparseDelta(value) {
+ // clone value object
+ value = (0, _extends3.default)({}, value);
+ // parse curve if exist
+ var curve = value.curve;
+ if (curve != null) {
+ curve = easing.parseEasing(curve);
+ curve._parent = this;
+ }
+ delete value.curve;
+ // parse start and end values
+ var start = (0, _keys2.default)(value)[0],
+ end = value[start];
+
+ return { start: start, end: end, curve: curve };
+ };
+ /*
+ Method to parse color into usable object.
+ @private
+ @param {String} Color string.
+ @returns {Object} Parsed color value.
+ */
+
+
+ Deltas.prototype._makeColorObj = function _makeColorObj(color) {
+ // HEX
+ var colorObj = {};
+ if (color[0] === '#') {
+ var result = /^#?([a-f\d]{1,2})([a-f\d]{1,2})([a-f\d]{1,2})$/i.exec(color);
+ if (result) {
+ var r = result[1].length === 2 ? result[1] : result[1] + result[1],
+ g = result[2].length === 2 ? result[2] : result[2] + result[2],
+ b = result[3].length === 2 ? result[3] : result[3] + result[3];
+
+ colorObj = {
+ r: parseInt(r, 16), g: parseInt(g, 16), b: parseInt(b, 16), a: 1
+ };
+ }
+ }
+
+ // not HEX
+ // shorthand color and rgb()
+ if (color[0] !== '#') {
+ var isRgb = color[0] === 'r' && color[1] === 'g' && color[2] === 'b';
+ var rgbColor = void 0;
+ // rgb color
+ if (isRgb) {
+ rgbColor = color;
+ };
+ // shorthand color name
+ if (!isRgb) {
+ if (!this._shortColors[color]) {
+ h.div.style.color = color;
+ rgbColor = h.computedStyle(h.div).color;
+ } else {
+ rgbColor = this._shortColors[color];
+ }
+ }
+
+ var regexString1 = '^rgba?\\((\\d{1,3}),\\s?(\\d{1,3}),',
+ regexString2 = '\\s?(\\d{1,3}),?\\s?(\\d{1}|0?\\.\\d{1,})?\\)$',
+ _result = new RegExp(regexString1 + regexString2, 'gi').exec(rgbColor),
+ alpha = parseFloat(_result[4] || 1);
+
+ if (_result) {
+ colorObj = {
+ r: parseInt(_result[1], 10),
+ g: parseInt(_result[2], 10),
+ b: parseInt(_result[3], 10),
+ a: alpha != null && !isNaN(alpha) ? alpha : 1
+ };
+ }
+ }
+
+ return colorObj;
+ };
+ /*
+ Method to parse string into array.
+ @private
+ @param {String, Number} String or number to parse.
+ @returns {Array} Parsed array.
+ */
+
+
+ Deltas.prototype._strToArr = function _strToArr(string) {
+ var arr = [];
+ // plain number
+ if (typeof string === 'number' && !isNaN(string)) {
+ arr.push(h.parseUnit(string));
+ return arr;
+ }
+ // string array
+ string.trim().split(/\s+/gim).forEach(function (str) {
+ arr.push(h.parseUnit(h.parseIfRand(str)));
+ });
+ return arr;
+ };
+
+ return Deltas;
+ }();
+
+ exports.default = Deltas;
+
+/***/ }),
+/* 126 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _tween = __webpack_require__(101);
+
+ var _tween2 = _interopRequireDefault(_tween);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ var h = __webpack_require__(71);
+
+ var Delta = function () {
+ function Delta() {
+ var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+ (0, _classCallCheck3.default)(this, Delta);
+
+ this._o = o;
+ this._createTween(o.tweenOptions);
+ // initial properties render
+ !this._o.isChained && this.refresh(true);
+ }
+ /*
+ Method to call `_refresh` method on `tween`.
+ Use switch between `0` and `1` progress for delta value.
+ @public
+ @param {Boolean} If refresh before start time or after.
+ @returns this.
+ */
+
+
+ Delta.prototype.refresh = function refresh(isBefore) {
+ this._previousValues = [];
+
+ var deltas = this._o.deltas;
+ for (var i = 0; i < deltas.length; i++) {
+ var name = deltas[i].name;
+ this._previousValues.push({
+ name: name, value: this._o.props[name]
+ });
+ }
+
+ this.tween._refresh(isBefore);
+ return this;
+ };
+ /*
+ Method to restore all saved properties from `_previousValues` array.
+ @public
+ @returns this.
+ */
+
+
+ Delta.prototype.restore = function restore() {
+ var prev = this._previousValues;
+ for (var i = 0; i < prev.length; i++) {
+ var record = prev[i];
+ this._o.props[record.name] = record.value;
+ }
+ return this;
+ };
+ /*
+ Method to create tween of the delta.
+ @private
+ @param {Object} Options object.
+ */
+
+
+ Delta.prototype._createTween = function _createTween() {
+ var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ var it = this;
+ o.callbackOverrides = {
+ onUpdate: function onUpdate(ep, p) {
+ it._calcCurrentProps(ep, p);
+ }
+ };
+
+ // if not chained - add the onRefresh callback
+ // to refresh the tween when needed
+ if (!this._o.isChained) {
+ o.callbackOverrides.onRefresh = function (isBefore, ep, p) {
+ it._calcCurrentProps(ep, p);
+ };
+ }
+
+ o.callbacksContext = this._o.callbacksContext;
+ this.tween = new _tween2.default(o);
+ };
+ /*
+ Method to calculate current progress of the deltas.
+ @private
+ @param {Number} Eased progress to calculate - [0..1].
+ @param {Number} Progress to calculate - [0..1].
+ */
+
+
+ Delta.prototype._calcCurrentProps = function _calcCurrentProps(easedProgress, p) {
+ var deltas = this._o.deltas;
+ for (var i = 0; i < deltas.length; i++) {
+ var type = deltas[i].type;
+ this['_calcCurrent_' + type](deltas[i], easedProgress, p);
+ }
+ };
+ /*
+ Method to calc the current color delta value.
+ @param {Object} Delta
+ @param {Number} Eased progress [0..1].
+ @param {Number} Plain progress [0..1].
+ */
+
+
+ Delta.prototype._calcCurrent_color = function _calcCurrent_color(delta, ep, p) {
+ var r,
+ g,
+ b,
+ a,
+ start = delta.start,
+ d = delta.delta;
+ if (!delta.curve) {
+ r = parseInt(start.r + ep * d.r, 10);
+ g = parseInt(start.g + ep * d.g, 10);
+ b = parseInt(start.b + ep * d.b, 10);
+ a = parseFloat(start.a + ep * d.a);
+ } else {
+ var cp = delta.curve(p);
+ r = parseInt(cp * (start.r + p * d.r), 10);
+ g = parseInt(cp * (start.g + p * d.g), 10);
+ b = parseInt(cp * (start.b + p * d.b), 10);
+ a = parseFloat(cp * (start.a + p * d.a));
+ }
+ this._o.props[delta.name] = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';
+ };
+ /*
+ Method to calc the current number delta value.
+ @param {Object} Delta
+ @param {Number} Eased progress [0..1].
+ @param {Number} Plain progress [0..1].
+ */
+
+
+ Delta.prototype._calcCurrent_number = function _calcCurrent_number(delta, ep, p) {
+ this._o.props[delta.name] = !delta.curve ? delta.start + ep * delta.delta : delta.curve(p) * (delta.start + p * delta.delta);
+ };
+ /*
+ Method to calc the current number with units delta value.
+ @param {Object} Delta
+ @param {Number} Eased progress [0..1].
+ @param {Number} Plain progress [0..1].
+ */
+
+
+ Delta.prototype._calcCurrent_unit = function _calcCurrent_unit(delta, ep, p) {
+ var currentValue = !delta.curve ? delta.start.value + ep * delta.delta : delta.curve(p) * (delta.start.value + p * delta.delta);
+
+ this._o.props[delta.name] = '' + currentValue + delta.end.unit;
+ };
+ /*
+ Method to calc the current array delta value.
+ @param {Object} Delta
+ @param {Number} Eased progress [0..1].
+ @param {Number} Plain progress [0..1].
+ */
+
+
+ Delta.prototype._calcCurrent_array = function _calcCurrent_array(delta, ep, p) {
+ // var arr,
+ var name = delta.name,
+ props = this._o.props,
+ string = '';
+
+ // to prevent GC bothering with arrays garbage
+ // if ( h.isArray( props[name] ) ) {
+ // arr = props[name];
+ // arr.length = 0;
+ // } else { arr = []; }
+
+ // just optimization to prevent curve
+ // calculations on every array item
+ var proc = delta.curve ? delta.curve(p) : null;
+
+ for (var i = 0; i < delta.delta.length; i++) {
+ var item = delta.delta[i],
+ dash = !delta.curve ? delta.start[i].value + ep * item.value : proc * (delta.start[i].value + p * item.value);
+
+ string += '' + dash + item.unit + ' ';
+ // arr.push({
+ // string: `${dash}${item.unit}`,
+ // value: dash,
+ // unit: item.unit,
+ // });
+ }
+ props[name] = string;
+ };
+
+ return Delta;
+ }();
+
+ exports.default = Delta;
+
+/***/ }),
+/* 127 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _keys = __webpack_require__(95);
+
+ var _keys2 = _interopRequireDefault(_keys);
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _possibleConstructorReturn2 = __webpack_require__(75);
+
+ var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+ var _inherits2 = __webpack_require__(76);
+
+ var _inherits3 = _interopRequireDefault(_inherits2);
+
+ var _h = __webpack_require__(71);
+
+ var _h2 = _interopRequireDefault(_h);
+
+ var _timeline = __webpack_require__(110);
+
+ var _timeline2 = _interopRequireDefault(_timeline);
+
+ var _tunable = __webpack_require__(116);
+
+ var _tunable2 = _interopRequireDefault(_tunable);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ var Stagger = function (_Tunable) {
+ (0, _inherits3.default)(Stagger, _Tunable);
+
+ function Stagger(options, Module) {
+ var _ret;
+
+ (0, _classCallCheck3.default)(this, Stagger);
+
+ var _this = (0, _possibleConstructorReturn3.default)(this, _Tunable.call(this));
+
+ return _ret = _this._init(options, Module), (0, _possibleConstructorReturn3.default)(_this, _ret);
+ }
+ /*
+ Method to create then chain on child modules.
+ @param {Object} Then options.
+ @return {Object} this.
+ */
+
+
+ Stagger.prototype.then = function then(o) {
+ if (o == null) {
+ return this;
+ }
+ for (var i = 0; i < this._modules.length; i++) {
+ // get child module's option and pass to the child `then`
+ this._modules[i].then(this._getOptionByIndex(i, o));
+ }
+ this.timeline._recalcTotalDuration();
+ return this;
+ };
+ /*
+ Method to tune child modules.
+ @param {Object} Tune options.
+ @return {Object} this.
+ */
+
+
+ Stagger.prototype.tune = function tune(o) {
+ if (o == null) {
+ return this;
+ }
+ for (var i = 0; i < this._modules.length; i++) {
+ // get child module's option and pass to the child `then`
+ this._modules[i].tune(this._getOptionByIndex(i, o));
+ }
+ this.timeline._recalcTotalDuration();
+ return this;
+ };
+ /*
+ Method to generate child modules.
+ @return {Object} this.
+ */
+
+
+ Stagger.prototype.generate = function generate() {
+ for (var i = 0; i < this._modules.length; i++) {
+ // get child module's option and pass to the child `then`
+ this._modules[i].generate();
+ }
+ this.timeline._recalcTotalDuration();
+ return this;
+ };
+ /*
+ Method to get an option by modulo and name.
+ @param {String} Name of the property to get.
+ @param {Number} Index for the modulo calculation.
+ @param {Object} Options hash to look in.
+ @return {Any} Property.
+ */
+
+
+ Stagger.prototype._getOptionByMod = function _getOptionByMod(name, i, store) {
+ var props = store[name];
+ // if not dom list then clone it to array
+ if (props + '' === '[object NodeList]' || props + '' === '[object HTMLCollection]') props = Array.prototype.slice.call(props, 0);
+ // get the value in array or return the value itself
+ var value = _h2.default.isArray(props) ? props[i % props.length] : props;
+ // check if value has the stagger expression, if so parse it
+ return _h2.default.parseIfStagger(value, i);
+ };
+ /*
+ Method to get option by modulo of index.
+ @param {Number} Index for modulo calculations.
+ @param {Object} Options hash to look in.
+ */
+
+
+ Stagger.prototype._getOptionByIndex = function _getOptionByIndex(i, store) {
+ var _this2 = this;
+
+ var options = {};
+ (0, _keys2.default)(store).forEach(function (key) {
+ return options[key] = _this2._getOptionByMod(key, i, store);
+ });
+ return options;
+ };
+ /*
+ Method to get total child modules quantity.
+ @param {String} Name of quantifier in options hash.
+ @param {Object} Options hash object.
+ @return {Number} Number of child object that should be defined.
+ */
+
+
+ Stagger.prototype._getChildQuantity = function _getChildQuantity(name, store) {
+ // if number was set
+ if (typeof name === 'number') {
+ return name;
+ }
+
+ var quantifier = store[name];
+ if (_h2.default.isArray(quantifier)) {
+ return quantifier.length;
+ } else if (quantifier + '' === '[object NodeList]') {
+ return quantifier.length;
+ } else if (quantifier + '' === '[object HTMLCollection]') {
+ return Array.prototype.slice.call(quantifier, 0).length;
+ } else if (quantifier instanceof HTMLElement) {
+ return 1;
+ } else if (typeof quantifier == 'string') {
+ return 1;
+ }
+ };
+ /*
+ Method to make stagger form options
+ @param {Object} Options.
+ @param {Object} Child class.
+ */
+
+
+ Stagger.prototype._init = function _init(options, Module) {
+ var count = this._getChildQuantity(options.quantifier || 'el', options);
+ this._createTimeline(options);this._modules = [];
+ for (var i = 0; i < count; i++) {
+ // get child module's option
+ var option = this._getOptionByIndex(i, options);
+ option.isRunLess = true;
+ // set index of the module
+ option.index = i;
+ // create child module
+ var module = new Module(option);this._modules.push(module);
+ // add child module's timeline to the self timeline
+ this.timeline.add(module);
+ }
+ return this;
+ };
+ /*
+ Method to create timeline.
+ @param {Object} Timeline options.
+ */
+
+
+ Stagger.prototype._createTimeline = function _createTimeline() {
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ this.timeline = new _timeline2.default(options.timeline);
+ };
+
+ /* @overrides @ Tweenable */
+
+
+ Stagger.prototype._makeTween = function _makeTween() {};
+
+ Stagger.prototype._makeTimeline = function _makeTimeline() {};
+
+ return Stagger;
+ }(_tunable2.default);
+
+ module.exports = function (Module) {
+ return function (options) {
+ return new Stagger(options, Module);
+ };
+ };
+
+/***/ }),
+/* 128 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _classCallCheck2 = __webpack_require__(74);
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _h = __webpack_require__(71);
+
+ var _h2 = _interopRequireDefault(_h);
+
+ var _tween = __webpack_require__(101);
+
+ var _tween2 = _interopRequireDefault(_tween);
+
+ var _timeline = __webpack_require__(110);
+
+ var _timeline2 = _interopRequireDefault(_timeline);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ /*
+ Class for toggling opacity on bunch of elements
+ @class Spriter
+ @todo
+ - add isForce3d option
+ - add run new option merging
+ - add then chains
+ */
+ var Spriter = function () {
+ /*
+ Defaults/APIs
+ */
+ Spriter.prototype._declareDefaults = function _declareDefaults() {
+ this._defaults = {
+ /*
+ Duration
+ @property duration
+ @type {Number}
+ */
+ duration: 500,
+ /*
+ Delay
+ @property delay
+ @type {Number}
+ */
+ delay: 0,
+ /*
+ Easing. Please see the
+ [timeline module parseEasing function](timeline.coffee.html#parseEasing)
+ for all avaliable options.
+ @property easing
+ @type {String, Function}
+ */
+ easing: 'linear.none',
+ /*
+ Repeat times count
+
+ @property repeat
+ @type {Number}
+ */
+ repeat: 0,
+ /*
+ Yoyo option defines if animation should be altered on repeat.
+
+ @property yoyo
+ @type {Boolean}
+ */
+ yoyo: false,
+ /*
+ isRunLess option prevents animation from running immediately after
+ initialization.
+
+ @property isRunLess
+ @type {Boolean}
+ */
+ isRunLess: false,
+ /*
+ isShowEnd option defines if the last frame should be shown when
+ animation completed.
+
+ @property isShowEnd
+ @type {Boolean}
+ */
+ isShowEnd: false,
+ /*
+ onStart callback will be called once on animation start.
+
+ @property onStart
+ @type {Function}
+ */
+ onStart: null,
+ /*
+ onUpdate callback will be called on every frame of the animation.
+ The current progress in range **[0,1]** will be passed to the callback.
+
+ @property onUpdate
+ @type {Function}
+ */
+ onUpdate: null,
+ /*
+ onComplete callback will be called once on animation complete.
+
+ @property onComplete
+ @type {Function}
+ */
+ onComplete: null
+ };
+ };
+
+ function Spriter() {
+ var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+ (0, _classCallCheck3.default)(this, Spriter);
+
+ this.o = o;
+ if (!this.o.el) {
+ return _h2.default.error('No "el" option specified, aborting');
+ }
+ this._vars();this._declareDefaults();this._extendDefaults();this._parseFrames();
+ if (this._frames.length <= 2) _h2.default.warn('Spriter: only ' + this._frames.length + ' frames found');
+ if (this._frames.length < 1) _h2.default.error("Spriter: there is no frames to animate, aborting");
+ this._createTween();
+ return this;
+ }
+ /*
+ Method to declare some variables.
+
+ @method run
+ @param {Object} New options
+ @todo Implement new object merging
+ */
+
+
+ Spriter.prototype._vars = function _vars() {
+ this._props = _h2.default.cloneObj(this.o);
+ this.el = this.o.el;
+ this._frames = [];
+ };
+ /*
+ Method to run the spriter on demand.
+
+ @method run
+ @param {Object} New options
+ @todo Implement new object merging
+ */
+
+
+ Spriter.prototype.run = function run(o) {
+ return this.timeline.play();
+ };
+ /*
+ Method to extend _props by options(this.o)
+
+ @method _extendDefaults
+ */
+
+
+ Spriter.prototype._extendDefaults = function _extendDefaults() {
+ return _h2.default.extend(this._props, this._defaults);
+ };
+ /*
+ Method to parse frames as child nodes of el.
+
+ @method _parseFrames
+ */
+
+
+ Spriter.prototype._parseFrames = function _parseFrames() {
+ this._frames = Array.prototype.slice.call(this.el.children, 0);
+ this._frames.forEach(function (frame, i) {
+ return frame.style.opacity = 0;
+ });
+ this._frameStep = 1 / this._frames.length;
+ };
+
+ /*
+ Method to create tween and timeline and supply callbacks.
+
+ @method _createTween
+ */
+
+
+ Spriter.prototype._createTween = function _createTween() {
+ var _this = this;
+
+ this._tween = new _tween2.default({
+ duration: this._props.duration,
+ delay: this._props.delay,
+ yoyo: this._props.yoyo,
+ repeat: this._props.repeat,
+ easing: this._props.easing,
+ onStart: function onStart() {
+ return _this._props.onStart && _this._props.onStart();
+ },
+ onComplete: function onComplete() {
+ return _this._props.onComplete && _this._props.onComplete();
+ },
+ onUpdate: function onUpdate(p) {
+ return _this._setProgress(p);
+ }
+ });
+ this.timeline = new _timeline2.default();this.timeline.add(this._tween);
+ if (!this._props.isRunLess) this._startTween();
+ };
+
+ /*
+ Method to start tween
+
+ @method _startTween
+ */
+
+
+ Spriter.prototype._startTween = function _startTween() {
+ var _this2 = this;
+
+ setTimeout(function () {
+ return _this2.timeline.play();
+ }, 1);
+ };
+ /*
+ Method to set progress of the sprite
+
+ @method _setProgress
+ @param {Number} Progress in range **[0,1]**
+ */
+
+
+ Spriter.prototype._setProgress = function _setProgress(p) {
+ // get the frame number
+ var proc = Math.floor(p / this._frameStep);
+ // react only if frame changes
+ if (this._prevFrame != this._frames[proc]) {
+ // if previous frame isnt current one, hide it
+ if (this._prevFrame) {
+ this._prevFrame.style.opacity = 0;
+ }
+ // if end of animation and isShowEnd flag was specified
+ // then show the last frame else show current frame
+ var currentNum = p === 1 && this._props.isShowEnd ? proc - 1 : proc;
+ // show the current frame
+ if (this._frames[currentNum]) {
+ this._frames[currentNum].style.opacity = 1;
+ }
+ // set previous frame as current
+ this._prevFrame = this._frames[proc];
+ }
+ if (this._props.onUpdate) {
+ this._props.onUpdate(p);
+ }
+ };
+
+ return Spriter;
+ }();
+
+ exports.default = Spriter;
+
+/***/ }),
+/* 129 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var MotionPath, Timeline, Tween, h, resize,
+ bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+ h = __webpack_require__(71);
+
+ resize = __webpack_require__(130);
+
+ Tween = __webpack_require__(101)["default"];
+
+ Timeline = __webpack_require__(110)["default"];
+
+ MotionPath = (function() {
+ MotionPath.prototype.defaults = {
+ path: null,
+ curvature: {
+ x: '75%',
+ y: '50%'
+ },
+ isCompositeLayer: true,
+ delay: 0,
+ duration: 1000,
+ easing: null,
+ repeat: 0,
+ yoyo: false,
+ onStart: null,
+ onComplete: null,
+ onUpdate: null,
+ offsetX: 0,
+ offsetY: 0,
+ angleOffset: null,
+ pathStart: 0,
+ pathEnd: 1,
+ motionBlur: 0,
+ transformOrigin: null,
+ isAngle: false,
+ isReverse: false,
+ isRunLess: false,
+ isPresetPosition: true
+ };
+
+ function MotionPath(o1) {
+ this.o = o1 != null ? o1 : {};
+ this.calcHeight = bind(this.calcHeight, this);
+ if (this.vars()) {
+ return;
+ }
+ this.createTween();
+ this;
+ }
+
+ MotionPath.prototype.vars = function() {
+ this.getScaler = h.bind(this.getScaler, this);
+ this.resize = resize;
+ this.props = h.cloneObj(this.defaults);
+ this.extendOptions(this.o);
+ this.isMotionBlurReset = h.isSafari || h.isIE;
+ this.isMotionBlurReset && (this.props.motionBlur = 0);
+ this.history = [h.cloneObj(this.props)];
+ return this.postVars();
+ };
+
+ MotionPath.prototype.curveToPath = function(o) {
+ var angle, curvature, curvatureX, curvatureY, curvePoint, curveXPoint, dX, dY, endPoint, path, percent, radius, start;
+ path = document.createElementNS(h.NS, 'path');
+ start = o.start;
+ endPoint = {
+ x: start.x + o.shift.x,
+ y: start.x + o.shift.y
+ };
+ curvature = o.curvature;
+ dX = o.shift.x;
+ dY = o.shift.y;
+ radius = Math.sqrt(dX * dX + dY * dY);
+ percent = radius / 100;
+ angle = Math.atan(dY / dX) * (180 / Math.PI) + 90;
+ if (o.shift.x < 0) {
+ angle = angle + 180;
+ }
+ curvatureX = h.parseUnit(curvature.x);
+ curvatureX = curvatureX.unit === '%' ? curvatureX.value * percent : curvatureX.value;
+ curveXPoint = h.getRadialPoint({
+ center: {
+ x: start.x,
+ y: start.y
+ },
+ radius: curvatureX,
+ angle: angle
+ });
+ curvatureY = h.parseUnit(curvature.y);
+ curvatureY = curvatureY.unit === '%' ? curvatureY.value * percent : curvatureY.value;
+ curvePoint = h.getRadialPoint({
+ center: {
+ x: curveXPoint.x,
+ y: curveXPoint.y
+ },
+ radius: curvatureY,
+ angle: angle + 90
+ });
+ path.setAttribute('d', "M" + start.x + "," + start.y + " Q" + curvePoint.x + "," + curvePoint.y + " " + endPoint.x + "," + endPoint.y);
+ return path;
+ };
+
+ MotionPath.prototype.postVars = function() {
+ this.props.pathStart = h.clamp(this.props.pathStart, 0, 1);
+ this.props.pathEnd = h.clamp(this.props.pathEnd, this.props.pathStart, 1);
+ this.angle = 0;
+ this.speedX = 0;
+ this.speedY = 0;
+ this.blurX = 0;
+ this.blurY = 0;
+ this.prevCoords = {};
+ this.blurAmount = 20;
+ this.props.motionBlur = h.clamp(this.props.motionBlur, 0, 1);
+ this.onUpdate = this.props.onUpdate;
+ if (!this.o.el) {
+ h.error('Missed "el" option. It could be a selector, DOMNode or another module.');
+ return true;
+ }
+ this.el = this.parseEl(this.props.el);
+ this.props.motionBlur > 0 && this.createFilter();
+ this.path = this.getPath();
+ if (!this.path.getAttribute('d')) {
+ h.error('Path has no coordinates to work with, aborting');
+ return true;
+ }
+ this.len = this.path.getTotalLength();
+ this.slicedLen = this.len * (this.props.pathEnd - this.props.pathStart);
+ this.startLen = this.props.pathStart * this.len;
+ this.fill = this.props.fill;
+ if (this.fill != null) {
+ this.container = this.parseEl(this.props.fill.container);
+ this.fillRule = this.props.fill.fillRule || 'all';
+ this.getScaler();
+ if (this.container != null) {
+ this.removeEvent(this.container, 'onresize', this.getScaler);
+ return this.addEvent(this.container, 'onresize', this.getScaler);
+ }
+ }
+ };
+
+ MotionPath.prototype.addEvent = function(el, type, handler) {
+ return el.addEventListener(type, handler, false);
+ };
+
+ MotionPath.prototype.removeEvent = function(el, type, handler) {
+ return el.removeEventListener(type, handler, false);
+ };
+
+ MotionPath.prototype.createFilter = function() {
+ var div, svg;
+ div = document.createElement('div');
+ this.filterID = "filter-" + (h.getUniqID());
+ div.innerHTML = "";
+ svg = div.querySelector("#svg-" + this.filterID);
+ this.filter = svg.querySelector('#blur');
+ this.filterOffset = svg.querySelector('#blur-offset');
+ document.body.insertBefore(svg, document.body.firstChild);
+ this.el.style['filter'] = "url(#" + this.filterID + ")";
+ return this.el.style[h.prefix.css + "filter"] = "url(#" + this.filterID + ")";
+ };
+
+ MotionPath.prototype.parseEl = function(el) {
+ if (typeof el === 'string') {
+ return document.querySelector(el);
+ }
+ if (el instanceof HTMLElement) {
+ return el;
+ }
+ if (el._setProp != null) {
+ this.isModule = true;
+ return el;
+ }
+ };
+
+ MotionPath.prototype.getPath = function() {
+ var path;
+ path = h.parsePath(this.props.path);
+ if (path) {
+ return path;
+ }
+ if (this.props.path.x || this.props.path.y) {
+ return this.curveToPath({
+ start: {
+ x: 0,
+ y: 0
+ },
+ shift: {
+ x: this.props.path.x || 0,
+ y: this.props.path.y || 0
+ },
+ curvature: {
+ x: this.props.curvature.x || this.defaults.curvature.x,
+ y: this.props.curvature.y || this.defaults.curvature.y
+ }
+ });
+ }
+ };
+
+ MotionPath.prototype.getScaler = function() {
+ var end, size, start;
+ this.cSize = {
+ width: this.container.offsetWidth || 0,
+ height: this.container.offsetHeight || 0
+ };
+ start = this.path.getPointAtLength(0);
+ end = this.path.getPointAtLength(this.len);
+ size = {};
+ this.scaler = {};
+ size.width = end.x >= start.x ? end.x - start.x : start.x - end.x;
+ size.height = end.y >= start.y ? end.y - start.y : start.y - end.y;
+ switch (this.fillRule) {
+ case 'all':
+ this.calcWidth(size);
+ return this.calcHeight(size);
+ case 'width':
+ this.calcWidth(size);
+ return this.scaler.y = this.scaler.x;
+ case 'height':
+ this.calcHeight(size);
+ return this.scaler.x = this.scaler.y;
+ }
+ };
+
+ MotionPath.prototype.calcWidth = function(size) {
+ this.scaler.x = this.cSize.width / size.width;
+ return !isFinite(this.scaler.x) && (this.scaler.x = 1);
+ };
+
+ MotionPath.prototype.calcHeight = function(size) {
+ this.scaler.y = this.cSize.height / size.height;
+ return !isFinite(this.scaler.y) && (this.scaler.y = 1);
+ };
+
+ MotionPath.prototype.run = function(o) {
+ var fistItem, key, value;
+ if (o) {
+ fistItem = this.history[0];
+ for (key in o) {
+ value = o[key];
+ if (h.callbacksMap[key] || h.tweenOptionMap[key]) {
+ h.warn("the property \"" + key + "\" property can not be overridden on run yet");
+ delete o[key];
+ } else {
+ this.history[0][key] = value;
+ }
+ }
+ this.tuneOptions(o);
+ }
+ return this.startTween();
+ };
+
+ MotionPath.prototype.createTween = function() {
+ this.tween = new Tween({
+ duration: this.props.duration,
+ delay: this.props.delay,
+ yoyo: this.props.yoyo,
+ repeat: this.props.repeat,
+ easing: this.props.easing,
+ onStart: (function(_this) {
+ return function() {
+ var ref;
+ return (ref = _this.props.onStart) != null ? ref.apply(_this) : void 0;
+ };
+ })(this),
+ onComplete: (function(_this) {
+ return function() {
+ var ref;
+ _this.props.motionBlur && _this.setBlur({
+ blur: {
+ x: 0,
+ y: 0
+ },
+ offset: {
+ x: 0,
+ y: 0
+ }
+ });
+ return (ref = _this.props.onComplete) != null ? ref.apply(_this) : void 0;
+ };
+ })(this),
+ onUpdate: (function(_this) {
+ return function(p) {
+ return _this.setProgress(p);
+ };
+ })(this),
+ onFirstUpdate: (function(_this) {
+ return function(isForward, isYoyo) {
+ if (!isForward) {
+ return _this.history.length > 1 && _this.tuneOptions(_this.history[0]);
+ }
+ };
+ })(this)
+ });
+ this.timeline = new Timeline;
+ this.timeline.add(this.tween);
+ !this.props.isRunLess && this.startTween();
+ return this.props.isPresetPosition && this.setProgress(0, true);
+ };
+
+ MotionPath.prototype.startTween = function() {
+ return setTimeout(((function(_this) {
+ return function() {
+ var ref;
+ return (ref = _this.timeline) != null ? ref.play() : void 0;
+ };
+ })(this)), 1);
+ };
+
+ MotionPath.prototype.setProgress = function(p, isInit) {
+ var len, point, x, y;
+ len = this.startLen + (!this.props.isReverse ? p * this.slicedLen : (1 - p) * this.slicedLen);
+ point = this.path.getPointAtLength(len);
+ x = point.x + this.props.offsetX;
+ y = point.y + this.props.offsetY;
+ this._getCurrentAngle(point, len, p);
+ this._setTransformOrigin(p);
+ this._setTransform(x, y, p, isInit);
+ return this.props.motionBlur && this.makeMotionBlur(x, y);
+ };
+
+ MotionPath.prototype.setElPosition = function(x, y, p) {
+ var composite, isComposite, rotate, transform;
+ rotate = this.angle !== 0 ? "rotate(" + this.angle + "deg)" : '';
+ isComposite = this.props.isCompositeLayer && h.is3d;
+ composite = isComposite ? 'translateZ(0)' : '';
+ transform = "translate(" + x + "px," + y + "px) " + rotate + " " + composite;
+ return h.setPrefixedStyle(this.el, 'transform', transform);
+ };
+
+ MotionPath.prototype.setModulePosition = function(x, y) {
+ this.el._setProp({
+ shiftX: x + "px",
+ shiftY: y + "px",
+ angle: this.angle
+ });
+ return this.el._draw();
+ };
+
+ MotionPath.prototype._getCurrentAngle = function(point, len, p) {
+ var atan, isTransformFunOrigin, prevPoint, x1, x2;
+ isTransformFunOrigin = typeof this.props.transformOrigin === 'function';
+ if (this.props.isAngle || (this.props.angleOffset != null) || isTransformFunOrigin) {
+ prevPoint = this.path.getPointAtLength(len - 1);
+ x1 = point.y - prevPoint.y;
+ x2 = point.x - prevPoint.x;
+ atan = Math.atan(x1 / x2);
+ !isFinite(atan) && (atan = 0);
+ this.angle = atan * h.RAD_TO_DEG;
+ if ((typeof this.props.angleOffset) !== 'function') {
+ return this.angle += this.props.angleOffset || 0;
+ } else {
+ return this.angle = this.props.angleOffset.call(this, this.angle, p);
+ }
+ } else {
+ return this.angle = 0;
+ }
+ };
+
+ MotionPath.prototype._setTransform = function(x, y, p, isInit) {
+ var transform;
+ if (this.scaler) {
+ x *= this.scaler.x;
+ y *= this.scaler.y;
+ }
+ transform = null;
+ if (!isInit) {
+ transform = typeof this.onUpdate === "function" ? this.onUpdate(p, {
+ x: x,
+ y: y,
+ angle: this.angle
+ }) : void 0;
+ }
+ if (this.isModule) {
+ return this.setModulePosition(x, y);
+ } else {
+ if (typeof transform !== 'string') {
+ return this.setElPosition(x, y, p);
+ } else {
+ return h.setPrefixedStyle(this.el, 'transform', transform);
+ }
+ }
+ };
+
+ MotionPath.prototype._setTransformOrigin = function(p) {
+ var isTransformFunOrigin, tOrigin;
+ if (this.props.transformOrigin) {
+ isTransformFunOrigin = typeof this.props.transformOrigin === 'function';
+ tOrigin = !isTransformFunOrigin ? this.props.transformOrigin : this.props.transformOrigin(this.angle, p);
+ return h.setPrefixedStyle(this.el, 'transform-origin', tOrigin);
+ }
+ };
+
+ MotionPath.prototype.makeMotionBlur = function(x, y) {
+ var absoluteAngle, coords, dX, dY, signX, signY, tailAngle;
+ tailAngle = 0;
+ signX = 1;
+ signY = 1;
+ if ((this.prevCoords.x == null) || (this.prevCoords.y == null)) {
+ this.speedX = 0;
+ this.speedY = 0;
+ } else {
+ dX = x - this.prevCoords.x;
+ dY = y - this.prevCoords.y;
+ if (dX > 0) {
+ signX = -1;
+ }
+ if (signX < 0) {
+ signY = -1;
+ }
+ this.speedX = Math.abs(dX);
+ this.speedY = Math.abs(dY);
+ tailAngle = Math.atan(dY / dX) * (180 / Math.PI) + 90;
+ }
+ absoluteAngle = tailAngle - this.angle;
+ coords = this.angToCoords(absoluteAngle);
+ this.blurX = h.clamp((this.speedX / 16) * this.props.motionBlur, 0, 1);
+ this.blurY = h.clamp((this.speedY / 16) * this.props.motionBlur, 0, 1);
+ this.setBlur({
+ blur: {
+ x: 3 * this.blurX * this.blurAmount * Math.abs(coords.x),
+ y: 3 * this.blurY * this.blurAmount * Math.abs(coords.y)
+ },
+ offset: {
+ x: 3 * signX * this.blurX * coords.x * this.blurAmount,
+ y: 3 * signY * this.blurY * coords.y * this.blurAmount
+ }
+ });
+ this.prevCoords.x = x;
+ return this.prevCoords.y = y;
+ };
+
+ MotionPath.prototype.setBlur = function(o) {
+ if (!this.isMotionBlurReset) {
+ this.filter.setAttribute('stdDeviation', o.blur.x + "," + o.blur.y);
+ this.filterOffset.setAttribute('dx', o.offset.x);
+ return this.filterOffset.setAttribute('dy', o.offset.y);
+ }
+ };
+
+ MotionPath.prototype.extendDefaults = function(o) {
+ var key, results, value;
+ results = [];
+ for (key in o) {
+ value = o[key];
+ results.push(this[key] = value);
+ }
+ return results;
+ };
+
+ MotionPath.prototype.extendOptions = function(o) {
+ var key, results, value;
+ results = [];
+ for (key in o) {
+ value = o[key];
+ results.push(this.props[key] = value);
+ }
+ return results;
+ };
+
+ MotionPath.prototype.then = function(o) {
+ var it, key, opts, prevOptions, value;
+ prevOptions = this.history[this.history.length - 1];
+ opts = {};
+ for (key in prevOptions) {
+ value = prevOptions[key];
+ if (!h.callbacksMap[key] && !h.tweenOptionMap[key] || key === 'duration') {
+ if (o[key] == null) {
+ o[key] = value;
+ }
+ } else {
+ if (o[key] == null) {
+ o[key] = void 0;
+ }
+ }
+ if (h.tweenOptionMap[key]) {
+ opts[key] = key !== 'duration' ? o[key] : o[key] != null ? o[key] : prevOptions[key];
+ }
+ }
+ this.history.push(o);
+ it = this;
+ opts.onUpdate = (function(_this) {
+ return function(p) {
+ return _this.setProgress(p);
+ };
+ })(this);
+ opts.onStart = (function(_this) {
+ return function() {
+ var ref;
+ return (ref = _this.props.onStart) != null ? ref.apply(_this) : void 0;
+ };
+ })(this);
+ opts.onComplete = (function(_this) {
+ return function() {
+ var ref;
+ return (ref = _this.props.onComplete) != null ? ref.apply(_this) : void 0;
+ };
+ })(this);
+ opts.onFirstUpdate = function() {
+ return it.tuneOptions(it.history[this.index]);
+ };
+ opts.isChained = !o.delay;
+ this.timeline.append(new Tween(opts));
+ return this;
+ };
+
+ MotionPath.prototype.tuneOptions = function(o) {
+ this.extendOptions(o);
+ return this.postVars();
+ };
+
+ MotionPath.prototype.angToCoords = function(angle) {
+ var radAngle, x, y;
+ angle = angle % 360;
+ radAngle = ((angle - 90) * Math.PI) / 180;
+ x = Math.cos(radAngle);
+ y = Math.sin(radAngle);
+ x = x < 0 ? Math.max(x, -0.7) : Math.min(x, .7);
+ y = y < 0 ? Math.max(y, -0.7) : Math.min(y, .7);
+ return {
+ x: x * 1.428571429,
+ y: y * 1.428571429
+ };
+ };
+
+ return MotionPath;
+
+ })();
+
+ module.exports = MotionPath;
+
+
+/***/ }),
+/* 130 */
+/***/ (function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
+ /*!
+ LegoMushroom @legomushroom http://legomushroom.com
+ MIT License 2014
+ */
+
+ /* istanbul ignore next */
+ (function() {
+ var Main;
+ Main = (function() {
+ function Main(o) {
+ this.o = o != null ? o : {};
+ if (window.isAnyResizeEventInited) {
+ return;
+ }
+ this.vars();
+ this.redefineProto();
+ }
+
+ Main.prototype.vars = function() {
+ window.isAnyResizeEventInited = true;
+ this.allowedProtos = [HTMLDivElement, HTMLFormElement, HTMLLinkElement, HTMLBodyElement, HTMLParagraphElement, HTMLFieldSetElement, HTMLLegendElement, HTMLLabelElement, HTMLButtonElement, HTMLUListElement, HTMLOListElement, HTMLLIElement, HTMLHeadingElement, HTMLQuoteElement, HTMLPreElement, HTMLBRElement, HTMLFontElement, HTMLHRElement, HTMLModElement, HTMLParamElement, HTMLMapElement, HTMLTableElement, HTMLTableCaptionElement, HTMLImageElement, HTMLTableCellElement, HTMLSelectElement, HTMLInputElement, HTMLTextAreaElement, HTMLAnchorElement, HTMLObjectElement, HTMLTableColElement, HTMLTableSectionElement, HTMLTableRowElement];
+ return this.timerElements = {
+ img: 1,
+ textarea: 1,
+ input: 1,
+ embed: 1,
+ object: 1,
+ svg: 1,
+ canvas: 1,
+ tr: 1,
+ tbody: 1,
+ thead: 1,
+ tfoot: 1,
+ a: 1,
+ select: 1,
+ option: 1,
+ optgroup: 1,
+ dl: 1,
+ dt: 1,
+ br: 1,
+ basefont: 1,
+ font: 1,
+ col: 1,
+ iframe: 1
+ };
+ };
+
+ Main.prototype.redefineProto = function() {
+ var i, it, proto, t;
+ it = this;
+ return t = (function() {
+ var j, len, ref, results;
+ ref = this.allowedProtos;
+ results = [];
+ for (i = j = 0, len = ref.length; j < len; i = ++j) {
+ proto = ref[i];
+ if (proto.prototype == null) {
+ continue;
+ }
+ results.push((function(proto) {
+ var listener, remover;
+ listener = proto.prototype.addEventListener || proto.prototype.attachEvent;
+ (function(listener) {
+ var wrappedListener;
+ wrappedListener = function() {
+ var option;
+ if (this !== window || this !== document) {
+ option = arguments[0] === 'onresize' && !this.isAnyResizeEventInited;
+ option && it.handleResize({
+ args: arguments,
+ that: this
+ });
+ }
+ return listener.apply(this, arguments);
+ };
+ if (proto.prototype.addEventListener) {
+ return proto.prototype.addEventListener = wrappedListener;
+ } else if (proto.prototype.attachEvent) {
+ return proto.prototype.attachEvent = wrappedListener;
+ }
+ })(listener);
+ remover = proto.prototype.removeEventListener || proto.prototype.detachEvent;
+ return (function(remover) {
+ var wrappedRemover;
+ wrappedRemover = function() {
+ this.isAnyResizeEventInited = false;
+ this.iframe && this.removeChild(this.iframe);
+ return remover.apply(this, arguments);
+ };
+ if (proto.prototype.removeEventListener) {
+ return proto.prototype.removeEventListener = wrappedRemover;
+ } else if (proto.prototype.detachEvent) {
+ return proto.prototype.detachEvent = wrappedListener;
+ }
+ })(remover);
+ })(proto));
+ }
+ return results;
+ }).call(this);
+ };
+
+ Main.prototype.handleResize = function(args) {
+ var computedStyle, el, iframe, isEmpty, isNoPos, isStatic, ref;
+ el = args.that;
+ if (!this.timerElements[el.tagName.toLowerCase()]) {
+ iframe = document.createElement('iframe');
+ el.appendChild(iframe);
+ iframe.style.width = '100%';
+ iframe.style.height = '100%';
+ iframe.style.position = 'absolute';
+ iframe.style.zIndex = -999;
+ iframe.style.opacity = 0;
+ iframe.style.top = 0;
+ iframe.style.left = 0;
+ computedStyle = window.getComputedStyle ? getComputedStyle(el) : el.currentStyle;
+ isNoPos = el.style.position === '';
+ isStatic = computedStyle.position === 'static' && isNoPos;
+ isEmpty = computedStyle.position === '' && el.style.position === '';
+ if (isStatic || isEmpty) {
+ el.style.position = 'relative';
+ }
+ if ((ref = iframe.contentWindow) != null) {
+ ref.onresize = (function(_this) {
+ return function(e) {
+ return _this.dispatchEvent(el);
+ };
+ })(this);
+ }
+ el.iframe = iframe;
+ } else {
+ this.initTimer(el);
+ }
+ return el.isAnyResizeEventInited = true;
+ };
+
+ Main.prototype.initTimer = function(el) {
+ var height, width;
+ width = 0;
+ height = 0;
+ return this.interval = setInterval((function(_this) {
+ return function() {
+ var newHeight, newWidth;
+ newWidth = el.offsetWidth;
+ newHeight = el.offsetHeight;
+ if (newWidth !== width || newHeight !== height) {
+ _this.dispatchEvent(el);
+ width = newWidth;
+ return height = newHeight;
+ }
+ };
+ })(this), this.o.interval || 62.5);
+ };
+
+ Main.prototype.dispatchEvent = function(el) {
+ var e;
+ if (document.createEvent) {
+ e = document.createEvent('HTMLEvents');
+ e.initEvent('onresize', false, false);
+ return el.dispatchEvent(e);
+ } else if (document.createEventObject) {
+ e = document.createEventObject();
+ return el.fireEvent('onresize', e);
+ } else {
+ return false;
+ }
+ };
+
+ Main.prototype.destroy = function() {
+ var i, it, j, len, proto, ref, results;
+ clearInterval(this.interval);
+ this.interval = null;
+ window.isAnyResizeEventInited = false;
+ it = this;
+ ref = this.allowedProtos;
+ results = [];
+ for (i = j = 0, len = ref.length; j < len; i = ++j) {
+ proto = ref[i];
+ if (proto.prototype == null) {
+ continue;
+ }
+ results.push((function(proto) {
+ var listener;
+ listener = proto.prototype.addEventListener || proto.prototype.attachEvent;
+ if (proto.prototype.addEventListener) {
+ proto.prototype.addEventListener = Element.prototype.addEventListener;
+ } else if (proto.prototype.attachEvent) {
+ proto.prototype.attachEvent = Element.prototype.attachEvent;
+ }
+ if (proto.prototype.removeEventListener) {
+ return proto.prototype.removeEventListener = Element.prototype.removeEventListener;
+ } else if (proto.prototype.detachEvent) {
+ return proto.prototype.detachEvent = Element.prototype.detachEvent;
+ }
+ })(proto));
+ }
+ return results;
+ };
+
+ return Main;
+
+ })();
+ if (true) {
+ return !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
+ return new Main;
+ }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+ } else {}
+ })();
+
+
+/***/ })
+/******/ ])
+});
+;
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/browser.js":
+/*!********************************************!*\
+ !*** ./node_modules/qrcode/lib/browser.js ***!
+ \********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var canPromise = __webpack_require__(/*! ./can-promise */ "./node_modules/qrcode/lib/can-promise.js")
+
+var QRCode = __webpack_require__(/*! ./core/qrcode */ "./node_modules/qrcode/lib/core/qrcode.js")
+var CanvasRenderer = __webpack_require__(/*! ./renderer/canvas */ "./node_modules/qrcode/lib/renderer/canvas.js")
+var SvgRenderer = __webpack_require__(/*! ./renderer/svg-tag.js */ "./node_modules/qrcode/lib/renderer/svg-tag.js")
+
+function renderCanvas (renderFunc, canvas, text, opts, cb) {
+ var args = [].slice.call(arguments, 1)
+ var argsNum = args.length
+ var isLastArgCb = typeof args[argsNum - 1] === 'function'
+
+ if (!isLastArgCb && !canPromise()) {
+ throw new Error('Callback required as last argument')
+ }
+
+ if (isLastArgCb) {
+ if (argsNum < 2) {
+ throw new Error('Too few arguments provided')
+ }
+
+ if (argsNum === 2) {
+ cb = text
+ text = canvas
+ canvas = opts = undefined
+ } else if (argsNum === 3) {
+ if (canvas.getContext && typeof cb === 'undefined') {
+ cb = opts
+ opts = undefined
+ } else {
+ cb = opts
+ opts = text
+ text = canvas
+ canvas = undefined
+ }
+ }
+ } else {
+ if (argsNum < 1) {
+ throw new Error('Too few arguments provided')
+ }
+
+ if (argsNum === 1) {
+ text = canvas
+ canvas = opts = undefined
+ } else if (argsNum === 2 && !canvas.getContext) {
+ opts = text
+ text = canvas
+ canvas = undefined
+ }
+
+ return new Promise(function (resolve, reject) {
+ try {
+ var data = QRCode.create(text, opts)
+ resolve(renderFunc(data, canvas, opts))
+ } catch (e) {
+ reject(e)
+ }
+ })
+ }
+
+ try {
+ var data = QRCode.create(text, opts)
+ cb(null, renderFunc(data, canvas, opts))
+ } catch (e) {
+ cb(e)
+ }
+}
+
+exports.create = QRCode.create
+exports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)
+exports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)
+
+// only svg for now.
+exports.toString = renderCanvas.bind(null, function (data, _, opts) {
+ return SvgRenderer.render(data, opts)
+})
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/can-promise.js":
+/*!************************************************!*\
+ !*** ./node_modules/qrcode/lib/can-promise.js ***!
+ \************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+// can-promise has a crash in some versions of react native that dont have
+// standard global objects
+// https://github.com/soldair/node-qrcode/issues/157
+
+module.exports = function () {
+ return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/alignment-pattern.js":
+/*!***********************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/alignment-pattern.js ***!
+ \***********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+/**
+ * Alignment pattern are fixed reference pattern in defined positions
+ * in a matrix symbology, which enables the decode software to re-synchronise
+ * the coordinate mapping of the image modules in the event of moderate amounts
+ * of distortion of the image.
+ *
+ * Alignment patterns are present only in QR Code symbols of version 2 or larger
+ * and their number depends on the symbol version.
+ */
+
+var getSymbolSize = __webpack_require__(/*! ./utils */ "./node_modules/qrcode/lib/core/utils.js").getSymbolSize
+
+/**
+ * Calculate the row/column coordinates of the center module of each alignment pattern
+ * for the specified QR Code version.
+ *
+ * The alignment patterns are positioned symmetrically on either side of the diagonal
+ * running from the top left corner of the symbol to the bottom right corner.
+ *
+ * Since positions are simmetrical only half of the coordinates are returned.
+ * Each item of the array will represent in turn the x and y coordinate.
+ * @see {@link getPositions}
+ *
+ * @param {Number} version QR Code version
+ * @return {Array} Array of coordinate
+ */
+exports.getRowColCoords = function getRowColCoords (version) {
+ if (version === 1) return []
+
+ var posCount = Math.floor(version / 7) + 2
+ var size = getSymbolSize(version)
+ var intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2
+ var positions = [size - 7] // Last coord is always (size - 7)
+
+ for (var i = 1; i < posCount - 1; i++) {
+ positions[i] = positions[i - 1] - intervals
+ }
+
+ positions.push(6) // First coord is always 6
+
+ return positions.reverse()
+}
+
+/**
+ * Returns an array containing the positions of each alignment pattern.
+ * Each array's element represent the center point of the pattern as (x, y) coordinates
+ *
+ * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}
+ * and filtering out the items that overlaps with finder pattern
+ *
+ * @example
+ * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.
+ * The alignment patterns, therefore, are to be centered on (row, column)
+ * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).
+ * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns
+ * and are not therefore used for alignment patterns.
+ *
+ * var pos = getPositions(7)
+ * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]
+ *
+ * @param {Number} version QR Code version
+ * @return {Array} Array of coordinates
+ */
+exports.getPositions = function getPositions (version) {
+ var coords = []
+ var pos = exports.getRowColCoords(version)
+ var posLength = pos.length
+
+ for (var i = 0; i < posLength; i++) {
+ for (var j = 0; j < posLength; j++) {
+ // Skip if position is occupied by finder patterns
+ if ((i === 0 && j === 0) || // top-left
+ (i === 0 && j === posLength - 1) || // bottom-left
+ (i === posLength - 1 && j === 0)) { // top-right
+ continue
+ }
+
+ coords.push([pos[i], pos[j]])
+ }
+ }
+
+ return coords
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/alphanumeric-data.js":
+/*!***********************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/alphanumeric-data.js ***!
+ \***********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Mode = __webpack_require__(/*! ./mode */ "./node_modules/qrcode/lib/core/mode.js")
+
+/**
+ * Array of characters available in alphanumeric mode
+ *
+ * As per QR Code specification, to each character
+ * is assigned a value from 0 to 44 which in this case coincides
+ * with the array index
+ *
+ * @type {Array}
+ */
+var ALPHA_NUM_CHARS = [
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+ 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+ ' ', '$', '%', '*', '+', '-', '.', '/', ':'
+]
+
+function AlphanumericData (data) {
+ this.mode = Mode.ALPHANUMERIC
+ this.data = data
+}
+
+AlphanumericData.getBitsLength = function getBitsLength (length) {
+ return 11 * Math.floor(length / 2) + 6 * (length % 2)
+}
+
+AlphanumericData.prototype.getLength = function getLength () {
+ return this.data.length
+}
+
+AlphanumericData.prototype.getBitsLength = function getBitsLength () {
+ return AlphanumericData.getBitsLength(this.data.length)
+}
+
+AlphanumericData.prototype.write = function write (bitBuffer) {
+ var i
+
+ // Input data characters are divided into groups of two characters
+ // and encoded as 11-bit binary codes.
+ for (i = 0; i + 2 <= this.data.length; i += 2) {
+ // The character value of the first character is multiplied by 45
+ var value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45
+
+ // The character value of the second digit is added to the product
+ value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])
+
+ // The sum is then stored as 11-bit binary number
+ bitBuffer.put(value, 11)
+ }
+
+ // If the number of input data characters is not a multiple of two,
+ // the character value of the final character is encoded as a 6-bit binary number.
+ if (this.data.length % 2) {
+ bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)
+ }
+}
+
+module.exports = AlphanumericData
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/bit-buffer.js":
+/*!****************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/bit-buffer.js ***!
+ \****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+function BitBuffer () {
+ this.buffer = []
+ this.length = 0
+}
+
+BitBuffer.prototype = {
+
+ get: function (index) {
+ var bufIndex = Math.floor(index / 8)
+ return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1
+ },
+
+ put: function (num, length) {
+ for (var i = 0; i < length; i++) {
+ this.putBit(((num >>> (length - i - 1)) & 1) === 1)
+ }
+ },
+
+ getLengthInBits: function () {
+ return this.length
+ },
+
+ putBit: function (bit) {
+ var bufIndex = Math.floor(this.length / 8)
+ if (this.buffer.length <= bufIndex) {
+ this.buffer.push(0)
+ }
+
+ if (bit) {
+ this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))
+ }
+
+ this.length++
+ }
+}
+
+module.exports = BitBuffer
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/bit-matrix.js":
+/*!****************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/bit-matrix.js ***!
+ \****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Buffer = __webpack_require__(/*! ../utils/buffer */ "./node_modules/qrcode/lib/utils/typedarray-buffer.js")
+
+/**
+ * Helper class to handle QR Code symbol modules
+ *
+ * @param {Number} size Symbol size
+ */
+function BitMatrix (size) {
+ if (!size || size < 1) {
+ throw new Error('BitMatrix size must be defined and greater than 0')
+ }
+
+ this.size = size
+ this.data = new Buffer(size * size)
+ this.data.fill(0)
+ this.reservedBit = new Buffer(size * size)
+ this.reservedBit.fill(0)
+}
+
+/**
+ * Set bit value at specified location
+ * If reserved flag is set, this bit will be ignored during masking process
+ *
+ * @param {Number} row
+ * @param {Number} col
+ * @param {Boolean} value
+ * @param {Boolean} reserved
+ */
+BitMatrix.prototype.set = function (row, col, value, reserved) {
+ var index = row * this.size + col
+ this.data[index] = value
+ if (reserved) this.reservedBit[index] = true
+}
+
+/**
+ * Returns bit value at specified location
+ *
+ * @param {Number} row
+ * @param {Number} col
+ * @return {Boolean}
+ */
+BitMatrix.prototype.get = function (row, col) {
+ return this.data[row * this.size + col]
+}
+
+/**
+ * Applies xor operator at specified location
+ * (used during masking process)
+ *
+ * @param {Number} row
+ * @param {Number} col
+ * @param {Boolean} value
+ */
+BitMatrix.prototype.xor = function (row, col, value) {
+ this.data[row * this.size + col] ^= value
+}
+
+/**
+ * Check if bit at specified location is reserved
+ *
+ * @param {Number} row
+ * @param {Number} col
+ * @return {Boolean}
+ */
+BitMatrix.prototype.isReserved = function (row, col) {
+ return this.reservedBit[row * this.size + col]
+}
+
+module.exports = BitMatrix
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/byte-data.js":
+/*!***************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/byte-data.js ***!
+ \***************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Buffer = __webpack_require__(/*! ../utils/buffer */ "./node_modules/qrcode/lib/utils/typedarray-buffer.js")
+var Mode = __webpack_require__(/*! ./mode */ "./node_modules/qrcode/lib/core/mode.js")
+
+function ByteData (data) {
+ this.mode = Mode.BYTE
+ this.data = new Buffer(data)
+}
+
+ByteData.getBitsLength = function getBitsLength (length) {
+ return length * 8
+}
+
+ByteData.prototype.getLength = function getLength () {
+ return this.data.length
+}
+
+ByteData.prototype.getBitsLength = function getBitsLength () {
+ return ByteData.getBitsLength(this.data.length)
+}
+
+ByteData.prototype.write = function (bitBuffer) {
+ for (var i = 0, l = this.data.length; i < l; i++) {
+ bitBuffer.put(this.data[i], 8)
+ }
+}
+
+module.exports = ByteData
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/error-correction-code.js":
+/*!***************************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/error-correction-code.js ***!
+ \***************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var ECLevel = __webpack_require__(/*! ./error-correction-level */ "./node_modules/qrcode/lib/core/error-correction-level.js")
+
+var EC_BLOCKS_TABLE = [
+// L M Q H
+ 1, 1, 1, 1,
+ 1, 1, 1, 1,
+ 1, 1, 2, 2,
+ 1, 2, 2, 4,
+ 1, 2, 4, 4,
+ 2, 4, 4, 4,
+ 2, 4, 6, 5,
+ 2, 4, 6, 6,
+ 2, 5, 8, 8,
+ 4, 5, 8, 8,
+ 4, 5, 8, 11,
+ 4, 8, 10, 11,
+ 4, 9, 12, 16,
+ 4, 9, 16, 16,
+ 6, 10, 12, 18,
+ 6, 10, 17, 16,
+ 6, 11, 16, 19,
+ 6, 13, 18, 21,
+ 7, 14, 21, 25,
+ 8, 16, 20, 25,
+ 8, 17, 23, 25,
+ 9, 17, 23, 34,
+ 9, 18, 25, 30,
+ 10, 20, 27, 32,
+ 12, 21, 29, 35,
+ 12, 23, 34, 37,
+ 12, 25, 34, 40,
+ 13, 26, 35, 42,
+ 14, 28, 38, 45,
+ 15, 29, 40, 48,
+ 16, 31, 43, 51,
+ 17, 33, 45, 54,
+ 18, 35, 48, 57,
+ 19, 37, 51, 60,
+ 19, 38, 53, 63,
+ 20, 40, 56, 66,
+ 21, 43, 59, 70,
+ 22, 45, 62, 74,
+ 24, 47, 65, 77,
+ 25, 49, 68, 81
+]
+
+var EC_CODEWORDS_TABLE = [
+// L M Q H
+ 7, 10, 13, 17,
+ 10, 16, 22, 28,
+ 15, 26, 36, 44,
+ 20, 36, 52, 64,
+ 26, 48, 72, 88,
+ 36, 64, 96, 112,
+ 40, 72, 108, 130,
+ 48, 88, 132, 156,
+ 60, 110, 160, 192,
+ 72, 130, 192, 224,
+ 80, 150, 224, 264,
+ 96, 176, 260, 308,
+ 104, 198, 288, 352,
+ 120, 216, 320, 384,
+ 132, 240, 360, 432,
+ 144, 280, 408, 480,
+ 168, 308, 448, 532,
+ 180, 338, 504, 588,
+ 196, 364, 546, 650,
+ 224, 416, 600, 700,
+ 224, 442, 644, 750,
+ 252, 476, 690, 816,
+ 270, 504, 750, 900,
+ 300, 560, 810, 960,
+ 312, 588, 870, 1050,
+ 336, 644, 952, 1110,
+ 360, 700, 1020, 1200,
+ 390, 728, 1050, 1260,
+ 420, 784, 1140, 1350,
+ 450, 812, 1200, 1440,
+ 480, 868, 1290, 1530,
+ 510, 924, 1350, 1620,
+ 540, 980, 1440, 1710,
+ 570, 1036, 1530, 1800,
+ 570, 1064, 1590, 1890,
+ 600, 1120, 1680, 1980,
+ 630, 1204, 1770, 2100,
+ 660, 1260, 1860, 2220,
+ 720, 1316, 1950, 2310,
+ 750, 1372, 2040, 2430
+]
+
+/**
+ * Returns the number of error correction block that the QR Code should contain
+ * for the specified version and error correction level.
+ *
+ * @param {Number} version QR Code version
+ * @param {Number} errorCorrectionLevel Error correction level
+ * @return {Number} Number of error correction blocks
+ */
+exports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {
+ switch (errorCorrectionLevel) {
+ case ECLevel.L:
+ return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]
+ case ECLevel.M:
+ return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]
+ case ECLevel.Q:
+ return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]
+ case ECLevel.H:
+ return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]
+ default:
+ return undefined
+ }
+}
+
+/**
+ * Returns the number of error correction codewords to use for the specified
+ * version and error correction level.
+ *
+ * @param {Number} version QR Code version
+ * @param {Number} errorCorrectionLevel Error correction level
+ * @return {Number} Number of error correction codewords
+ */
+exports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {
+ switch (errorCorrectionLevel) {
+ case ECLevel.L:
+ return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]
+ case ECLevel.M:
+ return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]
+ case ECLevel.Q:
+ return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]
+ case ECLevel.H:
+ return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]
+ default:
+ return undefined
+ }
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/error-correction-level.js":
+/*!****************************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/error-correction-level.js ***!
+ \****************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+exports.L = { bit: 1 }
+exports.M = { bit: 0 }
+exports.Q = { bit: 3 }
+exports.H = { bit: 2 }
+
+function fromString (string) {
+ if (typeof string !== 'string') {
+ throw new Error('Param is not a string')
+ }
+
+ var lcStr = string.toLowerCase()
+
+ switch (lcStr) {
+ case 'l':
+ case 'low':
+ return exports.L
+
+ case 'm':
+ case 'medium':
+ return exports.M
+
+ case 'q':
+ case 'quartile':
+ return exports.Q
+
+ case 'h':
+ case 'high':
+ return exports.H
+
+ default:
+ throw new Error('Unknown EC Level: ' + string)
+ }
+}
+
+exports.isValid = function isValid (level) {
+ return level && typeof level.bit !== 'undefined' &&
+ level.bit >= 0 && level.bit < 4
+}
+
+exports.from = function from (value, defaultValue) {
+ if (exports.isValid(value)) {
+ return value
+ }
+
+ try {
+ return fromString(value)
+ } catch (e) {
+ return defaultValue
+ }
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/finder-pattern.js":
+/*!********************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/finder-pattern.js ***!
+ \********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var getSymbolSize = __webpack_require__(/*! ./utils */ "./node_modules/qrcode/lib/core/utils.js").getSymbolSize
+var FINDER_PATTERN_SIZE = 7
+
+/**
+ * Returns an array containing the positions of each finder pattern.
+ * Each array's element represent the top-left point of the pattern as (x, y) coordinates
+ *
+ * @param {Number} version QR Code version
+ * @return {Array} Array of coordinates
+ */
+exports.getPositions = function getPositions (version) {
+ var size = getSymbolSize(version)
+
+ return [
+ // top-left
+ [0, 0],
+ // top-right
+ [size - FINDER_PATTERN_SIZE, 0],
+ // bottom-left
+ [0, size - FINDER_PATTERN_SIZE]
+ ]
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/format-info.js":
+/*!*****************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/format-info.js ***!
+ \*****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Utils = __webpack_require__(/*! ./utils */ "./node_modules/qrcode/lib/core/utils.js")
+
+var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)
+var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)
+var G15_BCH = Utils.getBCHDigit(G15)
+
+/**
+ * Returns format information with relative error correction bits
+ *
+ * The format information is a 15-bit sequence containing 5 data bits,
+ * with 10 error correction bits calculated using the (15, 5) BCH code.
+ *
+ * @param {Number} errorCorrectionLevel Error correction level
+ * @param {Number} mask Mask pattern
+ * @return {Number} Encoded format information bits
+ */
+exports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {
+ var data = ((errorCorrectionLevel.bit << 3) | mask)
+ var d = data << 10
+
+ while (Utils.getBCHDigit(d) - G15_BCH >= 0) {
+ d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))
+ }
+
+ // xor final data with mask pattern in order to ensure that
+ // no combination of Error Correction Level and data mask pattern
+ // will result in an all-zero data string
+ return ((data << 10) | d) ^ G15_MASK
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/galois-field.js":
+/*!******************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/galois-field.js ***!
+ \******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Buffer = __webpack_require__(/*! ../utils/buffer */ "./node_modules/qrcode/lib/utils/typedarray-buffer.js")
+
+var EXP_TABLE
+var LOG_TABLE
+
+if (Buffer.alloc) {
+ EXP_TABLE = Buffer.alloc(512)
+ LOG_TABLE = Buffer.alloc(256)
+} else {
+ EXP_TABLE = new Buffer(512)
+ LOG_TABLE = new Buffer(256)
+}
+/**
+ * Precompute the log and anti-log tables for faster computation later
+ *
+ * For each possible value in the galois field 2^8, we will pre-compute
+ * the logarithm and anti-logarithm (exponential) of this value
+ *
+ * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}
+ */
+;(function initTables () {
+ var x = 1
+ for (var i = 0; i < 255; i++) {
+ EXP_TABLE[i] = x
+ LOG_TABLE[x] = i
+
+ x <<= 1 // multiply by 2
+
+ // The QR code specification says to use byte-wise modulo 100011101 arithmetic.
+ // This means that when a number is 256 or larger, it should be XORed with 0x11D.
+ if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)
+ x ^= 0x11D
+ }
+ }
+
+ // Optimization: double the size of the anti-log table so that we don't need to mod 255 to
+ // stay inside the bounds (because we will mainly use this table for the multiplication of
+ // two GF numbers, no more).
+ // @see {@link mul}
+ for (i = 255; i < 512; i++) {
+ EXP_TABLE[i] = EXP_TABLE[i - 255]
+ }
+}())
+
+/**
+ * Returns log value of n inside Galois Field
+ *
+ * @param {Number} n
+ * @return {Number}
+ */
+exports.log = function log (n) {
+ if (n < 1) throw new Error('log(' + n + ')')
+ return LOG_TABLE[n]
+}
+
+/**
+ * Returns anti-log value of n inside Galois Field
+ *
+ * @param {Number} n
+ * @return {Number}
+ */
+exports.exp = function exp (n) {
+ return EXP_TABLE[n]
+}
+
+/**
+ * Multiplies two number inside Galois Field
+ *
+ * @param {Number} x
+ * @param {Number} y
+ * @return {Number}
+ */
+exports.mul = function mul (x, y) {
+ if (x === 0 || y === 0) return 0
+
+ // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized
+ // @see {@link initTables}
+ return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/kanji-data.js":
+/*!****************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/kanji-data.js ***!
+ \****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Mode = __webpack_require__(/*! ./mode */ "./node_modules/qrcode/lib/core/mode.js")
+var Utils = __webpack_require__(/*! ./utils */ "./node_modules/qrcode/lib/core/utils.js")
+
+function KanjiData (data) {
+ this.mode = Mode.KANJI
+ this.data = data
+}
+
+KanjiData.getBitsLength = function getBitsLength (length) {
+ return length * 13
+}
+
+KanjiData.prototype.getLength = function getLength () {
+ return this.data.length
+}
+
+KanjiData.prototype.getBitsLength = function getBitsLength () {
+ return KanjiData.getBitsLength(this.data.length)
+}
+
+KanjiData.prototype.write = function (bitBuffer) {
+ var i
+
+ // In the Shift JIS system, Kanji characters are represented by a two byte combination.
+ // These byte values are shifted from the JIS X 0208 values.
+ // JIS X 0208 gives details of the shift coded representation.
+ for (i = 0; i < this.data.length; i++) {
+ var value = Utils.toSJIS(this.data[i])
+
+ // For characters with Shift JIS values from 0x8140 to 0x9FFC:
+ if (value >= 0x8140 && value <= 0x9FFC) {
+ // Subtract 0x8140 from Shift JIS value
+ value -= 0x8140
+
+ // For characters with Shift JIS values from 0xE040 to 0xEBBF
+ } else if (value >= 0xE040 && value <= 0xEBBF) {
+ // Subtract 0xC140 from Shift JIS value
+ value -= 0xC140
+ } else {
+ throw new Error(
+ 'Invalid SJIS character: ' + this.data[i] + '\n' +
+ 'Make sure your charset is UTF-8')
+ }
+
+ // Multiply most significant byte of result by 0xC0
+ // and add least significant byte to product
+ value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)
+
+ // Convert result to a 13-bit binary string
+ bitBuffer.put(value, 13)
+ }
+}
+
+module.exports = KanjiData
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/mask-pattern.js":
+/*!******************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/mask-pattern.js ***!
+ \******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+/**
+ * Data mask pattern reference
+ * @type {Object}
+ */
+exports.Patterns = {
+ PATTERN000: 0,
+ PATTERN001: 1,
+ PATTERN010: 2,
+ PATTERN011: 3,
+ PATTERN100: 4,
+ PATTERN101: 5,
+ PATTERN110: 6,
+ PATTERN111: 7
+}
+
+/**
+ * Weighted penalty scores for the undesirable features
+ * @type {Object}
+ */
+var PenaltyScores = {
+ N1: 3,
+ N2: 3,
+ N3: 40,
+ N4: 10
+}
+
+/**
+ * Check if mask pattern value is valid
+ *
+ * @param {Number} mask Mask pattern
+ * @return {Boolean} true if valid, false otherwise
+ */
+exports.isValid = function isValid (mask) {
+ return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7
+}
+
+/**
+ * Returns mask pattern from a value.
+ * If value is not valid, returns undefined
+ *
+ * @param {Number|String} value Mask pattern value
+ * @return {Number} Valid mask pattern or undefined
+ */
+exports.from = function from (value) {
+ return exports.isValid(value) ? parseInt(value, 10) : undefined
+}
+
+/**
+* Find adjacent modules in row/column with the same color
+* and assign a penalty value.
+*
+* Points: N1 + i
+* i is the amount by which the number of adjacent modules of the same color exceeds 5
+*/
+exports.getPenaltyN1 = function getPenaltyN1 (data) {
+ var size = data.size
+ var points = 0
+ var sameCountCol = 0
+ var sameCountRow = 0
+ var lastCol = null
+ var lastRow = null
+
+ for (var row = 0; row < size; row++) {
+ sameCountCol = sameCountRow = 0
+ lastCol = lastRow = null
+
+ for (var col = 0; col < size; col++) {
+ var module = data.get(row, col)
+ if (module === lastCol) {
+ sameCountCol++
+ } else {
+ if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)
+ lastCol = module
+ sameCountCol = 1
+ }
+
+ module = data.get(col, row)
+ if (module === lastRow) {
+ sameCountRow++
+ } else {
+ if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)
+ lastRow = module
+ sameCountRow = 1
+ }
+ }
+
+ if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)
+ if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)
+ }
+
+ return points
+}
+
+/**
+ * Find 2x2 blocks with the same color and assign a penalty value
+ *
+ * Points: N2 * (m - 1) * (n - 1)
+ */
+exports.getPenaltyN2 = function getPenaltyN2 (data) {
+ var size = data.size
+ var points = 0
+
+ for (var row = 0; row < size - 1; row++) {
+ for (var col = 0; col < size - 1; col++) {
+ var last = data.get(row, col) +
+ data.get(row, col + 1) +
+ data.get(row + 1, col) +
+ data.get(row + 1, col + 1)
+
+ if (last === 4 || last === 0) points++
+ }
+ }
+
+ return points * PenaltyScores.N2
+}
+
+/**
+ * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,
+ * preceded or followed by light area 4 modules wide
+ *
+ * Points: N3 * number of pattern found
+ */
+exports.getPenaltyN3 = function getPenaltyN3 (data) {
+ var size = data.size
+ var points = 0
+ var bitsCol = 0
+ var bitsRow = 0
+
+ for (var row = 0; row < size; row++) {
+ bitsCol = bitsRow = 0
+ for (var col = 0; col < size; col++) {
+ bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)
+ if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++
+
+ bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)
+ if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++
+ }
+ }
+
+ return points * PenaltyScores.N3
+}
+
+/**
+ * Calculate proportion of dark modules in entire symbol
+ *
+ * Points: N4 * k
+ *
+ * k is the rating of the deviation of the proportion of dark modules
+ * in the symbol from 50% in steps of 5%
+ */
+exports.getPenaltyN4 = function getPenaltyN4 (data) {
+ var darkCount = 0
+ var modulesCount = data.data.length
+
+ for (var i = 0; i < modulesCount; i++) darkCount += data.data[i]
+
+ var k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)
+
+ return k * PenaltyScores.N4
+}
+
+/**
+ * Return mask value at given position
+ *
+ * @param {Number} maskPattern Pattern reference value
+ * @param {Number} i Row
+ * @param {Number} j Column
+ * @return {Boolean} Mask value
+ */
+function getMaskAt (maskPattern, i, j) {
+ switch (maskPattern) {
+ case exports.Patterns.PATTERN000: return (i + j) % 2 === 0
+ case exports.Patterns.PATTERN001: return i % 2 === 0
+ case exports.Patterns.PATTERN010: return j % 3 === 0
+ case exports.Patterns.PATTERN011: return (i + j) % 3 === 0
+ case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0
+ case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0
+ case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0
+ case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0
+
+ default: throw new Error('bad maskPattern:' + maskPattern)
+ }
+}
+
+/**
+ * Apply a mask pattern to a BitMatrix
+ *
+ * @param {Number} pattern Pattern reference number
+ * @param {BitMatrix} data BitMatrix data
+ */
+exports.applyMask = function applyMask (pattern, data) {
+ var size = data.size
+
+ for (var col = 0; col < size; col++) {
+ for (var row = 0; row < size; row++) {
+ if (data.isReserved(row, col)) continue
+ data.xor(row, col, getMaskAt(pattern, row, col))
+ }
+ }
+}
+
+/**
+ * Returns the best mask pattern for data
+ *
+ * @param {BitMatrix} data
+ * @return {Number} Mask pattern reference number
+ */
+exports.getBestMask = function getBestMask (data, setupFormatFunc) {
+ var numPatterns = Object.keys(exports.Patterns).length
+ var bestPattern = 0
+ var lowerPenalty = Infinity
+
+ for (var p = 0; p < numPatterns; p++) {
+ setupFormatFunc(p)
+ exports.applyMask(p, data)
+
+ // Calculate penalty
+ var penalty =
+ exports.getPenaltyN1(data) +
+ exports.getPenaltyN2(data) +
+ exports.getPenaltyN3(data) +
+ exports.getPenaltyN4(data)
+
+ // Undo previously applied mask
+ exports.applyMask(p, data)
+
+ if (penalty < lowerPenalty) {
+ lowerPenalty = penalty
+ bestPattern = p
+ }
+ }
+
+ return bestPattern
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/mode.js":
+/*!**********************************************!*\
+ !*** ./node_modules/qrcode/lib/core/mode.js ***!
+ \**********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var VersionCheck = __webpack_require__(/*! ./version-check */ "./node_modules/qrcode/lib/core/version-check.js")
+var Regex = __webpack_require__(/*! ./regex */ "./node_modules/qrcode/lib/core/regex.js")
+
+/**
+ * Numeric mode encodes data from the decimal digit set (0 - 9)
+ * (byte values 30HEX to 39HEX).
+ * Normally, 3 data characters are represented by 10 bits.
+ *
+ * @type {Object}
+ */
+exports.NUMERIC = {
+ id: 'Numeric',
+ bit: 1 << 0,
+ ccBits: [10, 12, 14]
+}
+
+/**
+ * Alphanumeric mode encodes data from a set of 45 characters,
+ * i.e. 10 numeric digits (0 - 9),
+ * 26 alphabetic characters (A - Z),
+ * and 9 symbols (SP, $, %, *, +, -, ., /, :).
+ * Normally, two input characters are represented by 11 bits.
+ *
+ * @type {Object}
+ */
+exports.ALPHANUMERIC = {
+ id: 'Alphanumeric',
+ bit: 1 << 1,
+ ccBits: [9, 11, 13]
+}
+
+/**
+ * In byte mode, data is encoded at 8 bits per character.
+ *
+ * @type {Object}
+ */
+exports.BYTE = {
+ id: 'Byte',
+ bit: 1 << 2,
+ ccBits: [8, 16, 16]
+}
+
+/**
+ * The Kanji mode efficiently encodes Kanji characters in accordance with
+ * the Shift JIS system based on JIS X 0208.
+ * The Shift JIS values are shifted from the JIS X 0208 values.
+ * JIS X 0208 gives details of the shift coded representation.
+ * Each two-byte character value is compacted to a 13-bit binary codeword.
+ *
+ * @type {Object}
+ */
+exports.KANJI = {
+ id: 'Kanji',
+ bit: 1 << 3,
+ ccBits: [8, 10, 12]
+}
+
+/**
+ * Mixed mode will contain a sequences of data in a combination of any of
+ * the modes described above
+ *
+ * @type {Object}
+ */
+exports.MIXED = {
+ bit: -1
+}
+
+/**
+ * Returns the number of bits needed to store the data length
+ * according to QR Code specifications.
+ *
+ * @param {Mode} mode Data mode
+ * @param {Number} version QR Code version
+ * @return {Number} Number of bits
+ */
+exports.getCharCountIndicator = function getCharCountIndicator (mode, version) {
+ if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)
+
+ if (!VersionCheck.isValid(version)) {
+ throw new Error('Invalid version: ' + version)
+ }
+
+ if (version >= 1 && version < 10) return mode.ccBits[0]
+ else if (version < 27) return mode.ccBits[1]
+ return mode.ccBits[2]
+}
+
+/**
+ * Returns the most efficient mode to store the specified data
+ *
+ * @param {String} dataStr Input data string
+ * @return {Mode} Best mode
+ */
+exports.getBestModeForData = function getBestModeForData (dataStr) {
+ if (Regex.testNumeric(dataStr)) return exports.NUMERIC
+ else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC
+ else if (Regex.testKanji(dataStr)) return exports.KANJI
+ else return exports.BYTE
+}
+
+/**
+ * Return mode name as string
+ *
+ * @param {Mode} mode Mode object
+ * @returns {String} Mode name
+ */
+exports.toString = function toString (mode) {
+ if (mode && mode.id) return mode.id
+ throw new Error('Invalid mode')
+}
+
+/**
+ * Check if input param is a valid mode object
+ *
+ * @param {Mode} mode Mode object
+ * @returns {Boolean} True if valid mode, false otherwise
+ */
+exports.isValid = function isValid (mode) {
+ return mode && mode.bit && mode.ccBits
+}
+
+/**
+ * Get mode object from its name
+ *
+ * @param {String} string Mode name
+ * @returns {Mode} Mode object
+ */
+function fromString (string) {
+ if (typeof string !== 'string') {
+ throw new Error('Param is not a string')
+ }
+
+ var lcStr = string.toLowerCase()
+
+ switch (lcStr) {
+ case 'numeric':
+ return exports.NUMERIC
+ case 'alphanumeric':
+ return exports.ALPHANUMERIC
+ case 'kanji':
+ return exports.KANJI
+ case 'byte':
+ return exports.BYTE
+ default:
+ throw new Error('Unknown mode: ' + string)
+ }
+}
+
+/**
+ * Returns mode from a value.
+ * If value is not a valid mode, returns defaultValue
+ *
+ * @param {Mode|String} value Encoding mode
+ * @param {Mode} defaultValue Fallback value
+ * @return {Mode} Encoding mode
+ */
+exports.from = function from (value, defaultValue) {
+ if (exports.isValid(value)) {
+ return value
+ }
+
+ try {
+ return fromString(value)
+ } catch (e) {
+ return defaultValue
+ }
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/numeric-data.js":
+/*!******************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/numeric-data.js ***!
+ \******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Mode = __webpack_require__(/*! ./mode */ "./node_modules/qrcode/lib/core/mode.js")
+
+function NumericData (data) {
+ this.mode = Mode.NUMERIC
+ this.data = data.toString()
+}
+
+NumericData.getBitsLength = function getBitsLength (length) {
+ return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)
+}
+
+NumericData.prototype.getLength = function getLength () {
+ return this.data.length
+}
+
+NumericData.prototype.getBitsLength = function getBitsLength () {
+ return NumericData.getBitsLength(this.data.length)
+}
+
+NumericData.prototype.write = function write (bitBuffer) {
+ var i, group, value
+
+ // The input data string is divided into groups of three digits,
+ // and each group is converted to its 10-bit binary equivalent.
+ for (i = 0; i + 3 <= this.data.length; i += 3) {
+ group = this.data.substr(i, 3)
+ value = parseInt(group, 10)
+
+ bitBuffer.put(value, 10)
+ }
+
+ // If the number of input digits is not an exact multiple of three,
+ // the final one or two digits are converted to 4 or 7 bits respectively.
+ var remainingNum = this.data.length - i
+ if (remainingNum > 0) {
+ group = this.data.substr(i)
+ value = parseInt(group, 10)
+
+ bitBuffer.put(value, remainingNum * 3 + 1)
+ }
+}
+
+module.exports = NumericData
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/polynomial.js":
+/*!****************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/polynomial.js ***!
+ \****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Buffer = __webpack_require__(/*! ../utils/buffer */ "./node_modules/qrcode/lib/utils/typedarray-buffer.js")
+var GF = __webpack_require__(/*! ./galois-field */ "./node_modules/qrcode/lib/core/galois-field.js")
+
+/**
+ * Multiplies two polynomials inside Galois Field
+ *
+ * @param {Buffer} p1 Polynomial
+ * @param {Buffer} p2 Polynomial
+ * @return {Buffer} Product of p1 and p2
+ */
+exports.mul = function mul (p1, p2) {
+ var coeff = new Buffer(p1.length + p2.length - 1)
+ coeff.fill(0)
+
+ for (var i = 0; i < p1.length; i++) {
+ for (var j = 0; j < p2.length; j++) {
+ coeff[i + j] ^= GF.mul(p1[i], p2[j])
+ }
+ }
+
+ return coeff
+}
+
+/**
+ * Calculate the remainder of polynomials division
+ *
+ * @param {Buffer} divident Polynomial
+ * @param {Buffer} divisor Polynomial
+ * @return {Buffer} Remainder
+ */
+exports.mod = function mod (divident, divisor) {
+ var result = new Buffer(divident)
+
+ while ((result.length - divisor.length) >= 0) {
+ var coeff = result[0]
+
+ for (var i = 0; i < divisor.length; i++) {
+ result[i] ^= GF.mul(divisor[i], coeff)
+ }
+
+ // remove all zeros from buffer head
+ var offset = 0
+ while (offset < result.length && result[offset] === 0) offset++
+ result = result.slice(offset)
+ }
+
+ return result
+}
+
+/**
+ * Generate an irreducible generator polynomial of specified degree
+ * (used by Reed-Solomon encoder)
+ *
+ * @param {Number} degree Degree of the generator polynomial
+ * @return {Buffer} Buffer containing polynomial coefficients
+ */
+exports.generateECPolynomial = function generateECPolynomial (degree) {
+ var poly = new Buffer([1])
+ for (var i = 0; i < degree; i++) {
+ poly = exports.mul(poly, [1, GF.exp(i)])
+ }
+
+ return poly
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/qrcode.js":
+/*!************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/qrcode.js ***!
+ \************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Buffer = __webpack_require__(/*! ../utils/buffer */ "./node_modules/qrcode/lib/utils/typedarray-buffer.js")
+var Utils = __webpack_require__(/*! ./utils */ "./node_modules/qrcode/lib/core/utils.js")
+var ECLevel = __webpack_require__(/*! ./error-correction-level */ "./node_modules/qrcode/lib/core/error-correction-level.js")
+var BitBuffer = __webpack_require__(/*! ./bit-buffer */ "./node_modules/qrcode/lib/core/bit-buffer.js")
+var BitMatrix = __webpack_require__(/*! ./bit-matrix */ "./node_modules/qrcode/lib/core/bit-matrix.js")
+var AlignmentPattern = __webpack_require__(/*! ./alignment-pattern */ "./node_modules/qrcode/lib/core/alignment-pattern.js")
+var FinderPattern = __webpack_require__(/*! ./finder-pattern */ "./node_modules/qrcode/lib/core/finder-pattern.js")
+var MaskPattern = __webpack_require__(/*! ./mask-pattern */ "./node_modules/qrcode/lib/core/mask-pattern.js")
+var ECCode = __webpack_require__(/*! ./error-correction-code */ "./node_modules/qrcode/lib/core/error-correction-code.js")
+var ReedSolomonEncoder = __webpack_require__(/*! ./reed-solomon-encoder */ "./node_modules/qrcode/lib/core/reed-solomon-encoder.js")
+var Version = __webpack_require__(/*! ./version */ "./node_modules/qrcode/lib/core/version.js")
+var FormatInfo = __webpack_require__(/*! ./format-info */ "./node_modules/qrcode/lib/core/format-info.js")
+var Mode = __webpack_require__(/*! ./mode */ "./node_modules/qrcode/lib/core/mode.js")
+var Segments = __webpack_require__(/*! ./segments */ "./node_modules/qrcode/lib/core/segments.js")
+var isArray = __webpack_require__(/*! isarray */ "./node_modules/qrcode/node_modules/isarray/index.js")
+
+/**
+ * QRCode for JavaScript
+ *
+ * modified by Ryan Day for nodejs support
+ * Copyright (c) 2011 Ryan Day
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+//---------------------------------------------------------------------
+// QRCode for JavaScript
+//
+// Copyright (c) 2009 Kazuhiko Arase
+//
+// URL: http://www.d-project.com/
+//
+// Licensed under the MIT license:
+// http://www.opensource.org/licenses/mit-license.php
+//
+// The word "QR Code" is registered trademark of
+// DENSO WAVE INCORPORATED
+// http://www.denso-wave.com/qrcode/faqpatent-e.html
+//
+//---------------------------------------------------------------------
+*/
+
+/**
+ * Add finder patterns bits to matrix
+ *
+ * @param {BitMatrix} matrix Modules matrix
+ * @param {Number} version QR Code version
+ */
+function setupFinderPattern (matrix, version) {
+ var size = matrix.size
+ var pos = FinderPattern.getPositions(version)
+
+ for (var i = 0; i < pos.length; i++) {
+ var row = pos[i][0]
+ var col = pos[i][1]
+
+ for (var r = -1; r <= 7; r++) {
+ if (row + r <= -1 || size <= row + r) continue
+
+ for (var c = -1; c <= 7; c++) {
+ if (col + c <= -1 || size <= col + c) continue
+
+ if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||
+ (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||
+ (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {
+ matrix.set(row + r, col + c, true, true)
+ } else {
+ matrix.set(row + r, col + c, false, true)
+ }
+ }
+ }
+ }
+}
+
+/**
+ * Add timing pattern bits to matrix
+ *
+ * Note: this function must be called before {@link setupAlignmentPattern}
+ *
+ * @param {BitMatrix} matrix Modules matrix
+ */
+function setupTimingPattern (matrix) {
+ var size = matrix.size
+
+ for (var r = 8; r < size - 8; r++) {
+ var value = r % 2 === 0
+ matrix.set(r, 6, value, true)
+ matrix.set(6, r, value, true)
+ }
+}
+
+/**
+ * Add alignment patterns bits to matrix
+ *
+ * Note: this function must be called after {@link setupTimingPattern}
+ *
+ * @param {BitMatrix} matrix Modules matrix
+ * @param {Number} version QR Code version
+ */
+function setupAlignmentPattern (matrix, version) {
+ var pos = AlignmentPattern.getPositions(version)
+
+ for (var i = 0; i < pos.length; i++) {
+ var row = pos[i][0]
+ var col = pos[i][1]
+
+ for (var r = -2; r <= 2; r++) {
+ for (var c = -2; c <= 2; c++) {
+ if (r === -2 || r === 2 || c === -2 || c === 2 ||
+ (r === 0 && c === 0)) {
+ matrix.set(row + r, col + c, true, true)
+ } else {
+ matrix.set(row + r, col + c, false, true)
+ }
+ }
+ }
+ }
+}
+
+/**
+ * Add version info bits to matrix
+ *
+ * @param {BitMatrix} matrix Modules matrix
+ * @param {Number} version QR Code version
+ */
+function setupVersionInfo (matrix, version) {
+ var size = matrix.size
+ var bits = Version.getEncodedBits(version)
+ var row, col, mod
+
+ for (var i = 0; i < 18; i++) {
+ row = Math.floor(i / 3)
+ col = i % 3 + size - 8 - 3
+ mod = ((bits >> i) & 1) === 1
+
+ matrix.set(row, col, mod, true)
+ matrix.set(col, row, mod, true)
+ }
+}
+
+/**
+ * Add format info bits to matrix
+ *
+ * @param {BitMatrix} matrix Modules matrix
+ * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level
+ * @param {Number} maskPattern Mask pattern reference value
+ */
+function setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {
+ var size = matrix.size
+ var bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)
+ var i, mod
+
+ for (i = 0; i < 15; i++) {
+ mod = ((bits >> i) & 1) === 1
+
+ // vertical
+ if (i < 6) {
+ matrix.set(i, 8, mod, true)
+ } else if (i < 8) {
+ matrix.set(i + 1, 8, mod, true)
+ } else {
+ matrix.set(size - 15 + i, 8, mod, true)
+ }
+
+ // horizontal
+ if (i < 8) {
+ matrix.set(8, size - i - 1, mod, true)
+ } else if (i < 9) {
+ matrix.set(8, 15 - i - 1 + 1, mod, true)
+ } else {
+ matrix.set(8, 15 - i - 1, mod, true)
+ }
+ }
+
+ // fixed module
+ matrix.set(size - 8, 8, 1, true)
+}
+
+/**
+ * Add encoded data bits to matrix
+ *
+ * @param {BitMatrix} matrix Modules matrix
+ * @param {Buffer} data Data codewords
+ */
+function setupData (matrix, data) {
+ var size = matrix.size
+ var inc = -1
+ var row = size - 1
+ var bitIndex = 7
+ var byteIndex = 0
+
+ for (var col = size - 1; col > 0; col -= 2) {
+ if (col === 6) col--
+
+ while (true) {
+ for (var c = 0; c < 2; c++) {
+ if (!matrix.isReserved(row, col - c)) {
+ var dark = false
+
+ if (byteIndex < data.length) {
+ dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)
+ }
+
+ matrix.set(row, col - c, dark)
+ bitIndex--
+
+ if (bitIndex === -1) {
+ byteIndex++
+ bitIndex = 7
+ }
+ }
+ }
+
+ row += inc
+
+ if (row < 0 || size <= row) {
+ row -= inc
+ inc = -inc
+ break
+ }
+ }
+ }
+}
+
+/**
+ * Create encoded codewords from data input
+ *
+ * @param {Number} version QR Code version
+ * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level
+ * @param {ByteData} data Data input
+ * @return {Buffer} Buffer containing encoded codewords
+ */
+function createData (version, errorCorrectionLevel, segments) {
+ // Prepare data buffer
+ var buffer = new BitBuffer()
+
+ segments.forEach(function (data) {
+ // prefix data with mode indicator (4 bits)
+ buffer.put(data.mode.bit, 4)
+
+ // Prefix data with character count indicator.
+ // The character count indicator is a string of bits that represents the
+ // number of characters that are being encoded.
+ // The character count indicator must be placed after the mode indicator
+ // and must be a certain number of bits long, depending on the QR version
+ // and data mode
+ // @see {@link Mode.getCharCountIndicator}.
+ buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))
+
+ // add binary data sequence to buffer
+ data.write(buffer)
+ })
+
+ // Calculate required number of bits
+ var totalCodewords = Utils.getSymbolTotalCodewords(version)
+ var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
+ var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8
+
+ // Add a terminator.
+ // If the bit string is shorter than the total number of required bits,
+ // a terminator of up to four 0s must be added to the right side of the string.
+ // If the bit string is more than four bits shorter than the required number of bits,
+ // add four 0s to the end.
+ if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {
+ buffer.put(0, 4)
+ }
+
+ // If the bit string is fewer than four bits shorter, add only the number of 0s that
+ // are needed to reach the required number of bits.
+
+ // After adding the terminator, if the number of bits in the string is not a multiple of 8,
+ // pad the string on the right with 0s to make the string's length a multiple of 8.
+ while (buffer.getLengthInBits() % 8 !== 0) {
+ buffer.putBit(0)
+ }
+
+ // Add pad bytes if the string is still shorter than the total number of required bits.
+ // Extend the buffer to fill the data capacity of the symbol corresponding to
+ // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)
+ // and 00010001 (0x11) alternately.
+ var remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8
+ for (var i = 0; i < remainingByte; i++) {
+ buffer.put(i % 2 ? 0x11 : 0xEC, 8)
+ }
+
+ return createCodewords(buffer, version, errorCorrectionLevel)
+}
+
+/**
+ * Encode input data with Reed-Solomon and return codewords with
+ * relative error correction bits
+ *
+ * @param {BitBuffer} bitBuffer Data to encode
+ * @param {Number} version QR Code version
+ * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level
+ * @return {Buffer} Buffer containing encoded codewords
+ */
+function createCodewords (bitBuffer, version, errorCorrectionLevel) {
+ // Total codewords for this QR code version (Data + Error correction)
+ var totalCodewords = Utils.getSymbolTotalCodewords(version)
+
+ // Total number of error correction codewords
+ var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
+
+ // Total number of data codewords
+ var dataTotalCodewords = totalCodewords - ecTotalCodewords
+
+ // Total number of blocks
+ var ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)
+
+ // Calculate how many blocks each group should contain
+ var blocksInGroup2 = totalCodewords % ecTotalBlocks
+ var blocksInGroup1 = ecTotalBlocks - blocksInGroup2
+
+ var totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)
+
+ var dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)
+ var dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1
+
+ // Number of EC codewords is the same for both groups
+ var ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1
+
+ // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount
+ var rs = new ReedSolomonEncoder(ecCount)
+
+ var offset = 0
+ var dcData = new Array(ecTotalBlocks)
+ var ecData = new Array(ecTotalBlocks)
+ var maxDataSize = 0
+ var buffer = new Buffer(bitBuffer.buffer)
+
+ // Divide the buffer into the required number of blocks
+ for (var b = 0; b < ecTotalBlocks; b++) {
+ var dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2
+
+ // extract a block of data from buffer
+ dcData[b] = buffer.slice(offset, offset + dataSize)
+
+ // Calculate EC codewords for this data block
+ ecData[b] = rs.encode(dcData[b])
+
+ offset += dataSize
+ maxDataSize = Math.max(maxDataSize, dataSize)
+ }
+
+ // Create final data
+ // Interleave the data and error correction codewords from each block
+ var data = new Buffer(totalCodewords)
+ var index = 0
+ var i, r
+
+ // Add data codewords
+ for (i = 0; i < maxDataSize; i++) {
+ for (r = 0; r < ecTotalBlocks; r++) {
+ if (i < dcData[r].length) {
+ data[index++] = dcData[r][i]
+ }
+ }
+ }
+
+ // Apped EC codewords
+ for (i = 0; i < ecCount; i++) {
+ for (r = 0; r < ecTotalBlocks; r++) {
+ data[index++] = ecData[r][i]
+ }
+ }
+
+ return data
+}
+
+/**
+ * Build QR Code symbol
+ *
+ * @param {String} data Input string
+ * @param {Number} version QR Code version
+ * @param {ErrorCorretionLevel} errorCorrectionLevel Error level
+ * @param {MaskPattern} maskPattern Mask pattern
+ * @return {Object} Object containing symbol data
+ */
+function createSymbol (data, version, errorCorrectionLevel, maskPattern) {
+ var segments
+
+ if (isArray(data)) {
+ segments = Segments.fromArray(data)
+ } else if (typeof data === 'string') {
+ var estimatedVersion = version
+
+ if (!estimatedVersion) {
+ var rawSegments = Segments.rawSplit(data)
+
+ // Estimate best version that can contain raw splitted segments
+ estimatedVersion = Version.getBestVersionForData(rawSegments,
+ errorCorrectionLevel)
+ }
+
+ // Build optimized segments
+ // If estimated version is undefined, try with the highest version
+ segments = Segments.fromString(data, estimatedVersion || 40)
+ } else {
+ throw new Error('Invalid data')
+ }
+
+ // Get the min version that can contain data
+ var bestVersion = Version.getBestVersionForData(segments,
+ errorCorrectionLevel)
+
+ // If no version is found, data cannot be stored
+ if (!bestVersion) {
+ throw new Error('The amount of data is too big to be stored in a QR Code')
+ }
+
+ // If not specified, use min version as default
+ if (!version) {
+ version = bestVersion
+
+ // Check if the specified version can contain the data
+ } else if (version < bestVersion) {
+ throw new Error('\n' +
+ 'The chosen QR Code version cannot contain this amount of data.\n' +
+ 'Minimum version required to store current data is: ' + bestVersion + '.\n'
+ )
+ }
+
+ var dataBits = createData(version, errorCorrectionLevel, segments)
+
+ // Allocate matrix buffer
+ var moduleCount = Utils.getSymbolSize(version)
+ var modules = new BitMatrix(moduleCount)
+
+ // Add function modules
+ setupFinderPattern(modules, version)
+ setupTimingPattern(modules)
+ setupAlignmentPattern(modules, version)
+
+ // Add temporary dummy bits for format info just to set them as reserved.
+ // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}
+ // since the masking operation must be performed only on the encoding region.
+ // These blocks will be replaced with correct values later in code.
+ setupFormatInfo(modules, errorCorrectionLevel, 0)
+
+ if (version >= 7) {
+ setupVersionInfo(modules, version)
+ }
+
+ // Add data codewords
+ setupData(modules, dataBits)
+
+ if (isNaN(maskPattern)) {
+ // Find best mask pattern
+ maskPattern = MaskPattern.getBestMask(modules,
+ setupFormatInfo.bind(null, modules, errorCorrectionLevel))
+ }
+
+ // Apply mask pattern
+ MaskPattern.applyMask(maskPattern, modules)
+
+ // Replace format info bits with correct values
+ setupFormatInfo(modules, errorCorrectionLevel, maskPattern)
+
+ return {
+ modules: modules,
+ version: version,
+ errorCorrectionLevel: errorCorrectionLevel,
+ maskPattern: maskPattern,
+ segments: segments
+ }
+}
+
+/**
+ * QR Code
+ *
+ * @param {String | Array} data Input data
+ * @param {Object} options Optional configurations
+ * @param {Number} options.version QR Code version
+ * @param {String} options.errorCorrectionLevel Error correction level
+ * @param {Function} options.toSJISFunc Helper func to convert utf8 to sjis
+ */
+exports.create = function create (data, options) {
+ if (typeof data === 'undefined' || data === '') {
+ throw new Error('No input text')
+ }
+
+ var errorCorrectionLevel = ECLevel.M
+ var version
+ var mask
+
+ if (typeof options !== 'undefined') {
+ // Use higher error correction level as default
+ errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)
+ version = Version.from(options.version)
+ mask = MaskPattern.from(options.maskPattern)
+
+ if (options.toSJISFunc) {
+ Utils.setToSJISFunction(options.toSJISFunc)
+ }
+ }
+
+ return createSymbol(data, version, errorCorrectionLevel, mask)
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/reed-solomon-encoder.js":
+/*!**************************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/reed-solomon-encoder.js ***!
+ \**************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Buffer = __webpack_require__(/*! ../utils/buffer */ "./node_modules/qrcode/lib/utils/typedarray-buffer.js")
+var Polynomial = __webpack_require__(/*! ./polynomial */ "./node_modules/qrcode/lib/core/polynomial.js")
+
+function ReedSolomonEncoder (degree) {
+ this.genPoly = undefined
+ this.degree = degree
+
+ if (this.degree) this.initialize(this.degree)
+}
+
+/**
+ * Initialize the encoder.
+ * The input param should correspond to the number of error correction codewords.
+ *
+ * @param {Number} degree
+ */
+ReedSolomonEncoder.prototype.initialize = function initialize (degree) {
+ // create an irreducible generator polynomial
+ this.degree = degree
+ this.genPoly = Polynomial.generateECPolynomial(this.degree)
+}
+
+/**
+ * Encodes a chunk of data
+ *
+ * @param {Buffer} data Buffer containing input data
+ * @return {Buffer} Buffer containing encoded data
+ */
+ReedSolomonEncoder.prototype.encode = function encode (data) {
+ if (!this.genPoly) {
+ throw new Error('Encoder not initialized')
+ }
+
+ // Calculate EC for this data block
+ // extends data size to data+genPoly size
+ var pad = new Buffer(this.degree)
+ pad.fill(0)
+ var paddedData = Buffer.concat([data, pad], data.length + this.degree)
+
+ // The error correction codewords are the remainder after dividing the data codewords
+ // by a generator polynomial
+ var remainder = Polynomial.mod(paddedData, this.genPoly)
+
+ // return EC data blocks (last n byte, where n is the degree of genPoly)
+ // If coefficients number in remainder are less than genPoly degree,
+ // pad with 0s to the left to reach the needed number of coefficients
+ var start = this.degree - remainder.length
+ if (start > 0) {
+ var buff = new Buffer(this.degree)
+ buff.fill(0)
+ remainder.copy(buff, start)
+
+ return buff
+ }
+
+ return remainder
+}
+
+module.exports = ReedSolomonEncoder
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/regex.js":
+/*!***********************************************!*\
+ !*** ./node_modules/qrcode/lib/core/regex.js ***!
+ \***********************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+var numeric = '[0-9]+'
+var alphanumeric = '[A-Z $%*+\\-./:]+'
+var kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +
+ '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +
+ '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +
+ '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'
+kanji = kanji.replace(/u/g, '\\u')
+
+var byte = '(?:(?![A-Z0-9 $%*+\\-./:]|' + kanji + ')(?:.|[\r\n]))+'
+
+exports.KANJI = new RegExp(kanji, 'g')
+exports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\-./:]+', 'g')
+exports.BYTE = new RegExp(byte, 'g')
+exports.NUMERIC = new RegExp(numeric, 'g')
+exports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')
+
+var TEST_KANJI = new RegExp('^' + kanji + '$')
+var TEST_NUMERIC = new RegExp('^' + numeric + '$')
+var TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\-./:]+$')
+
+exports.testKanji = function testKanji (str) {
+ return TEST_KANJI.test(str)
+}
+
+exports.testNumeric = function testNumeric (str) {
+ return TEST_NUMERIC.test(str)
+}
+
+exports.testAlphanumeric = function testAlphanumeric (str) {
+ return TEST_ALPHANUMERIC.test(str)
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/segments.js":
+/*!**************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/segments.js ***!
+ \**************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Mode = __webpack_require__(/*! ./mode */ "./node_modules/qrcode/lib/core/mode.js")
+var NumericData = __webpack_require__(/*! ./numeric-data */ "./node_modules/qrcode/lib/core/numeric-data.js")
+var AlphanumericData = __webpack_require__(/*! ./alphanumeric-data */ "./node_modules/qrcode/lib/core/alphanumeric-data.js")
+var ByteData = __webpack_require__(/*! ./byte-data */ "./node_modules/qrcode/lib/core/byte-data.js")
+var KanjiData = __webpack_require__(/*! ./kanji-data */ "./node_modules/qrcode/lib/core/kanji-data.js")
+var Regex = __webpack_require__(/*! ./regex */ "./node_modules/qrcode/lib/core/regex.js")
+var Utils = __webpack_require__(/*! ./utils */ "./node_modules/qrcode/lib/core/utils.js")
+var dijkstra = __webpack_require__(/*! dijkstrajs */ "./node_modules/dijkstrajs/dijkstra.js")
+
+/**
+ * Returns UTF8 byte length
+ *
+ * @param {String} str Input string
+ * @return {Number} Number of byte
+ */
+function getStringByteLength (str) {
+ return unescape(encodeURIComponent(str)).length
+}
+
+/**
+ * Get a list of segments of the specified mode
+ * from a string
+ *
+ * @param {Mode} mode Segment mode
+ * @param {String} str String to process
+ * @return {Array} Array of object with segments data
+ */
+function getSegments (regex, mode, str) {
+ var segments = []
+ var result
+
+ while ((result = regex.exec(str)) !== null) {
+ segments.push({
+ data: result[0],
+ index: result.index,
+ mode: mode,
+ length: result[0].length
+ })
+ }
+
+ return segments
+}
+
+/**
+ * Extracts a series of segments with the appropriate
+ * modes from a string
+ *
+ * @param {String} dataStr Input string
+ * @return {Array} Array of object with segments data
+ */
+function getSegmentsFromString (dataStr) {
+ var numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)
+ var alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)
+ var byteSegs
+ var kanjiSegs
+
+ if (Utils.isKanjiModeEnabled()) {
+ byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)
+ kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)
+ } else {
+ byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)
+ kanjiSegs = []
+ }
+
+ var segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)
+
+ return segs
+ .sort(function (s1, s2) {
+ return s1.index - s2.index
+ })
+ .map(function (obj) {
+ return {
+ data: obj.data,
+ mode: obj.mode,
+ length: obj.length
+ }
+ })
+}
+
+/**
+ * Returns how many bits are needed to encode a string of
+ * specified length with the specified mode
+ *
+ * @param {Number} length String length
+ * @param {Mode} mode Segment mode
+ * @return {Number} Bit length
+ */
+function getSegmentBitsLength (length, mode) {
+ switch (mode) {
+ case Mode.NUMERIC:
+ return NumericData.getBitsLength(length)
+ case Mode.ALPHANUMERIC:
+ return AlphanumericData.getBitsLength(length)
+ case Mode.KANJI:
+ return KanjiData.getBitsLength(length)
+ case Mode.BYTE:
+ return ByteData.getBitsLength(length)
+ }
+}
+
+/**
+ * Merges adjacent segments which have the same mode
+ *
+ * @param {Array} segs Array of object with segments data
+ * @return {Array} Array of object with segments data
+ */
+function mergeSegments (segs) {
+ return segs.reduce(function (acc, curr) {
+ var prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null
+ if (prevSeg && prevSeg.mode === curr.mode) {
+ acc[acc.length - 1].data += curr.data
+ return acc
+ }
+
+ acc.push(curr)
+ return acc
+ }, [])
+}
+
+/**
+ * Generates a list of all possible nodes combination which
+ * will be used to build a segments graph.
+ *
+ * Nodes are divided by groups. Each group will contain a list of all the modes
+ * in which is possible to encode the given text.
+ *
+ * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.
+ * The group for '12345' will contain then 3 objects, one for each
+ * possible encoding mode.
+ *
+ * Each node represents a possible segment.
+ *
+ * @param {Array} segs Array of object with segments data
+ * @return {Array} Array of object with segments data
+ */
+function buildNodes (segs) {
+ var nodes = []
+ for (var i = 0; i < segs.length; i++) {
+ var seg = segs[i]
+
+ switch (seg.mode) {
+ case Mode.NUMERIC:
+ nodes.push([seg,
+ { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },
+ { data: seg.data, mode: Mode.BYTE, length: seg.length }
+ ])
+ break
+ case Mode.ALPHANUMERIC:
+ nodes.push([seg,
+ { data: seg.data, mode: Mode.BYTE, length: seg.length }
+ ])
+ break
+ case Mode.KANJI:
+ nodes.push([seg,
+ { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }
+ ])
+ break
+ case Mode.BYTE:
+ nodes.push([
+ { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }
+ ])
+ }
+ }
+
+ return nodes
+}
+
+/**
+ * Builds a graph from a list of nodes.
+ * All segments in each node group will be connected with all the segments of
+ * the next group and so on.
+ *
+ * At each connection will be assigned a weight depending on the
+ * segment's byte length.
+ *
+ * @param {Array} nodes Array of object with segments data
+ * @param {Number} version QR Code version
+ * @return {Object} Graph of all possible segments
+ */
+function buildGraph (nodes, version) {
+ var table = {}
+ var graph = {'start': {}}
+ var prevNodeIds = ['start']
+
+ for (var i = 0; i < nodes.length; i++) {
+ var nodeGroup = nodes[i]
+ var currentNodeIds = []
+
+ for (var j = 0; j < nodeGroup.length; j++) {
+ var node = nodeGroup[j]
+ var key = '' + i + j
+
+ currentNodeIds.push(key)
+ table[key] = { node: node, lastCount: 0 }
+ graph[key] = {}
+
+ for (var n = 0; n < prevNodeIds.length; n++) {
+ var prevNodeId = prevNodeIds[n]
+
+ if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {
+ graph[prevNodeId][key] =
+ getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -
+ getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)
+
+ table[prevNodeId].lastCount += node.length
+ } else {
+ if (table[prevNodeId]) table[prevNodeId].lastCount = node.length
+
+ graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +
+ 4 + Mode.getCharCountIndicator(node.mode, version) // switch cost
+ }
+ }
+ }
+
+ prevNodeIds = currentNodeIds
+ }
+
+ for (n = 0; n < prevNodeIds.length; n++) {
+ graph[prevNodeIds[n]]['end'] = 0
+ }
+
+ return { map: graph, table: table }
+}
+
+/**
+ * Builds a segment from a specified data and mode.
+ * If a mode is not specified, the more suitable will be used.
+ *
+ * @param {String} data Input data
+ * @param {Mode | String} modesHint Data mode
+ * @return {Segment} Segment
+ */
+function buildSingleSegment (data, modesHint) {
+ var mode
+ var bestMode = Mode.getBestModeForData(data)
+
+ mode = Mode.from(modesHint, bestMode)
+
+ // Make sure data can be encoded
+ if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {
+ throw new Error('"' + data + '"' +
+ ' cannot be encoded with mode ' + Mode.toString(mode) +
+ '.\n Suggested mode is: ' + Mode.toString(bestMode))
+ }
+
+ // Use Mode.BYTE if Kanji support is disabled
+ if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {
+ mode = Mode.BYTE
+ }
+
+ switch (mode) {
+ case Mode.NUMERIC:
+ return new NumericData(data)
+
+ case Mode.ALPHANUMERIC:
+ return new AlphanumericData(data)
+
+ case Mode.KANJI:
+ return new KanjiData(data)
+
+ case Mode.BYTE:
+ return new ByteData(data)
+ }
+}
+
+/**
+ * Builds a list of segments from an array.
+ * Array can contain Strings or Objects with segment's info.
+ *
+ * For each item which is a string, will be generated a segment with the given
+ * string and the more appropriate encoding mode.
+ *
+ * For each item which is an object, will be generated a segment with the given
+ * data and mode.
+ * Objects must contain at least the property "data".
+ * If property "mode" is not present, the more suitable mode will be used.
+ *
+ * @param {Array} array Array of objects with segments data
+ * @return {Array} Array of Segments
+ */
+exports.fromArray = function fromArray (array) {
+ return array.reduce(function (acc, seg) {
+ if (typeof seg === 'string') {
+ acc.push(buildSingleSegment(seg, null))
+ } else if (seg.data) {
+ acc.push(buildSingleSegment(seg.data, seg.mode))
+ }
+
+ return acc
+ }, [])
+}
+
+/**
+ * Builds an optimized sequence of segments from a string,
+ * which will produce the shortest possible bitstream.
+ *
+ * @param {String} data Input string
+ * @param {Number} version QR Code version
+ * @return {Array} Array of segments
+ */
+exports.fromString = function fromString (data, version) {
+ var segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())
+
+ var nodes = buildNodes(segs)
+ var graph = buildGraph(nodes, version)
+ var path = dijkstra.find_path(graph.map, 'start', 'end')
+
+ var optimizedSegs = []
+ for (var i = 1; i < path.length - 1; i++) {
+ optimizedSegs.push(graph.table[path[i]].node)
+ }
+
+ return exports.fromArray(mergeSegments(optimizedSegs))
+}
+
+/**
+ * Splits a string in various segments with the modes which
+ * best represent their content.
+ * The produced segments are far from being optimized.
+ * The output of this function is only used to estimate a QR Code version
+ * which may contain the data.
+ *
+ * @param {string} data Input string
+ * @return {Array} Array of segments
+ */
+exports.rawSplit = function rawSplit (data) {
+ return exports.fromArray(
+ getSegmentsFromString(data, Utils.isKanjiModeEnabled())
+ )
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/utils.js":
+/*!***********************************************!*\
+ !*** ./node_modules/qrcode/lib/core/utils.js ***!
+ \***********************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+var toSJISFunction
+var CODEWORDS_COUNT = [
+ 0, // Not used
+ 26, 44, 70, 100, 134, 172, 196, 242, 292, 346,
+ 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,
+ 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,
+ 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706
+]
+
+/**
+ * Returns the QR Code size for the specified version
+ *
+ * @param {Number} version QR Code version
+ * @return {Number} size of QR code
+ */
+exports.getSymbolSize = function getSymbolSize (version) {
+ if (!version) throw new Error('"version" cannot be null or undefined')
+ if (version < 1 || version > 40) throw new Error('"version" should be in range from 1 to 40')
+ return version * 4 + 17
+}
+
+/**
+ * Returns the total number of codewords used to store data and EC information.
+ *
+ * @param {Number} version QR Code version
+ * @return {Number} Data length in bits
+ */
+exports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {
+ return CODEWORDS_COUNT[version]
+}
+
+/**
+ * Encode data with Bose-Chaudhuri-Hocquenghem
+ *
+ * @param {Number} data Value to encode
+ * @return {Number} Encoded value
+ */
+exports.getBCHDigit = function (data) {
+ var digit = 0
+
+ while (data !== 0) {
+ digit++
+ data >>>= 1
+ }
+
+ return digit
+}
+
+exports.setToSJISFunction = function setToSJISFunction (f) {
+ if (typeof f !== 'function') {
+ throw new Error('"toSJISFunc" is not a valid function.')
+ }
+
+ toSJISFunction = f
+}
+
+exports.isKanjiModeEnabled = function () {
+ return typeof toSJISFunction !== 'undefined'
+}
+
+exports.toSJIS = function toSJIS (kanji) {
+ return toSJISFunction(kanji)
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/version-check.js":
+/*!*******************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/version-check.js ***!
+ \*******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+/**
+ * Check if QR Code version is valid
+ *
+ * @param {Number} version QR Code version
+ * @return {Boolean} true if valid version, false otherwise
+ */
+exports.isValid = function isValid (version) {
+ return !isNaN(version) && version >= 1 && version <= 40
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/core/version.js":
+/*!*************************************************!*\
+ !*** ./node_modules/qrcode/lib/core/version.js ***!
+ \*************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Utils = __webpack_require__(/*! ./utils */ "./node_modules/qrcode/lib/core/utils.js")
+var ECCode = __webpack_require__(/*! ./error-correction-code */ "./node_modules/qrcode/lib/core/error-correction-code.js")
+var ECLevel = __webpack_require__(/*! ./error-correction-level */ "./node_modules/qrcode/lib/core/error-correction-level.js")
+var Mode = __webpack_require__(/*! ./mode */ "./node_modules/qrcode/lib/core/mode.js")
+var VersionCheck = __webpack_require__(/*! ./version-check */ "./node_modules/qrcode/lib/core/version-check.js")
+var isArray = __webpack_require__(/*! isarray */ "./node_modules/qrcode/node_modules/isarray/index.js")
+
+// Generator polynomial used to encode version information
+var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)
+var G18_BCH = Utils.getBCHDigit(G18)
+
+function getBestVersionForDataLength (mode, length, errorCorrectionLevel) {
+ for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {
+ if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {
+ return currentVersion
+ }
+ }
+
+ return undefined
+}
+
+function getReservedBitsCount (mode, version) {
+ // Character count indicator + mode indicator bits
+ return Mode.getCharCountIndicator(mode, version) + 4
+}
+
+function getTotalBitsFromDataArray (segments, version) {
+ var totalBits = 0
+
+ segments.forEach(function (data) {
+ var reservedBits = getReservedBitsCount(data.mode, version)
+ totalBits += reservedBits + data.getBitsLength()
+ })
+
+ return totalBits
+}
+
+function getBestVersionForMixedData (segments, errorCorrectionLevel) {
+ for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {
+ var length = getTotalBitsFromDataArray(segments, currentVersion)
+ if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {
+ return currentVersion
+ }
+ }
+
+ return undefined
+}
+
+/**
+ * Returns version number from a value.
+ * If value is not a valid version, returns defaultValue
+ *
+ * @param {Number|String} value QR Code version
+ * @param {Number} defaultValue Fallback value
+ * @return {Number} QR Code version number
+ */
+exports.from = function from (value, defaultValue) {
+ if (VersionCheck.isValid(value)) {
+ return parseInt(value, 10)
+ }
+
+ return defaultValue
+}
+
+/**
+ * Returns how much data can be stored with the specified QR code version
+ * and error correction level
+ *
+ * @param {Number} version QR Code version (1-40)
+ * @param {Number} errorCorrectionLevel Error correction level
+ * @param {Mode} mode Data mode
+ * @return {Number} Quantity of storable data
+ */
+exports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {
+ if (!VersionCheck.isValid(version)) {
+ throw new Error('Invalid QR Code version')
+ }
+
+ // Use Byte mode as default
+ if (typeof mode === 'undefined') mode = Mode.BYTE
+
+ // Total codewords for this QR code version (Data + Error correction)
+ var totalCodewords = Utils.getSymbolTotalCodewords(version)
+
+ // Total number of error correction codewords
+ var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
+
+ // Total number of data codewords
+ var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8
+
+ if (mode === Mode.MIXED) return dataTotalCodewordsBits
+
+ var usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)
+
+ // Return max number of storable codewords
+ switch (mode) {
+ case Mode.NUMERIC:
+ return Math.floor((usableBits / 10) * 3)
+
+ case Mode.ALPHANUMERIC:
+ return Math.floor((usableBits / 11) * 2)
+
+ case Mode.KANJI:
+ return Math.floor(usableBits / 13)
+
+ case Mode.BYTE:
+ default:
+ return Math.floor(usableBits / 8)
+ }
+}
+
+/**
+ * Returns the minimum version needed to contain the amount of data
+ *
+ * @param {Segment} data Segment of data
+ * @param {Number} [errorCorrectionLevel=H] Error correction level
+ * @param {Mode} mode Data mode
+ * @return {Number} QR Code version
+ */
+exports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {
+ var seg
+
+ var ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)
+
+ if (isArray(data)) {
+ if (data.length > 1) {
+ return getBestVersionForMixedData(data, ecl)
+ }
+
+ if (data.length === 0) {
+ return 1
+ }
+
+ seg = data[0]
+ } else {
+ seg = data
+ }
+
+ return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)
+}
+
+/**
+ * Returns version information with relative error correction bits
+ *
+ * The version information is included in QR Code symbols of version 7 or larger.
+ * It consists of an 18-bit sequence containing 6 data bits,
+ * with 12 error correction bits calculated using the (18, 6) Golay code.
+ *
+ * @param {Number} version QR Code version
+ * @return {Number} Encoded version info bits
+ */
+exports.getEncodedBits = function getEncodedBits (version) {
+ if (!VersionCheck.isValid(version) || version < 7) {
+ throw new Error('Invalid QR Code version')
+ }
+
+ var d = version << 12
+
+ while (Utils.getBCHDigit(d) - G18_BCH >= 0) {
+ d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))
+ }
+
+ return (version << 12) | d
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/renderer/canvas.js":
+/*!****************************************************!*\
+ !*** ./node_modules/qrcode/lib/renderer/canvas.js ***!
+ \****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Utils = __webpack_require__(/*! ./utils */ "./node_modules/qrcode/lib/renderer/utils.js")
+
+function clearCanvas (ctx, canvas, size) {
+ ctx.clearRect(0, 0, canvas.width, canvas.height)
+
+ if (!canvas.style) canvas.style = {}
+ canvas.height = size
+ canvas.width = size
+ canvas.style.height = size + 'px'
+ canvas.style.width = size + 'px'
+}
+
+function getCanvasElement () {
+ try {
+ return document.createElement('canvas')
+ } catch (e) {
+ throw new Error('You need to specify a canvas element')
+ }
+}
+
+exports.render = function render (qrData, canvas, options) {
+ var opts = options
+ var canvasEl = canvas
+
+ if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
+ opts = canvas
+ canvas = undefined
+ }
+
+ if (!canvas) {
+ canvasEl = getCanvasElement()
+ }
+
+ opts = Utils.getOptions(opts)
+ var size = Utils.getImageWidth(qrData.modules.size, opts)
+
+ var ctx = canvasEl.getContext('2d')
+ var image = ctx.createImageData(size, size)
+ Utils.qrToImageData(image.data, qrData, opts)
+
+ clearCanvas(ctx, canvasEl, size)
+ ctx.putImageData(image, 0, 0)
+
+ return canvasEl
+}
+
+exports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {
+ var opts = options
+
+ if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
+ opts = canvas
+ canvas = undefined
+ }
+
+ if (!opts) opts = {}
+
+ var canvasEl = exports.render(qrData, canvas, opts)
+
+ var type = opts.type || 'image/png'
+ var rendererOpts = opts.rendererOpts || {}
+
+ return canvasEl.toDataURL(type, rendererOpts.quality)
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/renderer/svg-tag.js":
+/*!*****************************************************!*\
+ !*** ./node_modules/qrcode/lib/renderer/svg-tag.js ***!
+ \*****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Utils = __webpack_require__(/*! ./utils */ "./node_modules/qrcode/lib/renderer/utils.js")
+
+function getColorAttrib (color, attrib) {
+ var alpha = color.a / 255
+ var str = attrib + '="' + color.hex + '"'
+
+ return alpha < 1
+ ? str + ' ' + attrib + '-opacity="' + alpha.toFixed(2).slice(1) + '"'
+ : str
+}
+
+function svgCmd (cmd, x, y) {
+ var str = cmd + x
+ if (typeof y !== 'undefined') str += ' ' + y
+
+ return str
+}
+
+function qrToPath (data, size, margin) {
+ var path = ''
+ var moveBy = 0
+ var newRow = false
+ var lineLength = 0
+
+ for (var i = 0; i < data.length; i++) {
+ var col = Math.floor(i % size)
+ var row = Math.floor(i / size)
+
+ if (!col && !newRow) newRow = true
+
+ if (data[i]) {
+ lineLength++
+
+ if (!(i > 0 && col > 0 && data[i - 1])) {
+ path += newRow
+ ? svgCmd('M', col + margin, 0.5 + row + margin)
+ : svgCmd('m', moveBy, 0)
+
+ moveBy = 0
+ newRow = false
+ }
+
+ if (!(col + 1 < size && data[i + 1])) {
+ path += svgCmd('h', lineLength)
+ lineLength = 0
+ }
+ } else {
+ moveBy++
+ }
+ }
+
+ return path
+}
+
+exports.render = function render (qrData, options, cb) {
+ var opts = Utils.getOptions(options)
+ var size = qrData.modules.size
+ var data = qrData.modules.data
+ var qrcodesize = size + opts.margin * 2
+
+ var bg = !opts.color.light.a
+ ? ''
+ : ''
+
+ var path =
+ ''
+
+ var viewBox = 'viewBox="' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '"'
+
+ var width = !opts.width ? '' : 'width="' + opts.width + '" height="' + opts.width + '" '
+
+ var svgTag = '\n'
+
+ if (typeof cb === 'function') {
+ cb(null, svgTag)
+ }
+
+ return svgTag
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/renderer/utils.js":
+/*!***************************************************!*\
+ !*** ./node_modules/qrcode/lib/renderer/utils.js ***!
+ \***************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+function hex2rgba (hex) {
+ if (typeof hex === 'number') {
+ hex = hex.toString()
+ }
+
+ if (typeof hex !== 'string') {
+ throw new Error('Color should be defined as hex string')
+ }
+
+ var hexCode = hex.slice().replace('#', '').split('')
+ if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {
+ throw new Error('Invalid hex color: ' + hex)
+ }
+
+ // Convert from short to long form (fff -> ffffff)
+ if (hexCode.length === 3 || hexCode.length === 4) {
+ hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {
+ return [c, c]
+ }))
+ }
+
+ // Add default alpha value
+ if (hexCode.length === 6) hexCode.push('F', 'F')
+
+ var hexValue = parseInt(hexCode.join(''), 16)
+
+ return {
+ r: (hexValue >> 24) & 255,
+ g: (hexValue >> 16) & 255,
+ b: (hexValue >> 8) & 255,
+ a: hexValue & 255,
+ hex: '#' + hexCode.slice(0, 6).join('')
+ }
+}
+
+exports.getOptions = function getOptions (options) {
+ if (!options) options = {}
+ if (!options.color) options.color = {}
+
+ var margin = typeof options.margin === 'undefined' ||
+ options.margin === null ||
+ options.margin < 0 ? 4 : options.margin
+
+ var width = options.width && options.width >= 21 ? options.width : undefined
+ var scale = options.scale || 4
+
+ return {
+ width: width,
+ scale: width ? 4 : scale,
+ margin: margin,
+ color: {
+ dark: hex2rgba(options.color.dark || '#000000ff'),
+ light: hex2rgba(options.color.light || '#ffffffff')
+ },
+ type: options.type,
+ rendererOpts: options.rendererOpts || {}
+ }
+}
+
+exports.getScale = function getScale (qrSize, opts) {
+ return opts.width && opts.width >= qrSize + opts.margin * 2
+ ? opts.width / (qrSize + opts.margin * 2)
+ : opts.scale
+}
+
+exports.getImageWidth = function getImageWidth (qrSize, opts) {
+ var scale = exports.getScale(qrSize, opts)
+ return Math.floor((qrSize + opts.margin * 2) * scale)
+}
+
+exports.qrToImageData = function qrToImageData (imgData, qr, opts) {
+ var size = qr.modules.size
+ var data = qr.modules.data
+ var scale = exports.getScale(size, opts)
+ var symbolSize = Math.floor((size + opts.margin * 2) * scale)
+ var scaledMargin = opts.margin * scale
+ var palette = [opts.color.light, opts.color.dark]
+
+ for (var i = 0; i < symbolSize; i++) {
+ for (var j = 0; j < symbolSize; j++) {
+ var posDst = (i * symbolSize + j) * 4
+ var pxColor = opts.color.light
+
+ if (i >= scaledMargin && j >= scaledMargin &&
+ i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {
+ var iSrc = Math.floor((i - scaledMargin) / scale)
+ var jSrc = Math.floor((j - scaledMargin) / scale)
+ pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]
+ }
+
+ imgData[posDst++] = pxColor.r
+ imgData[posDst++] = pxColor.g
+ imgData[posDst++] = pxColor.b
+ imgData[posDst] = pxColor.a
+ }
+ }
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/lib/utils/typedarray-buffer.js":
+/*!************************************************************!*\
+ !*** ./node_modules/qrcode/lib/utils/typedarray-buffer.js ***!
+ \************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/**
+ * Implementation of a subset of node.js Buffer methods for the browser.
+ * Based on https://github.com/feross/buffer
+ */
+
+/* eslint-disable no-proto */
+
+
+
+var isArray = __webpack_require__(/*! isarray */ "./node_modules/qrcode/node_modules/isarray/index.js")
+
+function typedArraySupport () {
+ // Can typed array instances be augmented?
+ try {
+ var arr = new Uint8Array(1)
+ arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
+ return arr.foo() === 42
+ } catch (e) {
+ return false
+ }
+}
+
+Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
+
+var K_MAX_LENGTH = Buffer.TYPED_ARRAY_SUPPORT
+ ? 0x7fffffff
+ : 0x3fffffff
+
+function Buffer (arg, offset, length) {
+ if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
+ return new Buffer(arg, offset, length)
+ }
+
+ if (typeof arg === 'number') {
+ return allocUnsafe(this, arg)
+ }
+
+ return from(this, arg, offset, length)
+}
+
+if (Buffer.TYPED_ARRAY_SUPPORT) {
+ Buffer.prototype.__proto__ = Uint8Array.prototype
+ Buffer.__proto__ = Uint8Array
+
+ // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
+ if (typeof Symbol !== 'undefined' && Symbol.species &&
+ Buffer[Symbol.species] === Buffer) {
+ Object.defineProperty(Buffer, Symbol.species, {
+ value: null,
+ configurable: true,
+ enumerable: false,
+ writable: false
+ })
+ }
+}
+
+function checked (length) {
+ // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
+ // length is NaN (which is otherwise coerced to zero.)
+ if (length >= K_MAX_LENGTH) {
+ throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
+ 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
+ }
+ return length | 0
+}
+
+function isnan (val) {
+ return val !== val // eslint-disable-line no-self-compare
+}
+
+function createBuffer (that, length) {
+ var buf
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ buf = new Uint8Array(length)
+ buf.__proto__ = Buffer.prototype
+ } else {
+ // Fallback: Return an object instance of the Buffer class
+ buf = that
+ if (buf === null) {
+ buf = new Buffer(length)
+ }
+ buf.length = length
+ }
+
+ return buf
+}
+
+function allocUnsafe (that, size) {
+ var buf = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
+
+ if (!Buffer.TYPED_ARRAY_SUPPORT) {
+ for (var i = 0; i < size; ++i) {
+ buf[i] = 0
+ }
+ }
+
+ return buf
+}
+
+function fromString (that, string) {
+ var length = byteLength(string) | 0
+ var buf = createBuffer(that, length)
+
+ var actual = buf.write(string)
+
+ if (actual !== length) {
+ // Writing a hex string, for example, that contains invalid characters will
+ // cause everything after the first invalid character to be ignored. (e.g.
+ // 'abxxcd' will be treated as 'ab')
+ buf = buf.slice(0, actual)
+ }
+
+ return buf
+}
+
+function fromArrayLike (that, array) {
+ var length = array.length < 0 ? 0 : checked(array.length) | 0
+ var buf = createBuffer(that, length)
+ for (var i = 0; i < length; i += 1) {
+ buf[i] = array[i] & 255
+ }
+ return buf
+}
+
+function fromArrayBuffer (that, array, byteOffset, length) {
+ if (byteOffset < 0 || array.byteLength < byteOffset) {
+ throw new RangeError('\'offset\' is out of bounds')
+ }
+
+ if (array.byteLength < byteOffset + (length || 0)) {
+ throw new RangeError('\'length\' is out of bounds')
+ }
+
+ var buf
+ if (byteOffset === undefined && length === undefined) {
+ buf = new Uint8Array(array)
+ } else if (length === undefined) {
+ buf = new Uint8Array(array, byteOffset)
+ } else {
+ buf = new Uint8Array(array, byteOffset, length)
+ }
+
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ // Return an augmented `Uint8Array` instance, for best performance
+ buf.__proto__ = Buffer.prototype
+ } else {
+ // Fallback: Return an object instance of the Buffer class
+ buf = fromArrayLike(that, buf)
+ }
+
+ return buf
+}
+
+function fromObject (that, obj) {
+ if (Buffer.isBuffer(obj)) {
+ var len = checked(obj.length) | 0
+ var buf = createBuffer(that, len)
+
+ if (buf.length === 0) {
+ return buf
+ }
+
+ obj.copy(buf, 0, 0, len)
+ return buf
+ }
+
+ if (obj) {
+ if ((typeof ArrayBuffer !== 'undefined' &&
+ obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
+ if (typeof obj.length !== 'number' || isnan(obj.length)) {
+ return createBuffer(that, 0)
+ }
+ return fromArrayLike(that, obj)
+ }
+
+ if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
+ return fromArrayLike(that, obj.data)
+ }
+ }
+
+ throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
+}
+
+function utf8ToBytes (string, units) {
+ units = units || Infinity
+ var codePoint
+ var length = string.length
+ var leadSurrogate = null
+ var bytes = []
+
+ for (var i = 0; i < length; ++i) {
+ codePoint = string.charCodeAt(i)
+
+ // is surrogate component
+ if (codePoint > 0xD7FF && codePoint < 0xE000) {
+ // last char was a lead
+ if (!leadSurrogate) {
+ // no lead yet
+ if (codePoint > 0xDBFF) {
+ // unexpected trail
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ continue
+ } else if (i + 1 === length) {
+ // unpaired lead
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ continue
+ }
+
+ // valid lead
+ leadSurrogate = codePoint
+
+ continue
+ }
+
+ // 2 leads in a row
+ if (codePoint < 0xDC00) {
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ leadSurrogate = codePoint
+ continue
+ }
+
+ // valid surrogate pair
+ codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
+ } else if (leadSurrogate) {
+ // valid bmp char, but last char was a lead
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ }
+
+ leadSurrogate = null
+
+ // encode utf8
+ if (codePoint < 0x80) {
+ if ((units -= 1) < 0) break
+ bytes.push(codePoint)
+ } else if (codePoint < 0x800) {
+ if ((units -= 2) < 0) break
+ bytes.push(
+ codePoint >> 0x6 | 0xC0,
+ codePoint & 0x3F | 0x80
+ )
+ } else if (codePoint < 0x10000) {
+ if ((units -= 3) < 0) break
+ bytes.push(
+ codePoint >> 0xC | 0xE0,
+ codePoint >> 0x6 & 0x3F | 0x80,
+ codePoint & 0x3F | 0x80
+ )
+ } else if (codePoint < 0x110000) {
+ if ((units -= 4) < 0) break
+ bytes.push(
+ codePoint >> 0x12 | 0xF0,
+ codePoint >> 0xC & 0x3F | 0x80,
+ codePoint >> 0x6 & 0x3F | 0x80,
+ codePoint & 0x3F | 0x80
+ )
+ } else {
+ throw new Error('Invalid code point')
+ }
+ }
+
+ return bytes
+}
+
+function byteLength (string) {
+ if (Buffer.isBuffer(string)) {
+ return string.length
+ }
+ if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
+ (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
+ return string.byteLength
+ }
+ if (typeof string !== 'string') {
+ string = '' + string
+ }
+
+ var len = string.length
+ if (len === 0) return 0
+
+ return utf8ToBytes(string).length
+}
+
+function blitBuffer (src, dst, offset, length) {
+ for (var i = 0; i < length; ++i) {
+ if ((i + offset >= dst.length) || (i >= src.length)) break
+ dst[i + offset] = src[i]
+ }
+ return i
+}
+
+function utf8Write (buf, string, offset, length) {
+ return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
+}
+
+function from (that, value, offset, length) {
+ if (typeof value === 'number') {
+ throw new TypeError('"value" argument must not be a number')
+ }
+
+ if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
+ return fromArrayBuffer(that, value, offset, length)
+ }
+
+ if (typeof value === 'string') {
+ return fromString(that, value, offset)
+ }
+
+ return fromObject(that, value)
+}
+
+Buffer.prototype.write = function write (string, offset, length) {
+ // Buffer#write(string)
+ if (offset === undefined) {
+ length = this.length
+ offset = 0
+ // Buffer#write(string, encoding)
+ } else if (length === undefined && typeof offset === 'string') {
+ length = this.length
+ offset = 0
+ // Buffer#write(string, offset[, length])
+ } else if (isFinite(offset)) {
+ offset = offset | 0
+ if (isFinite(length)) {
+ length = length | 0
+ } else {
+ length = undefined
+ }
+ }
+
+ var remaining = this.length - offset
+ if (length === undefined || length > remaining) length = remaining
+
+ if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
+ throw new RangeError('Attempt to write outside buffer bounds')
+ }
+
+ return utf8Write(this, string, offset, length)
+}
+
+Buffer.prototype.slice = function slice (start, end) {
+ var len = this.length
+ start = ~~start
+ end = end === undefined ? len : ~~end
+
+ if (start < 0) {
+ start += len
+ if (start < 0) start = 0
+ } else if (start > len) {
+ start = len
+ }
+
+ if (end < 0) {
+ end += len
+ if (end < 0) end = 0
+ } else if (end > len) {
+ end = len
+ }
+
+ if (end < start) end = start
+
+ var newBuf
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ newBuf = this.subarray(start, end)
+ // Return an augmented `Uint8Array` instance
+ newBuf.__proto__ = Buffer.prototype
+ } else {
+ var sliceLen = end - start
+ newBuf = new Buffer(sliceLen, undefined)
+ for (var i = 0; i < sliceLen; ++i) {
+ newBuf[i] = this[i + start]
+ }
+ }
+
+ return newBuf
+}
+
+Buffer.prototype.copy = function copy (target, targetStart, start, end) {
+ if (!start) start = 0
+ if (!end && end !== 0) end = this.length
+ if (targetStart >= target.length) targetStart = target.length
+ if (!targetStart) targetStart = 0
+ if (end > 0 && end < start) end = start
+
+ // Copy 0 bytes; we're done
+ if (end === start) return 0
+ if (target.length === 0 || this.length === 0) return 0
+
+ // Fatal error conditions
+ if (targetStart < 0) {
+ throw new RangeError('targetStart out of bounds')
+ }
+ if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
+ if (end < 0) throw new RangeError('sourceEnd out of bounds')
+
+ // Are we oob?
+ if (end > this.length) end = this.length
+ if (target.length - targetStart < end - start) {
+ end = target.length - targetStart + start
+ }
+
+ var len = end - start
+ var i
+
+ if (this === target && start < targetStart && targetStart < end) {
+ // descending copy from end
+ for (i = len - 1; i >= 0; --i) {
+ target[i + targetStart] = this[i + start]
+ }
+ } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
+ // ascending copy from start
+ for (i = 0; i < len; ++i) {
+ target[i + targetStart] = this[i + start]
+ }
+ } else {
+ Uint8Array.prototype.set.call(
+ target,
+ this.subarray(start, start + len),
+ targetStart
+ )
+ }
+
+ return len
+}
+
+Buffer.prototype.fill = function fill (val, start, end) {
+ // Handle string cases:
+ if (typeof val === 'string') {
+ if (typeof start === 'string') {
+ start = 0
+ end = this.length
+ } else if (typeof end === 'string') {
+ end = this.length
+ }
+ if (val.length === 1) {
+ var code = val.charCodeAt(0)
+ if (code < 256) {
+ val = code
+ }
+ }
+ } else if (typeof val === 'number') {
+ val = val & 255
+ }
+
+ // Invalid ranges are not set to a default, so can range check early.
+ if (start < 0 || this.length < start || this.length < end) {
+ throw new RangeError('Out of range index')
+ }
+
+ if (end <= start) {
+ return this
+ }
+
+ start = start >>> 0
+ end = end === undefined ? this.length : end >>> 0
+
+ if (!val) val = 0
+
+ var i
+ if (typeof val === 'number') {
+ for (i = start; i < end; ++i) {
+ this[i] = val
+ }
+ } else {
+ var bytes = Buffer.isBuffer(val)
+ ? val
+ : new Buffer(val)
+ var len = bytes.length
+ for (i = 0; i < end - start; ++i) {
+ this[i + start] = bytes[i % len]
+ }
+ }
+
+ return this
+}
+
+Buffer.concat = function concat (list, length) {
+ if (!isArray(list)) {
+ throw new TypeError('"list" argument must be an Array of Buffers')
+ }
+
+ if (list.length === 0) {
+ return createBuffer(null, 0)
+ }
+
+ var i
+ if (length === undefined) {
+ length = 0
+ for (i = 0; i < list.length; ++i) {
+ length += list[i].length
+ }
+ }
+
+ var buffer = allocUnsafe(null, length)
+ var pos = 0
+ for (i = 0; i < list.length; ++i) {
+ var buf = list[i]
+ if (!Buffer.isBuffer(buf)) {
+ throw new TypeError('"list" argument must be an Array of Buffers')
+ }
+ buf.copy(buffer, pos)
+ pos += buf.length
+ }
+ return buffer
+}
+
+Buffer.byteLength = byteLength
+
+Buffer.prototype._isBuffer = true
+Buffer.isBuffer = function isBuffer (b) {
+ return !!(b != null && b._isBuffer)
+}
+
+module.exports = Buffer
+
+
+/***/ }),
+
+/***/ "./node_modules/qrcode/node_modules/isarray/index.js":
+/*!***********************************************************!*\
+ !*** ./node_modules/qrcode/node_modules/isarray/index.js ***!
+ \***********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+var toString = {}.toString;
+
+module.exports = Array.isArray || function (arr) {
+ return toString.call(arr) == '[object Array]';
+};
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/AlertBox.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/AlertBox.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "AlertBoxIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Alert Box icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Delete.vue?vue&type=script&lang=js&":
+/*!**************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Delete.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "DeleteIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Delete icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/DotsHorizontal.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/DotsHorizontal.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "DotsHorizontalIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Dots Horizontal icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/LinkVariant.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/LinkVariant.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "LinkVariantIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Link Variant icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/LockAlert.vue?vue&type=script&lang=js&":
+/*!*****************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/LockAlert.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "LockAlertIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Lock Alert icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Markdown.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Markdown.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "MarkdownIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Markdown icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Pencil.vue?vue&type=script&lang=js&":
+/*!**************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Pencil.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "PencilIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Pencil icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Reply.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Reply.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "ReplyIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Reply icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Share.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Share.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "ShareIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Share icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Star.vue?vue&type=script&lang=js&":
+/*!************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Star.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "StarIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Star icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbDown.vue?vue&type=script&lang=js&":
+/*!*****************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/ThumbDown.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "ThumbDownIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Thumb Down icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbDownOutline.vue?vue&type=script&lang=js&":
+/*!************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/ThumbDownOutline.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "ThumbDownOutlineIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Thumb Down Outline icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbUp.vue?vue&type=script&lang=js&":
+/*!***************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/ThumbUp.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "ThumbUpIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Thumb Up icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbUpOutline.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/ThumbUpOutline.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "ThumbUpOutlineIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Thumb Up Outline icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=script&lang=js&":
+/*!******************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "VolumeHighIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Volume High icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=script&lang=js&":
+/*!******************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "VolumeMuteIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Volume Mute icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/AlertBox.vue?vue&type=template&id=b373690a&":
+/*!**************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/AlertBox.vue?vue&type=template&id=b373690a& ***!
+ \**************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon alert-box-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M5,3H19C20.1,3 21,3.9 21,5V19C21,20.1 20.1,21 19,21H5C3.9,21 3,20.1 3,19V5C3,3.9 3.9,3 5,3M13,13V7H11V13H13M13,17V15H11V17H13Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Delete.vue?vue&type=template&id=423aa957&":
+/*!************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Delete.vue?vue&type=template&id=423aa957& ***!
+ \************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon delete-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M19,4H15.5L14.5,3H9.5L8.5,4H5V6H19M6,19C6,20.1 6.9,21 8,21H16C17.1,21 18,20.1 18,19V7H6V19Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/DotsHorizontal.vue?vue&type=template&id=3174c38c&":
+/*!********************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/DotsHorizontal.vue?vue&type=template&id=3174c38c& ***!
+ \********************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon dots-horizontal-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M16,12C16,10.9 16.9,10 18,10C19.1,10 20,10.9 20,12C20,13.1 19.1,14 18,14C16.9,14 16,13.1 16,12M10,12C10,10.9 10.9,10 12,10C13.1,10 14,10.9 14,12C14,13.1 13.1,14 12,14C10.9,14 10,13.1 10,12M4,12C4,10.9 4.9,10 6,10C7.1,10 8,10.9 8,12C8,13.1 7.1,14 6,14C4.9,14 4,13.1 4,12Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/LinkVariant.vue?vue&type=template&id=36a2ce2f&":
+/*!*****************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/LinkVariant.vue?vue&type=template&id=36a2ce2f& ***!
+ \*****************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon link-variant-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M10.59,13.41C11,13.8 11,14.44 10.59,14.83C10.2,15.22 9.56,15.22 9.17,14.83C7.22,12.88 7.22,9.71 9.17,7.76V7.76L12.71,4.22C14.66,2.27 17.83,2.27 19.78,4.22C21.73,6.17 21.73,9.34 19.78,11.29L18.29,12.78C18.3,11.96 18.17,11.14 17.89,10.36L18.36,9.88C19.54,8.71 19.54,6.81 18.36,5.64C17.19,4.46 15.29,4.46 14.12,5.64L10.59,9.17C9.41,10.34 9.41,12.24 10.59,13.41M13.41,9.17C13.8,8.78 14.44,8.78 14.83,9.17C16.78,11.12 16.78,14.29 14.83,16.24V16.24L11.29,19.78C9.34,21.73 6.17,21.73 4.22,19.78C2.27,17.83 2.27,14.66 4.22,12.71L5.71,11.22C5.7,12.04 5.83,12.86 6.11,13.65L5.64,14.12C4.46,15.29 4.46,17.19 5.64,18.36C6.81,19.54 8.71,19.54 9.88,18.36L13.41,14.83C14.59,13.66 14.59,11.76 13.41,10.59C13,10.2 13,9.56 13.41,9.17Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/LockAlert.vue?vue&type=template&id=0b3b71f5&":
+/*!***************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/LockAlert.vue?vue&type=template&id=0b3b71f5& ***!
+ \***************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon lock-alert-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M12,1C9.24,1 7,3.24 7,6V8H6C4.9,8 4,8.9 4,10V20C4,21.1 4.9,22 6,22H18C19.1,22 20,21.1 20,20V10C20,8.9 19.1,8 18,8H17V6C17,3.24 14.76,1 12,1M12,2.9C13.71,2.9 15.1,4.29 15.1,6V8H8.9V6C8.9,4.29 10.29,2.9 12,2.9M11,11H13V15H11V11M11,17H13V19H11V17Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Markdown.vue?vue&type=template&id=5bbcecca&":
+/*!**************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Markdown.vue?vue&type=template&id=5bbcecca& ***!
+ \**************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon markdown-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M2,16V8H4L7,11L10,8H12V16H10V10.83L7,13.83L4,10.83V16H2M16,8H19V12H21.5L17.5,16.5L13.5,12H16V8Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Pencil.vue?vue&type=template&id=093f2fb9&":
+/*!************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Pencil.vue?vue&type=template&id=093f2fb9& ***!
+ \************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon pencil-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Reply.vue?vue&type=template&id=3faadf6e&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Reply.vue?vue&type=template&id=3faadf6e& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon reply-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M10,9V5L3,12L10,19V14.9C15,14.9 18.5,16.5 21,20C20,15 17,10 10,9Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Share.vue?vue&type=template&id=098ecc3a&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Share.vue?vue&type=template&id=098ecc3a& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon share-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M21,12L14,5V9C7,10 4,15 3,20C5.5,16.5 9,14.9 14,14.9V19L21,12Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Star.vue?vue&type=template&id=553bd904&":
+/*!**********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Star.vue?vue&type=template&id=553bd904& ***!
+ \**********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon star-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbDown.vue?vue&type=template&id=b61641c8&":
+/*!***************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/ThumbDown.vue?vue&type=template&id=b61641c8& ***!
+ \***************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon thumb-down-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M19,15H23V3H19M15,3H6C5.17,3 4.46,3.5 4.16,4.22L1.14,11.27C1.05,11.5 1,11.74 1,12V14C1,15.1 1.9,16 3,16H9.31L8.36,20.57C8.34,20.67 8.33,20.77 8.33,20.88C8.33,21.3 8.5,21.67 8.77,21.94L9.83,23L16.41,16.41C16.78,16.05 17,15.55 17,15V5C17,3.89 16.1,3 15,3Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbDownOutline.vue?vue&type=template&id=1721e8b6&":
+/*!**********************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/ThumbDownOutline.vue?vue&type=template&id=1721e8b6& ***!
+ \**********************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon thumb-down-outline-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M19,15V3H23V15H19M15,3C16.1,3 17,3.9 17,5V15C17,15.55 16.78,16.05 16.41,16.41L9.83,23L8.77,21.94C8.5,21.67 8.33,21.3 8.33,20.88L8.36,20.57L9.31,16H3C1.89,16 1,15.1 1,14V12C1,11.74 1.05,11.5 1.14,11.27L4.16,4.22C4.46,3.5 5.17,3 6,3H15M15,5H5.97L3,12V14H11.78L10.65,19.32L15,14.97V5Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbUp.vue?vue&type=template&id=549215d6&":
+/*!*************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/ThumbUp.vue?vue&type=template&id=549215d6& ***!
+ \*************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon thumb-up-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M23,10C23,8.89 22.1,8 21,8H14.68L15.64,3.43C15.66,3.33 15.67,3.22 15.67,3.11C15.67,2.7 15.5,2.32 15.23,2.05L14.17,1L7.59,7.58C7.22,7.95 7,8.45 7,9V19C7,20.1 7.9,21 9,21H18C18.83,21 19.54,20.5 19.84,19.78L22.86,12.73C22.95,12.5 23,12.26 23,12V10M1,21H5V9H1V21Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbUpOutline.vue?vue&type=template&id=6ad2d89d&":
+/*!********************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/ThumbUpOutline.vue?vue&type=template&id=6ad2d89d& ***!
+ \********************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon thumb-up-outline-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M5,9V21H1V9H5M9,21C7.9,21 7,20.1 7,19V9C7,8.45 7.22,7.95 7.59,7.59L14.17,1L15.23,2.06C15.5,2.33 15.67,2.7 15.67,3.11L15.64,3.43L14.69,8H21C22.11,8 23,8.9 23,10V12C23,12.26 22.95,12.5 22.86,12.73L19.84,19.78C19.54,20.5 18.83,21 18,21H9M9,19H18.03L21,12V10H12.21L13.34,4.68L9,9.03V19Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=template&id=ffdb55f0&":
+/*!****************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=template&id=ffdb55f0& ***!
+ \****************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon volume-high-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M14,3.23V5.29C16.89,6.15 19,8.83 19,12C19,15.17 16.89,17.84 14,18.7V20.77C18,19.86 21,16.28 21,12C21,7.72 18,4.14 14,3.23M16.5,12C16.5,10.23 15.5,8.71 14,7.97V16C15.5,15.29 16.5,13.76 16.5,12M3,9V15H7L12,20V4L7,9H3Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=template&id=1847b5ff&":
+/*!****************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=template&id=1847b5ff& ***!
+ \****************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon volume-mute-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M3,9H7L12,4V20L7,15H3V9M16.59,12L14,9.41L15.41,8L18,10.59L20.59,8L22,9.41L19.41,12L22,14.59L20.59,16L18,13.41L15.41,16L14,14.59L16.59,12Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/AlertBox.vue":
+/*!*************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/AlertBox.vue ***!
+ \*************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _AlertBox_vue_vue_type_template_id_b373690a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AlertBox.vue?vue&type=template&id=b373690a& */ "./node_modules/vue-material-design-icons/AlertBox.vue?vue&type=template&id=b373690a&");
+/* harmony import */ var _AlertBox_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AlertBox.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/AlertBox.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _AlertBox_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _AlertBox_vue_vue_type_template_id_b373690a___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _AlertBox_vue_vue_type_template_id_b373690a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/AlertBox.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/AlertBox.vue?vue&type=script&lang=js&":
+/*!**************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/AlertBox.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_AlertBox_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./AlertBox.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/AlertBox.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_AlertBox_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/AlertBox.vue?vue&type=template&id=b373690a&":
+/*!********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/AlertBox.vue?vue&type=template&id=b373690a& ***!
+ \********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_AlertBox_vue_vue_type_template_id_b373690a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./AlertBox.vue?vue&type=template&id=b373690a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/AlertBox.vue?vue&type=template&id=b373690a&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_AlertBox_vue_vue_type_template_id_b373690a___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_AlertBox_vue_vue_type_template_id_b373690a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Delete.vue":
+/*!***********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Delete.vue ***!
+ \***********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Delete_vue_vue_type_template_id_423aa957___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Delete.vue?vue&type=template&id=423aa957& */ "./node_modules/vue-material-design-icons/Delete.vue?vue&type=template&id=423aa957&");
+/* harmony import */ var _Delete_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Delete.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Delete.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Delete_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Delete_vue_vue_type_template_id_423aa957___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Delete_vue_vue_type_template_id_423aa957___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Delete.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Delete.vue?vue&type=script&lang=js&":
+/*!************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Delete.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Delete_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Delete.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Delete.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Delete_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Delete.vue?vue&type=template&id=423aa957&":
+/*!******************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Delete.vue?vue&type=template&id=423aa957& ***!
+ \******************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Delete_vue_vue_type_template_id_423aa957___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Delete.vue?vue&type=template&id=423aa957& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Delete.vue?vue&type=template&id=423aa957&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Delete_vue_vue_type_template_id_423aa957___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Delete_vue_vue_type_template_id_423aa957___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/DotsHorizontal.vue":
+/*!*******************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/DotsHorizontal.vue ***!
+ \*******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _DotsHorizontal_vue_vue_type_template_id_3174c38c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./DotsHorizontal.vue?vue&type=template&id=3174c38c& */ "./node_modules/vue-material-design-icons/DotsHorizontal.vue?vue&type=template&id=3174c38c&");
+/* harmony import */ var _DotsHorizontal_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./DotsHorizontal.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/DotsHorizontal.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _DotsHorizontal_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _DotsHorizontal_vue_vue_type_template_id_3174c38c___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _DotsHorizontal_vue_vue_type_template_id_3174c38c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/DotsHorizontal.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/DotsHorizontal.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/DotsHorizontal.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_DotsHorizontal_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./DotsHorizontal.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/DotsHorizontal.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_DotsHorizontal_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/DotsHorizontal.vue?vue&type=template&id=3174c38c&":
+/*!**************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/DotsHorizontal.vue?vue&type=template&id=3174c38c& ***!
+ \**************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_DotsHorizontal_vue_vue_type_template_id_3174c38c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./DotsHorizontal.vue?vue&type=template&id=3174c38c& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/DotsHorizontal.vue?vue&type=template&id=3174c38c&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_DotsHorizontal_vue_vue_type_template_id_3174c38c___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_DotsHorizontal_vue_vue_type_template_id_3174c38c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/LinkVariant.vue":
+/*!****************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/LinkVariant.vue ***!
+ \****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _LinkVariant_vue_vue_type_template_id_36a2ce2f___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./LinkVariant.vue?vue&type=template&id=36a2ce2f& */ "./node_modules/vue-material-design-icons/LinkVariant.vue?vue&type=template&id=36a2ce2f&");
+/* harmony import */ var _LinkVariant_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./LinkVariant.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/LinkVariant.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _LinkVariant_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _LinkVariant_vue_vue_type_template_id_36a2ce2f___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _LinkVariant_vue_vue_type_template_id_36a2ce2f___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/LinkVariant.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/LinkVariant.vue?vue&type=script&lang=js&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/LinkVariant.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_LinkVariant_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./LinkVariant.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/LinkVariant.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_LinkVariant_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/LinkVariant.vue?vue&type=template&id=36a2ce2f&":
+/*!***********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/LinkVariant.vue?vue&type=template&id=36a2ce2f& ***!
+ \***********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_LinkVariant_vue_vue_type_template_id_36a2ce2f___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./LinkVariant.vue?vue&type=template&id=36a2ce2f& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/LinkVariant.vue?vue&type=template&id=36a2ce2f&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_LinkVariant_vue_vue_type_template_id_36a2ce2f___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_LinkVariant_vue_vue_type_template_id_36a2ce2f___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/LockAlert.vue":
+/*!**************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/LockAlert.vue ***!
+ \**************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _LockAlert_vue_vue_type_template_id_0b3b71f5___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./LockAlert.vue?vue&type=template&id=0b3b71f5& */ "./node_modules/vue-material-design-icons/LockAlert.vue?vue&type=template&id=0b3b71f5&");
+/* harmony import */ var _LockAlert_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./LockAlert.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/LockAlert.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _LockAlert_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _LockAlert_vue_vue_type_template_id_0b3b71f5___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _LockAlert_vue_vue_type_template_id_0b3b71f5___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/LockAlert.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/LockAlert.vue?vue&type=script&lang=js&":
+/*!***************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/LockAlert.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_LockAlert_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./LockAlert.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/LockAlert.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_LockAlert_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/LockAlert.vue?vue&type=template&id=0b3b71f5&":
+/*!*********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/LockAlert.vue?vue&type=template&id=0b3b71f5& ***!
+ \*********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_LockAlert_vue_vue_type_template_id_0b3b71f5___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./LockAlert.vue?vue&type=template&id=0b3b71f5& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/LockAlert.vue?vue&type=template&id=0b3b71f5&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_LockAlert_vue_vue_type_template_id_0b3b71f5___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_LockAlert_vue_vue_type_template_id_0b3b71f5___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Markdown.vue":
+/*!*************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Markdown.vue ***!
+ \*************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Markdown_vue_vue_type_template_id_5bbcecca___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Markdown.vue?vue&type=template&id=5bbcecca& */ "./node_modules/vue-material-design-icons/Markdown.vue?vue&type=template&id=5bbcecca&");
+/* harmony import */ var _Markdown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Markdown.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Markdown.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Markdown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Markdown_vue_vue_type_template_id_5bbcecca___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Markdown_vue_vue_type_template_id_5bbcecca___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Markdown.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Markdown.vue?vue&type=script&lang=js&":
+/*!**************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Markdown.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Markdown.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Markdown.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Markdown.vue?vue&type=template&id=5bbcecca&":
+/*!********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Markdown.vue?vue&type=template&id=5bbcecca& ***!
+ \********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_template_id_5bbcecca___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Markdown.vue?vue&type=template&id=5bbcecca& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Markdown.vue?vue&type=template&id=5bbcecca&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_template_id_5bbcecca___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_template_id_5bbcecca___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Pencil.vue":
+/*!***********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Pencil.vue ***!
+ \***********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Pencil_vue_vue_type_template_id_093f2fb9___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Pencil.vue?vue&type=template&id=093f2fb9& */ "./node_modules/vue-material-design-icons/Pencil.vue?vue&type=template&id=093f2fb9&");
+/* harmony import */ var _Pencil_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Pencil.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Pencil.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Pencil_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Pencil_vue_vue_type_template_id_093f2fb9___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Pencil_vue_vue_type_template_id_093f2fb9___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Pencil.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Pencil.vue?vue&type=script&lang=js&":
+/*!************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Pencil.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Pencil_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Pencil.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Pencil.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Pencil_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Pencil.vue?vue&type=template&id=093f2fb9&":
+/*!******************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Pencil.vue?vue&type=template&id=093f2fb9& ***!
+ \******************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Pencil_vue_vue_type_template_id_093f2fb9___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Pencil.vue?vue&type=template&id=093f2fb9& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Pencil.vue?vue&type=template&id=093f2fb9&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Pencil_vue_vue_type_template_id_093f2fb9___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Pencil_vue_vue_type_template_id_093f2fb9___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Reply.vue":
+/*!**********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Reply.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Reply_vue_vue_type_template_id_3faadf6e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Reply.vue?vue&type=template&id=3faadf6e& */ "./node_modules/vue-material-design-icons/Reply.vue?vue&type=template&id=3faadf6e&");
+/* harmony import */ var _Reply_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Reply.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Reply.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Reply_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Reply_vue_vue_type_template_id_3faadf6e___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Reply_vue_vue_type_template_id_3faadf6e___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Reply.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Reply.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Reply.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Reply_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Reply.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Reply.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Reply_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Reply.vue?vue&type=template&id=3faadf6e&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Reply.vue?vue&type=template&id=3faadf6e& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Reply_vue_vue_type_template_id_3faadf6e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Reply.vue?vue&type=template&id=3faadf6e& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Reply.vue?vue&type=template&id=3faadf6e&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Reply_vue_vue_type_template_id_3faadf6e___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Reply_vue_vue_type_template_id_3faadf6e___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Share.vue":
+/*!**********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Share.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Share_vue_vue_type_template_id_098ecc3a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Share.vue?vue&type=template&id=098ecc3a& */ "./node_modules/vue-material-design-icons/Share.vue?vue&type=template&id=098ecc3a&");
+/* harmony import */ var _Share_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Share.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Share.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Share_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Share_vue_vue_type_template_id_098ecc3a___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Share_vue_vue_type_template_id_098ecc3a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Share.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Share.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Share.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Share_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Share.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Share.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Share_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Share.vue?vue&type=template&id=098ecc3a&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Share.vue?vue&type=template&id=098ecc3a& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Share_vue_vue_type_template_id_098ecc3a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Share.vue?vue&type=template&id=098ecc3a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Share.vue?vue&type=template&id=098ecc3a&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Share_vue_vue_type_template_id_098ecc3a___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Share_vue_vue_type_template_id_098ecc3a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Star.vue":
+/*!*********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Star.vue ***!
+ \*********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Star_vue_vue_type_template_id_553bd904___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Star.vue?vue&type=template&id=553bd904& */ "./node_modules/vue-material-design-icons/Star.vue?vue&type=template&id=553bd904&");
+/* harmony import */ var _Star_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Star.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Star.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Star_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Star_vue_vue_type_template_id_553bd904___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Star_vue_vue_type_template_id_553bd904___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Star.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Star.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Star.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Star_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Star.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Star.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Star_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Star.vue?vue&type=template&id=553bd904&":
+/*!****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Star.vue?vue&type=template&id=553bd904& ***!
+ \****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Star_vue_vue_type_template_id_553bd904___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Star.vue?vue&type=template&id=553bd904& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Star.vue?vue&type=template&id=553bd904&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Star_vue_vue_type_template_id_553bd904___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Star_vue_vue_type_template_id_553bd904___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ThumbDown.vue":
+/*!**************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ThumbDown.vue ***!
+ \**************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _ThumbDown_vue_vue_type_template_id_b61641c8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ThumbDown.vue?vue&type=template&id=b61641c8& */ "./node_modules/vue-material-design-icons/ThumbDown.vue?vue&type=template&id=b61641c8&");
+/* harmony import */ var _ThumbDown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ThumbDown.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/ThumbDown.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _ThumbDown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _ThumbDown_vue_vue_type_template_id_b61641c8___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _ThumbDown_vue_vue_type_template_id_b61641c8___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/ThumbDown.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ThumbDown.vue?vue&type=script&lang=js&":
+/*!***************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ThumbDown.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_ThumbDown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./ThumbDown.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbDown.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_ThumbDown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ThumbDown.vue?vue&type=template&id=b61641c8&":
+/*!*********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ThumbDown.vue?vue&type=template&id=b61641c8& ***!
+ \*********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ThumbDown_vue_vue_type_template_id_b61641c8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./ThumbDown.vue?vue&type=template&id=b61641c8& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbDown.vue?vue&type=template&id=b61641c8&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ThumbDown_vue_vue_type_template_id_b61641c8___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ThumbDown_vue_vue_type_template_id_b61641c8___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ThumbDownOutline.vue":
+/*!*********************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ThumbDownOutline.vue ***!
+ \*********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _ThumbDownOutline_vue_vue_type_template_id_1721e8b6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ThumbDownOutline.vue?vue&type=template&id=1721e8b6& */ "./node_modules/vue-material-design-icons/ThumbDownOutline.vue?vue&type=template&id=1721e8b6&");
+/* harmony import */ var _ThumbDownOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ThumbDownOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/ThumbDownOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _ThumbDownOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _ThumbDownOutline_vue_vue_type_template_id_1721e8b6___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _ThumbDownOutline_vue_vue_type_template_id_1721e8b6___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/ThumbDownOutline.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ThumbDownOutline.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ThumbDownOutline.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_ThumbDownOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./ThumbDownOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbDownOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_ThumbDownOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ThumbDownOutline.vue?vue&type=template&id=1721e8b6&":
+/*!****************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ThumbDownOutline.vue?vue&type=template&id=1721e8b6& ***!
+ \****************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ThumbDownOutline_vue_vue_type_template_id_1721e8b6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./ThumbDownOutline.vue?vue&type=template&id=1721e8b6& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbDownOutline.vue?vue&type=template&id=1721e8b6&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ThumbDownOutline_vue_vue_type_template_id_1721e8b6___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ThumbDownOutline_vue_vue_type_template_id_1721e8b6___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ThumbUp.vue":
+/*!************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ThumbUp.vue ***!
+ \************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _ThumbUp_vue_vue_type_template_id_549215d6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ThumbUp.vue?vue&type=template&id=549215d6& */ "./node_modules/vue-material-design-icons/ThumbUp.vue?vue&type=template&id=549215d6&");
+/* harmony import */ var _ThumbUp_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ThumbUp.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/ThumbUp.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _ThumbUp_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _ThumbUp_vue_vue_type_template_id_549215d6___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _ThumbUp_vue_vue_type_template_id_549215d6___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/ThumbUp.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ThumbUp.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ThumbUp.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_ThumbUp_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./ThumbUp.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbUp.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_ThumbUp_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ThumbUp.vue?vue&type=template&id=549215d6&":
+/*!*******************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ThumbUp.vue?vue&type=template&id=549215d6& ***!
+ \*******************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ThumbUp_vue_vue_type_template_id_549215d6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./ThumbUp.vue?vue&type=template&id=549215d6& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbUp.vue?vue&type=template&id=549215d6&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ThumbUp_vue_vue_type_template_id_549215d6___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ThumbUp_vue_vue_type_template_id_549215d6___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ThumbUpOutline.vue":
+/*!*******************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ThumbUpOutline.vue ***!
+ \*******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _ThumbUpOutline_vue_vue_type_template_id_6ad2d89d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ThumbUpOutline.vue?vue&type=template&id=6ad2d89d& */ "./node_modules/vue-material-design-icons/ThumbUpOutline.vue?vue&type=template&id=6ad2d89d&");
+/* harmony import */ var _ThumbUpOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ThumbUpOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/ThumbUpOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _ThumbUpOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _ThumbUpOutline_vue_vue_type_template_id_6ad2d89d___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _ThumbUpOutline_vue_vue_type_template_id_6ad2d89d___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/ThumbUpOutline.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ThumbUpOutline.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ThumbUpOutline.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_ThumbUpOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./ThumbUpOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbUpOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_ThumbUpOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ThumbUpOutline.vue?vue&type=template&id=6ad2d89d&":
+/*!**************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ThumbUpOutline.vue?vue&type=template&id=6ad2d89d& ***!
+ \**************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ThumbUpOutline_vue_vue_type_template_id_6ad2d89d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./ThumbUpOutline.vue?vue&type=template&id=6ad2d89d& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ThumbUpOutline.vue?vue&type=template&id=6ad2d89d&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ThumbUpOutline_vue_vue_type_template_id_6ad2d89d___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ThumbUpOutline_vue_vue_type_template_id_6ad2d89d___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/VolumeHigh.vue":
+/*!***************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/VolumeHigh.vue ***!
+ \***************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _VolumeHigh_vue_vue_type_template_id_ffdb55f0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VolumeHigh.vue?vue&type=template&id=ffdb55f0& */ "./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=template&id=ffdb55f0&");
+/* harmony import */ var _VolumeHigh_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VolumeHigh.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _VolumeHigh_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _VolumeHigh_vue_vue_type_template_id_ffdb55f0___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _VolumeHigh_vue_vue_type_template_id_ffdb55f0___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/VolumeHigh.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_VolumeHigh_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./VolumeHigh.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_VolumeHigh_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=template&id=ffdb55f0&":
+/*!**********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=template&id=ffdb55f0& ***!
+ \**********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_VolumeHigh_vue_vue_type_template_id_ffdb55f0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./VolumeHigh.vue?vue&type=template&id=ffdb55f0& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=template&id=ffdb55f0&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_VolumeHigh_vue_vue_type_template_id_ffdb55f0___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_VolumeHigh_vue_vue_type_template_id_ffdb55f0___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/VolumeMute.vue":
+/*!***************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/VolumeMute.vue ***!
+ \***************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _VolumeMute_vue_vue_type_template_id_1847b5ff___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VolumeMute.vue?vue&type=template&id=1847b5ff& */ "./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=template&id=1847b5ff&");
+/* harmony import */ var _VolumeMute_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VolumeMute.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _VolumeMute_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _VolumeMute_vue_vue_type_template_id_1847b5ff___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _VolumeMute_vue_vue_type_template_id_1847b5ff___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/VolumeMute.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_VolumeMute_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./VolumeMute.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_VolumeMute_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=template&id=1847b5ff&":
+/*!**********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=template&id=1847b5ff& ***!
+ \**********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_VolumeMute_vue_vue_type_template_id_1847b5ff___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./VolumeMute.vue?vue&type=template&id=1847b5ff& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=template&id=1847b5ff&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_VolumeMute_vue_vue_type_template_id_1847b5ff___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_VolumeMute_vue_vue_type_template_id_1847b5ff___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/17.731bae53e208787b7c5c.js b/public/17.731bae53e208787b7c5c.js
new file mode 100644
index 00000000..ff680ae9
--- /dev/null
+++ b/public/17.731bae53e208787b7c5c.js
@@ -0,0 +1,4264 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[17],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/animate-action.vue?vue&type=script&lang=js&":
+/*!************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/animate-action.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var mo_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mo-js */ "./node_modules/mo-js/build/mo.js");
+/* harmony import */ var mo_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mo_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var $icons_ThumbUpOutline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/ThumbUpOutline */ "./node_modules/vue-material-design-icons/ThumbUpOutline.vue");
+/* harmony import */ var $icons_ThumbUp__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/ThumbUp */ "./node_modules/vue-material-design-icons/ThumbUp.vue");
+/* harmony import */ var _relation_btn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./relation-btn */ "./src/components/buttons/relation-btn.vue");
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ components: {
+ RelationBtn: _relation_btn__WEBPACK_IMPORTED_MODULE_3__["default"],
+ ThumbUp: $icons_ThumbUp__WEBPACK_IMPORTED_MODULE_2__["default"],
+ ThumbUpOutline: $icons_ThumbUpOutline__WEBPACK_IMPORTED_MODULE_1__["default"]
+ },
+ props: {
+ item: {
+ type: Object,
+ required: true
+ }
+ },
+ data: function data() {
+ return {
+ likers: this.item.cache.likes_count,
+ animationTimeline: null
+ };
+ },
+ computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_4__["mapGetters"])(['currentUser'])),
+ methods: {
+ toggle: function toggle() {
+ var _this = this;
+
+ if (!this.currentUser.id) {
+ return this.$router.push({
+ name: 'auth.login'
+ });
+ }
+
+ this.$http.post("relations/like", {
+ followable_type: 'App\\Thread',
+ followable_id: this.item.id
+ }).then(function () {
+ _this.item.has_liked = !_this.item.has_liked;
+ _this.item.has_liked ? _this.$parent.thread.cache.likes_count++ : _this.$parent.thread.cache.likes_count--;
+ });
+ },
+ repeatClapping: function repeatClapping() {
+ var clapIcon = document.getElementById('clap--icon');
+ this.updateNumberOfClaps();
+ this.animationTimeline.replay();
+ clapIcon.classList.add('checked');
+ },
+ updateNumberOfClaps: function updateNumberOfClaps() {
+ var clapCount = document.getElementById('clap--count');
+ var clapTotalCount = document.getElementById('clap--count-total');
+ this.likers = this.$parent.thread.cache.likes_count;
+
+ if (this.item.has_liked) {
+ clapCount.innerHTML = '-1';
+ clapTotalCount.innerHTML = this.likers - 1;
+ this.likers--;
+ } else {
+ clapCount.innerHTML = '+1';
+ clapTotalCount.innerHTML = this.likers + 1;
+ this.likers++;
+ }
+ }
+ },
+ mounted: function mounted() {
+ var vm = this;
+ var clap = document.getElementById('clap');
+ var tlDuration = 300;
+ var clapHold;
+ var triangleBurst = new mo_js__WEBPACK_IMPORTED_MODULE_0___default.a.Burst({
+ parent: clap,
+ radius: {
+ 50: 95
+ },
+ count: 5,
+ angle: 30,
+ children: {
+ shape: 'polygon',
+ radius: {
+ 6: 0
+ },
+ scale: 1,
+ stroke: 'rgba(211,84,0 ,0.5)',
+ strokeWidth: 2,
+ angle: 210,
+ delay: 30,
+ speed: 0.2,
+ easing: mo_js__WEBPACK_IMPORTED_MODULE_0___default.a.easing.bezier(0.1, 1, 0.3, 1),
+ duration: tlDuration
+ }
+ });
+ var circleBurst = new mo_js__WEBPACK_IMPORTED_MODULE_0___default.a.Burst({
+ parent: clap,
+ radius: {
+ 50: 75
+ },
+ angle: 25,
+ duration: tlDuration,
+ children: {
+ shape: 'circle',
+ fill: 'rgba(149,165,166 ,0.5)',
+ delay: 30,
+ speed: 0.2,
+ radius: {
+ 3: 0
+ },
+ easing: mo_js__WEBPACK_IMPORTED_MODULE_0___default.a.easing.bezier(0.1, 1, 0.3, 1)
+ }
+ });
+ var countAnimation = new mo_js__WEBPACK_IMPORTED_MODULE_0___default.a.Html({
+ el: '#clap--count',
+ isShowStart: false,
+ isShowEnd: true,
+ y: {
+ 0: -30
+ },
+ opacity: {
+ 0: 1
+ },
+ duration: tlDuration
+ }).then({
+ opacity: {
+ 1: 0
+ },
+ y: -80,
+ delay: tlDuration / 2
+ });
+ var countTotalAnimation = new mo_js__WEBPACK_IMPORTED_MODULE_0___default.a.Html({
+ el: '#clap--count-total',
+ isShowStart: false,
+ isShowEnd: true,
+ opacity: {
+ 0: 1
+ },
+ delay: 3 * tlDuration / 2,
+ duration: tlDuration,
+ y: {
+ 0: -3
+ }
+ });
+ var scaleButton = new mo_js__WEBPACK_IMPORTED_MODULE_0___default.a.Html({
+ el: '#clap',
+ duration: tlDuration,
+ scale: {
+ 1.3: 1
+ },
+ easing: mo_js__WEBPACK_IMPORTED_MODULE_0___default.a.easing.out
+ });
+ clap.style.transform = 'scale(1, 1)';
+ /* Bug1 fix */
+
+ this.animationTimeline = new mo_js__WEBPACK_IMPORTED_MODULE_0___default.a.Timeline();
+ this.animationTimeline.add([triangleBurst, circleBurst, countAnimation, countTotalAnimation, scaleButton]);
+ clap.addEventListener('click', function () {
+ vm.repeatClapping();
+ });
+ clap.addEventListener('mousedown', function () {
+ clapHold = setInterval(function () {
+ vm.repeatClapping();
+ }, 400);
+ });
+ clap.addEventListener('mouseup', function () {
+ clearInterval(clapHold);
+ });
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/like-btn.vue?vue&type=script&lang=js&":
+/*!******************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/like-btn.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _relation_btn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./relation-btn */ "./src/components/buttons/relation-btn.vue");
+/* harmony import */ var $icons_ThumbUp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/ThumbUp */ "./node_modules/vue-material-design-icons/ThumbUp.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'like-btn',
+ components: {
+ RelationBtn: _relation_btn__WEBPACK_IMPORTED_MODULE_0__["default"],
+ ThumbUpIcon: $icons_ThumbUp__WEBPACK_IMPORTED_MODULE_1__["default"]
+ },
+ props: {
+ relation: {
+ type: String,
+ required: true
+ },
+ item: {
+ type: Object,
+ required: true
+ }
+ },
+ methods: {
+ afterToggle: function afterToggle(bool) {
+ bool ? this.item.cache.likes_count++ : this.item.cache.likes_count--;
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/share-action.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/share-action.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _relation_btn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./relation-btn */ "./src/components/buttons/relation-btn.vue");
+/* harmony import */ var $icons_LinkVariant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/LinkVariant */ "./node_modules/vue-material-design-icons/LinkVariant.vue");
+/* harmony import */ var $icons_VolumeMute__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/VolumeMute */ "./node_modules/vue-material-design-icons/VolumeMute.vue");
+/* harmony import */ var $icons_VolumeHigh__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $icons/VolumeHigh */ "./node_modules/vue-material-design-icons/VolumeHigh.vue");
+/* harmony import */ var $icons_Check__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! $icons/Check */ "./node_modules/vue-material-design-icons/Check.vue");
+/* harmony import */ var $icons_Twitter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! $icons/Twitter */ "./node_modules/vue-material-design-icons/Twitter.vue");
+/* harmony import */ var $icons_Facebook__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! $icons/Facebook */ "./node_modules/vue-material-design-icons/Facebook.vue");
+/* harmony import */ var clipboard__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! clipboard */ "./node_modules/clipboard/dist/clipboard.js");
+/* harmony import */ var clipboard__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(clipboard__WEBPACK_IMPORTED_MODULE_7__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'share-action',
+ components: {
+ RelationBtn: _relation_btn__WEBPACK_IMPORTED_MODULE_0__["default"],
+ LinkVariant: $icons_LinkVariant__WEBPACK_IMPORTED_MODULE_1__["default"],
+ VolumeMute: $icons_VolumeMute__WEBPACK_IMPORTED_MODULE_2__["default"],
+ VolumeHigh: $icons_VolumeHigh__WEBPACK_IMPORTED_MODULE_3__["default"],
+ CheckIcon: $icons_Check__WEBPACK_IMPORTED_MODULE_4__["default"],
+ TwitterIcon: $icons_Twitter__WEBPACK_IMPORTED_MODULE_5__["default"],
+ FacebookIcon: $icons_Facebook__WEBPACK_IMPORTED_MODULE_6__["default"]
+ },
+ props: {
+ item: {
+ type: Object,
+ default: function _default() {
+ return {};
+ }
+ }
+ },
+ data: function data() {
+ return {
+ weibo: '',
+ twitter: '',
+ facebook: '',
+ btnClasses: 'btn btn-icon d-block mx-auto mt-2 bg-white text-18 text-gray-50',
+ hovering: false,
+ title: encodeURIComponent(this.item.title + ' -- via ' + document.title)
+ };
+ },
+ computed: {
+ copyText: function copyText() {
+ return this.title + '\n\n' + window.location.href;
+ }
+ },
+ mounted: function mounted() {
+ var _this = this;
+
+ var url = encodeURIComponent(window.location.href);
+ this.weibo = "https://service.weibo.com/share/share.php?url=".concat(url, "&title=").concat(this.title, "&pic=&appkey=");
+ this.twitter = "https://twitter.com/intent/tweet?text=".concat(this.title, "&url=").concat(url);
+ this.facebook = "https://www.facebook.com/sharer/sharer.php?u=".concat(url);
+ var btn = new clipboard__WEBPACK_IMPORTED_MODULE_7___default.a('.copy-link');
+ btn.on('success', function () {
+ _this.$message.success('链接已复制');
+ });
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/subscribe-btn.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/subscribe-btn.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _relation_btn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./relation-btn */ "./src/components/buttons/relation-btn.vue");
+/* harmony import */ var $icons_VolumeMute__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/VolumeMute */ "./node_modules/vue-material-design-icons/VolumeMute.vue");
+/* harmony import */ var $icons_VolumeHigh__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/VolumeHigh */ "./node_modules/vue-material-design-icons/VolumeHigh.vue");
+/* harmony import */ var $icons_Check__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $icons/Check */ "./node_modules/vue-material-design-icons/Check.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'subscribe-btn',
+ components: {
+ RelationBtn: _relation_btn__WEBPACK_IMPORTED_MODULE_0__["default"],
+ VolumeMute: $icons_VolumeMute__WEBPACK_IMPORTED_MODULE_1__["default"],
+ VolumeHigh: $icons_VolumeHigh__WEBPACK_IMPORTED_MODULE_2__["default"],
+ CheckIcon: $icons_Check__WEBPACK_IMPORTED_MODULE_3__["default"]
+ },
+ props: {
+ relation: {
+ type: String,
+ required: true
+ },
+ item: {
+ type: Object,
+ required: true
+ }
+ },
+ data: function data() {
+ return {
+ hovering: false
+ };
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/comments.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/comments.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $components_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $components/editor */ "./src/components/editor/index.js");
+/* harmony import */ var $components_paginator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $components/paginator */ "./src/components/paginator.vue");
+/* harmony import */ var $components_markdown_body__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $components/markdown-body */ "./src/components/markdown-body.vue");
+/* harmony import */ var $components_user_media__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $components/user-media */ "./src/components/user-media.vue");
+/* harmony import */ var localforage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! localforage */ "./node_modules/localforage/dist/localforage.js");
+/* harmony import */ var localforage__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(localforage__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+/* harmony import */ var $icons_ThumbUp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! $icons/ThumbUp */ "./node_modules/vue-material-design-icons/ThumbUp.vue");
+/* harmony import */ var $icons_Reply__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! $icons/Reply */ "./node_modules/vue-material-design-icons/Reply.vue");
+/* harmony import */ var $icons_Markdown__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! $icons/Markdown */ "./node_modules/vue-material-design-icons/Markdown.vue");
+/* harmony import */ var $icons_ThumbDown__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! $icons/ThumbDown */ "./node_modules/vue-material-design-icons/ThumbDown.vue");
+/* harmony import */ var $icons_ThumbUpOutline__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! $icons/ThumbUpOutline */ "./node_modules/vue-material-design-icons/ThumbUpOutline.vue");
+/* harmony import */ var $icons_ThumbDownOutline__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! $icons/ThumbDownOutline */ "./node_modules/vue-material-design-icons/ThumbDownOutline.vue");
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+
+
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'comments',
+ components: {
+ Editor: $components_editor__WEBPACK_IMPORTED_MODULE_0__["default"],
+ UserMedia: $components_user_media__WEBPACK_IMPORTED_MODULE_3__["default"],
+ Markdown: $icons_Markdown__WEBPACK_IMPORTED_MODULE_8__["default"],
+ MarkdownBody: $components_markdown_body__WEBPACK_IMPORTED_MODULE_2__["default"],
+ Paginator: $components_paginator__WEBPACK_IMPORTED_MODULE_1__["default"],
+ ThumbUp: $icons_ThumbUp__WEBPACK_IMPORTED_MODULE_6__["default"],
+ Reply: $icons_Reply__WEBPACK_IMPORTED_MODULE_7__["default"],
+ ThumbDown: $icons_ThumbDown__WEBPACK_IMPORTED_MODULE_9__["default"],
+ ThumbUpOutline: $icons_ThumbUpOutline__WEBPACK_IMPORTED_MODULE_10__["default"],
+ ThumbDownOutline: $icons_ThumbDownOutline__WEBPACK_IMPORTED_MODULE_11__["default"]
+ },
+ computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_5__["mapGetters"])(['currentUser']), {
+ formReady: function formReady() {
+ return this.content.length >= 3;
+ },
+ cacheKey: function cacheKey() {
+ return 'comment.content_' + this.objectType.replace('\\\\', '_').toLowerCase() + '_' + this.objectId;
+ }
+ }),
+ props: {
+ objectId: {
+ type: Number,
+ required: true
+ },
+ objectType: {
+ type: String,
+ default: 'App\\Thread'
+ }
+ },
+ data: function data() {
+ return {
+ writing: false,
+ content: '',
+ comments: [],
+ editorOptions: {
+ minLines: 3,
+ maxLines: 20
+ },
+ query: Object.assign({
+ page: 1
+ }, this.$route.query)
+ };
+ },
+ watch: {
+ query: {
+ deep: true,
+ handler: function handler() {
+ this.$router.replace({
+ query: this.query
+ });
+ this.loadComments();
+ }
+ },
+ content: function content() {
+ localforage__WEBPACK_IMPORTED_MODULE_4___default.a.setItem(this.cacheKey, this.content);
+ },
+ writing: function writing() {
+ if (!this.writing) {
+ this.content = '';
+ localforage__WEBPACK_IMPORTED_MODULE_4___default.a.removeItem(this.cacheKey);
+ this.$refs['editor'].editor.setValue('');
+ } else {
+ var editor = this.$refs['editor'].editor;
+ editor.focus();
+ setTimeout(function () {
+ editor.setCursor(editor.lineCount(), 0);
+ });
+ }
+ }
+ },
+ mounted: function mounted() {
+ this.loadComments().then(function () {
+ if (window.location.hash.length > 0) {
+ setTimeout(function () {
+ window.location.replace(window.location.hash);
+ });
+ }
+ });
+ this.syncCachedContent();
+ },
+ methods: {
+ handlePaginate: function handlePaginate(page) {
+ this.query.page = page;
+ },
+ vote: function vote() {
+ var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'up';
+ var item = arguments.length > 1 ? arguments[1] : undefined;
+ var index = arguments.length > 2 ? arguments[2] : undefined;
+
+ if (!this.$user().id) {
+ return this.$router.push({
+ name: 'auth.login'
+ });
+ }
+
+ var reverse = type == 'up' ? 'down' : 'up';
+
+ if (item["has_".concat(type, "_voted")]) {
+ this.$http.post("comments/".concat(item.id, "/cancel-vote"));
+ this.comments.data[index]["".concat(type, "_voters")]--;
+ this.comments.data[index]["has_".concat(type, "_voted")] = false;
+ } else {
+ this.$http.post("comments/".concat(item.id, "/").concat(type, "-vote"));
+
+ if (item["has_".concat(reverse, "_voted")]) {
+ this.comments.data[index]["".concat(reverse, "_voters")]--;
+ this.comments.data[index]["has_".concat(reverse, "_voted")] = false;
+ }
+
+ this.comments.data[index]["".concat(type, "_voters")]++;
+ this.comments.data[index]["has_".concat(type, "_voted")] = true;
+ }
+ },
+ reply: function reply(item) {
+ if (!this.$user().id) {
+ return this.$router.push({
+ name: 'auth.login'
+ });
+ }
+
+ this.content = "@".concat(item.user.username, " ");
+ this.writing = true;
+ window.scrollTo(0, document.querySelector('[name="comments"]').offsetTop);
+ },
+ submit: function submit() {
+ var _this = this;
+
+ this.$http.post('comments', {
+ commentable_type: this.objectType,
+ commentable_id: this.objectId,
+ content: {
+ markdown: this.content,
+ type: 'markdown'
+ }
+ }).then(function () {
+ _this.content = '';
+ _this.writing = false;
+
+ _this.$message.success('评论成功!');
+
+ _this.$emit('created');
+
+ _this.loadComments();
+ });
+ },
+ syncCachedContent: function syncCachedContent() {
+ var _this2 = this;
+
+ localforage__WEBPACK_IMPORTED_MODULE_4___default.a.getItem(this.cacheKey, function (err, content) {
+ if (!err && content && content.length > 0) {
+ _this2.writing = true;
+ _this2.content = content;
+ }
+ });
+ },
+ loadComments: function loadComments() {
+ var _this3 = this;
+
+ return this.$http.get("comments?commentable_type=".concat(this.objectType, "&commentable_id=").concat(this.objectId, "&page=").concat(this.query.page)).then(function (comments) {
+ _this3.comments = comments;
+
+ _this3.mapCommentsUserForMention(comments.data);
+ });
+ },
+ mapCommentsUserForMention: function mapCommentsUserForMention(comments) {
+ comments.map(function (comment) {
+ window.pageUsers.some(function (u) {
+ return u.id === comment.user_id;
+ }) || window.pageUsers.push(comment.user);
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/share-dropdown.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/share-dropdown.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $icons_LinkVariant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $icons/LinkVariant */ "./node_modules/vue-material-design-icons/LinkVariant.vue");
+/* harmony import */ var clipboard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! clipboard */ "./node_modules/clipboard/dist/clipboard.js");
+/* harmony import */ var clipboard__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(clipboard__WEBPACK_IMPORTED_MODULE_1__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'share-dropdown',
+ components: {
+ LinkVariant: $icons_LinkVariant__WEBPACK_IMPORTED_MODULE_0__["default"]
+ },
+ data: function data() {
+ return {
+ url: encodeURI(window.location.href),
+ title: encodeURIComponent(window.document.title),
+ description: ''
+ };
+ },
+ computed: {
+ weibo: function weibo() {
+ return "https://service.weibo.com/share/share.php?url=".concat(this.url, "&title=").concat(this.title, "&pic=&appkey=");
+ },
+ qq: function qq() {
+ return "http://connect.qq.com/widget/shareqq/index.html?url=".concat(this.url, "&title=").concat(this.title, "&source=").concat(window.location.host, "&desc=").concat(this.description);
+ },
+ qzone: function qzone() {
+ return "http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=".concat(this.url, "&summary=").concat(this.title, "&site=").concat(window.location.host);
+ }
+ },
+ methods: {
+ getDescription: function getDescription() {
+ var d = document.querySelector('[name="description"]');
+
+ if (d) {
+ return encodeURIComponent(d.getAttribute('content'));
+ }
+
+ return encodeURIComponent(document.querySelector('.markdown-body').textContent.substr(0, 40).trim().replace(new RegExp(/\n/, 'g'), ''));
+ }
+ },
+ mounted: function mounted() {
+ var _this = this;
+
+ new clipboard__WEBPACK_IMPORTED_MODULE_1___default.a('.copy-link');
+ setTimeout(function () {
+ _this.description = _this.getDescription();
+ }, 1000);
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-list-card.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-list-card.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $components_user_media__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $components/user-media */ "./src/components/user-media.vue");
+/* harmony import */ var $icons_ArrowRight__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/ArrowRight */ "./node_modules/vue-material-design-icons/ArrowRight.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'user-list-card',
+ components: {
+ UserMedia: $components_user_media__WEBPACK_IMPORTED_MODULE_0__["default"],
+ ArrowRight: $icons_ArrowRight__WEBPACK_IMPORTED_MODULE_1__["default"]
+ },
+ props: {
+ title: {
+ type: String,
+ default: null
+ },
+ users: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-profile-card.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-profile-card.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $components_user_media__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $components/user-media */ "./src/components/user-media.vue");
+/* harmony import */ var $components_buttons_follow_btn__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $components/buttons/follow-btn */ "./src/components/buttons/follow-btn.vue");
+/* harmony import */ var $icons_Plus__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/Plus */ "./node_modules/vue-material-design-icons/Plus.vue");
+/* harmony import */ var $components_user_social_btns__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $components/user-social-btns */ "./src/components/user-social-btns.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'user-profile-card',
+ props: {
+ user: {
+ type: Object,
+ required: true
+ }
+ },
+ components: {
+ UserMedia: $components_user_media__WEBPACK_IMPORTED_MODULE_0__["default"],
+ FollowBtn: $components_buttons_follow_btn__WEBPACK_IMPORTED_MODULE_1__["default"],
+ PlusIcon: $icons_Plus__WEBPACK_IMPORTED_MODULE_2__["default"],
+ UserSocialBtns: $components_user_social_btns__WEBPACK_IMPORTED_MODULE_3__["default"]
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/wechat-qrcode.vue?vue&type=script&lang=js&":
+/*!***************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/wechat-qrcode.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var qrcode__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! qrcode */ "./node_modules/qrcode/lib/browser.js");
+/* harmony import */ var qrcode__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(qrcode__WEBPACK_IMPORTED_MODULE_0__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'wechat-qrcode',
+ mounted: function mounted() {
+ setTimeout(function () {
+ qrcode__WEBPACK_IMPORTED_MODULE_0___default.a.toCanvas(document.getElementById('page-wechat-qrcode-canvas'), window.location.href, {
+ width: 200
+ });
+ }, 500);
+ document.body.appendChild(this.$refs['pageWechatQrcode']);
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/report-form.vue?vue&type=script&lang=js&":
+/*!******************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/threads/report-form.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var element_ui__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! element-ui */ "./node_modules/element-ui/lib/element-ui.common.js");
+/* harmony import */ var element_ui__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(element_ui__WEBPACK_IMPORTED_MODULE_0__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ components: {
+ 'el-dialog': element_ui__WEBPACK_IMPORTED_MODULE_0__["Dialog"]
+ },
+ props: {
+ visible: {
+ type: Boolean,
+ default: false
+ }
+ },
+ data: function data() {
+ return {
+ remark: ''
+ };
+ },
+ methods: {
+ report: function report() {
+ var _this = this;
+
+ this.$http.post("threads/".concat(this.$route.params.id, "/report"), {
+ remark: this.remark
+ }).then(function () {
+ _this.close();
+
+ _this.$message.success('举报成功!');
+ });
+ },
+ close: function close() {
+ this.$emit('close');
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/show.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/threads/show.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dayjs */ "./node_modules/dayjs/dayjs.min.js");
+/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var $icons_Medal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/Medal */ "./node_modules/vue-material-design-icons/Medal.vue");
+/* harmony import */ var $icons_LockAlert__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/LockAlert */ "./node_modules/vue-material-design-icons/LockAlert.vue");
+/* harmony import */ var $icons_FormatVerticalAlignTop__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $icons/FormatVerticalAlignTop */ "./node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue");
+/* harmony import */ var $icons_Pencil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! $icons/Pencil */ "./node_modules/vue-material-design-icons/Pencil.vue");
+/* harmony import */ var $icons_Delete__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! $icons/Delete */ "./node_modules/vue-material-design-icons/Delete.vue");
+/* harmony import */ var $icons_AlertBox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! $icons/AlertBox */ "./node_modules/vue-material-design-icons/AlertBox.vue");
+/* harmony import */ var $components_user_media__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! $components/user-media */ "./src/components/user-media.vue");
+/* harmony import */ var $components_hot_tags__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! $components/hot-tags */ "./src/components/hot-tags.vue");
+/* harmony import */ var $components_user_list_card__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! $components/user-list-card */ "./src/components/user-list-card.vue");
+/* harmony import */ var $components_wechat_qrcode__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! $components/wechat-qrcode */ "./src/components/wechat-qrcode.vue");
+/* harmony import */ var $components_comments__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! $components/comments */ "./src/components/comments.vue");
+/* harmony import */ var $icons_Star__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! $icons/Star */ "./node_modules/vue-material-design-icons/Star.vue");
+/* harmony import */ var $icons_DotsHorizontal__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! $icons/DotsHorizontal */ "./node_modules/vue-material-design-icons/DotsHorizontal.vue");
+/* harmony import */ var $icons_Share__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! $icons/Share */ "./node_modules/vue-material-design-icons/Share.vue");
+/* harmony import */ var $components_buttons_subscribe_btn__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! $components/buttons/subscribe-btn */ "./src/components/buttons/subscribe-btn.vue");
+/* harmony import */ var $components_buttons_follow_btn__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! $components/buttons/follow-btn */ "./src/components/buttons/follow-btn.vue");
+/* harmony import */ var $components_buttons_like_btn__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! $components/buttons/like-btn */ "./src/components/buttons/like-btn.vue");
+/* harmony import */ var $components_markdown_body__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! $components/markdown-body */ "./src/components/markdown-body.vue");
+/* harmony import */ var _report_form__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./report-form */ "./src/modules/threads/report-form.vue");
+/* harmony import */ var $components_buttons_animate_action__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! $components/buttons/animate-action */ "./src/components/buttons/animate-action.vue");
+/* harmony import */ var $components_buttons_share_action__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! $components/buttons/share-action */ "./src/components/buttons/share-action.vue");
+/* harmony import */ var $components_user_profile_card__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! $components/user-profile-card */ "./src/components/user-profile-card.vue");
+/* harmony import */ var $components_share_dropdown__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! $components/share-dropdown */ "./src/components/share-dropdown.vue");
+/* harmony import */ var $icons_Comment__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! $icons/Comment */ "./node_modules/vue-material-design-icons/Comment.vue");
+/* harmony import */ var $icons_Eye__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! $icons/Eye */ "./node_modules/vue-material-design-icons/Eye.vue");
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ components: {
+ UserListCard: $components_user_list_card__WEBPACK_IMPORTED_MODULE_9__["default"],
+ LikeBtn: $components_buttons_like_btn__WEBPACK_IMPORTED_MODULE_17__["default"],
+ AnimateAction: $components_buttons_animate_action__WEBPACK_IMPORTED_MODULE_20__["default"],
+ ShareAction: $components_buttons_share_action__WEBPACK_IMPORTED_MODULE_21__["default"],
+ ReportForm: _report_form__WEBPACK_IMPORTED_MODULE_19__["default"],
+ SubscribeBtn: $components_buttons_subscribe_btn__WEBPACK_IMPORTED_MODULE_15__["default"],
+ CommentIcon: $icons_Comment__WEBPACK_IMPORTED_MODULE_24__["default"],
+ ViewIcon: $icons_Eye__WEBPACK_IMPORTED_MODULE_25__["default"],
+ FollowBtn: $components_buttons_follow_btn__WEBPACK_IMPORTED_MODULE_16__["default"],
+ UserMedia: $components_user_media__WEBPACK_IMPORTED_MODULE_7__["default"],
+ HotTags: $components_hot_tags__WEBPACK_IMPORTED_MODULE_8__["default"],
+ PencilIcon: $icons_Pencil__WEBPACK_IMPORTED_MODULE_4__["default"],
+ AlertBoxIcon: $icons_AlertBox__WEBPACK_IMPORTED_MODULE_6__["default"],
+ DeleteIcon: $icons_Delete__WEBPACK_IMPORTED_MODULE_5__["default"],
+ ShareIcon: $icons_Share__WEBPACK_IMPORTED_MODULE_14__["default"],
+ StarIcon: $icons_Star__WEBPACK_IMPORTED_MODULE_12__["default"],
+ MoreIcon: $icons_DotsHorizontal__WEBPACK_IMPORTED_MODULE_13__["default"],
+ MedalIcon: $icons_Medal__WEBPACK_IMPORTED_MODULE_1__["default"],
+ TopIcon: $icons_FormatVerticalAlignTop__WEBPACK_IMPORTED_MODULE_3__["default"],
+ LockIcon: $icons_LockAlert__WEBPACK_IMPORTED_MODULE_2__["default"],
+ MarkdownBody: $components_markdown_body__WEBPACK_IMPORTED_MODULE_18__["default"],
+ Comments: $components_comments__WEBPACK_IMPORTED_MODULE_11__["default"],
+ UserProfileCard: $components_user_profile_card__WEBPACK_IMPORTED_MODULE_22__["default"],
+ ShareDropdown: $components_share_dropdown__WEBPACK_IMPORTED_MODULE_23__["default"],
+ WechatQrcode: $components_wechat_qrcode__WEBPACK_IMPORTED_MODULE_10__["default"]
+ },
+ data: function data() {
+ return {
+ thread: null,
+ showReportForm: false
+ };
+ },
+ computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_26__["mapGetters"])(['currentUser']), {
+ canEdit: function canEdit() {
+ return this.thread.user_id === this.$user().id || this.$user().is_admin;
+ }
+ }),
+ beforeRouteUpdate: function beforeRouteUpdate(to, from, next) {
+ if (to.params.id !== from.params.id) {
+ this.loadThread();
+ }
+
+ next();
+ },
+ methods: {
+ loadThread: function loadThread() {
+ var _this = this;
+
+ this.$http.get("threads/".concat(this.$route.params.id, "?include=user,likers")).then(function (response) {
+ return _this.thread = response;
+ }).then(this.registerEventListener).catch(function (response) {
+ if (response.status === 404) {
+ _this.$message.error('该主题已被删除或锁定!');
+
+ setTimeout(function () {
+ _this.$router.go(-1);
+ }, 1000);
+ }
+ }).then(function () {
+ window.pageUsers = [_this.thread.user];
+ });
+ },
+ handleDelete: function handleDelete(thread) {
+ var _this2 = this;
+
+ this.$http.delete("threads/".concat(thread.id)).then(function () {
+ _this2.$message.success('已删除!');
+
+ _this2.$router.go(-1);
+ });
+ },
+ toggleStatus: function toggleStatus(timestamp) {
+ var _this3 = this;
+
+ this.thread[timestamp] = this.thread[timestamp] ? null : dayjs__WEBPACK_IMPORTED_MODULE_0___default()().format('YYYY-MM-DD HH:mm:ss');
+ this.$http.patch("threads/".concat(this.thread.id), this.thread).then(function () {
+ _this3.$message.success('搞定!');
+
+ _this3.loadThread();
+ });
+ }
+ },
+ mounted: function mounted() {
+ this.loadThread();
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/animate-action.vue?vue&type=style&index=0&lang=scss&":
+/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/animate-action.vue?vue&type=style&index=0&lang=scss& ***!
+ \*************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, "/*========================\n SASS definitions\n =======================*/\n/*========================\n BUTTON styles\n =======================*/\n.clap--icon {\n color: #0078ff;\n}\n.clap {\n position: relative;\n border-radius: 50%;\n background: #fff;\n font-size: 24px;\n width: 60px;\n height: 60px;\n}\n.clap:after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n display: block;\n border-radius: 50%;\n width: 59px;\n height: 59px;\n}\n.clap:hover {\n cursor: pointer;\n background: #fff60;\n font-size: 26px;\n -webkit-transition: all 0.3s ease-in;\n transition: all 0.3s ease-in;\n}\n.clap:hover:after {\n -webkit-animation: shockwave 1s ease-in infinite;\n animation: shockwave 1s ease-in infinite;\n}\n.clap .clap--count {\n position: absolute;\n top: -37.5px;\n left: 15px;\n font-size: 0.8rem;\n color: white;\n background: #0078ff;\n border-radius: 50%;\n height: 30px;\n width: 30px;\n line-height: 30px;\n}\n.clap .clap--count-total {\n position: absolute;\n font-size: 0.8rem;\n width: 60px;\n text-align: center;\n left: 0;\n bottom: -24px;\n color: #bdc3c7;\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/share-action.vue?vue&type=style&index=0&id=fde12a7c&lang=scss&scoped=true&":
+/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/share-action.vue?vue&type=style&index=0&id=fde12a7c&lang=scss&scoped=true& ***!
+ \***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, ".share-action .material-design-icon[data-v-fde12a7c] {\n vertical-align: middle;\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/comments.vue?vue&type=style&index=0&lang=scss&":
+/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/comments.vue?vue&type=style&index=0&lang=scss& ***!
+ \***********************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, ".comments .pop-comment-form {\n border: none;\n max-height: 0;\n}\n.comments .pop-comment-form.show {\n max-height: 320px;\n}\n.comments .comment-editor .CodeMirror {\n height: auto;\n min-height: 100px;\n max-height: 180px;\n}\n.comments .pop-comment-form {\n position: -webkit-sticky;\n position: sticky;\n bottom: 55px;\n min-width: 500px;\n max-width: 100%;\n max-height: 0;\n overflow: hidden;\n -webkit-transition: max-height 0.5s;\n transition: max-height 0.5s;\n}\n.comments .markdown-body.comment-content p:last-child {\n margin-bottom: 0;\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/share-dropdown.vue?vue&type=style&index=0&id=035c7ccf&lang=scss&scoped=true&":
+/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/share-dropdown.vue?vue&type=style&index=0&id=035c7ccf&lang=scss&scoped=true& ***!
+ \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, ".dropdown-toggle[data-v-035c7ccf]::after {\n display: none;\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/report-form.vue?vue&type=style&index=0&lang=scss&":
+/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/threads/report-form.vue?vue&type=style&index=0&lang=scss& ***!
+ \*******************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, "textarea {\n resize: none;\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/show.vue?vue&type=style&index=0&lang=scss&":
+/*!************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/threads/show.vue?vue&type=style&index=0&lang=scss& ***!
+ \************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, ".thread-toolbar {\n position: fixed;\n top: 150px;\n margin-left: -80px;\n}\n.thread-stats-bar {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n width: 100%;\n left: 0;\n}\n.thread-stats-bar .material-design-icon {\n font-size: 1.2em;\n bottom: -0.06em;\n}\n.user-profile-card {\n position: -webkit-sticky;\n position: sticky;\n top: 20px;\n}\n@media screen and (min-width: 1200px) and (max-width: 1350px) {\n.page-threads-show {\n margin-left: 65px;\n}\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/animate-action.vue?vue&type=style&index=0&lang=scss&":
+/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/animate-action.vue?vue&type=style&index=0&lang=scss& ***!
+ \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src??ref--7-3!../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../node_modules/vue-loader/lib??vue-loader-options!./animate-action.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/animate-action.vue?vue&type=style&index=0&lang=scss&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/share-action.vue?vue&type=style&index=0&id=fde12a7c&lang=scss&scoped=true&":
+/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/share-action.vue?vue&type=style&index=0&id=fde12a7c&lang=scss&scoped=true& ***!
+ \************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src??ref--7-3!../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../node_modules/vue-loader/lib??vue-loader-options!./share-action.vue?vue&type=style&index=0&id=fde12a7c&lang=scss&scoped=true& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/share-action.vue?vue&type=style&index=0&id=fde12a7c&lang=scss&scoped=true&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/comments.vue?vue&type=style&index=0&lang=scss&":
+/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/comments.vue?vue&type=style&index=0&lang=scss& ***!
+ \************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./comments.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/comments.vue?vue&type=style&index=0&lang=scss&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/share-dropdown.vue?vue&type=style&index=0&id=035c7ccf&lang=scss&scoped=true&":
+/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/share-dropdown.vue?vue&type=style&index=0&id=035c7ccf&lang=scss&scoped=true& ***!
+ \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./share-dropdown.vue?vue&type=style&index=0&id=035c7ccf&lang=scss&scoped=true& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/share-dropdown.vue?vue&type=style&index=0&id=035c7ccf&lang=scss&scoped=true&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/report-form.vue?vue&type=style&index=0&lang=scss&":
+/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/threads/report-form.vue?vue&type=style&index=0&lang=scss& ***!
+ \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src??ref--7-3!../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../node_modules/vue-loader/lib??vue-loader-options!./report-form.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/report-form.vue?vue&type=style&index=0&lang=scss&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/show.vue?vue&type=style&index=0&lang=scss&":
+/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/threads/show.vue?vue&type=style&index=0&lang=scss& ***!
+ \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src??ref--7-3!../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../node_modules/vue-loader/lib??vue-loader-options!./show.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/show.vue?vue&type=style&index=0&lang=scss&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/animate-action.vue?vue&type=template&id=010b0e00&":
+/*!****************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/animate-action.vue?vue&type=template&id=010b0e00& ***!
+ \****************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ {
+ staticClass:
+ "text-center clap d-flex align-items-center justify-content-center",
+ attrs: { id: "clap" },
+ on: { click: _vm.toggle }
+ },
+ [
+ _c(
+ "span",
+ { staticClass: "clap--icon", attrs: { id: "clap--icon" } },
+ [!_vm.item.has_liked ? _c("thumb-up-outline") : _c("thumb-up")],
+ 1
+ ),
+ _vm._v(" "),
+ _c("span", { staticClass: "clap--count", attrs: { id: "clap--count" } }),
+ _vm._v(" "),
+ _c("span", {
+ staticClass: "clap--count-total",
+ attrs: { id: "clap--count-total" }
+ })
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/like-btn.vue?vue&type=template&id=055d3c04&":
+/*!**********************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/like-btn.vue?vue&type=template&id=055d3c04& ***!
+ \**********************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "relation-btn",
+ {
+ attrs: { relation: _vm.relation, action: "like", item: _vm.item },
+ on: { "after-toggle": _vm.afterToggle }
+ },
+ [
+ _c(
+ "a",
+ {
+ staticClass: "btn btn-sm btn-link text-gray-50",
+ attrs: { slot: "on", href: "javascript:void(0)" },
+ slot: "on"
+ },
+ [
+ _c("thumb-up-icon"),
+ _vm._v(" " + _vm._s(_vm.item.cache.likes_count) + "\n ")
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ staticClass: "btn btn-sm btn-primary",
+ attrs: { slot: "off", href: "javascript:void(0)" },
+ slot: "off"
+ },
+ [
+ _c("thumb-up-icon"),
+ _vm._v(" " + _vm._s(_vm.item.cache.likes_count) + "\n ")
+ ],
+ 1
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/share-action.vue?vue&type=template&id=fde12a7c&scoped=true&":
+/*!**************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/share-action.vue?vue&type=template&id=fde12a7c&scoped=true& ***!
+ \**************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "share-action" }, [
+ _c("p", { staticClass: "text-center text-gray-40 text-14" }, [
+ _vm._v("分享")
+ ]),
+ _vm._v(" "),
+ _c(
+ "button",
+ {
+ staticClass: "mx-auto btn btn-icon text-18 copy-link text-gray-50",
+ attrs: {
+ "data-clipboard-text": _vm.copyText,
+ "data-toggle": "tooltip",
+ title: "复制链接"
+ }
+ },
+ [_c("link-variant", { attrs: { title: "复制链接" } })],
+ 1
+ ),
+ _vm._v(" "),
+ _c("div", [
+ _c(
+ "a",
+ {
+ class: _vm.btnClasses,
+ attrs: { target: "_blank", href: _vm.weibo, title: "分享到微博" }
+ },
+ [
+ _c("span", { staticClass: "material-design-icon sina-icon" }, [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ t: "1528816678350",
+ viewBox: "0 0 1260 1024",
+ version: "1.1",
+ xmlns: "http://www.w3.org/2000/svg",
+ "p-id": "1944",
+ "xmlns:xlink": "http://www.w3.org/1999/xlink",
+ width: "17.5",
+ height: "14"
+ }
+ },
+ [
+ _c("path", {
+ attrs: {
+ d:
+ "M1174.286235 110.614403A330.443026 330.443026 0 0 0 858.311759 7.467639a50.406563 50.406563 0 0 0-37.804922 58.34093 50.406563 50.406563 0 0 0 58.34093 37.804922 238.497721 238.497721 0 0 1 226.829535 72.342753 233.363719 233.363719 0 0 1 46.672744 233.36372 46.672744 46.672744 0 0 0 3.267092 37.804922 60.674567 60.674567 0 0 0 27.536919 24.269827 53.673655 53.673655 0 0 0 61.608021-30.804011 351.445761 351.445761 0 0 0-72.342753-329.509572z m0 0",
+ "p-id": "1945"
+ }
+ }),
+ _vm._v(" "),
+ _c("path", {
+ attrs: {
+ d:
+ "M1026.800365 412.587056a40.13856 40.13856 0 0 0 51.340018-27.536919 158.220602 158.220602 0 0 0-34.537831-157.753874 167.088423 167.088423 0 0 0-154.486782-51.340019 37.338195 37.338195 0 0 0-30.804011 46.672744 37.338195 37.338195 0 0 0 46.672744 30.804011A79.343665 79.343665 0 0 1 980.127621 280.036463a82.144029 82.144029 0 0 1 17.268915 78.876937A46.672744 46.672744 0 0 0 1026.800365 412.587056z m-82.610757 78.876937c-17.268915-7.000912-30.804011-10.268004-20.536007-30.804011a136.751139 136.751139 0 0 0 0-126.949863c-41.072015-58.34093-154.486782-55.073838-280.036463 0 0 0-41.072015 17.268915-30.804011-13.535096 20.536007-65.341841 17.268915-116.68186-13.535096-147.485871-70.475843-69.075661-255.766636 2.800365-412.587056 161.020967-116.68186 119.948952-186.690975 243.631723-186.690975 353.779398 0 209.56062 267.90155 336.510483 528.802188 336.510483 343.511395 0 569.874202-199.292616 569.874202-357.04649 0-96.145852-82.610757-151.21969-154.486782-175.02279z m-415.38742 456.926162c-209.56062 20.536007-388.783956-75.609845-401.852325-209.56062s144.218778-264.634458 353.779399-285.170465 387.850501 75.609845 401.852324 209.56062-144.218778 264.16773-353.779398 285.170465z m0 0",
+ "p-id": "1946"
+ }
+ }),
+ _vm._v(" "),
+ _c("path", {
+ attrs: {
+ d:
+ "M549.338195 556.805834a224.495898 224.495898 0 0 0-253.899726 109.680948A154.020055 154.020055 0 0 0 394.851413 886.782133a222.628988 222.628988 0 0 0 267.90155-113.414767 155.420237 155.420237 0 0 0-113.414768-216.561532z m-75.609845 230.096627a77.476755 77.476755 0 0 1-96.145852 30.804011 54.60711 54.60711 0 0 1-20.536008-82.610756 78.41021 78.41021 0 0 1 93.345488-30.804011 52.273473 52.273473 0 0 1 24.269827 82.610756z m0 0",
+ "p-id": "1947"
+ }
+ })
+ ]
+ )
+ ])
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ class: _vm.btnClasses,
+ attrs: {
+ "data-toggle": "modal",
+ "data-target": "#page-wechat-qrcode",
+ title: "分享到微信"
+ }
+ },
+ [
+ _c(
+ "span",
+ { staticClass: "material-design-icon link-variant-icon" },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ t: "1531575816445",
+ viewBox: "0 0 1171 1024",
+ version: "1.1",
+ xmlns: "http://www.w3.org/2000/svg",
+ "p-id": "1968",
+ "xmlns:xlink": "http://www.w3.org/1999/xlink"
+ }
+ },
+ [
+ _c("path", {
+ attrs: {
+ d:
+ "M331.428571 263.428571q0-23.428571-14.285714-37.714286t-37.714286-14.285714q-24.571429 0-43.428571 14.571429t-18.857143 37.428571q0 22.285714 18.857143 36.857143t43.428571 14.571429q23.428571 0 37.714286-14t14.285714-37.428571zm424.571429 289.714286q0-16-14.571429-28.571429t-37.428571-12.571429q-15.428571 0-28.285714 12.857143t-12.857143 28.285714q0 16 12.857143 28.857143t28.285714 12.857143q22.857143 0 37.428571-12.571429t14.571429-29.142857zm-134.857143-289.714286q0-23.428571-14-37.714286t-37.428571-14.285714q-24.571429 0-43.428571 14.571429t-18.857143 37.428571q0 22.285714 18.857143 36.857143t43.428571 14.571429q23.428571 0 37.428571-14t14-37.428571zm362.857143 289.714286q0-16-14.857143-28.571429t-37.142857-12.571429q-15.428571 0-28.285714 12.857143t-12.857143 28.285714q0 16 12.857143 28.857143t28.285714 12.857143q22.285714 0 37.142857-12.571429t14.857143-29.142857zm-152-226.857143q-17.714286-2.285714-40-2.285714-96.571429 0-177.714286 44t-127.714286 119.142857-46.571429 164.285714q0 44.571429 13.142857 86.857143-20 1.714286-38.857143 1.714286-14.857143 0-28.571429-0.857143t-31.428571-3.714286-25.428571-4-31.142857-6-28.571429-6l-144.571429 72.571429 41.142857-124.571429q-165.714286-116-165.714286-280 0-96.571429 55.714286-177.714286t150.857143-127.714286 207.714286-46.571429q100.571429 0 190 37.714286t149.714286 104.285714 78 148.857143zm338.285714 320.571429q0 66.857143-39.142857 127.714286t-106 110.571429l31.428571 103.428571-113.714286-62.285714q-85.714286 21.142857-124.571429 21.142857-96.571429 0-177.714286-40.285714t-127.714286-109.428571-46.571429-150.857143 46.571429-150.857143 127.714286-109.428571 177.714286-40.285714q92 0 173.142857 40.285714t130 109.714286 48.857143 150.571429z",
+ "p-id": "1969"
+ }
+ })
+ ]
+ )
+ ]
+ )
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ class: _vm.btnClasses,
+ attrs: {
+ target: "_blank",
+ title: "分享到 Twitter",
+ href: _vm.twitter
+ }
+ },
+ [_c("twitter-icon")],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ class: _vm.btnClasses,
+ attrs: {
+ target: "_blank",
+ title: "分享到 Facebook",
+ href: _vm.facebook
+ }
+ },
+ [_c("facebook-icon")],
+ 1
+ )
+ ])
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/subscribe-btn.vue?vue&type=template&id=e241702a&":
+/*!***************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/subscribe-btn.vue?vue&type=template&id=e241702a& ***!
+ \***************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "relation-btn",
+ { attrs: { relation: _vm.relation, action: "subscribe", item: _vm.item } },
+ [
+ _c(
+ "button",
+ {
+ staticClass: "btn btn-sm text-gray-50",
+ attrs: { slot: "on" },
+ slot: "on"
+ },
+ [
+ _c("volume-high"),
+ _c("span", { staticClass: "pl-1" }, [_vm._v("订阅")])
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "button",
+ {
+ staticClass: "btn btn-sm",
+ class: { "btn-primary": !_vm.hovering, "btn-danger": _vm.hovering },
+ attrs: { slot: "off" },
+ on: {
+ mouseenter: function($event) {
+ _vm.hovering = true
+ },
+ mouseleave: function($event) {
+ _vm.hovering = false
+ }
+ },
+ slot: "off"
+ },
+ [
+ _vm.hovering ? _c("volume-mute") : _c("check-icon"),
+ _vm._v(" "),
+ _c("span", { staticClass: "pl-1" }, [
+ _vm._v(_vm._s(_vm.hovering ? "取消订阅" : "已订阅"))
+ ])
+ ],
+ 1
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/comments.vue?vue&type=template&id=4e7c9004&":
+/*!**************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/comments.vue?vue&type=template&id=4e7c9004& ***!
+ \**************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ { staticClass: "comments", attrs: { name: "comments" } },
+ [
+ _c("div", { staticClass: "py-2" }, [
+ _c("div", { staticClass: "text-16 text-gray-50" }, [
+ _vm._v(
+ _vm._s(_vm.comments.meta ? _vm.comments.meta.total : 0) + " 条评论"
+ )
+ ])
+ ]),
+ _vm._v(" "),
+ _vm.currentUser.id
+ ? _c(
+ "div",
+ { staticClass: "box mb-3" },
+ [
+ _vm.currentUser.has_activated
+ ? [
+ _c("div", { staticClass: "d-flex align-items-center" }, [
+ _c("img", {
+ staticClass: "avatar-40",
+ attrs: {
+ src: _vm.currentUser.avatar,
+ alt: _vm.currentUser.username
+ }
+ }),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "text-18 text-muted ml-2 w-100",
+ on: {
+ click: function($event) {
+ _vm.writing = true
+ }
+ }
+ },
+ [_vm._v("撰写评论...")]
+ )
+ ])
+ ]
+ : [
+ _c(
+ "div",
+ { staticClass: "text-18 ml-2 text-muted text-center" },
+ [_vm._v("您需要激活账户才能评论~")]
+ )
+ ]
+ ],
+ 2
+ )
+ : _c("div", [
+ _vm.currentUser
+ ? _c("div", { staticClass: "box mb-3" }, [
+ _c(
+ "div",
+ { staticClass: "text-18 ml-2 text-center" },
+ [
+ _vm._v("\n 您需要\n "),
+ _c(
+ "router-link",
+ {
+ staticClass: "text-blue",
+ attrs: { to: { name: "auth.login" }, tag: "a" }
+ },
+ [_vm._v("登录")]
+ ),
+ _vm._v("\n 或\n "),
+ _c(
+ "router-link",
+ {
+ staticClass: "text-blue",
+ attrs: { to: { name: "auth.register" }, tag: "a" }
+ },
+ [_vm._v("注册")]
+ ),
+ _vm._v("\n 才能发表评论\n ")
+ ],
+ 1
+ )
+ ])
+ : _vm._e()
+ ]),
+ _vm._v(" "),
+ _c("paginator", {
+ attrs: { meta: _vm.comments.meta },
+ on: { change: _vm.handlePaginate }
+ }),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "box box-flush" },
+ _vm._l(_vm.comments.data, function(item, index) {
+ return item.content && item.content.body
+ ? _c(
+ "div",
+ {
+ key: item.id,
+ staticClass: "border-bottom box-body py-2",
+ class: {
+ "animated flash": _vm.$route.hash === "#comment-" + item.id
+ },
+ attrs: {
+ id: "comment-" + item.id,
+ name: "comment-" + item.id
+ }
+ },
+ [
+ _c(
+ "user-media",
+ { attrs: { user: item.user } },
+ [
+ _c(
+ "template",
+ { slot: "name-appends" },
+ [
+ _c(
+ "router-link",
+ {
+ staticClass: "text-muted text-12 ml-1",
+ attrs: {
+ tag: "a",
+ to: {
+ name: "users.show",
+ params: { username: item.user.username }
+ }
+ }
+ },
+ [_vm._v(_vm._s(item.user.username))]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "small",
+ { attrs: { slot: "description" }, slot: "description" },
+ [
+ _c(
+ "a",
+ {
+ staticClass: "text-gray-70",
+ attrs: { href: "#comment-" + item.id }
+ },
+ [_vm._v(_vm._s(item.created_at_timeago))]
+ )
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass:
+ "text-16 text-gray-60 ml-auto d-flex align-items-center",
+ attrs: { slot: "appends" },
+ slot: "appends"
+ },
+ [
+ _c(
+ "div",
+ {
+ staticClass: "mx-1 cursor-pointer d-flex",
+ on: {
+ click: function($event) {
+ return _vm.vote("up", item, index)
+ }
+ }
+ },
+ [
+ !item.has_up_voted
+ ? _c(
+ "button",
+ {
+ staticClass:
+ "btn btn-icon btn-light text-gray-60"
+ },
+ [_c("thumb-up-outline")],
+ 1
+ )
+ : _c(
+ "button",
+ { staticClass: "btn btn-icon btn-primary" },
+ [_c("thumb-up")],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "span",
+ { staticClass: "ml-1 align-self-center" },
+ [_vm._v(_vm._s(item.up_voters))]
+ )
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "mx-1 cursor-pointer d-flex",
+ on: {
+ click: function($event) {
+ return _vm.vote("down", item, index)
+ }
+ }
+ },
+ [
+ !item.has_down_voted
+ ? _c(
+ "button",
+ {
+ staticClass:
+ "btn btn-icon btn-light text-gray-60"
+ },
+ [_c("thumb-down-outline")],
+ 1
+ )
+ : _c(
+ "button",
+ { staticClass: "btn btn-icon btn-danger" },
+ [_c("thumb-down")],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "span",
+ { staticClass: "ml-1 align-self-center" },
+ [_vm._v(_vm._s(item.down_voters))]
+ )
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "mx-1 cursor-pointer",
+ on: {
+ click: function($event) {
+ return _vm.reply(item)
+ }
+ }
+ },
+ [
+ _c(
+ "button",
+ {
+ staticClass:
+ "btn btn-icon btn-light text-gray-60"
+ },
+ [_c("reply")],
+ 1
+ )
+ ]
+ )
+ ]
+ )
+ ],
+ 2
+ ),
+ _vm._v(" "),
+ _c("markdown-body", {
+ staticClass: "comment-content text-gray-40 pt-2",
+ model: {
+ value: item.content.body,
+ callback: function($$v) {
+ _vm.$set(item.content, "body", $$v)
+ },
+ expression: "item.content.body"
+ }
+ })
+ ],
+ 1
+ )
+ : _vm._e()
+ }),
+ 0
+ ),
+ _vm._v(" "),
+ _c("paginator", {
+ attrs: { meta: _vm.comments.meta },
+ on: { change: _vm.handlePaginate }
+ }),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "card card-flush shadow-30 pop-comment-form",
+ class: { show: _vm.writing }
+ },
+ [
+ _c("editor", {
+ ref: "editor",
+ staticClass: "comment-editor",
+ attrs: {
+ placeholder: "请使用 markdown 语法",
+ options: _vm.editorOptions
+ },
+ model: {
+ value: _vm.content,
+ callback: function($$v) {
+ _vm.content = $$v
+ },
+ expression: "content"
+ }
+ }),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass:
+ "p-2 d-flex align-items-center justify-content-between"
+ },
+ [
+ _c("div", { staticClass: "d-flex align-items-end" }, [
+ _c(
+ "a",
+ {
+ staticClass: "text-gray-50",
+ attrs: {
+ href:
+ "https://guides.github.com/features/mastering-markdown/",
+ target: "_blank"
+ }
+ },
+ [
+ _c(
+ "span",
+ { staticClass: "text-14 material-design-icon" },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ viewBox: "0 0 16 16",
+ version: "1.1",
+ "aria-hidden": "true"
+ }
+ },
+ [
+ _c("path", {
+ attrs: {
+ "fill-rule": "evenodd",
+ d:
+ "M14.85 3H1.15C.52 3 0 3.52 0 4.15v7.69C0 12.48.52 13 1.15 13h13.69c.64 0 1.15-.52 1.15-1.15v-7.7C16 3.52 15.48 3 14.85 3zM9 11H7V8L5.5 9.92 4 8v3H2V5h2l1.5 2L7 5h2v6zm2.99.5L9.5 8H11V5h2v3h1.5l-2.51 3.5z"
+ }
+ })
+ ]
+ )
+ ]
+ ),
+ _vm._v(" Markdown 语法指南")
+ ]
+ )
+ ]),
+ _vm._v(" "),
+ _c("div", { staticClass: "pop-form-btns" }, [
+ _c(
+ "button",
+ {
+ staticClass: "btn btn-sm btn-primary",
+ attrs: { type: "button", disabled: !_vm.formReady },
+ on: { click: _vm.submit }
+ },
+ [_vm._v("提交")]
+ ),
+ _vm._v(" "),
+ _c(
+ "button",
+ {
+ staticClass: "ml-2 btn btn-sm btn-secondary",
+ attrs: { type: "button" },
+ on: {
+ click: function($event) {
+ _vm.writing = false
+ }
+ }
+ },
+ [_vm._v("取消")]
+ )
+ ])
+ ]
+ )
+ ],
+ 1
+ )
+ ],
+ 1
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/share-dropdown.vue?vue&type=template&id=035c7ccf&scoped=true&":
+/*!********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/share-dropdown.vue?vue&type=template&id=035c7ccf&scoped=true& ***!
+ \********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "dropdown" }, [
+ _c(
+ "div",
+ {
+ attrs: {
+ "data-toggle": "dropdown",
+ "aria-haspopup": "true",
+ "aria-expanded": "false"
+ }
+ },
+ [
+ _vm._t("default", [
+ _c(
+ "a",
+ { staticClass: "nav-link text-gray-50 btn btn-sm btn-link" },
+ [_vm._v("分享")]
+ )
+ ])
+ ],
+ 2
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "dropdown-menu",
+ attrs: { "aria-labelledby": "share-dropdown-menu" }
+ },
+ [
+ _c(
+ "a",
+ {
+ staticClass: "dropdown-item",
+ attrs: { target: "_blank", href: _vm.weibo }
+ },
+ [
+ _c(
+ "span",
+ { staticClass: "material-design-icon link-variant-icon" },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ t: "1528816678350",
+ viewBox: "0 0 1260 1024",
+ version: "1.1",
+ xmlns: "http://www.w3.org/2000/svg",
+ "p-id": "1944",
+ "xmlns:xlink": "http://www.w3.org/1999/xlink"
+ }
+ },
+ [
+ _c("path", {
+ attrs: {
+ d:
+ "M1174.286235 110.614403A330.443026 330.443026 0 0 0 858.311759 7.467639a50.406563 50.406563 0 0 0-37.804922 58.34093 50.406563 50.406563 0 0 0 58.34093 37.804922 238.497721 238.497721 0 0 1 226.829535 72.342753 233.363719 233.363719 0 0 1 46.672744 233.36372 46.672744 46.672744 0 0 0 3.267092 37.804922 60.674567 60.674567 0 0 0 27.536919 24.269827 53.673655 53.673655 0 0 0 61.608021-30.804011 351.445761 351.445761 0 0 0-72.342753-329.509572z m0 0",
+ "p-id": "1945"
+ }
+ }),
+ _vm._v(" "),
+ _c("path", {
+ attrs: {
+ d:
+ "M1026.800365 412.587056a40.13856 40.13856 0 0 0 51.340018-27.536919 158.220602 158.220602 0 0 0-34.537831-157.753874 167.088423 167.088423 0 0 0-154.486782-51.340019 37.338195 37.338195 0 0 0-30.804011 46.672744 37.338195 37.338195 0 0 0 46.672744 30.804011A79.343665 79.343665 0 0 1 980.127621 280.036463a82.144029 82.144029 0 0 1 17.268915 78.876937A46.672744 46.672744 0 0 0 1026.800365 412.587056z m-82.610757 78.876937c-17.268915-7.000912-30.804011-10.268004-20.536007-30.804011a136.751139 136.751139 0 0 0 0-126.949863c-41.072015-58.34093-154.486782-55.073838-280.036463 0 0 0-41.072015 17.268915-30.804011-13.535096 20.536007-65.341841 17.268915-116.68186-13.535096-147.485871-70.475843-69.075661-255.766636 2.800365-412.587056 161.020967-116.68186 119.948952-186.690975 243.631723-186.690975 353.779398 0 209.56062 267.90155 336.510483 528.802188 336.510483 343.511395 0 569.874202-199.292616 569.874202-357.04649 0-96.145852-82.610757-151.21969-154.486782-175.02279z m-415.38742 456.926162c-209.56062 20.536007-388.783956-75.609845-401.852325-209.56062s144.218778-264.634458 353.779399-285.170465 387.850501 75.609845 401.852324 209.56062-144.218778 264.16773-353.779398 285.170465z m0 0",
+ "p-id": "1946"
+ }
+ }),
+ _vm._v(" "),
+ _c("path", {
+ attrs: {
+ d:
+ "M549.338195 556.805834a224.495898 224.495898 0 0 0-253.899726 109.680948A154.020055 154.020055 0 0 0 394.851413 886.782133a222.628988 222.628988 0 0 0 267.90155-113.414767 155.420237 155.420237 0 0 0-113.414768-216.561532z m-75.609845 230.096627a77.476755 77.476755 0 0 1-96.145852 30.804011 54.60711 54.60711 0 0 1-20.536008-82.610756 78.41021 78.41021 0 0 1 93.345488-30.804011 52.273473 52.273473 0 0 1 24.269827 82.610756z m0 0",
+ "p-id": "1947"
+ }
+ })
+ ]
+ )
+ ]
+ ),
+ _vm._v(" 新浪微博")
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ staticClass: "dropdown-item",
+ attrs: { target: "_blank", href: _vm.qq }
+ },
+ [
+ _c(
+ "span",
+ { staticClass: "material-design-icon link-variant-icon" },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ t: "1531573585923",
+ viewBox: "0 0 1024 1024",
+ version: "1.1",
+ xmlns: "http://www.w3.org/2000/svg",
+ "p-id": "18559",
+ "xmlns:xlink": "http://www.w3.org/1999/xlink"
+ }
+ },
+ [
+ _c("path", {
+ attrs: {
+ d:
+ "M936.194300839506 691.6934192494618c-5.891587367822223-94.26540047423211-70.69904970840491-170.8560375504593-106.04857520987652-212.09715041975304 5.891587367822223-11.783174735644446 17.674762103466666-79.53643140740742-29.457938133649378-126.66913164452346V349.981342854005c0-182.63921228610366-129.61492468116543-315.1999312984493-294.57937486380246-315.1999312984493s-294.57937615834066 132.5607190123457-294.57937615834066 315.1999312984493v2.9457943311802466c-47.132700237116055 47.132700237116055-35.349525501471604 114.885956908879-29.45793683911111 126.66913164452346-35.349525501471604 41.24111286929382-100.15698784205432 117.83174994552098-106.04857520987652 212.09715041975304 0 23.56634947128889 2.9457943311802466 58.91587497276049 14.728969066824689 76.59063707622718 14.728969066824689 20.62055643464691 55.97008193611851-2.9457943311802466 82.48222444404936-64.80746234058272 8.837381699002469 29.457938133649378 26.51214380246913 73.64484403958517 67.75325667176295 126.66913164452346-70.69904970840491 14.728969066824689-88.37381310640988 85.42801877522965-64.80746234058272 123.72333731334321 17.674762103466666 26.51214380246913 53.02428760493826 47.132700237116055 120.77754298216297 47.132700237116055 114.885956908879 0 167.9102445138173-32.40373117029136 191.4765952796444-53.02428760493826 5.891587367822223-5.891587367822223 11.783174735644446-5.891587367822223 20.620555140108642-5.891587367822223 8.837381699002469 0 14.728969066824689 2.9457943311802466 20.62055643464691 5.891587367822223 23.56634947128889 20.62055643464691 73.64484403958517 53.02428760493826 191.4765939851062 53.02428760493826 64.80746234058272 0 103.10278087869627-20.62055643464691 120.77754427670124-47.132700237116055 23.56634947128889-38.29531853811359 2.9457943311802466-106.04857520987652-64.80746234058272-123.72333731334321 41.24111286929382-55.97008193611851 58.91587497276049-100.15698784205432 67.75325667176295-126.66913164452346 29.457938133649378 61.86166930394074 67.75325667176295 85.42801877522965 82.48222444404936 64.80746234058272 5.891587367822223-17.674762103466666 11.783174735644446-53.02428760493826 8.837381699002469-76.59063707622718z m0 0",
+ "p-id": "18560"
+ }
+ })
+ ]
+ )
+ ]
+ ),
+ _vm._v(" QQ 好友")
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ staticClass: "dropdown-item",
+ attrs: {
+ "data-toggle": "modal",
+ "data-target": "#page-wechat-qrcode"
+ }
+ },
+ [
+ _c(
+ "span",
+ { staticClass: "material-design-icon link-variant-icon" },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ t: "1531575816445",
+ viewBox: "0 0 1171 1024",
+ version: "1.1",
+ xmlns: "http://www.w3.org/2000/svg",
+ "p-id": "1968",
+ "xmlns:xlink": "http://www.w3.org/1999/xlink"
+ }
+ },
+ [
+ _c("path", {
+ attrs: {
+ d:
+ "M331.428571 263.428571q0-23.428571-14.285714-37.714286t-37.714286-14.285714q-24.571429 0-43.428571 14.571429t-18.857143 37.428571q0 22.285714 18.857143 36.857143t43.428571 14.571429q23.428571 0 37.714286-14t14.285714-37.428571zm424.571429 289.714286q0-16-14.571429-28.571429t-37.428571-12.571429q-15.428571 0-28.285714 12.857143t-12.857143 28.285714q0 16 12.857143 28.857143t28.285714 12.857143q22.857143 0 37.428571-12.571429t14.571429-29.142857zm-134.857143-289.714286q0-23.428571-14-37.714286t-37.428571-14.285714q-24.571429 0-43.428571 14.571429t-18.857143 37.428571q0 22.285714 18.857143 36.857143t43.428571 14.571429q23.428571 0 37.428571-14t14-37.428571zm362.857143 289.714286q0-16-14.857143-28.571429t-37.142857-12.571429q-15.428571 0-28.285714 12.857143t-12.857143 28.285714q0 16 12.857143 28.857143t28.285714 12.857143q22.285714 0 37.142857-12.571429t14.857143-29.142857zm-152-226.857143q-17.714286-2.285714-40-2.285714-96.571429 0-177.714286 44t-127.714286 119.142857-46.571429 164.285714q0 44.571429 13.142857 86.857143-20 1.714286-38.857143 1.714286-14.857143 0-28.571429-0.857143t-31.428571-3.714286-25.428571-4-31.142857-6-28.571429-6l-144.571429 72.571429 41.142857-124.571429q-165.714286-116-165.714286-280 0-96.571429 55.714286-177.714286t150.857143-127.714286 207.714286-46.571429q100.571429 0 190 37.714286t149.714286 104.285714 78 148.857143zm338.285714 320.571429q0 66.857143-39.142857 127.714286t-106 110.571429l31.428571 103.428571-113.714286-62.285714q-85.714286 21.142857-124.571429 21.142857-96.571429 0-177.714286-40.285714t-127.714286-109.428571-46.571429-150.857143 46.571429-150.857143 127.714286-109.428571 177.714286-40.285714q92 0 173.142857 40.285714t130 109.714286 48.857143 150.571429z",
+ "p-id": "1969"
+ }
+ })
+ ]
+ )
+ ]
+ ),
+ _vm._v(" 微信扫码")
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ staticClass: "dropdown-item",
+ attrs: { target: "_blank", href: _vm.qzone }
+ },
+ [
+ _c(
+ "span",
+ { staticClass: "material-design-icon link-variant-icon" },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ t: "1531573585923",
+ viewBox: "0 0 1024 1024",
+ version: "1.1",
+ xmlns: "http://www.w3.org/2000/svg",
+ "p-id": "18559",
+ "xmlns:xlink": "http://www.w3.org/1999/xlink"
+ }
+ },
+ [
+ _c("path", {
+ attrs: {
+ d:
+ "M757.116343 440.1536 457.245257 655.263086c0 0 120.347429 17.856 301.853257 15.786057l-8.259657-35.5712 258.618514-224.067657c4.754286-4.1216 6.577371-10.680686 4.629943-16.661943-1.9456-5.981257-7.277714-10.225371-13.540571-10.750171L659.604114 354.724571 526.4 39.506286c-2.437486-5.787429-8.120686-9.557943-14.4-9.557943s-11.960686 3.770514-14.398171 9.557943L364.397714 354.724571 23.451429 383.996343c-6.261029 0.526629-11.593143 4.768914-13.538743 10.750171-1.947429 5.981257-0.122514 12.540343 4.629943 16.661943l258.620343 224.067657L195.642514 968.813714c-1.4208 6.101943 0.9472 12.485486 6.032457 16.2048 5.103543 3.646171 11.8912 3.927771 17.2928 0.700343L512 809.003886l293.0304 176.7168c2.5088 1.545143 5.297371 2.247314 8.085943 2.247314 3.243886 0 6.473143-0.981943 9.206857-2.945829 5.087086-3.719314 7.455086-10.102857 6.034286-16.2048l-61.295543-263.6032c26.289371-13.2224 55.2448-35.602286 55.2448-35.602286s-114.753829 56.053029-526.729143 28.677486l298.574629-216.407771c0 0-11.733943-18.256457-385.914514-31.286857C183.191771 449.713371 513.296457 387.995429 757.116343 440.1536z",
+ "p-id": "13675"
+ }
+ })
+ ]
+ )
+ ]
+ ),
+ _vm._v(" QQ 空间")
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ staticClass: "dropdown-item copy-link",
+ attrs: {
+ href: "#",
+ "data-clipboard-text": _vm.url,
+ title: "复制链接"
+ }
+ },
+ [
+ _c("link-variant", { attrs: { title: "复制链接" } }),
+ _vm._v(" 复制链接")
+ ],
+ 1
+ )
+ ]
+ )
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-list-card.vue?vue&type=template&id=312446ed&":
+/*!********************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-list-card.vue?vue&type=template&id=312446ed& ***!
+ \********************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _vm.users.length > 0
+ ? _c("div", { staticClass: "box box-flush text-gray-50" }, [
+ _vm.title
+ ? _c("div", { staticClass: "box-body" }, [
+ _c(
+ "div",
+ {
+ staticClass:
+ "d-flex align-items-center justify-content-between"
+ },
+ [
+ _c("div", { staticClass: "text-13" }, [
+ _vm._v(_vm._s(_vm.title))
+ ])
+ ]
+ )
+ ])
+ : _vm._e(),
+ _vm._v(" "),
+ _c(
+ "ul",
+ { staticClass: "plan-list px-2 pb-2", class: { "pt-2": !_vm.title } },
+ _vm._l(_vm.users, function(item) {
+ return _c("user-media", {
+ key: item.id,
+ attrs: { type: "vertical w25", user: item }
+ })
+ }),
+ 1
+ )
+ ])
+ : _vm._e()
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-profile-card.vue?vue&type=template&id=710c76d4&":
+/*!***********************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-profile-card.vue?vue&type=template&id=710c76d4& ***!
+ \***********************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _vm.user
+ ? _c(
+ "div",
+ { staticClass: "user-card box box-flush text-center" },
+ [
+ _c(
+ "div",
+ { staticClass: "box-body" },
+ [
+ _c(
+ "div",
+ [
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "users.show",
+ params: { username: _vm.user.username }
+ }
+ }
+ },
+ [
+ _c("img", {
+ staticClass: "avatar-80",
+ attrs: { src: _vm.user.avatar, alt: _vm.user.name }
+ })
+ ]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "h6",
+ { staticClass: "mt-1 mb-0 text-22 d-inline-block" },
+ [
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "users.show",
+ params: { username: _vm.user.username }
+ }
+ }
+ },
+ [_vm._v(_vm._s(_vm.user.name))]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ [
+ _c(
+ "router-link",
+ {
+ staticClass: "text-12 text-muted",
+ attrs: {
+ to: {
+ name: "users.show",
+ params: { username: _vm.user.username }
+ }
+ }
+ },
+ [_vm._v("@" + _vm._s(_vm.user.username))]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("div", { staticClass: "text-gray-50" }, [
+ _c("div", { staticClass: "py-1" }, [
+ _vm._v(_vm._s(_vm.user.bio))
+ ])
+ ]),
+ _vm._v(" "),
+ _c("user-social-btns", {
+ staticClass: "flex-wrap justify-content-center",
+ attrs: { user: _vm.user, size: 12, spacing: 2 }
+ })
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("follow-btn", {
+ staticClass: "pb-2 ml-auto",
+ attrs: { item: _vm.user }
+ })
+ ],
+ 1
+ )
+ : _vm._e()
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/wechat-qrcode.vue?vue&type=template&id=647c9db5&":
+/*!*******************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/wechat-qrcode.vue?vue&type=template&id=647c9db5& ***!
+ \*******************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ {
+ ref: "pageWechatQrcode",
+ staticClass: "modal fade",
+ attrs: {
+ id: "page-wechat-qrcode",
+ tabindex: "-1",
+ role: "dialog",
+ "aria-labelledby": "qrcode-wechat",
+ "aria-hidden": "true"
+ }
+ },
+ [_vm._m(0)]
+ )
+}
+var staticRenderFns = [
+ function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ {
+ staticClass: "modal-dialog modal-sm modal-dialog-centered",
+ staticStyle: { "z-index": "99999" },
+ attrs: { role: "document" }
+ },
+ [
+ _c("div", { staticClass: "modal-content" }, [
+ _c("div", { staticClass: "modal-body text-center" }, [
+ _c("canvas", { attrs: { id: "page-wechat-qrcode-canvas" } }),
+ _vm._v(" "),
+ _c("p", [_vm._v("使用微信扫一扫识别上方二维码")])
+ ])
+ ])
+ ]
+ )
+ }
+]
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/report-form.vue?vue&type=template&id=bea1adf4&":
+/*!**********************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/threads/report-form.vue?vue&type=template&id=bea1adf4& ***!
+ \**********************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "el-dialog",
+ {
+ attrs: { title: "举报文章", visible: _vm.visible, width: "30%" },
+ on: { close: _vm.close }
+ },
+ [
+ _c("form", [
+ _c("div", { staticClass: "form-group" }, [
+ _c("textarea", {
+ directives: [
+ {
+ name: "model",
+ rawName: "v-model",
+ value: _vm.remark,
+ expression: "remark"
+ }
+ ],
+ staticClass: "form-control",
+ attrs: { rows: "6", placeholder: "请详细描述举报原因" },
+ domProps: { value: _vm.remark },
+ on: {
+ input: function($event) {
+ if ($event.target.composing) {
+ return
+ }
+ _vm.remark = $event.target.value
+ }
+ }
+ })
+ ])
+ ]),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "dialog-footer",
+ attrs: { slot: "footer" },
+ slot: "footer"
+ },
+ [
+ _c(
+ "button",
+ {
+ staticClass: "btn btn-sm btn-success",
+ on: { click: _vm.report }
+ },
+ [_vm._v("提 交")]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/show.vue?vue&type=template&id=448fe904&":
+/*!***************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/threads/show.vue?vue&type=template&id=448fe904& ***!
+ \***************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _vm.thread
+ ? _c(
+ "div",
+ { staticClass: "page-threads-show pb-4" },
+ [
+ _c("div", { staticClass: "row" }, [
+ _c("div", { staticClass: "col-md-9" }, [
+ _c("article", { staticClass: "box box-flush" }, [
+ _c(
+ "header",
+ {
+ staticClass:
+ "thread-header box-body d-flex justify-content-between align-items-center"
+ },
+ [
+ _c("user-media", { attrs: { user: _vm.thread.user } }, [
+ _c(
+ "small",
+ {
+ staticClass: "text-muted",
+ attrs: { slot: "description" },
+ slot: "description"
+ },
+ [
+ _vm._v(
+ "发布于 " + _vm._s(_vm.thread.created_at_timeago)
+ )
+ ]
+ )
+ ])
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "thread-content box-body text-gray-40 text-16"
+ },
+ [
+ _c("header", [
+ _c("h2", { staticClass: "mb-3 pb-2 border-bottom" }, [
+ _vm._v(_vm._s(_vm.thread.title))
+ ])
+ ]),
+ _vm._v(" "),
+ _c("markdown-body", {
+ model: {
+ value: _vm.thread.content.body,
+ callback: function($$v) {
+ _vm.$set(_vm.thread.content, "body", $$v)
+ },
+ expression: "thread.content.body"
+ }
+ })
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "thread-stats-bar bg-white border-top py-1" },
+ [
+ _c("div", { staticClass: "container" }, [
+ _c("ul", { staticClass: "nav align-items-center" }, [
+ _c(
+ "li",
+ { staticClass: "nav-item" },
+ [
+ _c("like-btn", {
+ attrs: { relation: "thread", item: _vm.thread }
+ })
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("li", { staticClass: "nav-item" }, [
+ _c(
+ "a",
+ {
+ staticClass: "text-gray-50 btn btn-sm btn-link",
+ attrs: { href: "#comments" }
+ },
+ [
+ _c("comment-icon"),
+ _vm._v(
+ "\n " +
+ _vm._s(_vm.thread.cache.comments_count) +
+ " 条评论\n "
+ )
+ ],
+ 1
+ )
+ ]),
+ _vm._v(" "),
+ _c(
+ "li",
+ { staticClass: "nav-item" },
+ [
+ _c("share-dropdown", [
+ _c(
+ "a",
+ {
+ staticClass:
+ "text-gray-50 btn btn-sm btn-link"
+ },
+ [
+ _c("share-icon"),
+ _vm._v("分享\n ")
+ ],
+ 1
+ )
+ ])
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("li", { staticClass: "nav-item" }, [
+ _c(
+ "button",
+ {
+ staticClass: "text-gray-50 btn btn-sm btn-link",
+ attrs: {
+ type: "button",
+ "data-toggle": "dropdown",
+ "aria-haspopup": "true",
+ "aria-expanded": "false"
+ }
+ },
+ [_c("more-icon")],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "dropdown-menu" },
+ [
+ _vm.canEdit
+ ? [
+ _vm.currentUser.is_admin
+ ? [
+ _c(
+ "button",
+ {
+ staticClass: "dropdown-item",
+ attrs: { type: "button" },
+ on: {
+ click: function($event) {
+ return _vm.toggleStatus(
+ "excellent_at"
+ )
+ }
+ }
+ },
+ [
+ _c("medal-icon", {
+ staticClass: "mr-1"
+ }),
+ _vm._v(
+ "\n " +
+ _vm._s(
+ _vm.thread.excellent_at
+ ? "取消精华"
+ : "精华"
+ ) +
+ "\n "
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "button",
+ {
+ staticClass: "dropdown-item",
+ attrs: { type: "button" },
+ on: {
+ click: function($event) {
+ return _vm.toggleStatus(
+ "pinned_at"
+ )
+ }
+ }
+ },
+ [
+ _c("top-icon", {
+ staticClass: "mr-1"
+ }),
+ _vm._v(
+ "\n " +
+ _vm._s(
+ _vm.thread.pinned_at
+ ? "取消置顶"
+ : "置顶"
+ ) +
+ "\n "
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "button",
+ {
+ staticClass: "dropdown-item",
+ attrs: { type: "button" },
+ on: {
+ click: function($event) {
+ return _vm.toggleStatus(
+ "banned_at"
+ )
+ }
+ }
+ },
+ [
+ _c("lock-icon", {
+ staticClass: "mr-1"
+ }),
+ _vm._v(
+ "\n " +
+ _vm._s(
+ _vm.thread.banned_at
+ ? "取消冻结"
+ : "冻结"
+ ) +
+ "\n "
+ )
+ ],
+ 1
+ )
+ ]
+ : _vm._e(),
+ _vm._v(" "),
+ _c(
+ "button",
+ {
+ staticClass: "dropdown-item",
+ attrs: { type: "button" },
+ on: {
+ click: function($event) {
+ return _vm.$router.push({
+ name: "threads.edit",
+ params: { id: _vm.thread.id }
+ })
+ }
+ }
+ },
+ [
+ _c("pencil-icon", {
+ staticClass: "mr-1"
+ }),
+ _vm._v("编辑\n ")
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "button",
+ {
+ staticClass:
+ "dropdown-item text-danger",
+ attrs: { type: "button" },
+ on: {
+ click: function($event) {
+ return _vm.handleDelete(_vm.thread)
+ }
+ }
+ },
+ [
+ _c("delete-icon", {
+ staticClass: "mr-1"
+ }),
+ _vm._v("删除\n ")
+ ],
+ 1
+ )
+ ]
+ : _vm._e(),
+ _vm._v(" "),
+ _c(
+ "button",
+ {
+ staticClass: "dropdown-item cursor-pointer",
+ attrs: { type: "button" },
+ on: {
+ click: function($event) {
+ _vm.showReportForm = true
+ }
+ }
+ },
+ [
+ _c("alert-box-icon", { staticClass: "mr-1" }),
+ _vm._v("举报\n ")
+ ],
+ 1
+ )
+ ],
+ 2
+ )
+ ]),
+ _vm._v(" "),
+ _c(
+ "li",
+ { staticClass: "nav-item ml-auto" },
+ [
+ _c("subscribe-btn", {
+ attrs: { relation: "thread", item: _vm.thread }
+ })
+ ],
+ 1
+ )
+ ])
+ ])
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "thread-author-card border-top p-3" },
+ [
+ _c(
+ "div",
+ {
+ staticClass:
+ "d-flex align-items-center justify-content-between"
+ },
+ [
+ _c(
+ "div",
+ {
+ staticClass: "user-info d-flex align-items-center"
+ },
+ [
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "users.show",
+ params: {
+ username: _vm.thread.user.username
+ }
+ }
+ }
+ },
+ [
+ _c("img", {
+ staticClass: "avatar-60",
+ attrs: {
+ src: _vm.thread.user.avatar,
+ alt: "User avatar"
+ }
+ })
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "p-2" },
+ [
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "users.show",
+ params: {
+ username: _vm.thread.user.username
+ }
+ }
+ }
+ },
+ [
+ _c(
+ "h3",
+ { staticClass: "text-gray-50 text-14" },
+ [_vm._v(_vm._s(_vm.thread.user.name))]
+ )
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "text-12 text-muted" },
+ [_vm._v(_vm._s(_vm.thread.user.bio))]
+ )
+ ],
+ 1
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "right-action" },
+ [
+ _c("follow-btn", {
+ attrs: { item: _vm.thread.user }
+ })
+ ],
+ 1
+ )
+ ]
+ )
+ ]
+ )
+ ]),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "thread-comments mt-3" },
+ [
+ _c("comments", {
+ attrs: {
+ "object-type": "App\\Thread",
+ "object-id": _vm.thread.id
+ },
+ on: { created: _vm.loadThread }
+ })
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "thread-toolbar" },
+ [
+ _c("animate-action", { attrs: { item: _vm.thread } }),
+ _vm._v(" "),
+ _c("share-action", {
+ staticClass: "mt-3",
+ attrs: { item: _vm.thread }
+ })
+ ],
+ 1
+ )
+ ]),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "col-md-3 position-relative" },
+ [
+ _c("user-profile-card", {
+ staticClass: "user-profile-card",
+ attrs: { user: _vm.thread.user }
+ }),
+ _vm._v(" "),
+ _c("user-list-card", {
+ staticClass: "mt-2",
+ attrs: { title: "他们觉得很赞", users: _vm.thread.likers }
+ }),
+ _vm._v(" "),
+ _c("hot-tags", { staticClass: "mt-2" })
+ ],
+ 1
+ )
+ ]),
+ _vm._v(" "),
+ _c("wechat-qrcode"),
+ _vm._v(" "),
+ _c("report-form", {
+ attrs: { visible: _vm.showReportForm },
+ on: {
+ close: function($event) {
+ _vm.showReportForm = false
+ }
+ }
+ })
+ ],
+ 1
+ )
+ : _vm._e()
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./src/components/buttons/animate-action.vue":
+/*!***************************************************!*\
+ !*** ./src/components/buttons/animate-action.vue ***!
+ \***************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _animate_action_vue_vue_type_template_id_010b0e00___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./animate-action.vue?vue&type=template&id=010b0e00& */ "./src/components/buttons/animate-action.vue?vue&type=template&id=010b0e00&");
+/* harmony import */ var _animate_action_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./animate-action.vue?vue&type=script&lang=js& */ "./src/components/buttons/animate-action.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _animate_action_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./animate-action.vue?vue&type=style&index=0&lang=scss& */ "./src/components/buttons/animate-action.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _animate_action_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _animate_action_vue_vue_type_template_id_010b0e00___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _animate_action_vue_vue_type_template_id_010b0e00___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/buttons/animate-action.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/buttons/animate-action.vue?vue&type=script&lang=js&":
+/*!****************************************************************************!*\
+ !*** ./src/components/buttons/animate-action.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_animate_action_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./animate-action.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/animate-action.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_animate_action_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/buttons/animate-action.vue?vue&type=style&index=0&lang=scss&":
+/*!*************************************************************************************!*\
+ !*** ./src/components/buttons/animate-action.vue?vue&type=style&index=0&lang=scss& ***!
+ \*************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_animate_action_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../../node_modules/style-loader!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src??ref--7-3!../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../node_modules/vue-loader/lib??vue-loader-options!./animate-action.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/animate-action.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_animate_action_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_animate_action_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_animate_action_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_animate_action_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_animate_action_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/components/buttons/animate-action.vue?vue&type=template&id=010b0e00&":
+/*!**********************************************************************************!*\
+ !*** ./src/components/buttons/animate-action.vue?vue&type=template&id=010b0e00& ***!
+ \**********************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_animate_action_vue_vue_type_template_id_010b0e00___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./animate-action.vue?vue&type=template&id=010b0e00& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/animate-action.vue?vue&type=template&id=010b0e00&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_animate_action_vue_vue_type_template_id_010b0e00___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_animate_action_vue_vue_type_template_id_010b0e00___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/buttons/like-btn.vue":
+/*!*********************************************!*\
+ !*** ./src/components/buttons/like-btn.vue ***!
+ \*********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _like_btn_vue_vue_type_template_id_055d3c04___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./like-btn.vue?vue&type=template&id=055d3c04& */ "./src/components/buttons/like-btn.vue?vue&type=template&id=055d3c04&");
+/* harmony import */ var _like_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./like-btn.vue?vue&type=script&lang=js& */ "./src/components/buttons/like-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _like_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _like_btn_vue_vue_type_template_id_055d3c04___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _like_btn_vue_vue_type_template_id_055d3c04___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/buttons/like-btn.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/buttons/like-btn.vue?vue&type=script&lang=js&":
+/*!**********************************************************************!*\
+ !*** ./src/components/buttons/like-btn.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_like_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./like-btn.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/like-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_like_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/buttons/like-btn.vue?vue&type=template&id=055d3c04&":
+/*!****************************************************************************!*\
+ !*** ./src/components/buttons/like-btn.vue?vue&type=template&id=055d3c04& ***!
+ \****************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_like_btn_vue_vue_type_template_id_055d3c04___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./like-btn.vue?vue&type=template&id=055d3c04& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/like-btn.vue?vue&type=template&id=055d3c04&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_like_btn_vue_vue_type_template_id_055d3c04___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_like_btn_vue_vue_type_template_id_055d3c04___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/buttons/share-action.vue":
+/*!*************************************************!*\
+ !*** ./src/components/buttons/share-action.vue ***!
+ \*************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _share_action_vue_vue_type_template_id_fde12a7c_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./share-action.vue?vue&type=template&id=fde12a7c&scoped=true& */ "./src/components/buttons/share-action.vue?vue&type=template&id=fde12a7c&scoped=true&");
+/* harmony import */ var _share_action_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./share-action.vue?vue&type=script&lang=js& */ "./src/components/buttons/share-action.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _share_action_vue_vue_type_style_index_0_id_fde12a7c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./share-action.vue?vue&type=style&index=0&id=fde12a7c&lang=scss&scoped=true& */ "./src/components/buttons/share-action.vue?vue&type=style&index=0&id=fde12a7c&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _share_action_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _share_action_vue_vue_type_template_id_fde12a7c_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _share_action_vue_vue_type_template_id_fde12a7c_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ "fde12a7c",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/buttons/share-action.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/buttons/share-action.vue?vue&type=script&lang=js&":
+/*!**************************************************************************!*\
+ !*** ./src/components/buttons/share-action.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_share_action_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./share-action.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/share-action.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_share_action_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/buttons/share-action.vue?vue&type=style&index=0&id=fde12a7c&lang=scss&scoped=true&":
+/*!***********************************************************************************************************!*\
+ !*** ./src/components/buttons/share-action.vue?vue&type=style&index=0&id=fde12a7c&lang=scss&scoped=true& ***!
+ \***********************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_share_action_vue_vue_type_style_index_0_id_fde12a7c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../../node_modules/style-loader!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src??ref--7-3!../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../node_modules/vue-loader/lib??vue-loader-options!./share-action.vue?vue&type=style&index=0&id=fde12a7c&lang=scss&scoped=true& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/share-action.vue?vue&type=style&index=0&id=fde12a7c&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_share_action_vue_vue_type_style_index_0_id_fde12a7c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_share_action_vue_vue_type_style_index_0_id_fde12a7c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_share_action_vue_vue_type_style_index_0_id_fde12a7c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_share_action_vue_vue_type_style_index_0_id_fde12a7c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_share_action_vue_vue_type_style_index_0_id_fde12a7c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/components/buttons/share-action.vue?vue&type=template&id=fde12a7c&scoped=true&":
+/*!********************************************************************************************!*\
+ !*** ./src/components/buttons/share-action.vue?vue&type=template&id=fde12a7c&scoped=true& ***!
+ \********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_share_action_vue_vue_type_template_id_fde12a7c_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./share-action.vue?vue&type=template&id=fde12a7c&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/share-action.vue?vue&type=template&id=fde12a7c&scoped=true&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_share_action_vue_vue_type_template_id_fde12a7c_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_share_action_vue_vue_type_template_id_fde12a7c_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/buttons/subscribe-btn.vue":
+/*!**************************************************!*\
+ !*** ./src/components/buttons/subscribe-btn.vue ***!
+ \**************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _subscribe_btn_vue_vue_type_template_id_e241702a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./subscribe-btn.vue?vue&type=template&id=e241702a& */ "./src/components/buttons/subscribe-btn.vue?vue&type=template&id=e241702a&");
+/* harmony import */ var _subscribe_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./subscribe-btn.vue?vue&type=script&lang=js& */ "./src/components/buttons/subscribe-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _subscribe_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _subscribe_btn_vue_vue_type_template_id_e241702a___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _subscribe_btn_vue_vue_type_template_id_e241702a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/buttons/subscribe-btn.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/buttons/subscribe-btn.vue?vue&type=script&lang=js&":
+/*!***************************************************************************!*\
+ !*** ./src/components/buttons/subscribe-btn.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_subscribe_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./subscribe-btn.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/subscribe-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_subscribe_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/buttons/subscribe-btn.vue?vue&type=template&id=e241702a&":
+/*!*********************************************************************************!*\
+ !*** ./src/components/buttons/subscribe-btn.vue?vue&type=template&id=e241702a& ***!
+ \*********************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_subscribe_btn_vue_vue_type_template_id_e241702a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./subscribe-btn.vue?vue&type=template&id=e241702a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/subscribe-btn.vue?vue&type=template&id=e241702a&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_subscribe_btn_vue_vue_type_template_id_e241702a___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_subscribe_btn_vue_vue_type_template_id_e241702a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/comments.vue":
+/*!*************************************!*\
+ !*** ./src/components/comments.vue ***!
+ \*************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _comments_vue_vue_type_template_id_4e7c9004___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./comments.vue?vue&type=template&id=4e7c9004& */ "./src/components/comments.vue?vue&type=template&id=4e7c9004&");
+/* harmony import */ var _comments_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./comments.vue?vue&type=script&lang=js& */ "./src/components/comments.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _comments_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./comments.vue?vue&type=style&index=0&lang=scss& */ "./src/components/comments.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _comments_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _comments_vue_vue_type_template_id_4e7c9004___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _comments_vue_vue_type_template_id_4e7c9004___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/comments.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/comments.vue?vue&type=script&lang=js&":
+/*!**************************************************************!*\
+ !*** ./src/components/comments.vue?vue&type=script&lang=js& ***!
+ \**************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comments_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./comments.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/comments.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comments_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/comments.vue?vue&type=style&index=0&lang=scss&":
+/*!***********************************************************************!*\
+ !*** ./src/components/comments.vue?vue&type=style&index=0&lang=scss& ***!
+ \***********************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_comments_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../node_modules/style-loader!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./comments.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/comments.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_comments_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_comments_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_comments_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_comments_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_comments_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/components/comments.vue?vue&type=template&id=4e7c9004&":
+/*!********************************************************************!*\
+ !*** ./src/components/comments.vue?vue&type=template&id=4e7c9004& ***!
+ \********************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comments_vue_vue_type_template_id_4e7c9004___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./comments.vue?vue&type=template&id=4e7c9004& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/comments.vue?vue&type=template&id=4e7c9004&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comments_vue_vue_type_template_id_4e7c9004___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comments_vue_vue_type_template_id_4e7c9004___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/share-dropdown.vue":
+/*!*******************************************!*\
+ !*** ./src/components/share-dropdown.vue ***!
+ \*******************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _share_dropdown_vue_vue_type_template_id_035c7ccf_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./share-dropdown.vue?vue&type=template&id=035c7ccf&scoped=true& */ "./src/components/share-dropdown.vue?vue&type=template&id=035c7ccf&scoped=true&");
+/* harmony import */ var _share_dropdown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./share-dropdown.vue?vue&type=script&lang=js& */ "./src/components/share-dropdown.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _share_dropdown_vue_vue_type_style_index_0_id_035c7ccf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./share-dropdown.vue?vue&type=style&index=0&id=035c7ccf&lang=scss&scoped=true& */ "./src/components/share-dropdown.vue?vue&type=style&index=0&id=035c7ccf&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _share_dropdown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _share_dropdown_vue_vue_type_template_id_035c7ccf_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _share_dropdown_vue_vue_type_template_id_035c7ccf_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ "035c7ccf",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/share-dropdown.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/share-dropdown.vue?vue&type=script&lang=js&":
+/*!********************************************************************!*\
+ !*** ./src/components/share-dropdown.vue?vue&type=script&lang=js& ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_share_dropdown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./share-dropdown.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/share-dropdown.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_share_dropdown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/share-dropdown.vue?vue&type=style&index=0&id=035c7ccf&lang=scss&scoped=true&":
+/*!*****************************************************************************************************!*\
+ !*** ./src/components/share-dropdown.vue?vue&type=style&index=0&id=035c7ccf&lang=scss&scoped=true& ***!
+ \*****************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_share_dropdown_vue_vue_type_style_index_0_id_035c7ccf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../node_modules/style-loader!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./share-dropdown.vue?vue&type=style&index=0&id=035c7ccf&lang=scss&scoped=true& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/share-dropdown.vue?vue&type=style&index=0&id=035c7ccf&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_share_dropdown_vue_vue_type_style_index_0_id_035c7ccf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_share_dropdown_vue_vue_type_style_index_0_id_035c7ccf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_share_dropdown_vue_vue_type_style_index_0_id_035c7ccf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_share_dropdown_vue_vue_type_style_index_0_id_035c7ccf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_share_dropdown_vue_vue_type_style_index_0_id_035c7ccf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/components/share-dropdown.vue?vue&type=template&id=035c7ccf&scoped=true&":
+/*!**************************************************************************************!*\
+ !*** ./src/components/share-dropdown.vue?vue&type=template&id=035c7ccf&scoped=true& ***!
+ \**************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_share_dropdown_vue_vue_type_template_id_035c7ccf_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./share-dropdown.vue?vue&type=template&id=035c7ccf&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/share-dropdown.vue?vue&type=template&id=035c7ccf&scoped=true&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_share_dropdown_vue_vue_type_template_id_035c7ccf_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_share_dropdown_vue_vue_type_template_id_035c7ccf_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/user-list-card.vue":
+/*!*******************************************!*\
+ !*** ./src/components/user-list-card.vue ***!
+ \*******************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _user_list_card_vue_vue_type_template_id_312446ed___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./user-list-card.vue?vue&type=template&id=312446ed& */ "./src/components/user-list-card.vue?vue&type=template&id=312446ed&");
+/* harmony import */ var _user_list_card_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./user-list-card.vue?vue&type=script&lang=js& */ "./src/components/user-list-card.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _user_list_card_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _user_list_card_vue_vue_type_template_id_312446ed___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _user_list_card_vue_vue_type_template_id_312446ed___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/user-list-card.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/user-list-card.vue?vue&type=script&lang=js&":
+/*!********************************************************************!*\
+ !*** ./src/components/user-list-card.vue?vue&type=script&lang=js& ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_list_card_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./user-list-card.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-list-card.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_list_card_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/user-list-card.vue?vue&type=template&id=312446ed&":
+/*!**************************************************************************!*\
+ !*** ./src/components/user-list-card.vue?vue&type=template&id=312446ed& ***!
+ \**************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_list_card_vue_vue_type_template_id_312446ed___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./user-list-card.vue?vue&type=template&id=312446ed& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-list-card.vue?vue&type=template&id=312446ed&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_list_card_vue_vue_type_template_id_312446ed___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_list_card_vue_vue_type_template_id_312446ed___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/user-profile-card.vue":
+/*!**********************************************!*\
+ !*** ./src/components/user-profile-card.vue ***!
+ \**********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _user_profile_card_vue_vue_type_template_id_710c76d4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./user-profile-card.vue?vue&type=template&id=710c76d4& */ "./src/components/user-profile-card.vue?vue&type=template&id=710c76d4&");
+/* harmony import */ var _user_profile_card_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./user-profile-card.vue?vue&type=script&lang=js& */ "./src/components/user-profile-card.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _user_profile_card_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _user_profile_card_vue_vue_type_template_id_710c76d4___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _user_profile_card_vue_vue_type_template_id_710c76d4___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/user-profile-card.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/user-profile-card.vue?vue&type=script&lang=js&":
+/*!***********************************************************************!*\
+ !*** ./src/components/user-profile-card.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_profile_card_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./user-profile-card.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-profile-card.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_profile_card_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/user-profile-card.vue?vue&type=template&id=710c76d4&":
+/*!*****************************************************************************!*\
+ !*** ./src/components/user-profile-card.vue?vue&type=template&id=710c76d4& ***!
+ \*****************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_profile_card_vue_vue_type_template_id_710c76d4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./user-profile-card.vue?vue&type=template&id=710c76d4& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-profile-card.vue?vue&type=template&id=710c76d4&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_profile_card_vue_vue_type_template_id_710c76d4___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_profile_card_vue_vue_type_template_id_710c76d4___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/wechat-qrcode.vue":
+/*!******************************************!*\
+ !*** ./src/components/wechat-qrcode.vue ***!
+ \******************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _wechat_qrcode_vue_vue_type_template_id_647c9db5___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wechat-qrcode.vue?vue&type=template&id=647c9db5& */ "./src/components/wechat-qrcode.vue?vue&type=template&id=647c9db5&");
+/* harmony import */ var _wechat_qrcode_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./wechat-qrcode.vue?vue&type=script&lang=js& */ "./src/components/wechat-qrcode.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _wechat_qrcode_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _wechat_qrcode_vue_vue_type_template_id_647c9db5___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _wechat_qrcode_vue_vue_type_template_id_647c9db5___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/wechat-qrcode.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/wechat-qrcode.vue?vue&type=script&lang=js&":
+/*!*******************************************************************!*\
+ !*** ./src/components/wechat-qrcode.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_wechat_qrcode_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./wechat-qrcode.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/wechat-qrcode.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_wechat_qrcode_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/wechat-qrcode.vue?vue&type=template&id=647c9db5&":
+/*!*************************************************************************!*\
+ !*** ./src/components/wechat-qrcode.vue?vue&type=template&id=647c9db5& ***!
+ \*************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_wechat_qrcode_vue_vue_type_template_id_647c9db5___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./wechat-qrcode.vue?vue&type=template&id=647c9db5& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/wechat-qrcode.vue?vue&type=template&id=647c9db5&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_wechat_qrcode_vue_vue_type_template_id_647c9db5___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_wechat_qrcode_vue_vue_type_template_id_647c9db5___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/threads/report-form.vue":
+/*!*********************************************!*\
+ !*** ./src/modules/threads/report-form.vue ***!
+ \*********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _report_form_vue_vue_type_template_id_bea1adf4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./report-form.vue?vue&type=template&id=bea1adf4& */ "./src/modules/threads/report-form.vue?vue&type=template&id=bea1adf4&");
+/* harmony import */ var _report_form_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./report-form.vue?vue&type=script&lang=js& */ "./src/modules/threads/report-form.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _report_form_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./report-form.vue?vue&type=style&index=0&lang=scss& */ "./src/modules/threads/report-form.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _report_form_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _report_form_vue_vue_type_template_id_bea1adf4___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _report_form_vue_vue_type_template_id_bea1adf4___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/threads/report-form.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/threads/report-form.vue?vue&type=script&lang=js&":
+/*!**********************************************************************!*\
+ !*** ./src/modules/threads/report-form.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_report_form_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./report-form.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/report-form.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_report_form_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/threads/report-form.vue?vue&type=style&index=0&lang=scss&":
+/*!*******************************************************************************!*\
+ !*** ./src/modules/threads/report-form.vue?vue&type=style&index=0&lang=scss& ***!
+ \*******************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_report_form_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../../node_modules/style-loader!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src??ref--7-3!../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../node_modules/vue-loader/lib??vue-loader-options!./report-form.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/report-form.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_report_form_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_report_form_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_report_form_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_report_form_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_report_form_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/modules/threads/report-form.vue?vue&type=template&id=bea1adf4&":
+/*!****************************************************************************!*\
+ !*** ./src/modules/threads/report-form.vue?vue&type=template&id=bea1adf4& ***!
+ \****************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_report_form_vue_vue_type_template_id_bea1adf4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./report-form.vue?vue&type=template&id=bea1adf4& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/report-form.vue?vue&type=template&id=bea1adf4&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_report_form_vue_vue_type_template_id_bea1adf4___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_report_form_vue_vue_type_template_id_bea1adf4___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/threads/show.vue":
+/*!**************************************!*\
+ !*** ./src/modules/threads/show.vue ***!
+ \**************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _show_vue_vue_type_template_id_448fe904___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./show.vue?vue&type=template&id=448fe904& */ "./src/modules/threads/show.vue?vue&type=template&id=448fe904&");
+/* harmony import */ var _show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./show.vue?vue&type=script&lang=js& */ "./src/modules/threads/show.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _show_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./show.vue?vue&type=style&index=0&lang=scss& */ "./src/modules/threads/show.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _show_vue_vue_type_template_id_448fe904___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _show_vue_vue_type_template_id_448fe904___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/threads/show.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/threads/show.vue?vue&type=script&lang=js&":
+/*!***************************************************************!*\
+ !*** ./src/modules/threads/show.vue?vue&type=script&lang=js& ***!
+ \***************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./show.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/show.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/threads/show.vue?vue&type=style&index=0&lang=scss&":
+/*!************************************************************************!*\
+ !*** ./src/modules/threads/show.vue?vue&type=style&index=0&lang=scss& ***!
+ \************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../../node_modules/style-loader!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src??ref--7-3!../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../node_modules/vue-loader/lib??vue-loader-options!./show.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/show.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/modules/threads/show.vue?vue&type=template&id=448fe904&":
+/*!*********************************************************************!*\
+ !*** ./src/modules/threads/show.vue?vue&type=template&id=448fe904& ***!
+ \*********************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_template_id_448fe904___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./show.vue?vue&type=template&id=448fe904& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/threads/show.vue?vue&type=template&id=448fe904&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_template_id_448fe904___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_template_id_448fe904___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/18.f574057c6b5260a9673e.js b/public/18.f574057c6b5260a9673e.js
new file mode 100644
index 00000000..71228ce3
--- /dev/null
+++ b/public/18.f574057c6b5260a9673e.js
@@ -0,0 +1,1654 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[18],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/empty-state.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/empty-state.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $icons_TooltipOutline__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $icons/TooltipOutline */ "./node_modules/vue-material-design-icons/TooltipOutline.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'empty-state',
+ components: {
+ EmptyIcon: $icons_TooltipOutline__WEBPACK_IMPORTED_MODULE_0__["default"]
+ },
+ props: {
+ title: {
+ type: String,
+ default: null
+ },
+ message: {
+ type: String,
+ default: '空空如也~~~'
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/show.vue?vue&type=script&lang=js&":
+/*!*****************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/show.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $icons_Bell__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $icons/Bell */ "./node_modules/vue-material-design-icons/Bell.vue");
+/* harmony import */ var $icons_Inbox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/Inbox */ "./node_modules/vue-material-design-icons/Inbox.vue");
+/* harmony import */ var $icons_Check__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/Check */ "./node_modules/vue-material-design-icons/Check.vue");
+/* harmony import */ var $components_empty_state__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $components/empty-state */ "./src/components/empty-state.vue");
+/* harmony import */ var _types_new_follower__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./types/new-follower */ "./src/modules/notifications/types/new-follower.vue");
+/* harmony import */ var _types_comment_my_thread__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./types/comment-my-thread */ "./src/modules/notifications/types/comment-my-thread.vue");
+/* harmony import */ var _types_liked_my_thread__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./types/liked-my-thread */ "./src/modules/notifications/types/liked-my-thread.vue");
+/* harmony import */ var _types_mentioned_me__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./types/mentioned-me */ "./src/modules/notifications/types/mentioned-me.vue");
+/* harmony import */ var _types_subscribed_my_thread__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./types/subscribed-my-thread */ "./src/modules/notifications/types/subscribed-my-thread.vue");
+/* harmony import */ var _types_welcome__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./types/welcome */ "./src/modules/notifications/types/welcome.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ components: {
+ EmptyState: $components_empty_state__WEBPACK_IMPORTED_MODULE_3__["default"],
+ MentionedMe: _types_mentioned_me__WEBPACK_IMPORTED_MODULE_7__["default"],
+ BellIcon: $icons_Bell__WEBPACK_IMPORTED_MODULE_0__["default"],
+ InboxIcon: $icons_Inbox__WEBPACK_IMPORTED_MODULE_1__["default"],
+ CheckIcon: $icons_Check__WEBPACK_IMPORTED_MODULE_2__["default"],
+ NewFollower: _types_new_follower__WEBPACK_IMPORTED_MODULE_4__["default"],
+ CommentMyThread: _types_comment_my_thread__WEBPACK_IMPORTED_MODULE_5__["default"],
+ LikedMyThread: _types_liked_my_thread__WEBPACK_IMPORTED_MODULE_6__["default"],
+ SubscribedMyThread: _types_subscribed_my_thread__WEBPACK_IMPORTED_MODULE_8__["default"],
+ Welcome: _types_welcome__WEBPACK_IMPORTED_MODULE_9__["default"]
+ },
+ data: function data() {
+ return {
+ tabs: {
+ all: '全部 ',
+ follow: '关注',
+ comment: '评论',
+ subscribe: '订阅',
+ like: '点赞'
+ },
+ currentTab: 'all',
+ notifications: []
+ };
+ },
+ watch: {
+ currentTab: function currentTab() {
+ this.loadNotifications(1);
+ }
+ },
+ created: function created() {
+ this.loadNotifications();
+ },
+ methods: {
+ loadNotifications: function loadNotifications() {
+ var _this = this;
+
+ var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
+ this.$router.push({
+ name: 'notifications.show',
+ query: {
+ tab: this.currentTab
+ }
+ });
+ this.$http.get("user/notifications?tab=".concat(this.currentTab, "&page=").concat(page)).then(function (notifications) {
+ return _this.notifications = notifications.data;
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/comment-my-thread.vue?vue&type=script&lang=js&":
+/*!************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/comment-my-thread.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _notification__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./notification */ "./src/modules/notifications/types/notification.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ components: {
+ Notification: _notification__WEBPACK_IMPORTED_MODULE_0__["default"]
+ },
+ props: {
+ notification: {
+ type: Object,
+ default: null
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/liked-my-thread.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/liked-my-thread.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _notification__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./notification */ "./src/modules/notifications/types/notification.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ components: {
+ Notification: _notification__WEBPACK_IMPORTED_MODULE_0__["default"]
+ },
+ props: {
+ notification: {
+ type: Object,
+ default: null
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/mentioned-me.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/mentioned-me.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _notification__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./notification */ "./src/modules/notifications/types/notification.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ components: {
+ Notification: _notification__WEBPACK_IMPORTED_MODULE_0__["default"]
+ },
+ props: {
+ notification: {
+ type: Object,
+ default: null
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/new-follower.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/new-follower.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _notification__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./notification */ "./src/modules/notifications/types/notification.vue");
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ components: {
+ Notification: _notification__WEBPACK_IMPORTED_MODULE_0__["default"]
+ },
+ props: {
+ notification: {
+ type: Object,
+ default: null
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/notification.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/notification.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+/* harmony default export */ __webpack_exports__["default"] = ({
+ props: {
+ notification: {
+ type: Object,
+ required: true
+ }
+ },
+ name: 'notification'
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/subscribed-my-thread.vue?vue&type=script&lang=js&":
+/*!***************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/subscribed-my-thread.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _notification__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./notification */ "./src/modules/notifications/types/notification.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ components: {
+ Notification: _notification__WEBPACK_IMPORTED_MODULE_0__["default"]
+ },
+ props: {
+ notification: {
+ type: Object,
+ default: null
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/welcome.vue?vue&type=script&lang=js&":
+/*!**************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/welcome.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _notification__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./notification */ "./src/modules/notifications/types/notification.vue");
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ components: {
+ Notification: _notification__WEBPACK_IMPORTED_MODULE_0__["default"]
+ },
+ props: {
+ notification: {
+ type: Object,
+ default: null
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/notification.vue?vue&type=style&index=0&id=88f5ecae&lang=scss&scoped=true&":
+/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/notification.vue?vue&type=style&index=0&id=88f5ecae&lang=scss&scoped=true& ***!
+ \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, ".notification-body a[data-v-88f5ecae] {\n color: #6c757d !important;\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/notification.vue?vue&type=style&index=0&id=88f5ecae&lang=scss&scoped=true&":
+/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/notification.vue?vue&type=style&index=0&id=88f5ecae&lang=scss&scoped=true& ***!
+ \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src??ref--7-3!../../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../../node_modules/vue-loader/lib??vue-loader-options!./notification.vue?vue&type=style&index=0&id=88f5ecae&lang=scss&scoped=true& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/notification.vue?vue&type=style&index=0&id=88f5ecae&lang=scss&scoped=true&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/empty-state.vue?vue&type=template&id=772b85b1&":
+/*!*****************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/empty-state.vue?vue&type=template&id=772b85b1& ***!
+ \*****************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "text-center p-5 text-gray-50" }, [
+ _c("div", { staticClass: "container" }, [
+ _c(
+ "h1",
+ { staticClass: "display-4" },
+ [_vm._t("icon", [_c("empty-icon")])],
+ 2
+ ),
+ _vm._v(" "),
+ _c("h2", [_vm._t("title", [_vm._v(_vm._s(_vm.title))])], 2),
+ _vm._v(" "),
+ _c(
+ "p",
+ { staticClass: "lead" },
+ [_vm._t("message", [_vm._v(_vm._s(_vm.message))])],
+ 2
+ )
+ ])
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/show.vue?vue&type=template&id=9c473836&":
+/*!*********************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/show.vue?vue&type=template&id=9c473836& ***!
+ \*********************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "page-notification-show" }, [
+ _c("div", { staticClass: "row" }, [
+ _c("div", { staticClass: "col-md-3" }, [
+ _c("div", { staticClass: "box mb-2" }, [
+ _c(
+ "div",
+ { staticClass: "box-heading" },
+ [
+ _c("bell-icon", { staticClass: "mr-1 text-16" }),
+ _vm._v("通知\n ")
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "nav flex-lg-column nav-pills" },
+ _vm._l(_vm.tabs, function(tab, id) {
+ return _c(
+ "a",
+ {
+ staticClass: "nav-link",
+ class: { active: _vm.currentTab == id },
+ attrs: { href: "javascript:void(0);" },
+ on: {
+ click: function($event) {
+ _vm.currentTab = id
+ }
+ }
+ },
+ [_vm._v(_vm._s(tab))]
+ )
+ }),
+ 0
+ )
+ ])
+ ]),
+ _vm._v(" "),
+ _c("div", { staticClass: "col-md-9" }, [
+ _c("div", { staticClass: "box box-flush" }, [
+ _vm.notifications.length > 0
+ ? _c(
+ "ul",
+ { staticClass: "list-group list-group-flush" },
+ [
+ _c("li", { staticClass: "list-group-item" }, [
+ _vm._v(
+ "\n " +
+ _vm._s(_vm.tabs[_vm.currentTab]) +
+ "\n "
+ )
+ ]),
+ _vm._v(" "),
+ _vm._l(_vm.notifications, function(notification) {
+ return _c(
+ "li",
+ {
+ key: notification.id,
+ staticClass: "list-group-item list-group-item-action",
+ class: { "bg-gray-98": notification.read_at == null }
+ },
+ [
+ _c(
+ "keep-alive",
+ [
+ _c(notification.type.split("_").join("-"), {
+ tag: "component",
+ attrs: { notification: notification }
+ })
+ ],
+ 1
+ )
+ ],
+ 1
+ )
+ })
+ ],
+ 2
+ )
+ : _c(
+ "div",
+ { staticClass: "text-center text-gray-50" },
+ [
+ _c(
+ "empty-state",
+ { attrs: { message: "没有新的消息哦~" } },
+ [_c("template", { slot: "icon" }, [_c("inbox-icon")], 1)],
+ 2
+ )
+ ],
+ 1
+ )
+ ])
+ ])
+ ])
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/comment-my-thread.vue?vue&type=template&id=36016f8f&":
+/*!****************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/comment-my-thread.vue?vue&type=template&id=36016f8f& ***!
+ \****************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "notification",
+ { attrs: { notification: _vm.notification } },
+ [
+ _c(
+ "template",
+ { slot: "title" },
+ [
+ _vm._v("\n 评论了你的文章\n "),
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "threads.show",
+ params: { id: _vm.notification.data.thread_id },
+ hash: "#comment-" + _vm.notification.data.comment_id
+ }
+ }
+ },
+ [
+ _vm._v(
+ "\n 《" +
+ _vm._s(_vm.notification.data.thread_title) +
+ "》\n "
+ )
+ ]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "pt-2 pl-md-4" },
+ [
+ _c("router-link", {
+ staticClass: "text-muted",
+ attrs: {
+ to: {
+ name: "threads.show",
+ params: { id: _vm.notification.data.thread_id }
+ }
+ },
+ domProps: { innerHTML: _vm._s(_vm.notification.data.content) }
+ })
+ ],
+ 1
+ )
+ ],
+ 2
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/liked-my-thread.vue?vue&type=template&id=a066ba46&":
+/*!**************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/liked-my-thread.vue?vue&type=template&id=a066ba46& ***!
+ \**************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "notification",
+ { attrs: { notification: _vm.notification } },
+ [
+ _c(
+ "template",
+ { slot: "title" },
+ [
+ _vm._v("赞了你的文章\n "),
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "threads.show",
+ params: { id: _vm.notification.data.thread_id }
+ }
+ }
+ },
+ [
+ _vm._v(
+ "\n 《" +
+ _vm._s(_vm.notification.data.thread_title) +
+ "》\n "
+ )
+ ]
+ )
+ ],
+ 1
+ )
+ ],
+ 2
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/mentioned-me.vue?vue&type=template&id=6eedd3cc&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/mentioned-me.vue?vue&type=template&id=6eedd3cc& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "notification",
+ { attrs: { notification: _vm.notification } },
+ [
+ _c("template", { slot: "title" }, [
+ _c(
+ "span",
+ [
+ _vm._v("在 "),
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "threads.show",
+ params: { id: _vm.notification.data.commentable_id },
+ hash: "#comment-" + _vm.notification.data.comment_id
+ }
+ }
+ },
+ [
+ _vm._v(
+ "《" + _vm._s(_vm.notification.data.commentable_title) + "》"
+ )
+ ]
+ ),
+ _vm._v(" 的评论了中提到了您")
+ ],
+ 1
+ )
+ ]),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "pt-2 pl-md-4" },
+ [
+ _c("router-link", {
+ staticClass: "text-muted",
+ attrs: {
+ to: {
+ name: "threads.show",
+ params: { id: _vm.notification.data.thread_id }
+ }
+ },
+ domProps: { innerHTML: _vm._s(_vm.notification.data.content) }
+ })
+ ],
+ 1
+ )
+ ],
+ 2
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/new-follower.vue?vue&type=template&id=3711ee69&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/new-follower.vue?vue&type=template&id=3711ee69& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "notification",
+ { attrs: { notification: _vm.notification } },
+ [_c("template", { slot: "title" }, [_vm._v("关注了你")])],
+ 2
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/notification.vue?vue&type=template&id=88f5ecae&scoped=true&":
+/*!***********************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/notification.vue?vue&type=template&id=88f5ecae&scoped=true& ***!
+ \***********************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "notification-item" }, [
+ _c(
+ "div",
+ { staticClass: "heading d-flex align-items-center flex-wrap" },
+ [
+ _c(
+ "router-link",
+ {
+ staticClass: "mr-1",
+ attrs: {
+ to: {
+ name: "users.show",
+ params: { username: _vm.notification.data.username }
+ }
+ }
+ },
+ [
+ _c("img", {
+ staticClass: "rounded-circle mr-1",
+ attrs: { width: "30", src: _vm.notification.data.avatar }
+ }),
+ _vm._v("\n " + _vm._s(_vm.notification.data.name) + "\n ")
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "d-inline" },
+ [_vm._t("title", [_vm._v("评论了你的文章")])],
+ 2
+ ),
+ _vm._v(" "),
+ _c("small", { staticClass: "date text-muted ml-lg-auto text-mini" }, [
+ _vm._v(_vm._s(_vm.notification.created_at))
+ ])
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "notification-body text-muted" },
+ [_vm._t("default")],
+ 2
+ )
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/subscribed-my-thread.vue?vue&type=template&id=0f95d3d6&":
+/*!*******************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/subscribed-my-thread.vue?vue&type=template&id=0f95d3d6& ***!
+ \*******************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "notification",
+ { attrs: { notification: _vm.notification } },
+ [
+ _c(
+ "template",
+ { slot: "title" },
+ [
+ _vm._v("\n 订阅了你的文章\n "),
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "threads.show",
+ params: { id: _vm.notification.data.thread_id }
+ }
+ }
+ },
+ [
+ _vm._v(
+ "\n 《" +
+ _vm._s(_vm.notification.data.thread_title) +
+ "》\n "
+ )
+ ]
+ )
+ ],
+ 1
+ )
+ ],
+ 2
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/welcome.vue?vue&type=template&id=0ef46194&":
+/*!******************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/notifications/types/welcome.vue?vue&type=template&id=0ef46194& ***!
+ \******************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "notification",
+ { attrs: { notification: _vm.notification } },
+ [_c("template", { slot: "title" }, [_vm._v("欢迎加入一刻!")])],
+ 2
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./src/components/empty-state.vue":
+/*!****************************************!*\
+ !*** ./src/components/empty-state.vue ***!
+ \****************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./empty-state.vue?vue&type=template&id=772b85b1& */ "./src/components/empty-state.vue?vue&type=template&id=772b85b1&");
+/* harmony import */ var _empty_state_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./empty-state.vue?vue&type=script&lang=js& */ "./src/components/empty-state.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _empty_state_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/empty-state.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/empty-state.vue?vue&type=script&lang=js&":
+/*!*****************************************************************!*\
+ !*** ./src/components/empty-state.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_state_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./empty-state.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/empty-state.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_state_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/empty-state.vue?vue&type=template&id=772b85b1&":
+/*!***********************************************************************!*\
+ !*** ./src/components/empty-state.vue?vue&type=template&id=772b85b1& ***!
+ \***********************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./empty-state.vue?vue&type=template&id=772b85b1& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/empty-state.vue?vue&type=template&id=772b85b1&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/notifications/show.vue":
+/*!********************************************!*\
+ !*** ./src/modules/notifications/show.vue ***!
+ \********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _show_vue_vue_type_template_id_9c473836___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./show.vue?vue&type=template&id=9c473836& */ "./src/modules/notifications/show.vue?vue&type=template&id=9c473836&");
+/* harmony import */ var _show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./show.vue?vue&type=script&lang=js& */ "./src/modules/notifications/show.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _show_vue_vue_type_template_id_9c473836___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _show_vue_vue_type_template_id_9c473836___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/notifications/show.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/show.vue?vue&type=script&lang=js&":
+/*!*********************************************************************!*\
+ !*** ./src/modules/notifications/show.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./show.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/show.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/show.vue?vue&type=template&id=9c473836&":
+/*!***************************************************************************!*\
+ !*** ./src/modules/notifications/show.vue?vue&type=template&id=9c473836& ***!
+ \***************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_template_id_9c473836___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./show.vue?vue&type=template&id=9c473836& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/show.vue?vue&type=template&id=9c473836&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_template_id_9c473836___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_template_id_9c473836___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/comment-my-thread.vue":
+/*!***************************************************************!*\
+ !*** ./src/modules/notifications/types/comment-my-thread.vue ***!
+ \***************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _comment_my_thread_vue_vue_type_template_id_36016f8f___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./comment-my-thread.vue?vue&type=template&id=36016f8f& */ "./src/modules/notifications/types/comment-my-thread.vue?vue&type=template&id=36016f8f&");
+/* harmony import */ var _comment_my_thread_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./comment-my-thread.vue?vue&type=script&lang=js& */ "./src/modules/notifications/types/comment-my-thread.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _comment_my_thread_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _comment_my_thread_vue_vue_type_template_id_36016f8f___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _comment_my_thread_vue_vue_type_template_id_36016f8f___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/notifications/types/comment-my-thread.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/comment-my-thread.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************!*\
+ !*** ./src/modules/notifications/types/comment-my-thread.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_my_thread_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib??ref--4-0!../../../../node_modules/vue-loader/lib??vue-loader-options!./comment-my-thread.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/comment-my-thread.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_my_thread_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/comment-my-thread.vue?vue&type=template&id=36016f8f&":
+/*!**********************************************************************************************!*\
+ !*** ./src/modules/notifications/types/comment-my-thread.vue?vue&type=template&id=36016f8f& ***!
+ \**********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_my_thread_vue_vue_type_template_id_36016f8f___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./comment-my-thread.vue?vue&type=template&id=36016f8f& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/comment-my-thread.vue?vue&type=template&id=36016f8f&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_my_thread_vue_vue_type_template_id_36016f8f___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_my_thread_vue_vue_type_template_id_36016f8f___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/liked-my-thread.vue":
+/*!*************************************************************!*\
+ !*** ./src/modules/notifications/types/liked-my-thread.vue ***!
+ \*************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _liked_my_thread_vue_vue_type_template_id_a066ba46___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./liked-my-thread.vue?vue&type=template&id=a066ba46& */ "./src/modules/notifications/types/liked-my-thread.vue?vue&type=template&id=a066ba46&");
+/* harmony import */ var _liked_my_thread_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./liked-my-thread.vue?vue&type=script&lang=js& */ "./src/modules/notifications/types/liked-my-thread.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _liked_my_thread_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _liked_my_thread_vue_vue_type_template_id_a066ba46___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _liked_my_thread_vue_vue_type_template_id_a066ba46___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/notifications/types/liked-my-thread.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/liked-my-thread.vue?vue&type=script&lang=js&":
+/*!**************************************************************************************!*\
+ !*** ./src/modules/notifications/types/liked-my-thread.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_liked_my_thread_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib??ref--4-0!../../../../node_modules/vue-loader/lib??vue-loader-options!./liked-my-thread.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/liked-my-thread.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_liked_my_thread_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/liked-my-thread.vue?vue&type=template&id=a066ba46&":
+/*!********************************************************************************************!*\
+ !*** ./src/modules/notifications/types/liked-my-thread.vue?vue&type=template&id=a066ba46& ***!
+ \********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_liked_my_thread_vue_vue_type_template_id_a066ba46___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./liked-my-thread.vue?vue&type=template&id=a066ba46& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/liked-my-thread.vue?vue&type=template&id=a066ba46&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_liked_my_thread_vue_vue_type_template_id_a066ba46___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_liked_my_thread_vue_vue_type_template_id_a066ba46___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/mentioned-me.vue":
+/*!**********************************************************!*\
+ !*** ./src/modules/notifications/types/mentioned-me.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _mentioned_me_vue_vue_type_template_id_6eedd3cc___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mentioned-me.vue?vue&type=template&id=6eedd3cc& */ "./src/modules/notifications/types/mentioned-me.vue?vue&type=template&id=6eedd3cc&");
+/* harmony import */ var _mentioned_me_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mentioned-me.vue?vue&type=script&lang=js& */ "./src/modules/notifications/types/mentioned-me.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _mentioned_me_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _mentioned_me_vue_vue_type_template_id_6eedd3cc___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _mentioned_me_vue_vue_type_template_id_6eedd3cc___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/notifications/types/mentioned-me.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/mentioned-me.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./src/modules/notifications/types/mentioned-me.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_mentioned_me_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib??ref--4-0!../../../../node_modules/vue-loader/lib??vue-loader-options!./mentioned-me.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/mentioned-me.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_mentioned_me_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/mentioned-me.vue?vue&type=template&id=6eedd3cc&":
+/*!*****************************************************************************************!*\
+ !*** ./src/modules/notifications/types/mentioned-me.vue?vue&type=template&id=6eedd3cc& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_mentioned_me_vue_vue_type_template_id_6eedd3cc___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./mentioned-me.vue?vue&type=template&id=6eedd3cc& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/mentioned-me.vue?vue&type=template&id=6eedd3cc&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_mentioned_me_vue_vue_type_template_id_6eedd3cc___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_mentioned_me_vue_vue_type_template_id_6eedd3cc___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/new-follower.vue":
+/*!**********************************************************!*\
+ !*** ./src/modules/notifications/types/new-follower.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _new_follower_vue_vue_type_template_id_3711ee69___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./new-follower.vue?vue&type=template&id=3711ee69& */ "./src/modules/notifications/types/new-follower.vue?vue&type=template&id=3711ee69&");
+/* harmony import */ var _new_follower_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./new-follower.vue?vue&type=script&lang=js& */ "./src/modules/notifications/types/new-follower.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _new_follower_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _new_follower_vue_vue_type_template_id_3711ee69___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _new_follower_vue_vue_type_template_id_3711ee69___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/notifications/types/new-follower.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/new-follower.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./src/modules/notifications/types/new-follower.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_new_follower_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib??ref--4-0!../../../../node_modules/vue-loader/lib??vue-loader-options!./new-follower.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/new-follower.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_new_follower_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/new-follower.vue?vue&type=template&id=3711ee69&":
+/*!*****************************************************************************************!*\
+ !*** ./src/modules/notifications/types/new-follower.vue?vue&type=template&id=3711ee69& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_new_follower_vue_vue_type_template_id_3711ee69___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./new-follower.vue?vue&type=template&id=3711ee69& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/new-follower.vue?vue&type=template&id=3711ee69&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_new_follower_vue_vue_type_template_id_3711ee69___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_new_follower_vue_vue_type_template_id_3711ee69___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/notification.vue":
+/*!**********************************************************!*\
+ !*** ./src/modules/notifications/types/notification.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _notification_vue_vue_type_template_id_88f5ecae_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./notification.vue?vue&type=template&id=88f5ecae&scoped=true& */ "./src/modules/notifications/types/notification.vue?vue&type=template&id=88f5ecae&scoped=true&");
+/* harmony import */ var _notification_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./notification.vue?vue&type=script&lang=js& */ "./src/modules/notifications/types/notification.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _notification_vue_vue_type_style_index_0_id_88f5ecae_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notification.vue?vue&type=style&index=0&id=88f5ecae&lang=scss&scoped=true& */ "./src/modules/notifications/types/notification.vue?vue&type=style&index=0&id=88f5ecae&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _notification_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _notification_vue_vue_type_template_id_88f5ecae_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _notification_vue_vue_type_template_id_88f5ecae_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ "88f5ecae",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/notifications/types/notification.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/notification.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./src/modules/notifications/types/notification.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_notification_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib??ref--4-0!../../../../node_modules/vue-loader/lib??vue-loader-options!./notification.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/notification.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_notification_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/notification.vue?vue&type=style&index=0&id=88f5ecae&lang=scss&scoped=true&":
+/*!********************************************************************************************************************!*\
+ !*** ./src/modules/notifications/types/notification.vue?vue&type=style&index=0&id=88f5ecae&lang=scss&scoped=true& ***!
+ \********************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_notification_vue_vue_type_style_index_0_id_88f5ecae_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../../../node_modules/style-loader!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src??ref--7-3!../../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../../node_modules/vue-loader/lib??vue-loader-options!./notification.vue?vue&type=style&index=0&id=88f5ecae&lang=scss&scoped=true& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/notification.vue?vue&type=style&index=0&id=88f5ecae&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_notification_vue_vue_type_style_index_0_id_88f5ecae_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_notification_vue_vue_type_style_index_0_id_88f5ecae_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_notification_vue_vue_type_style_index_0_id_88f5ecae_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_notification_vue_vue_type_style_index_0_id_88f5ecae_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_notification_vue_vue_type_style_index_0_id_88f5ecae_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/notification.vue?vue&type=template&id=88f5ecae&scoped=true&":
+/*!*****************************************************************************************************!*\
+ !*** ./src/modules/notifications/types/notification.vue?vue&type=template&id=88f5ecae&scoped=true& ***!
+ \*****************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_notification_vue_vue_type_template_id_88f5ecae_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./notification.vue?vue&type=template&id=88f5ecae&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/notification.vue?vue&type=template&id=88f5ecae&scoped=true&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_notification_vue_vue_type_template_id_88f5ecae_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_notification_vue_vue_type_template_id_88f5ecae_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/subscribed-my-thread.vue":
+/*!******************************************************************!*\
+ !*** ./src/modules/notifications/types/subscribed-my-thread.vue ***!
+ \******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _subscribed_my_thread_vue_vue_type_template_id_0f95d3d6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./subscribed-my-thread.vue?vue&type=template&id=0f95d3d6& */ "./src/modules/notifications/types/subscribed-my-thread.vue?vue&type=template&id=0f95d3d6&");
+/* harmony import */ var _subscribed_my_thread_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./subscribed-my-thread.vue?vue&type=script&lang=js& */ "./src/modules/notifications/types/subscribed-my-thread.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _subscribed_my_thread_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _subscribed_my_thread_vue_vue_type_template_id_0f95d3d6___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _subscribed_my_thread_vue_vue_type_template_id_0f95d3d6___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/notifications/types/subscribed-my-thread.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/subscribed-my-thread.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************!*\
+ !*** ./src/modules/notifications/types/subscribed-my-thread.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_subscribed_my_thread_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib??ref--4-0!../../../../node_modules/vue-loader/lib??vue-loader-options!./subscribed-my-thread.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/subscribed-my-thread.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_subscribed_my_thread_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/subscribed-my-thread.vue?vue&type=template&id=0f95d3d6&":
+/*!*************************************************************************************************!*\
+ !*** ./src/modules/notifications/types/subscribed-my-thread.vue?vue&type=template&id=0f95d3d6& ***!
+ \*************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_subscribed_my_thread_vue_vue_type_template_id_0f95d3d6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./subscribed-my-thread.vue?vue&type=template&id=0f95d3d6& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/subscribed-my-thread.vue?vue&type=template&id=0f95d3d6&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_subscribed_my_thread_vue_vue_type_template_id_0f95d3d6___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_subscribed_my_thread_vue_vue_type_template_id_0f95d3d6___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/welcome.vue":
+/*!*****************************************************!*\
+ !*** ./src/modules/notifications/types/welcome.vue ***!
+ \*****************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _welcome_vue_vue_type_template_id_0ef46194___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./welcome.vue?vue&type=template&id=0ef46194& */ "./src/modules/notifications/types/welcome.vue?vue&type=template&id=0ef46194&");
+/* harmony import */ var _welcome_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./welcome.vue?vue&type=script&lang=js& */ "./src/modules/notifications/types/welcome.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _welcome_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _welcome_vue_vue_type_template_id_0ef46194___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _welcome_vue_vue_type_template_id_0ef46194___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/notifications/types/welcome.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/welcome.vue?vue&type=script&lang=js&":
+/*!******************************************************************************!*\
+ !*** ./src/modules/notifications/types/welcome.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_welcome_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib??ref--4-0!../../../../node_modules/vue-loader/lib??vue-loader-options!./welcome.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/welcome.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_welcome_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/notifications/types/welcome.vue?vue&type=template&id=0ef46194&":
+/*!************************************************************************************!*\
+ !*** ./src/modules/notifications/types/welcome.vue?vue&type=template&id=0ef46194& ***!
+ \************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_welcome_vue_vue_type_template_id_0ef46194___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./welcome.vue?vue&type=template&id=0ef46194& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/notifications/types/welcome.vue?vue&type=template&id=0ef46194&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_welcome_vue_vue_type_template_id_0ef46194___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_welcome_vue_vue_type_template_id_0ef46194___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/19.43fecf1df635cbbb1bfb.js b/public/19.43fecf1df635cbbb1bfb.js
new file mode 100644
index 00000000..f3fc2e64
--- /dev/null
+++ b/public/19.43fecf1df635cbbb1bfb.js
@@ -0,0 +1,1784 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[19],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/banner.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/banner.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $icons_ArrowLeft__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $icons/ArrowLeft */ "./node_modules/vue-material-design-icons/ArrowLeft.vue");
+/* harmony import */ var $icons_ArrowRight__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/ArrowRight */ "./node_modules/vue-material-design-icons/ArrowRight.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'Banner',
+ components: {
+ ArrowLeft: $icons_ArrowLeft__WEBPACK_IMPORTED_MODULE_0__["default"],
+ ArrowRight: $icons_ArrowRight__WEBPACK_IMPORTED_MODULE_1__["default"]
+ },
+ props: {
+ name: {
+ type: String,
+ required: true
+ }
+ },
+ computed: {
+ id: function id() {
+ return 'banner-' + this.name;
+ },
+ idSelector: function idSelector() {
+ return '#' + this.id;
+ }
+ },
+ data: function data() {
+ return {
+ banner: null
+ };
+ },
+ methods: {
+ loadBanner: function loadBanner() {
+ var _this = this;
+
+ this.$http.get('banners/' + this.name).then(function (banner) {
+ _this.banner = banner;
+ }).catch(function (err) {});
+ }
+ },
+ mounted: function mounted() {
+ this.loadBanner();
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/guest-login-guide.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/guest-login-guide.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'guest-login-guide',
+ computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_0__["mapGetters"])(['isLogged']))
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/hot-tags.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/hot-tags.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'HotTags',
+ data: function data() {
+ return {
+ nodes: []
+ };
+ },
+ methods: {
+ loadNodes: function loadNodes() {
+ var _this = this;
+
+ this.$http.get('nodes?hot=5&per_page=5').then(function (nodes) {
+ return _this.nodes = nodes.data;
+ });
+ }
+ },
+ created: function created() {
+ this.loadNodes();
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/new-users.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/new-users.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $components_user_media__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $components/user-media */ "./src/components/user-media.vue");
+/* harmony import */ var $icons_ArrowRight__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/ArrowRight */ "./node_modules/vue-material-design-icons/ArrowRight.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'NewUsers',
+ components: {
+ UserMedia: $components_user_media__WEBPACK_IMPORTED_MODULE_0__["default"],
+ ArrowRight: $icons_ArrowRight__WEBPACK_IMPORTED_MODULE_1__["default"]
+ },
+ data: function data() {
+ return {
+ users: []
+ };
+ },
+ methods: {
+ loadUsers: function loadUsers() {
+ var _this = this;
+
+ this.$http.get('users?latest=1&limit=12').then(function (users) {
+ return _this.users = users.data;
+ });
+ }
+ },
+ mounted: function mounted() {
+ this.loadUsers();
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/quick-docs.vue?vue&type=script&lang=js&":
+/*!************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/quick-docs.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $icons_FileDocumentBoxOutline__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $icons/FileDocumentBoxOutline */ "./node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'quick-docs',
+ components: {
+ DocsIcon: $icons_FileDocumentBoxOutline__WEBPACK_IMPORTED_MODULE_0__["default"]
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-ranking.vue?vue&type=script&lang=js&":
+/*!**************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-ranking.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $components_user_media__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $components/user-media */ "./src/components/user-media.vue");
+/* harmony import */ var $icons_ArrowRight__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/ArrowRight */ "./node_modules/vue-material-design-icons/ArrowRight.vue");
+/* harmony import */ var $icons_Check__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/Check */ "./node_modules/vue-material-design-icons/Check.vue");
+/* harmony import */ var $icons_Plus__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $icons/Plus */ "./node_modules/vue-material-design-icons/Plus.vue");
+/* harmony import */ var $components_buttons_follow_btn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! $components/buttons/follow-btn */ "./src/components/buttons/follow-btn.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'NewUsers',
+ components: {
+ FollowBtn: $components_buttons_follow_btn__WEBPACK_IMPORTED_MODULE_4__["default"],
+ UserMedia: $components_user_media__WEBPACK_IMPORTED_MODULE_0__["default"],
+ ArrowRightIcon: $icons_ArrowRight__WEBPACK_IMPORTED_MODULE_1__["default"],
+ CheckIcon: $icons_Check__WEBPACK_IMPORTED_MODULE_2__["default"],
+ PlusIcon: $icons_Plus__WEBPACK_IMPORTED_MODULE_3__["default"]
+ },
+ data: function data() {
+ return {
+ users: []
+ };
+ },
+ methods: {
+ loadUsers: function loadUsers() {
+ var _this = this;
+
+ this.$http.get('users?limit=10').then(function (users) {
+ return _this.users = users.data;
+ });
+ }
+ },
+ mounted: function mounted() {
+ this.loadUsers();
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/home/home.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/home/home.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $components_banner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $components/banner */ "./src/components/banner.vue");
+/* harmony import */ var $components_hot_tags__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $components/hot-tags */ "./src/components/hot-tags.vue");
+/* harmony import */ var $components_user_ranking__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $components/user-ranking */ "./src/components/user-ranking.vue");
+/* harmony import */ var $components_new_users__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $components/new-users */ "./src/components/new-users.vue");
+/* harmony import */ var $components_quick_docs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! $components/quick-docs */ "./src/components/quick-docs.vue");
+/* harmony import */ var $components_threads_list__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! $components/threads-list */ "./src/components/threads-list.vue");
+/* harmony import */ var $components_guest_login_guide__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! $components/guest-login-guide */ "./src/components/guest-login-guide.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ data: function data() {
+ return {
+ threads: {
+ default: {},
+ featured: {},
+ zeroComment: {},
+ recent: {}
+ },
+ currentThreadsTab: 'default'
+ };
+ },
+ components: {
+ Banner: $components_banner__WEBPACK_IMPORTED_MODULE_0__["default"],
+ QuickDocs: $components_quick_docs__WEBPACK_IMPORTED_MODULE_4__["default"],
+ HotTags: $components_hot_tags__WEBPACK_IMPORTED_MODULE_1__["default"],
+ UserRanking: $components_user_ranking__WEBPACK_IMPORTED_MODULE_2__["default"],
+ NewUsers: $components_new_users__WEBPACK_IMPORTED_MODULE_3__["default"],
+ ThreadsList: $components_threads_list__WEBPACK_IMPORTED_MODULE_5__["default"],
+ GuestLoginGuide: $components_guest_login_guide__WEBPACK_IMPORTED_MODULE_6__["default"]
+ },
+ watch: {
+ currentThreadsTab: function currentThreadsTab() {
+ this.loadThreads(1);
+ }
+ },
+ methods: {
+ loadThreads: function loadThreads() {
+ var _this = this;
+
+ var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
+ this.$http.get("threads?tab=".concat(this.currentThreadsTab, "&page=").concat(page)).then(function (threads) {
+ return _this.threads[_this.currentThreadsTab] = threads;
+ });
+ },
+ handlePageChanged: function handlePageChanged(page) {
+ this.loadThreads(page);
+ }
+ },
+ mounted: function mounted() {
+ this.loadThreads();
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/banner.vue?vue&type=style&index=0&lang=scss&":
+/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/banner.vue?vue&type=style&index=0&lang=scss& ***!
+ \*********************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, ".carousel-item {\n display: -webkit-box !important;\n display: -ms-flexbox !important;\n display: flex !important;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: stretch;\n -ms-flex-pack: stretch;\n justify-content: stretch;\n max-height: 300px;\n border-radius: 2px;\n overflow: hidden;\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/guest-login-guide.vue?vue&type=style&index=0&id=02aafdc3&scoped=true&lang=scss&":
+/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/guest-login-guide.vue?vue&type=style&index=0&id=02aafdc3&scoped=true&lang=scss& ***!
+ \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, ".guest-login-guide[data-v-02aafdc3] {\n background: url(\"/banners/technology.jpg\");\n background-size: 160%;\n background-position: center;\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/banner.vue?vue&type=style&index=0&lang=scss&":
+/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/banner.vue?vue&type=style&index=0&lang=scss& ***!
+ \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./banner.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/banner.vue?vue&type=style&index=0&lang=scss&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/guest-login-guide.vue?vue&type=style&index=0&id=02aafdc3&scoped=true&lang=scss&":
+/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/guest-login-guide.vue?vue&type=style&index=0&id=02aafdc3&scoped=true&lang=scss& ***!
+ \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./guest-login-guide.vue?vue&type=style&index=0&id=02aafdc3&scoped=true&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/guest-login-guide.vue?vue&type=style&index=0&id=02aafdc3&scoped=true&lang=scss&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/banner.vue?vue&type=template&id=37aed33c&":
+/*!************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/banner.vue?vue&type=template&id=37aed33c& ***!
+ \************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _vm.banner
+ ? _c(
+ "div",
+ {
+ staticClass: "carousel slide",
+ attrs: { id: _vm.id, "data-ride": "carousel" }
+ },
+ [
+ _vm.banner.banners.length > 1
+ ? _c(
+ "ol",
+ { staticClass: "carousel-indicators" },
+ _vm._l(_vm.banner.banners.length, function(i) {
+ return _c("li", {
+ key: i,
+ staticClass: "active",
+ attrs: {
+ "data-target": _vm.idSelector,
+ "data-slide-to": i - 1
+ }
+ })
+ }),
+ 0
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "carousel-inner" },
+ _vm._l(_vm.banner.banners, function(item) {
+ return _c(
+ "div",
+ { key: item.id, staticClass: "carousel-item active" },
+ [
+ _c("a", { attrs: { href: item.url || "javascript:;" } }, [
+ _c("img", {
+ staticClass: "d-block w-100",
+ attrs: { src: item.image_url, alt: "First slide" }
+ }),
+ _vm._v(" "),
+ item.title || item.description
+ ? _c("div", { staticClass: "carousel-caption" }, [
+ item.title
+ ? _c("h1", [_vm._v(_vm._s(item.title))])
+ : _vm._e(),
+ _vm._v(" "),
+ item.description
+ ? _c("p", [_vm._v(_vm._s(item.description))])
+ : _vm._e()
+ ])
+ : _vm._e()
+ ])
+ ]
+ )
+ }),
+ 0
+ ),
+ _vm._v(" "),
+ _vm.banner.banners.length > 1
+ ? _c(
+ "a",
+ {
+ staticClass: "carousel-control-prev",
+ attrs: {
+ href: _vm.idSelector,
+ role: "button",
+ "data-slide": "prev"
+ }
+ },
+ [
+ _c(
+ "span",
+ {
+ staticClass: "carousel-control-prev-icon",
+ attrs: { "aria-hidden": "true" }
+ },
+ [_c("arrow-left")],
+ 1
+ ),
+ _vm._v(" "),
+ _c("span", { staticClass: "sr-only" }, [_vm._v("Previous")])
+ ]
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.banner.banners.length > 1
+ ? _c(
+ "a",
+ {
+ staticClass: "carousel-control-next",
+ attrs: {
+ href: _vm.idSelector,
+ role: "button",
+ "data-slide": "next"
+ }
+ },
+ [
+ _c(
+ "span",
+ {
+ staticClass: "carousel-control-next-icon",
+ attrs: { "aria-hidden": "true" }
+ },
+ [_c("arrow-right")],
+ 1
+ ),
+ _vm._v(" "),
+ _c("span", { staticClass: "sr-only" }, [_vm._v("Next")])
+ ]
+ )
+ : _vm._e()
+ ]
+ )
+ : _vm._e()
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/guest-login-guide.vue?vue&type=template&id=02aafdc3&scoped=true&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/guest-login-guide.vue?vue&type=template&id=02aafdc3&scoped=true& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return !_vm.isLogged
+ ? _c(
+ "div",
+ { staticClass: "box guest-login-guide text-center" },
+ [
+ _vm._m(0),
+ _vm._v(" "),
+ _c(
+ "router-link",
+ {
+ staticClass: "btn btn-block btn-primary",
+ attrs: { to: { name: "auth.register" } }
+ },
+ [_vm._v("注册")]
+ ),
+ _vm._v(" "),
+ _c(
+ "router-link",
+ {
+ staticClass: "btn btn-block btn-outline-primary",
+ attrs: { to: { name: "auth.login" } }
+ },
+ [_vm._v("登录")]
+ )
+ ],
+ 1
+ )
+ : _vm._e()
+}
+var staticRenderFns = [
+ function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "text-18 p-2" }, [
+ _vm._v("加入一刻"),
+ _c("br"),
+ _vm._v("做专业的微信开发者")
+ ])
+ }
+]
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/hot-tags.vue?vue&type=template&id=622cc129&":
+/*!**************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/hot-tags.vue?vue&type=template&id=622cc129& ***!
+ \**************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box text-gray-50" }, [
+ _vm._m(0),
+ _vm._v(" "),
+ _c(
+ "ul",
+ { staticClass: "plan-list text-13" },
+ [
+ _vm._l(_vm.nodes, function(node) {
+ return [
+ _c(
+ "router-link",
+ {
+ key: node.id,
+ staticClass: "py-1 cursor-pointer",
+ attrs: {
+ tag: "li",
+ to: { name: "nodes.node", params: { id: node.id } }
+ }
+ },
+ [
+ _vm._v("\n #" + _vm._s(node.title) + " "),
+ _c("span", { staticClass: "float-right" }, [
+ _vm._v(_vm._s(node.cache ? node.cache.threads_count : 0))
+ ])
+ ]
+ )
+ ]
+ })
+ ],
+ 2
+ )
+ ])
+}
+var staticRenderFns = [
+ function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box-heading" }, [
+ _c("div", { staticClass: "text-13" }, [_vm._v("热门话题")])
+ ])
+ }
+]
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/new-users.vue?vue&type=template&id=667f163b&":
+/*!***************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/new-users.vue?vue&type=template&id=667f163b& ***!
+ \***************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box box-flush text-gray-50" }, [
+ _vm._m(0),
+ _vm._v(" "),
+ _c(
+ "ul",
+ { staticClass: "plan-list px-2 pb-2" },
+ _vm._l(_vm.users, function(item) {
+ return _c("user-media", {
+ key: item.id,
+ attrs: { type: "vertical w25", user: item }
+ })
+ }),
+ 1
+ )
+ ])
+}
+var staticRenderFns = [
+ function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box-body" }, [
+ _c(
+ "div",
+ { staticClass: "d-flex align-items-center justify-content-between" },
+ [_c("div", { staticClass: "text-13" }, [_vm._v("最新用户")])]
+ )
+ ])
+ }
+]
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/quick-docs.vue?vue&type=template&id=802cdaaa&":
+/*!****************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/quick-docs.vue?vue&type=template&id=802cdaaa& ***!
+ \****************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box text-gray-50" }, [
+ _vm._m(0),
+ _vm._v(" "),
+ _c("ul", [
+ _c(
+ "li",
+ { staticClass: "py-1" },
+ [
+ _c("docs-icon", { staticClass: "mr-1" }),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ staticClass: "text-gray-50",
+ attrs: {
+ href:
+ "https://developers.weixin.qq.com/miniprogram/dev/framework/",
+ target: "_blank"
+ }
+ },
+ [_vm._v("小程序开发文档")]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "li",
+ { staticClass: "py-1" },
+ [
+ _c("docs-icon", { staticClass: "mr-1" }),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ staticClass: "text-gray-50",
+ attrs: {
+ href:
+ "https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview",
+ target: "_blank"
+ }
+ },
+ [_vm._v("公众平台官方文档")]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "li",
+ { staticClass: "py-1" },
+ [
+ _c("docs-icon", { staticClass: "mr-1" }),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ staticClass: "text-gray-50",
+ attrs: {
+ href:
+ "https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Resource_Center_Homepage",
+ target: "_blank"
+ }
+ },
+ [_vm._v("微信开放平台文档")]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "li",
+ { staticClass: "py-1" },
+ [
+ _c("docs-icon", { staticClass: "mr-1" }),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ staticClass: "text-gray-50",
+ attrs: {
+ href: "https://work.weixin.qq.com/api/doc",
+ target: "_blank"
+ }
+ },
+ [_vm._v("企业微信官方文档")]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "li",
+ { staticClass: "py-1" },
+ [
+ _c("docs-icon", { staticClass: "mr-1" }),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ staticClass: "text-gray-50",
+ attrs: {
+ href: "https://www.easywechat.com/docs",
+ target: "_blank"
+ }
+ },
+ [_vm._v("EasyWeChat SDK 4.0 文档")]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "li",
+ { staticClass: "py-1" },
+ [
+ _c("docs-icon", { staticClass: "mr-1" }),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ staticClass: "text-gray-50",
+ attrs: {
+ href: "https://www.easywechat.com/docs/3.x",
+ target: "_blank"
+ }
+ },
+ [_vm._v("EasyWeChat SDK 3.x 文档")]
+ )
+ ],
+ 1
+ )
+ ])
+ ])
+}
+var staticRenderFns = [
+ function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ {
+ staticClass:
+ "box-heading d-flex align-items-center justify-content-between"
+ },
+ [_c("div", { staticClass: "text-13" }, [_vm._v("快速文档入口")])]
+ )
+ }
+]
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-ranking.vue?vue&type=template&id=1e61b644&":
+/*!******************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-ranking.vue?vue&type=template&id=1e61b644& ***!
+ \******************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box text-gray-50" }, [
+ _vm._m(0),
+ _vm._v(" "),
+ _c(
+ "ul",
+ { staticClass: "plan-list" },
+ _vm._l(_vm.users, function(item) {
+ return _c(
+ "user-media",
+ {
+ key: item.id,
+ staticClass: "mb-2 d-flex align-items-center",
+ attrs: { user: item }
+ },
+ [
+ _c(
+ "template",
+ { slot: "appends" },
+ [
+ _c("follow-btn", {
+ staticClass: "ml-auto",
+ attrs: { item: item, simple: "" }
+ })
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("template", { slot: "description" }, [
+ _c("div", { staticClass: "text-gray-70 text-12" }, [
+ _vm._v(_vm._s(item.created_at_timeago))
+ ])
+ ])
+ ],
+ 2
+ )
+ }),
+ 1
+ )
+ ])
+}
+var staticRenderFns = [
+ function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ {
+ staticClass:
+ "box-heading d-flex align-items-center justify-content-between"
+ },
+ [_c("div", { staticClass: "text-13" }, [_vm._v("活跃用户")])]
+ )
+ }
+]
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/home/home.vue?vue&type=template&id=4256fd7e&":
+/*!************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/home/home.vue?vue&type=template&id=4256fd7e& ***!
+ \************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "page-home" }, [
+ _c("div", { staticClass: "row mt-3" }, [
+ _c("div", { staticClass: "col-md-9" }, [
+ _c(
+ "div",
+ { staticClass: "box box-flush" },
+ [
+ _c("div", { staticClass: "box-body" }, [
+ _c("ul", { staticClass: "nav nav-pills" }, [
+ _c("li", { staticClass: "nav-item" }, [
+ _c(
+ "a",
+ {
+ staticClass: "nav-link",
+ class: { active: _vm.currentThreadsTab == "default" },
+ attrs: { href: "javascript:;" },
+ on: {
+ click: function($event) {
+ _vm.currentThreadsTab = "default"
+ }
+ }
+ },
+ [_vm._v("活跃")]
+ )
+ ]),
+ _vm._v(" "),
+ _c("li", { staticClass: "nav-item" }, [
+ _c(
+ "a",
+ {
+ staticClass: "nav-link",
+ class: { active: _vm.currentThreadsTab == "featured" },
+ attrs: { href: "javascript:;" },
+ on: {
+ click: function($event) {
+ _vm.currentThreadsTab = "featured"
+ }
+ }
+ },
+ [_vm._v("精选")]
+ )
+ ]),
+ _vm._v(" "),
+ _c("li", { staticClass: "nav-item" }, [
+ _c(
+ "a",
+ {
+ staticClass: "nav-link",
+ class: { active: _vm.currentThreadsTab == "zeroComment" },
+ attrs: { href: "javascript:;" },
+ on: {
+ click: function($event) {
+ _vm.currentThreadsTab = "zeroComment"
+ }
+ }
+ },
+ [_vm._v("零回复")]
+ )
+ ]),
+ _vm._v(" "),
+ _c("li", { staticClass: "nav-item" }, [
+ _c(
+ "a",
+ {
+ staticClass: "nav-link",
+ class: { active: _vm.currentThreadsTab == "recent" },
+ attrs: { href: "javascript:;" },
+ on: {
+ click: function($event) {
+ _vm.currentThreadsTab = "recent"
+ }
+ }
+ },
+ [_vm._v("最新发布")]
+ )
+ ])
+ ])
+ ]),
+ _vm._v(" "),
+ _c("threads-list", {
+ attrs: { threads: _vm.threads[_vm.currentThreadsTab] },
+ on: { "page-changed": _vm.handlePageChanged }
+ })
+ ],
+ 1
+ )
+ ]),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "col-md-3" },
+ [
+ _c("guest-login-guide", { staticClass: "mb-2" }),
+ _vm._v(" "),
+ _c("quick-docs", { staticClass: "mb-2" }),
+ _vm._v(" "),
+ _c("hot-tags"),
+ _vm._v(" "),
+ _c("user-ranking", { staticClass: "mt-2" }),
+ _vm._v(" "),
+ _c("new-users", { staticClass: "mt-2" })
+ ],
+ 1
+ )
+ ])
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./src/components/banner.vue":
+/*!***********************************!*\
+ !*** ./src/components/banner.vue ***!
+ \***********************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _banner_vue_vue_type_template_id_37aed33c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./banner.vue?vue&type=template&id=37aed33c& */ "./src/components/banner.vue?vue&type=template&id=37aed33c&");
+/* harmony import */ var _banner_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./banner.vue?vue&type=script&lang=js& */ "./src/components/banner.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _banner_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./banner.vue?vue&type=style&index=0&lang=scss& */ "./src/components/banner.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _banner_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _banner_vue_vue_type_template_id_37aed33c___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _banner_vue_vue_type_template_id_37aed33c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/banner.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/banner.vue?vue&type=script&lang=js&":
+/*!************************************************************!*\
+ !*** ./src/components/banner.vue?vue&type=script&lang=js& ***!
+ \************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_banner_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./banner.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/banner.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_banner_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/banner.vue?vue&type=style&index=0&lang=scss&":
+/*!*********************************************************************!*\
+ !*** ./src/components/banner.vue?vue&type=style&index=0&lang=scss& ***!
+ \*********************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_banner_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../node_modules/style-loader!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./banner.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/banner.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_banner_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_banner_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_banner_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_banner_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_banner_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/components/banner.vue?vue&type=template&id=37aed33c&":
+/*!******************************************************************!*\
+ !*** ./src/components/banner.vue?vue&type=template&id=37aed33c& ***!
+ \******************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_banner_vue_vue_type_template_id_37aed33c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./banner.vue?vue&type=template&id=37aed33c& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/banner.vue?vue&type=template&id=37aed33c&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_banner_vue_vue_type_template_id_37aed33c___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_banner_vue_vue_type_template_id_37aed33c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/guest-login-guide.vue":
+/*!**********************************************!*\
+ !*** ./src/components/guest-login-guide.vue ***!
+ \**********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _guest_login_guide_vue_vue_type_template_id_02aafdc3_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./guest-login-guide.vue?vue&type=template&id=02aafdc3&scoped=true& */ "./src/components/guest-login-guide.vue?vue&type=template&id=02aafdc3&scoped=true&");
+/* harmony import */ var _guest_login_guide_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./guest-login-guide.vue?vue&type=script&lang=js& */ "./src/components/guest-login-guide.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _guest_login_guide_vue_vue_type_style_index_0_id_02aafdc3_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./guest-login-guide.vue?vue&type=style&index=0&id=02aafdc3&scoped=true&lang=scss& */ "./src/components/guest-login-guide.vue?vue&type=style&index=0&id=02aafdc3&scoped=true&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _guest_login_guide_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _guest_login_guide_vue_vue_type_template_id_02aafdc3_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _guest_login_guide_vue_vue_type_template_id_02aafdc3_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ "02aafdc3",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/guest-login-guide.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/guest-login-guide.vue?vue&type=script&lang=js&":
+/*!***********************************************************************!*\
+ !*** ./src/components/guest-login-guide.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_guest_login_guide_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./guest-login-guide.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/guest-login-guide.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_guest_login_guide_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/guest-login-guide.vue?vue&type=style&index=0&id=02aafdc3&scoped=true&lang=scss&":
+/*!********************************************************************************************************!*\
+ !*** ./src/components/guest-login-guide.vue?vue&type=style&index=0&id=02aafdc3&scoped=true&lang=scss& ***!
+ \********************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_guest_login_guide_vue_vue_type_style_index_0_id_02aafdc3_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../node_modules/style-loader!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./guest-login-guide.vue?vue&type=style&index=0&id=02aafdc3&scoped=true&lang=scss& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/guest-login-guide.vue?vue&type=style&index=0&id=02aafdc3&scoped=true&lang=scss&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_guest_login_guide_vue_vue_type_style_index_0_id_02aafdc3_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_guest_login_guide_vue_vue_type_style_index_0_id_02aafdc3_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_guest_login_guide_vue_vue_type_style_index_0_id_02aafdc3_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_guest_login_guide_vue_vue_type_style_index_0_id_02aafdc3_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_guest_login_guide_vue_vue_type_style_index_0_id_02aafdc3_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/components/guest-login-guide.vue?vue&type=template&id=02aafdc3&scoped=true&":
+/*!*****************************************************************************************!*\
+ !*** ./src/components/guest-login-guide.vue?vue&type=template&id=02aafdc3&scoped=true& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_guest_login_guide_vue_vue_type_template_id_02aafdc3_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./guest-login-guide.vue?vue&type=template&id=02aafdc3&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/guest-login-guide.vue?vue&type=template&id=02aafdc3&scoped=true&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_guest_login_guide_vue_vue_type_template_id_02aafdc3_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_guest_login_guide_vue_vue_type_template_id_02aafdc3_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/hot-tags.vue":
+/*!*************************************!*\
+ !*** ./src/components/hot-tags.vue ***!
+ \*************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hot-tags.vue?vue&type=template&id=622cc129& */ "./src/components/hot-tags.vue?vue&type=template&id=622cc129&");
+/* harmony import */ var _hot_tags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hot-tags.vue?vue&type=script&lang=js& */ "./src/components/hot-tags.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _hot_tags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/hot-tags.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/hot-tags.vue?vue&type=script&lang=js&":
+/*!**************************************************************!*\
+ !*** ./src/components/hot-tags.vue?vue&type=script&lang=js& ***!
+ \**************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_hot_tags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./hot-tags.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/hot-tags.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_hot_tags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/hot-tags.vue?vue&type=template&id=622cc129&":
+/*!********************************************************************!*\
+ !*** ./src/components/hot-tags.vue?vue&type=template&id=622cc129& ***!
+ \********************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./hot-tags.vue?vue&type=template&id=622cc129& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/hot-tags.vue?vue&type=template&id=622cc129&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/new-users.vue":
+/*!**************************************!*\
+ !*** ./src/components/new-users.vue ***!
+ \**************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _new_users_vue_vue_type_template_id_667f163b___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./new-users.vue?vue&type=template&id=667f163b& */ "./src/components/new-users.vue?vue&type=template&id=667f163b&");
+/* harmony import */ var _new_users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./new-users.vue?vue&type=script&lang=js& */ "./src/components/new-users.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _new_users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _new_users_vue_vue_type_template_id_667f163b___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _new_users_vue_vue_type_template_id_667f163b___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/new-users.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/new-users.vue?vue&type=script&lang=js&":
+/*!***************************************************************!*\
+ !*** ./src/components/new-users.vue?vue&type=script&lang=js& ***!
+ \***************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_new_users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./new-users.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/new-users.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_new_users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/new-users.vue?vue&type=template&id=667f163b&":
+/*!*********************************************************************!*\
+ !*** ./src/components/new-users.vue?vue&type=template&id=667f163b& ***!
+ \*********************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_new_users_vue_vue_type_template_id_667f163b___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./new-users.vue?vue&type=template&id=667f163b& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/new-users.vue?vue&type=template&id=667f163b&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_new_users_vue_vue_type_template_id_667f163b___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_new_users_vue_vue_type_template_id_667f163b___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/quick-docs.vue":
+/*!***************************************!*\
+ !*** ./src/components/quick-docs.vue ***!
+ \***************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _quick_docs_vue_vue_type_template_id_802cdaaa___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quick-docs.vue?vue&type=template&id=802cdaaa& */ "./src/components/quick-docs.vue?vue&type=template&id=802cdaaa&");
+/* harmony import */ var _quick_docs_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./quick-docs.vue?vue&type=script&lang=js& */ "./src/components/quick-docs.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _quick_docs_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _quick_docs_vue_vue_type_template_id_802cdaaa___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _quick_docs_vue_vue_type_template_id_802cdaaa___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/quick-docs.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/quick-docs.vue?vue&type=script&lang=js&":
+/*!****************************************************************!*\
+ !*** ./src/components/quick-docs.vue?vue&type=script&lang=js& ***!
+ \****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_quick_docs_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./quick-docs.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/quick-docs.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_quick_docs_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/quick-docs.vue?vue&type=template&id=802cdaaa&":
+/*!**********************************************************************!*\
+ !*** ./src/components/quick-docs.vue?vue&type=template&id=802cdaaa& ***!
+ \**********************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_quick_docs_vue_vue_type_template_id_802cdaaa___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./quick-docs.vue?vue&type=template&id=802cdaaa& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/quick-docs.vue?vue&type=template&id=802cdaaa&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_quick_docs_vue_vue_type_template_id_802cdaaa___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_quick_docs_vue_vue_type_template_id_802cdaaa___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/user-ranking.vue":
+/*!*****************************************!*\
+ !*** ./src/components/user-ranking.vue ***!
+ \*****************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _user_ranking_vue_vue_type_template_id_1e61b644___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./user-ranking.vue?vue&type=template&id=1e61b644& */ "./src/components/user-ranking.vue?vue&type=template&id=1e61b644&");
+/* harmony import */ var _user_ranking_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./user-ranking.vue?vue&type=script&lang=js& */ "./src/components/user-ranking.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _user_ranking_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _user_ranking_vue_vue_type_template_id_1e61b644___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _user_ranking_vue_vue_type_template_id_1e61b644___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/user-ranking.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/user-ranking.vue?vue&type=script&lang=js&":
+/*!******************************************************************!*\
+ !*** ./src/components/user-ranking.vue?vue&type=script&lang=js& ***!
+ \******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_ranking_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./user-ranking.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-ranking.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_ranking_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/user-ranking.vue?vue&type=template&id=1e61b644&":
+/*!************************************************************************!*\
+ !*** ./src/components/user-ranking.vue?vue&type=template&id=1e61b644& ***!
+ \************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_ranking_vue_vue_type_template_id_1e61b644___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./user-ranking.vue?vue&type=template&id=1e61b644& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-ranking.vue?vue&type=template&id=1e61b644&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_ranking_vue_vue_type_template_id_1e61b644___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_ranking_vue_vue_type_template_id_1e61b644___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/home/home.vue":
+/*!***********************************!*\
+ !*** ./src/modules/home/home.vue ***!
+ \***********************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _home_vue_vue_type_template_id_4256fd7e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./home.vue?vue&type=template&id=4256fd7e& */ "./src/modules/home/home.vue?vue&type=template&id=4256fd7e&");
+/* harmony import */ var _home_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./home.vue?vue&type=script&lang=js& */ "./src/modules/home/home.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _home_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _home_vue_vue_type_template_id_4256fd7e___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _home_vue_vue_type_template_id_4256fd7e___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/home/home.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/home/home.vue?vue&type=script&lang=js&":
+/*!************************************************************!*\
+ !*** ./src/modules/home/home.vue?vue&type=script&lang=js& ***!
+ \************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_home_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./home.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/home/home.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_home_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/home/home.vue?vue&type=template&id=4256fd7e&":
+/*!******************************************************************!*\
+ !*** ./src/modules/home/home.vue?vue&type=template&id=4256fd7e& ***!
+ \******************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_home_vue_vue_type_template_id_4256fd7e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./home.vue?vue&type=template&id=4256fd7e& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/home/home.vue?vue&type=template&id=4256fd7e&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_home_vue_vue_type_template_id_4256fd7e___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_home_vue_vue_type_template_id_4256fd7e___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/2.2d07d32ec258ea6d7149.js b/public/2.2d07d32ec258ea6d7149.js
new file mode 100644
index 00000000..fca569c0
--- /dev/null
+++ b/public/2.2d07d32ec258ea6d7149.js
@@ -0,0 +1,746 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[2],{
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Comment.vue?vue&type=script&lang=js&":
+/*!***************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Comment.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "CommentIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Comment icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Eye.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Eye.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "EyeIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Eye icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue?vue&type=script&lang=js&":
+/*!******************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "FormatVerticalAlignTopIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Format Vertical Align Top icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Medal.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Medal.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "MedalIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Medal icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Comment.vue?vue&type=template&id=700c253a&":
+/*!*************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Comment.vue?vue&type=template&id=700c253a& ***!
+ \*************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon comment-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M9,22C8.45,22 8,21.55 8,21V18H4C2.9,18 2,17.1 2,16V4C2,2.89 2.9,2 4,2H20C21.1,2 22,2.9 22,4V16C22,17.1 21.1,18 20,18H13.9L10.2,21.71C10,21.9 9.75,22 9.5,22V22H9Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Eye.vue?vue&type=template&id=6cfe2635&":
+/*!*********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Eye.vue?vue&type=template&id=6cfe2635& ***!
+ \*********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon eye-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M12,9C10.34,9 9,10.34 9,12C9,13.66 10.34,15 12,15C13.66,15 15,13.66 15,12C15,10.34 13.66,9 12,9M12,17C9.24,17 7,14.76 7,12C7,9.24 9.24,7 12,7C14.76,7 17,9.24 17,12C17,14.76 14.76,17 12,17M12,4.5C7,4.5 2.73,7.61 1,12C2.73,16.39 7,19.5 12,19.5C17,19.5 21.27,16.39 23,12C21.27,7.61 17,4.5 12,4.5Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue?vue&type=template&id=12241e69&":
+/*!****************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue?vue&type=template&id=12241e69& ***!
+ \****************************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon format-vertical-align-top-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ { attrs: { d: "M8,11H11V21H13V11H16L12,7L8,11M4,3V5H20V3H4Z" } },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Medal.vue?vue&type=template&id=67e5260a&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Medal.vue?vue&type=template&id=67e5260a& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon medal-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M20,2H4V4L9.81,8.36C6.14,9.57 4.14,13.53 5.35,17.2C6.56,20.87 10.5,22.87 14.19,21.66C17.86,20.45 19.86,16.5 18.65,12.82C17.95,10.71 16.3,9.05 14.19,8.36L20,4V2M14.94,19.5L12,17.78L9.06,19.5L9.84,16.17L7.25,13.93L10.66,13.64L12,10.5L13.34,13.64L16.75,13.93L14.16,16.17L14.94,19.5Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Comment.vue":
+/*!************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Comment.vue ***!
+ \************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Comment_vue_vue_type_template_id_700c253a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Comment.vue?vue&type=template&id=700c253a& */ "./node_modules/vue-material-design-icons/Comment.vue?vue&type=template&id=700c253a&");
+/* harmony import */ var _Comment_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Comment.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Comment.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Comment_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Comment_vue_vue_type_template_id_700c253a___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Comment_vue_vue_type_template_id_700c253a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Comment.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Comment.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Comment.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Comment_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Comment.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Comment.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Comment_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Comment.vue?vue&type=template&id=700c253a&":
+/*!*******************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Comment.vue?vue&type=template&id=700c253a& ***!
+ \*******************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Comment_vue_vue_type_template_id_700c253a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Comment.vue?vue&type=template&id=700c253a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Comment.vue?vue&type=template&id=700c253a&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Comment_vue_vue_type_template_id_700c253a___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Comment_vue_vue_type_template_id_700c253a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Eye.vue":
+/*!********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Eye.vue ***!
+ \********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Eye_vue_vue_type_template_id_6cfe2635___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Eye.vue?vue&type=template&id=6cfe2635& */ "./node_modules/vue-material-design-icons/Eye.vue?vue&type=template&id=6cfe2635&");
+/* harmony import */ var _Eye_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Eye.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Eye.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Eye_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Eye_vue_vue_type_template_id_6cfe2635___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Eye_vue_vue_type_template_id_6cfe2635___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Eye.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Eye.vue?vue&type=script&lang=js&":
+/*!*********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Eye.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Eye_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Eye.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Eye.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Eye_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Eye.vue?vue&type=template&id=6cfe2635&":
+/*!***************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Eye.vue?vue&type=template&id=6cfe2635& ***!
+ \***************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Eye_vue_vue_type_template_id_6cfe2635___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Eye.vue?vue&type=template&id=6cfe2635& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Eye.vue?vue&type=template&id=6cfe2635&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Eye_vue_vue_type_template_id_6cfe2635___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Eye_vue_vue_type_template_id_6cfe2635___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue":
+/*!***************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue ***!
+ \***************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _FormatVerticalAlignTop_vue_vue_type_template_id_12241e69___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FormatVerticalAlignTop.vue?vue&type=template&id=12241e69& */ "./node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue?vue&type=template&id=12241e69&");
+/* harmony import */ var _FormatVerticalAlignTop_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FormatVerticalAlignTop.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _FormatVerticalAlignTop_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _FormatVerticalAlignTop_vue_vue_type_template_id_12241e69___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _FormatVerticalAlignTop_vue_vue_type_template_id_12241e69___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_FormatVerticalAlignTop_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./FormatVerticalAlignTop.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_FormatVerticalAlignTop_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue?vue&type=template&id=12241e69&":
+/*!**********************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue?vue&type=template&id=12241e69& ***!
+ \**********************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_FormatVerticalAlignTop_vue_vue_type_template_id_12241e69___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./FormatVerticalAlignTop.vue?vue&type=template&id=12241e69& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/FormatVerticalAlignTop.vue?vue&type=template&id=12241e69&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_FormatVerticalAlignTop_vue_vue_type_template_id_12241e69___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_FormatVerticalAlignTop_vue_vue_type_template_id_12241e69___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Medal.vue":
+/*!**********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Medal.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Medal_vue_vue_type_template_id_67e5260a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Medal.vue?vue&type=template&id=67e5260a& */ "./node_modules/vue-material-design-icons/Medal.vue?vue&type=template&id=67e5260a&");
+/* harmony import */ var _Medal_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Medal.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Medal.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Medal_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Medal_vue_vue_type_template_id_67e5260a___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Medal_vue_vue_type_template_id_67e5260a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Medal.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Medal.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Medal.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Medal_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Medal.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Medal.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Medal_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Medal.vue?vue&type=template&id=67e5260a&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Medal.vue?vue&type=template&id=67e5260a& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Medal_vue_vue_type_template_id_67e5260a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Medal.vue?vue&type=template&id=67e5260a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Medal.vue?vue&type=template&id=67e5260a&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Medal_vue_vue_type_template_id_67e5260a___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Medal_vue_vue_type_template_id_67e5260a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/20.2812c7c913933bde3112.js b/public/20.2812c7c913933bde3112.js
new file mode 100644
index 00000000..44246947
--- /dev/null
+++ b/public/20.2812c7c913933bde3112.js
@@ -0,0 +1,1596 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[20],{
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Account.vue?vue&type=script&lang=js&":
+/*!***************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Account.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "AccountIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Account icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/AccountEdit.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/AccountEdit.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "AccountEditIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Account Edit icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ArrowUp.vue?vue&type=script&lang=js&":
+/*!***************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/ArrowUp.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "ArrowUpIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Arrow Up icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Bell.vue?vue&type=script&lang=js&":
+/*!************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Bell.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "BellIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Bell icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/LogoutVariant.vue?vue&type=script&lang=js&":
+/*!*********************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/LogoutVariant.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "LogoutVariantIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Logout Variant icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Magnify.vue?vue&type=script&lang=js&":
+/*!***************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Magnify.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "MagnifyIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Magnify icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Menu.vue?vue&type=script&lang=js&":
+/*!************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Menu.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "MenuIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Menu icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js&":
+/*!************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "PlusIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Plus icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Account.vue?vue&type=template&id=7e38f231&":
+/*!*************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Account.vue?vue&type=template&id=7e38f231& ***!
+ \*************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon account-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M12,4C14.21,4 16,5.79 16,8C16,10.21 14.21,12 12,12C9.79,12 8,10.21 8,8C8,5.79 9.79,4 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/AccountEdit.vue?vue&type=template&id=fec58a4a&":
+/*!*****************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/AccountEdit.vue?vue&type=template&id=fec58a4a& ***!
+ \*****************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon account-edit-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M21.7,13.35L20.7,14.35L18.65,12.3L19.65,11.3C19.86,11.09 20.21,11.09 20.42,11.3L21.7,12.58C21.91,12.79 21.91,13.14 21.7,13.35M12,18.94L18.06,12.88L20.11,14.93L14.06,21H12V18.94M12,14C7.58,14 4,15.79 4,18V20H10V18.11L14,14.11C13.34,14.03 12.67,14 12,14M12,4C9.79,4 8,5.79 8,8C8,10.21 9.79,12 12,12C14.21,12 16,10.21 16,8C16,5.79 14.21,4 12,4Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ArrowUp.vue?vue&type=template&id=8517f5f0&":
+/*!*************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/ArrowUp.vue?vue&type=template&id=8517f5f0& ***!
+ \*************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon arrow-up-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Bell.vue?vue&type=template&id=2f3d3ca2&":
+/*!**********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Bell.vue?vue&type=template&id=2f3d3ca2& ***!
+ \**********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon bell-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M21,19V20H3V19L5,17V11C5,7.9 7.03,5.17 10,4.29C10,4.19 10,4.1 10,4C10,2.9 10.9,2 12,2C13.1,2 14,2.9 14,4C14,4.1 14,4.19 14,4.29C16.97,5.17 19,7.9 19,11V17L21,19M14,21C14,22.1 13.1,23 12,23C10.9,23 10,22.1 10,21"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/LogoutVariant.vue?vue&type=template&id=4ed1839f&":
+/*!*******************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/LogoutVariant.vue?vue&type=template&id=4ed1839f& ***!
+ \*******************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon logout-variant-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M14.08,15.59L16.67,13H7V11H16.67L14.08,8.41L15.5,7L20.5,12L15.5,17L14.08,15.59M19,3C20.1,3 21,3.9 21,5V9.67L19,7.67V5H5V19H19V16.33L21,14.33V19C21,20.1 20.1,21 19,21H5C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H19Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Magnify.vue?vue&type=template&id=1d382cb6&":
+/*!*************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Magnify.vue?vue&type=template&id=1d382cb6& ***!
+ \*************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon magnify-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M9.5,3C13.09,3 16,5.91 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16C5.91,16 3,13.09 3,9.5C3,5.91 5.91,3 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Menu.vue?vue&type=template&id=62f6d40b&":
+/*!**********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Menu.vue?vue&type=template&id=62f6d40b& ***!
+ \**********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon menu-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ { attrs: { d: "M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z" } },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6&":
+/*!**********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6& ***!
+ \**********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon plus-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ { attrs: { d: "M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z" } },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
+/* globals __VUE_SSR_CONTEXT__ */
+
+// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
+// This module is a runtime utility for cleaner component module output and will
+// be included in the final webpack user bundle.
+
+function normalizeComponent (
+ scriptExports,
+ render,
+ staticRenderFns,
+ functionalTemplate,
+ injectStyles,
+ scopeId,
+ moduleIdentifier, /* server only */
+ shadowMode /* vue-cli only */
+) {
+ // Vue.extend constructor export interop
+ var options = typeof scriptExports === 'function'
+ ? scriptExports.options
+ : scriptExports
+
+ // render functions
+ if (render) {
+ options.render = render
+ options.staticRenderFns = staticRenderFns
+ options._compiled = true
+ }
+
+ // functional template
+ if (functionalTemplate) {
+ options.functional = true
+ }
+
+ // scopedId
+ if (scopeId) {
+ options._scopeId = 'data-v-' + scopeId
+ }
+
+ var hook
+ if (moduleIdentifier) { // server build
+ hook = function (context) {
+ // 2.3 injection
+ context =
+ context || // cached call
+ (this.$vnode && this.$vnode.ssrContext) || // stateful
+ (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
+ // 2.2 with runInNewContext: true
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
+ context = __VUE_SSR_CONTEXT__
+ }
+ // inject component styles
+ if (injectStyles) {
+ injectStyles.call(this, context)
+ }
+ // register component module identifier for async chunk inferrence
+ if (context && context._registeredComponents) {
+ context._registeredComponents.add(moduleIdentifier)
+ }
+ }
+ // used by ssr in case component is cached and beforeCreate
+ // never gets called
+ options._ssrRegister = hook
+ } else if (injectStyles) {
+ hook = shadowMode
+ ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
+ : injectStyles
+ }
+
+ if (hook) {
+ if (options.functional) {
+ // for template-only hot-reload because in that case the render fn doesn't
+ // go through the normalizer
+ options._injectStyles = hook
+ // register for functioal component in vue file
+ var originalRender = options.render
+ options.render = function renderWithStyleInjection (h, context) {
+ hook.call(context)
+ return originalRender(h, context)
+ }
+ } else {
+ // inject component registration as beforeCreate hook
+ var existing = options.beforeCreate
+ options.beforeCreate = existing
+ ? [].concat(existing, hook)
+ : [hook]
+ }
+ }
+
+ return {
+ exports: scriptExports,
+ options: options
+ }
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Account.vue":
+/*!************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Account.vue ***!
+ \************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Account_vue_vue_type_template_id_7e38f231___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Account.vue?vue&type=template&id=7e38f231& */ "./node_modules/vue-material-design-icons/Account.vue?vue&type=template&id=7e38f231&");
+/* harmony import */ var _Account_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Account.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Account.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Account_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Account_vue_vue_type_template_id_7e38f231___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Account_vue_vue_type_template_id_7e38f231___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Account.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Account.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Account.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Account_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Account.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Account.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Account_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Account.vue?vue&type=template&id=7e38f231&":
+/*!*******************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Account.vue?vue&type=template&id=7e38f231& ***!
+ \*******************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Account_vue_vue_type_template_id_7e38f231___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Account.vue?vue&type=template&id=7e38f231& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Account.vue?vue&type=template&id=7e38f231&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Account_vue_vue_type_template_id_7e38f231___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Account_vue_vue_type_template_id_7e38f231___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/AccountEdit.vue":
+/*!****************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/AccountEdit.vue ***!
+ \****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _AccountEdit_vue_vue_type_template_id_fec58a4a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AccountEdit.vue?vue&type=template&id=fec58a4a& */ "./node_modules/vue-material-design-icons/AccountEdit.vue?vue&type=template&id=fec58a4a&");
+/* harmony import */ var _AccountEdit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AccountEdit.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/AccountEdit.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _AccountEdit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _AccountEdit_vue_vue_type_template_id_fec58a4a___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _AccountEdit_vue_vue_type_template_id_fec58a4a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/AccountEdit.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/AccountEdit.vue?vue&type=script&lang=js&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/AccountEdit.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_AccountEdit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./AccountEdit.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/AccountEdit.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_AccountEdit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/AccountEdit.vue?vue&type=template&id=fec58a4a&":
+/*!***********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/AccountEdit.vue?vue&type=template&id=fec58a4a& ***!
+ \***********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_AccountEdit_vue_vue_type_template_id_fec58a4a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./AccountEdit.vue?vue&type=template&id=fec58a4a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/AccountEdit.vue?vue&type=template&id=fec58a4a&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_AccountEdit_vue_vue_type_template_id_fec58a4a___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_AccountEdit_vue_vue_type_template_id_fec58a4a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ArrowUp.vue":
+/*!************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ArrowUp.vue ***!
+ \************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _ArrowUp_vue_vue_type_template_id_8517f5f0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ArrowUp.vue?vue&type=template&id=8517f5f0& */ "./node_modules/vue-material-design-icons/ArrowUp.vue?vue&type=template&id=8517f5f0&");
+/* harmony import */ var _ArrowUp_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ArrowUp.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/ArrowUp.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _ArrowUp_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _ArrowUp_vue_vue_type_template_id_8517f5f0___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _ArrowUp_vue_vue_type_template_id_8517f5f0___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/ArrowUp.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ArrowUp.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ArrowUp.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_ArrowUp_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./ArrowUp.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ArrowUp.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_ArrowUp_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ArrowUp.vue?vue&type=template&id=8517f5f0&":
+/*!*******************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ArrowUp.vue?vue&type=template&id=8517f5f0& ***!
+ \*******************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ArrowUp_vue_vue_type_template_id_8517f5f0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./ArrowUp.vue?vue&type=template&id=8517f5f0& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ArrowUp.vue?vue&type=template&id=8517f5f0&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ArrowUp_vue_vue_type_template_id_8517f5f0___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ArrowUp_vue_vue_type_template_id_8517f5f0___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Bell.vue":
+/*!*********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Bell.vue ***!
+ \*********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Bell_vue_vue_type_template_id_2f3d3ca2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Bell.vue?vue&type=template&id=2f3d3ca2& */ "./node_modules/vue-material-design-icons/Bell.vue?vue&type=template&id=2f3d3ca2&");
+/* harmony import */ var _Bell_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Bell.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Bell.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Bell_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Bell_vue_vue_type_template_id_2f3d3ca2___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Bell_vue_vue_type_template_id_2f3d3ca2___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Bell.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Bell.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Bell.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Bell_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Bell.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Bell.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Bell_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Bell.vue?vue&type=template&id=2f3d3ca2&":
+/*!****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Bell.vue?vue&type=template&id=2f3d3ca2& ***!
+ \****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Bell_vue_vue_type_template_id_2f3d3ca2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Bell.vue?vue&type=template&id=2f3d3ca2& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Bell.vue?vue&type=template&id=2f3d3ca2&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Bell_vue_vue_type_template_id_2f3d3ca2___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Bell_vue_vue_type_template_id_2f3d3ca2___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/LogoutVariant.vue":
+/*!******************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/LogoutVariant.vue ***!
+ \******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _LogoutVariant_vue_vue_type_template_id_4ed1839f___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./LogoutVariant.vue?vue&type=template&id=4ed1839f& */ "./node_modules/vue-material-design-icons/LogoutVariant.vue?vue&type=template&id=4ed1839f&");
+/* harmony import */ var _LogoutVariant_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./LogoutVariant.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/LogoutVariant.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _LogoutVariant_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _LogoutVariant_vue_vue_type_template_id_4ed1839f___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _LogoutVariant_vue_vue_type_template_id_4ed1839f___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/LogoutVariant.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/LogoutVariant.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/LogoutVariant.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_LogoutVariant_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./LogoutVariant.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/LogoutVariant.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_LogoutVariant_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/LogoutVariant.vue?vue&type=template&id=4ed1839f&":
+/*!*************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/LogoutVariant.vue?vue&type=template&id=4ed1839f& ***!
+ \*************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_LogoutVariant_vue_vue_type_template_id_4ed1839f___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./LogoutVariant.vue?vue&type=template&id=4ed1839f& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/LogoutVariant.vue?vue&type=template&id=4ed1839f&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_LogoutVariant_vue_vue_type_template_id_4ed1839f___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_LogoutVariant_vue_vue_type_template_id_4ed1839f___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Magnify.vue":
+/*!************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Magnify.vue ***!
+ \************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Magnify_vue_vue_type_template_id_1d382cb6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Magnify.vue?vue&type=template&id=1d382cb6& */ "./node_modules/vue-material-design-icons/Magnify.vue?vue&type=template&id=1d382cb6&");
+/* harmony import */ var _Magnify_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Magnify.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Magnify.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Magnify_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Magnify_vue_vue_type_template_id_1d382cb6___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Magnify_vue_vue_type_template_id_1d382cb6___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Magnify.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Magnify.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Magnify.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Magnify_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Magnify.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Magnify.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Magnify_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Magnify.vue?vue&type=template&id=1d382cb6&":
+/*!*******************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Magnify.vue?vue&type=template&id=1d382cb6& ***!
+ \*******************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Magnify_vue_vue_type_template_id_1d382cb6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Magnify.vue?vue&type=template&id=1d382cb6& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Magnify.vue?vue&type=template&id=1d382cb6&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Magnify_vue_vue_type_template_id_1d382cb6___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Magnify_vue_vue_type_template_id_1d382cb6___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Menu.vue":
+/*!*********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Menu.vue ***!
+ \*********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Menu_vue_vue_type_template_id_62f6d40b___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Menu.vue?vue&type=template&id=62f6d40b& */ "./node_modules/vue-material-design-icons/Menu.vue?vue&type=template&id=62f6d40b&");
+/* harmony import */ var _Menu_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Menu.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Menu.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Menu_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Menu_vue_vue_type_template_id_62f6d40b___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Menu_vue_vue_type_template_id_62f6d40b___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Menu.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Menu.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Menu.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Menu_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Menu.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Menu.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Menu_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Menu.vue?vue&type=template&id=62f6d40b&":
+/*!****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Menu.vue?vue&type=template&id=62f6d40b& ***!
+ \****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Menu_vue_vue_type_template_id_62f6d40b___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Menu.vue?vue&type=template&id=62f6d40b& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Menu.vue?vue&type=template&id=62f6d40b&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Menu_vue_vue_type_template_id_62f6d40b___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Menu_vue_vue_type_template_id_62f6d40b___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Plus.vue":
+/*!*********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Plus.vue ***!
+ \*********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Plus.vue?vue&type=template&id=18bbb6c6& */ "./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6&");
+/* harmony import */ var _Plus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Plus.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Plus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Plus.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Plus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Plus.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Plus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6&":
+/*!****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6& ***!
+ \****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Plus.vue?vue&type=template&id=18bbb6c6& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/21.8531ae436fafa7e82e41.js b/public/21.8531ae436fafa7e82e41.js
new file mode 100644
index 00000000..08cfd51a
--- /dev/null
+++ b/public/21.8531ae436fafa7e82e41.js
@@ -0,0 +1,1413 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[21],{
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ArrowDown.vue?vue&type=script&lang=js&":
+/*!*****************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/ArrowDown.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "ArrowDownIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Arrow Down icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "CheckIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Check icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Close.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Close.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "CloseIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Close icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/MapMarker.vue?vue&type=script&lang=js&":
+/*!*****************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/MapMarker.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "MapMarkerIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Map Marker icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js&":
+/*!************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "PlusIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Plus icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/SourceCommitEnd.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/SourceCommitEnd.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "SourceCommitEndIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Source Commit End icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "TooltipOutlineIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Tooltip Outline icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ArrowDown.vue?vue&type=template&id=dca48362&":
+/*!***************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/ArrowDown.vue?vue&type=template&id=dca48362& ***!
+ \***************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon arrow-down-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M11,4H13V16L18.5,10.5L19.92,11.92L12,19.84L4.08,11.92L5.5,10.5L11,16V4Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon check-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d: "M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Close.vue?vue&type=template&id=3cc2737c&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Close.vue?vue&type=template&id=3cc2737c& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon close-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/MapMarker.vue?vue&type=template&id=c80f3d8c&":
+/*!***************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/MapMarker.vue?vue&type=template&id=c80f3d8c& ***!
+ \***************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon map-marker-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M12,11.5C10.62,11.5 9.5,10.38 9.5,9C9.5,7.62 10.62,6.5 12,6.5C13.38,6.5 14.5,7.62 14.5,9C14.5,10.38 13.38,11.5 12,11.5M12,2C8.13,2 5,5.13 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9C19,5.13 15.87,2 12,2Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6&":
+/*!**********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6& ***!
+ \**********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon plus-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ { attrs: { d: "M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z" } },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/SourceCommitEnd.vue?vue&type=template&id=68a53c4d&":
+/*!*********************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/SourceCommitEnd.vue?vue&type=template&id=68a53c4d& ***!
+ \*********************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon source-commit-end-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M17,12C17,14.76 14.76,17 12,17C9.24,17 7,14.76 7,12C7,9.58 8.72,7.56 11,7.1V3H13V7.1C15.28,7.56 17,9.58 17,12M12,9C10.34,9 9,10.34 9,12C9,13.66 10.34,15 12,15C13.66,15 15,13.66 15,12C15,10.34 13.66,9 12,9Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&":
+/*!********************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a& ***!
+ \********************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon tooltip-outline-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M4,2H20C21.1,2 22,2.9 22,4V16C22,17.1 21.1,18 20,18H16L12,22L8,18H4C2.9,18 2,17.1 2,16V4C2,2.9 2.9,2 4,2M4,4V16H8.83L12,19.17L15.17,16H20V4H4Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
+/* globals __VUE_SSR_CONTEXT__ */
+
+// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
+// This module is a runtime utility for cleaner component module output and will
+// be included in the final webpack user bundle.
+
+function normalizeComponent (
+ scriptExports,
+ render,
+ staticRenderFns,
+ functionalTemplate,
+ injectStyles,
+ scopeId,
+ moduleIdentifier, /* server only */
+ shadowMode /* vue-cli only */
+) {
+ // Vue.extend constructor export interop
+ var options = typeof scriptExports === 'function'
+ ? scriptExports.options
+ : scriptExports
+
+ // render functions
+ if (render) {
+ options.render = render
+ options.staticRenderFns = staticRenderFns
+ options._compiled = true
+ }
+
+ // functional template
+ if (functionalTemplate) {
+ options.functional = true
+ }
+
+ // scopedId
+ if (scopeId) {
+ options._scopeId = 'data-v-' + scopeId
+ }
+
+ var hook
+ if (moduleIdentifier) { // server build
+ hook = function (context) {
+ // 2.3 injection
+ context =
+ context || // cached call
+ (this.$vnode && this.$vnode.ssrContext) || // stateful
+ (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
+ // 2.2 with runInNewContext: true
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
+ context = __VUE_SSR_CONTEXT__
+ }
+ // inject component styles
+ if (injectStyles) {
+ injectStyles.call(this, context)
+ }
+ // register component module identifier for async chunk inferrence
+ if (context && context._registeredComponents) {
+ context._registeredComponents.add(moduleIdentifier)
+ }
+ }
+ // used by ssr in case component is cached and beforeCreate
+ // never gets called
+ options._ssrRegister = hook
+ } else if (injectStyles) {
+ hook = shadowMode
+ ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
+ : injectStyles
+ }
+
+ if (hook) {
+ if (options.functional) {
+ // for template-only hot-reload because in that case the render fn doesn't
+ // go through the normalizer
+ options._injectStyles = hook
+ // register for functioal component in vue file
+ var originalRender = options.render
+ options.render = function renderWithStyleInjection (h, context) {
+ hook.call(context)
+ return originalRender(h, context)
+ }
+ } else {
+ // inject component registration as beforeCreate hook
+ var existing = options.beforeCreate
+ options.beforeCreate = existing
+ ? [].concat(existing, hook)
+ : [hook]
+ }
+ }
+
+ return {
+ exports: scriptExports,
+ options: options
+ }
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ArrowDown.vue":
+/*!**************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ArrowDown.vue ***!
+ \**************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _ArrowDown_vue_vue_type_template_id_dca48362___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ArrowDown.vue?vue&type=template&id=dca48362& */ "./node_modules/vue-material-design-icons/ArrowDown.vue?vue&type=template&id=dca48362&");
+/* harmony import */ var _ArrowDown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ArrowDown.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/ArrowDown.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _ArrowDown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _ArrowDown_vue_vue_type_template_id_dca48362___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _ArrowDown_vue_vue_type_template_id_dca48362___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/ArrowDown.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ArrowDown.vue?vue&type=script&lang=js&":
+/*!***************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ArrowDown.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_ArrowDown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./ArrowDown.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ArrowDown.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_ArrowDown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ArrowDown.vue?vue&type=template&id=dca48362&":
+/*!*********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ArrowDown.vue?vue&type=template&id=dca48362& ***!
+ \*********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ArrowDown_vue_vue_type_template_id_dca48362___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./ArrowDown.vue?vue&type=template&id=dca48362& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ArrowDown.vue?vue&type=template&id=dca48362&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ArrowDown_vue_vue_type_template_id_dca48362___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ArrowDown_vue_vue_type_template_id_dca48362___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Check.vue":
+/*!**********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Check.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Check.vue?vue&type=template&id=7146728c& */ "./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&");
+/* harmony import */ var _Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Check.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Check.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Check.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Check.vue?vue&type=template&id=7146728c& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Close.vue":
+/*!**********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Close.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Close_vue_vue_type_template_id_3cc2737c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Close.vue?vue&type=template&id=3cc2737c& */ "./node_modules/vue-material-design-icons/Close.vue?vue&type=template&id=3cc2737c&");
+/* harmony import */ var _Close_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Close.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Close.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Close_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Close_vue_vue_type_template_id_3cc2737c___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Close_vue_vue_type_template_id_3cc2737c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Close.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Close.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Close.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Close_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Close.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Close.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Close_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Close.vue?vue&type=template&id=3cc2737c&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Close.vue?vue&type=template&id=3cc2737c& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Close_vue_vue_type_template_id_3cc2737c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Close.vue?vue&type=template&id=3cc2737c& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Close.vue?vue&type=template&id=3cc2737c&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Close_vue_vue_type_template_id_3cc2737c___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Close_vue_vue_type_template_id_3cc2737c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/MapMarker.vue":
+/*!**************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/MapMarker.vue ***!
+ \**************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _MapMarker_vue_vue_type_template_id_c80f3d8c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MapMarker.vue?vue&type=template&id=c80f3d8c& */ "./node_modules/vue-material-design-icons/MapMarker.vue?vue&type=template&id=c80f3d8c&");
+/* harmony import */ var _MapMarker_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MapMarker.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/MapMarker.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _MapMarker_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _MapMarker_vue_vue_type_template_id_c80f3d8c___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _MapMarker_vue_vue_type_template_id_c80f3d8c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/MapMarker.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/MapMarker.vue?vue&type=script&lang=js&":
+/*!***************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/MapMarker.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_MapMarker_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./MapMarker.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/MapMarker.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_MapMarker_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/MapMarker.vue?vue&type=template&id=c80f3d8c&":
+/*!*********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/MapMarker.vue?vue&type=template&id=c80f3d8c& ***!
+ \*********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_MapMarker_vue_vue_type_template_id_c80f3d8c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./MapMarker.vue?vue&type=template&id=c80f3d8c& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/MapMarker.vue?vue&type=template&id=c80f3d8c&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_MapMarker_vue_vue_type_template_id_c80f3d8c___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_MapMarker_vue_vue_type_template_id_c80f3d8c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Plus.vue":
+/*!*********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Plus.vue ***!
+ \*********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Plus.vue?vue&type=template&id=18bbb6c6& */ "./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6&");
+/* harmony import */ var _Plus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Plus.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Plus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Plus.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Plus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Plus.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Plus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6&":
+/*!****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6& ***!
+ \****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Plus.vue?vue&type=template&id=18bbb6c6& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=18bbb6c6&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Plus_vue_vue_type_template_id_18bbb6c6___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/SourceCommitEnd.vue":
+/*!********************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/SourceCommitEnd.vue ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _SourceCommitEnd_vue_vue_type_template_id_68a53c4d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SourceCommitEnd.vue?vue&type=template&id=68a53c4d& */ "./node_modules/vue-material-design-icons/SourceCommitEnd.vue?vue&type=template&id=68a53c4d&");
+/* harmony import */ var _SourceCommitEnd_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SourceCommitEnd.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/SourceCommitEnd.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _SourceCommitEnd_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _SourceCommitEnd_vue_vue_type_template_id_68a53c4d___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _SourceCommitEnd_vue_vue_type_template_id_68a53c4d___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/SourceCommitEnd.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/SourceCommitEnd.vue?vue&type=script&lang=js&":
+/*!*********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/SourceCommitEnd.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_SourceCommitEnd_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./SourceCommitEnd.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/SourceCommitEnd.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_SourceCommitEnd_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/SourceCommitEnd.vue?vue&type=template&id=68a53c4d&":
+/*!***************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/SourceCommitEnd.vue?vue&type=template&id=68a53c4d& ***!
+ \***************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_SourceCommitEnd_vue_vue_type_template_id_68a53c4d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./SourceCommitEnd.vue?vue&type=template&id=68a53c4d& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/SourceCommitEnd.vue?vue&type=template&id=68a53c4d&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_SourceCommitEnd_vue_vue_type_template_id_68a53c4d___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_SourceCommitEnd_vue_vue_type_template_id_68a53c4d___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue":
+/*!*******************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue ***!
+ \*******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TooltipOutline.vue?vue&type=template&id=fff4072a& */ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&");
+/* harmony import */ var _TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TooltipOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/TooltipOutline.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./TooltipOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&":
+/*!**************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a& ***!
+ \**************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./TooltipOutline.vue?vue&type=template&id=fff4072a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/22.6ca5b4d120f1520ae9e5.js b/public/22.6ca5b4d120f1520ae9e5.js
new file mode 100644
index 00000000..52c204b8
--- /dev/null
+++ b/public/22.6ca5b4d120f1520ae9e5.js
@@ -0,0 +1,1137 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[22],{
+
+/***/ "./node_modules/dayjs/dayjs.min.js":
+/*!*****************************************!*\
+ !*** ./node_modules/dayjs/dayjs.min.js ***!
+ \*****************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+!function(t,n){ true?module.exports=n():undefined}(this,function(){"use strict";var t="millisecond",n="second",e="minute",r="hour",i="day",s="week",u="month",o="quarter",a="year",h=/^(\d{4})-?(\d{1,2})-?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?.?(\d{1,3})?$/,f=/\[([^\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,c=function(t,n,e){var r=String(t);return!r||r.length>=n?t:""+Array(n+1-r.length).join(e)+t},d={s:c,z:function(t){var n=-t.utcOffset(),e=Math.abs(n),r=Math.floor(e/60),i=e%60;return(n<=0?"+":"-")+c(r,2,"0")+":"+c(i,2,"0")},m:function(t,n){var e=12*(n.year()-t.year())+(n.month()-t.month()),r=t.clone().add(e,u),i=n-r<0,s=t.clone().add(e+(i?-1:1),u);return Number(-(e+(n-r)/(i?r-s:s-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(h){return{M:u,y:a,w:s,d:i,h:r,m:e,s:n,ms:t,Q:o}[h]||String(h||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},$={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},l="en",m={};m[l]=$;var y=function(t){return t instanceof v},M=function(t,n,e){var r;if(!t)return l;if("string"==typeof t)m[t]&&(r=t),n&&(m[t]=n,r=t);else{var i=t.name;m[i]=t,r=i}return e||(l=r),r},g=function(t,n,e){if(y(t))return t.clone();var r=n?"string"==typeof n?{format:n,pl:e}:n:{};return r.date=t,new v(r)},D=d;D.l=M,D.i=y,D.w=function(t,n){return g(t,{locale:n.$L,utc:n.$u})};var v=function(){function c(t){this.$L=this.$L||M(t.locale,null,!0),this.parse(t)}var d=c.prototype;return d.parse=function(t){this.$d=function(t){var n=t.date,e=t.utc;if(null===n)return new Date(NaN);if(D.u(n))return new Date;if(n instanceof Date)return new Date(n);if("string"==typeof n&&!/Z$/i.test(n)){var r=n.match(h);if(r)return e?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(n)}(t),this.init()},d.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},d.$utils=function(){return D},d.isValid=function(){return!("Invalid Date"===this.$d.toString())},d.isSame=function(t,n){var e=g(t);return this.startOf(n)<=e&&e<=this.endOf(n)},d.isAfter=function(t,n){return g(t) 0) {
+ this.search();
+ } else {
+ this.threads = [];
+ }
+ }
+ },
+ mounted: function mounted() {
+ var _this = this;
+
+ this.$nextTick(function () {
+ document.addEventListener('click', _this.onBodyClick);
+ });
+ },
+ beforeDestroy: function beforeDestroy() {
+ document.removeEventListener('click', this.onBodyClick);
+ },
+ methods: {
+ onBodyClick: function onBodyClick(e) {
+ var searchForm = document.querySelector('.search-form');
+
+ if (e.target !== searchForm) {
+ this.threads = [];
+ }
+ },
+ highlightContent: function highlightContent(item) {
+ return (item.highlights['content'] || []).join('...');
+ },
+ search: function search() {
+ var _this2 = this;
+
+ this.$http.get("/threads/search?q=" + this.q).then(function (response) {
+ _this2.threads = response.data;
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/navbar.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/navbar.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $icons_Menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $icons/Menu */ "./node_modules/vue-material-design-icons/Menu.vue");
+/* harmony import */ var $icons_Bell__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/Bell */ "./node_modules/vue-material-design-icons/Bell.vue");
+/* harmony import */ var $icons_Plus__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/Plus */ "./node_modules/vue-material-design-icons/Plus.vue");
+/* harmony import */ var $icons_Magnify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $icons/Magnify */ "./node_modules/vue-material-design-icons/Magnify.vue");
+/* harmony import */ var $icons_Account__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! $icons/Account */ "./node_modules/vue-material-design-icons/Account.vue");
+/* harmony import */ var $icons_AccountEdit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! $icons/AccountEdit */ "./node_modules/vue-material-design-icons/AccountEdit.vue");
+/* harmony import */ var $icons_LogoutVariant__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! $icons/LogoutVariant */ "./node_modules/vue-material-design-icons/LogoutVariant.vue");
+/* harmony import */ var _nav_search__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./nav-search */ "./src/components/nav-search.vue");
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ components: {
+ MenuIcon: $icons_Menu__WEBPACK_IMPORTED_MODULE_0__["default"],
+ BellIcon: $icons_Bell__WEBPACK_IMPORTED_MODULE_1__["default"],
+ PlusIcon: $icons_Plus__WEBPACK_IMPORTED_MODULE_2__["default"],
+ AccountIcon: $icons_Account__WEBPACK_IMPORTED_MODULE_4__["default"],
+ MagnifyIcon: $icons_Magnify__WEBPACK_IMPORTED_MODULE_3__["default"],
+ AccountEditIcon: $icons_AccountEdit__WEBPACK_IMPORTED_MODULE_5__["default"],
+ LogoutVariant: $icons_LogoutVariant__WEBPACK_IMPORTED_MODULE_6__["default"],
+ NavSearch: _nav_search__WEBPACK_IMPORTED_MODULE_7__["default"]
+ },
+ computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_8__["mapGetters"])(['isLogged', 'currentUser'])),
+ methods: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_8__["mapActions"])(['logout', 'toggle']))
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/sidebar.vue?vue&type=script&lang=js&":
+/*!*********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/sidebar.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+/* harmony default export */ __webpack_exports__["default"] = ({
+ data: function data() {
+ return {};
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/root.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/root.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+/* harmony import */ var $components_navbar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $components/navbar */ "./src/components/navbar.vue");
+/* harmony import */ var $components_sidebar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $components/sidebar */ "./src/components/sidebar.vue");
+/* harmony import */ var $icons_ArrowUp__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $icons/ArrowUp */ "./node_modules/vue-material-design-icons/ArrowUp.vue");
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = (_defineProperty({
+ name: 'app',
+ components: {
+ Navbar: $components_navbar__WEBPACK_IMPORTED_MODULE_1__["default"],
+ Sidebar: $components_sidebar__WEBPACK_IMPORTED_MODULE_2__["default"],
+ ArrowUpIcon: $icons_ArrowUp__WEBPACK_IMPORTED_MODULE_3__["default"]
+ },
+ computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_0__["mapGetters"])(['currentUser', 'isToggled']), {
+ checkParams: function checkParams() {
+ return this.$route.query['active-success'] == 'yes';
+ },
+ shouldShowNavbar: function shouldShowNavbar() {
+ return typeof this.$route.meta['navbar'] === 'undefined' || !!this.$route.meta['navbar'];
+ },
+ withContainer: function withContainer() {
+ if (typeof this.$route.meta['container'] !== 'undefined') {
+ return !!this.$route.meta['container'];
+ }
+
+ return true;
+ }
+ }),
+ mounted: function mounted() {
+ console.log('app mounted');
+ },
+ methods: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_0__["mapActions"])(['toggle']), {
+ sendActiveMail: function sendActiveMail() {
+ var _this = this;
+
+ this.$http.post('user/send-active-mail').then(function (data) {
+ _this.$message.success(data.message);
+ });
+ },
+ scrollToTop: function scrollToTop() {
+ window.scroll({
+ top: 0,
+ left: 0,
+ behavior: 'smooth'
+ });
+ }
+ })
+}, "mounted", function mounted() {
+ var _this2 = this;
+
+ setTimeout(function () {
+ window.addEventListener('scroll', function () {
+ if (document.body.scrollTop > 400 || document.documentElement.scrollTop > 400) {
+ _this2.$refs['backToTopLayer'].style.display = 'block';
+ } else {
+ _this2.$refs['backToTopLayer'].style.display = 'none';
+ }
+ });
+ }, 1000);
+}));
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/nav-search.vue?vue&type=style&index=0&id=28d942bc&scoped=true&lang=scss&":
+/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/nav-search.vue?vue&type=style&index=0&id=28d942bc&scoped=true&lang=scss& ***!
+ \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, ".search-form[data-v-28d942bc] {\n position: relative;\n}\n.search-form .list-group[data-v-28d942bc] {\n position: absolute;\n top: 100%;\n left: 0;\n min-width: 400px;\n max-height: 80vh;\n overflow-y: auto;\n -webkit-box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.1);\n z-index: 99;\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/navbar.vue?vue&type=style&index=0&lang=scss&":
+/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/navbar.vue?vue&type=style&index=0&lang=scss& ***!
+ \*********************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, ".navbar-nav .nav-item {\n margin-left: 10px;\n margin-right: 10px;\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/root.vue?vue&type=style&index=0&lang=scss&":
+/*!********************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/root.vue?vue&type=style&index=0&lang=scss& ***!
+ \********************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, ".back-to-top {\n display: none;\n position: fixed;\n bottom: 30px;\n right: 50px;\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/nav-search.vue?vue&type=style&index=0&id=28d942bc&scoped=true&lang=scss&":
+/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/nav-search.vue?vue&type=style&index=0&id=28d942bc&scoped=true&lang=scss& ***!
+ \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./nav-search.vue?vue&type=style&index=0&id=28d942bc&scoped=true&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/nav-search.vue?vue&type=style&index=0&id=28d942bc&scoped=true&lang=scss&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/navbar.vue?vue&type=style&index=0&lang=scss&":
+/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/components/navbar.vue?vue&type=style&index=0&lang=scss& ***!
+ \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./navbar.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/navbar.vue?vue&type=style&index=0&lang=scss&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/root.vue?vue&type=style&index=0&lang=scss&":
+/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/root.vue?vue&type=style&index=0&lang=scss& ***!
+ \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src??ref--7-3!../node_modules/sass-loader/lib/loader.js??ref--7-4!../node_modules/vue-loader/lib??vue-loader-options!./root.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/root.vue?vue&type=style&index=0&lang=scss&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/nav-search.vue?vue&type=template&id=28d942bc&scoped=true&":
+/*!****************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/nav-search.vue?vue&type=template&id=28d942bc&scoped=true& ***!
+ \****************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("form", { staticClass: "search-form form-inline my-2 my-lg-0" }, [
+ _c("input", {
+ directives: [
+ { name: "model", rawName: "v-model", value: _vm.q, expression: "q" }
+ ],
+ staticClass: "form-control mr-sm-2",
+ attrs: {
+ type: "search",
+ placeholder: "搜索讨论",
+ "aria-label": "Search"
+ },
+ domProps: { value: _vm.q },
+ on: {
+ input: function($event) {
+ if ($event.target.composing) {
+ return
+ }
+ _vm.q = $event.target.value
+ }
+ }
+ }),
+ _vm._v(" "),
+ _vm.threads.length > 0
+ ? _c(
+ "div",
+ { staticClass: "list-group" },
+ _vm._l(_vm.threads, function(item) {
+ return _c(
+ "div",
+ {
+ key: item.id,
+ staticClass:
+ "list-group-item list-group-item-action cursor-pointer",
+ on: {
+ click: function($event) {
+ return _vm.$router.push({
+ name: "threads.show",
+ params: { id: item.id }
+ })
+ }
+ }
+ },
+ [
+ _c("div", { staticClass: "d-flex align-items-center" }, [
+ _c("a", { staticClass: "mr-2", attrs: { href: "#" } }, [
+ _c("img", {
+ staticClass: "avatar-30",
+ attrs: { src: item.user.avatar, alt: "" }
+ })
+ ]),
+ _vm._v(" "),
+ _c("div", {
+ staticClass: "highlights text-gray-50 text-truncate",
+ domProps: {
+ innerHTML: _vm._s(
+ item["highlights"] && item["highlights"]["title"]
+ ? item.highlights.title[0]
+ : item.title
+ )
+ }
+ })
+ ]),
+ _vm._v(" "),
+ item.highlights["content"]
+ ? _c("p", {
+ staticClass: "highlights mt-1 text-gray-60",
+ domProps: {
+ innerHTML: _vm._s(_vm.highlightContent(item))
+ }
+ })
+ : _vm._e()
+ ]
+ )
+ }),
+ 0
+ )
+ : _vm._e()
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/navbar.vue?vue&type=template&id=688b5e20&":
+/*!************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/navbar.vue?vue&type=template&id=688b5e20& ***!
+ \************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "bg-white bg-white shadow-6" }, [
+ _c("div", { staticClass: "container" }, [
+ _c(
+ "nav",
+ {
+ staticClass: "navbar px-0 py-1 text-14 navbar-expand-lg navbar-light"
+ },
+ [
+ _c(
+ "router-link",
+ {
+ staticClass:
+ "navbar-brand text-22 d-flex align-items-center antialiased",
+ attrs: { to: { name: "home" } }
+ },
+ [
+ _c("img", {
+ staticClass: "mr-2 avatar-40",
+ attrs: { src: "/yike.svg", alt: "一刻社区" }
+ }),
+ _vm._v("一刻"),
+ _c("span", { staticClass: "text-14 text-muted ml-1" }, [
+ _vm._v("| 高品质微信开发者社区")
+ ]),
+ _c("sup", { staticClass: "ml-1 text-10 text-danger" }, [
+ _vm._v(" Beta")
+ ])
+ ]
+ ),
+ _vm._v(" "),
+ _vm._m(0),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "collapse navbar-collapse",
+ attrs: { id: "navbarSupportedContent" }
+ },
+ [
+ _c(
+ "ul",
+ {
+ staticClass:
+ "navbar-nav flex-row align-items-center justify-content-center py-sm-2 py-md-0 mx-auto"
+ },
+ [
+ _c(
+ "router-link",
+ {
+ staticClass: "nav-item",
+ attrs: { to: { name: "home" }, exact: "", tag: "li" }
+ },
+ [
+ _c(
+ "a",
+ {
+ staticClass: "nav-link",
+ attrs: { href: "javascript:void(0);" }
+ },
+ [_vm._v("首页")]
+ )
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "router-link",
+ {
+ staticClass: "nav-item",
+ attrs: {
+ to: { name: "nodes.show" },
+ exact: "",
+ tag: "li"
+ }
+ },
+ [
+ _c(
+ "a",
+ {
+ staticClass: "nav-link",
+ attrs: { href: "javascript:void(0);" }
+ },
+ [_vm._v("节点")]
+ )
+ ]
+ ),
+ _vm._v(" "),
+ _vm._m(1),
+ _vm._v(" "),
+ _c("li", { staticClass: "nav-item" }, [_c("nav-search")], 1)
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "ul",
+ {
+ staticClass:
+ "navbar-nav ml-md-auto flex-row d-md-flex align-items-center justify-content-around"
+ },
+ [
+ _vm.isLogged
+ ? [
+ _c(
+ "li",
+ { staticClass: "nav-item" },
+ [
+ _c(
+ "router-link",
+ {
+ staticClass:
+ "text-20 btn btn-icon btn-transparent btn-light",
+ attrs: {
+ to: { name: "threads.create" },
+ exact: ""
+ }
+ },
+ [_c("plus-icon")],
+ 1
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "li",
+ { staticClass: "nav-item nav-item-icon" },
+ [
+ _c(
+ "router-link",
+ {
+ staticClass:
+ "text-20 btn btn-icon btn-transparent btn-light",
+ attrs: { to: { name: "notifications.show" } }
+ },
+ [_c("bell-icon")],
+ 1
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("li", { staticClass: "nav-item" }, [
+ _c("div", { staticClass: "btn-group" }, [
+ _c(
+ "a",
+ {
+ staticClass: "dropdown-toggle cursor-pointer",
+ attrs: {
+ href: "#",
+ "data-toggle": "dropdown",
+ "aria-haspopup": "true",
+ "aria-expanded": "false"
+ }
+ },
+ [
+ _c("img", {
+ staticClass: "avatar-40 mr-2",
+ attrs: { src: _vm.currentUser.avatar }
+ })
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "dropdown-menu dropdown-menu-right"
+ },
+ [
+ _c(
+ "div",
+ { staticClass: "dropdown-item" },
+ [
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "users.show",
+ params: {
+ username: _vm.currentUser.username
+ }
+ }
+ }
+ },
+ [
+ _c(
+ "div",
+ {
+ staticClass: "text-16 text-gray-30"
+ },
+ [_vm._v(_vm._s(_vm.currentUser.name))]
+ ),
+ _vm._v(" "),
+ _c("div", [
+ _vm._v(
+ "@" +
+ _vm._s(_vm.currentUser.username)
+ )
+ ])
+ ]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("div", { staticClass: "dropdown-divider" }),
+ _vm._v(" "),
+ _c(
+ "router-link",
+ {
+ staticClass: "dropdown-item",
+ attrs: {
+ to: {
+ name: "users.show",
+ params: {
+ username: _vm.currentUser.username
+ }
+ },
+ exact: ""
+ }
+ },
+ [
+ _c("account-icon", { staticClass: "mr-1" }),
+ _vm._v(
+ "\n 个人中心\n "
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "router-link",
+ {
+ staticClass: "dropdown-item",
+ attrs: {
+ to: { name: "user.profile" },
+ exact: ""
+ }
+ },
+ [
+ _c("account-edit-icon", {
+ staticClass: "mr-1"
+ }),
+ _vm._v(
+ "\n 编辑资料\n "
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("div", { staticClass: "dropdown-divider" }),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ staticClass: "dropdown-item",
+ attrs: { href: "javascript:void(0);" },
+ on: { click: _vm.logout }
+ },
+ [
+ _c("logout-variant", {
+ staticClass: "mr-1"
+ }),
+ _vm._v(
+ "\n 退出登录\n "
+ )
+ ],
+ 1
+ )
+ ],
+ 1
+ )
+ ])
+ ])
+ ]
+ : [
+ _c(
+ "router-link",
+ {
+ staticClass: "nav-item",
+ attrs: { to: { name: "auth.login" }, tag: "li" }
+ },
+ [
+ _c(
+ "a",
+ { attrs: { href: "javascript:void(0);" } },
+ [_vm._v("登录")]
+ )
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "router-link",
+ {
+ staticClass: "nav-item",
+ attrs: { to: { name: "auth.register" }, tag: "li" }
+ },
+ [
+ _c(
+ "a",
+ { attrs: { href: "javascript:void(0);" } },
+ [_vm._v("注册")]
+ )
+ ]
+ )
+ ]
+ ],
+ 2
+ )
+ ]
+ )
+ ],
+ 1
+ )
+ ])
+ ])
+}
+var staticRenderFns = [
+ function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "button",
+ {
+ staticClass: "navbar-toggler",
+ attrs: {
+ type: "button",
+ "data-toggle": "collapse",
+ "data-target": "#navbarSupportedContent",
+ "aria-controls": "navbarSupportedContent",
+ "aria-expanded": "false",
+ "aria-label": "Toggle navigation"
+ }
+ },
+ [_c("span", { staticClass: "navbar-toggler-icon" })]
+ )
+ },
+ function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("li", { staticClass: "nav-item" }, [
+ _c(
+ "a",
+ {
+ staticClass: "nav-link",
+ attrs: { href: "https://easywechat.com?utm_source=yike.io" }
+ },
+ [_vm._v("SDK")]
+ )
+ ])
+ }
+]
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/sidebar.vue?vue&type=template&id=19f8877c&":
+/*!*************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/sidebar.vue?vue&type=template&id=19f8877c& ***!
+ \*************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _vm._m(0)
+}
+var staticRenderFns = [
+ function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ {
+ staticClass: "border-right position-fixed h-100 bg-white",
+ attrs: { id: "sidebar-wrapper" }
+ },
+ [
+ _c("ul", { staticClass: "px-2" }, [
+ _c("li", { staticClass: "text-16 text-gray-40 py-2" }, [
+ _vm._v("数据统计")
+ ]),
+ _vm._v(" "),
+ _c("li", [
+ _c(
+ "div",
+ { staticClass: "text-14 font-weight-bold text-gray-40" },
+ [_vm._v("站点统计")]
+ ),
+ _vm._v(" "),
+ _c("ul", { staticClass: "text-12 px-2" }, [
+ _c("li", { staticClass: "d-flex justify-content-between py-1" }, [
+ _c("span", [_vm._v("总人数")]),
+ _vm._v(" "),
+ _c("span", [_vm._v("1000")])
+ ]),
+ _vm._v(" "),
+ _c("li", { staticClass: "d-flex justify-content-between py-1" }, [
+ _c("span", [_vm._v("总帖子数")]),
+ _vm._v(" "),
+ _c("span", [_vm._v("1000")])
+ ])
+ ])
+ ])
+ ])
+ ]
+ )
+ }
+]
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/root.vue?vue&type=template&id=32af413b&":
+/*!***********************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/root.vue?vue&type=template&id=32af413b& ***!
+ \***********************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ {
+ staticClass: "h-100",
+ class: { toggled: _vm.isToggled },
+ attrs: { id: "wrapper" }
+ },
+ [
+ _c(
+ "div",
+ {
+ staticClass: "w-100 position-absolute",
+ attrs: { id: "page-content-wrapper" }
+ },
+ [
+ _vm.shouldShowNavbar ? _c("navbar") : _vm._e(),
+ _vm._v(" "),
+ _vm.currentUser &&
+ _vm.currentUser.id &&
+ !_vm.currentUser.has_activated
+ ? _c(
+ "div",
+ {
+ staticClass: "alert alert-warning text-center m-0",
+ attrs: { role: "alert" }
+ },
+ [
+ _vm._v(
+ "\n 您的邮箱尚未验证,将影响你的正常使用。请先验证您的邮箱,如果未收到邮件,请点击\n "
+ ),
+ _c(
+ "a",
+ {
+ staticClass: "text-blue",
+ attrs: { href: "javascript:void(0)" },
+ on: { click: _vm.sendActiveMail }
+ },
+ [_vm._v("重新发送")]
+ ),
+ _vm._v("!\n ")
+ ]
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.$route.query["active-success"] && _vm.$route.query.type
+ ? [
+ _vm.$route.query.type == "register"
+ ? [
+ _vm.checkParams
+ ? _c(
+ "div",
+ {
+ staticClass:
+ "alert alert-success text-center m-0",
+ attrs: { role: "alert" }
+ },
+ [_vm._v("您的账号已激活!")]
+ )
+ : _c(
+ "div",
+ {
+ staticClass: "alert alert-danger text-center m-0",
+ attrs: { role: "alert" }
+ },
+ [
+ _vm._v(
+ "\n 邮箱验证失败,请\n "
+ ),
+ _c(
+ "a",
+ {
+ staticClass: "text-blue",
+ attrs: { href: "javascript:void(0)" },
+ on: { click: _vm.sendActiveMail }
+ },
+ [_vm._v("重新发送验证邮件")]
+ ),
+ _vm._v("!\n ")
+ ]
+ )
+ ]
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.$route.query.type == "email"
+ ? [
+ _vm.checkParams
+ ? _c(
+ "div",
+ {
+ staticClass:
+ "alert alert-success text-center m-0",
+ attrs: { role: "alert" }
+ },
+ [_vm._v("账号已修改邮箱!")]
+ )
+ : _c(
+ "div",
+ {
+ staticClass: "alert alert-danger text-center m-0",
+ attrs: { role: "alert" }
+ },
+ [
+ _vm._v("\n 验证失败!请\n "),
+ _c(
+ "router-link",
+ {
+ staticClass: "text-blue",
+ attrs: {
+ to: {
+ name: "user.account",
+ hash: "#edit-email"
+ }
+ }
+ },
+ [_vm._v("重新提交验证新邮箱")]
+ ),
+ _vm._v("!\n ")
+ ],
+ 1
+ )
+ ]
+ : _vm._e()
+ ]
+ : _vm._e(),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "main-content",
+ class: { "container my-3": _vm.withContainer }
+ },
+ [_c("router-view")],
+ 1
+ )
+ ],
+ 2
+ ),
+ _vm._v(" "),
+ _vm.isToggled
+ ? _c("div", {
+ staticClass: "position-absolute w-100 h-100 bg-white opacity-70",
+ on: { click: _vm.toggle }
+ })
+ : _vm._e(),
+ _vm._v(" "),
+ _c("div", { ref: "backToTopLayer", staticClass: "back-to-top" }, [
+ _c(
+ "a",
+ {
+ staticClass: "btn btn-icon btn-secondary text-20",
+ attrs: {
+ "data-placement": "top",
+ "data-toggle": "tooltip",
+ href: "javascript:",
+ title: "返回顶部"
+ },
+ on: { click: _vm.scrollToTop }
+ },
+ [_c("arrow-up-icon")],
+ 1
+ )
+ ])
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./src/components/nav-search.vue":
+/*!***************************************!*\
+ !*** ./src/components/nav-search.vue ***!
+ \***************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nav_search_vue_vue_type_template_id_28d942bc_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./nav-search.vue?vue&type=template&id=28d942bc&scoped=true& */ "./src/components/nav-search.vue?vue&type=template&id=28d942bc&scoped=true&");
+/* harmony import */ var _nav_search_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./nav-search.vue?vue&type=script&lang=js& */ "./src/components/nav-search.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _nav_search_vue_vue_type_style_index_0_id_28d942bc_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./nav-search.vue?vue&type=style&index=0&id=28d942bc&scoped=true&lang=scss& */ "./src/components/nav-search.vue?vue&type=style&index=0&id=28d942bc&scoped=true&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _nav_search_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _nav_search_vue_vue_type_template_id_28d942bc_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _nav_search_vue_vue_type_template_id_28d942bc_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ "28d942bc",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/nav-search.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/nav-search.vue?vue&type=script&lang=js&":
+/*!****************************************************************!*\
+ !*** ./src/components/nav-search.vue?vue&type=script&lang=js& ***!
+ \****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_nav_search_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./nav-search.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/nav-search.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_nav_search_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/nav-search.vue?vue&type=style&index=0&id=28d942bc&scoped=true&lang=scss&":
+/*!*************************************************************************************************!*\
+ !*** ./src/components/nav-search.vue?vue&type=style&index=0&id=28d942bc&scoped=true&lang=scss& ***!
+ \*************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_nav_search_vue_vue_type_style_index_0_id_28d942bc_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../node_modules/style-loader!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./nav-search.vue?vue&type=style&index=0&id=28d942bc&scoped=true&lang=scss& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/nav-search.vue?vue&type=style&index=0&id=28d942bc&scoped=true&lang=scss&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_nav_search_vue_vue_type_style_index_0_id_28d942bc_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_nav_search_vue_vue_type_style_index_0_id_28d942bc_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_nav_search_vue_vue_type_style_index_0_id_28d942bc_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_nav_search_vue_vue_type_style_index_0_id_28d942bc_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_nav_search_vue_vue_type_style_index_0_id_28d942bc_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/components/nav-search.vue?vue&type=template&id=28d942bc&scoped=true&":
+/*!**********************************************************************************!*\
+ !*** ./src/components/nav-search.vue?vue&type=template&id=28d942bc&scoped=true& ***!
+ \**********************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_nav_search_vue_vue_type_template_id_28d942bc_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./nav-search.vue?vue&type=template&id=28d942bc&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/nav-search.vue?vue&type=template&id=28d942bc&scoped=true&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_nav_search_vue_vue_type_template_id_28d942bc_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_nav_search_vue_vue_type_template_id_28d942bc_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/navbar.vue":
+/*!***********************************!*\
+ !*** ./src/components/navbar.vue ***!
+ \***********************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _navbar_vue_vue_type_template_id_688b5e20___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./navbar.vue?vue&type=template&id=688b5e20& */ "./src/components/navbar.vue?vue&type=template&id=688b5e20&");
+/* harmony import */ var _navbar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./navbar.vue?vue&type=script&lang=js& */ "./src/components/navbar.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _navbar_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./navbar.vue?vue&type=style&index=0&lang=scss& */ "./src/components/navbar.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _navbar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _navbar_vue_vue_type_template_id_688b5e20___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _navbar_vue_vue_type_template_id_688b5e20___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/navbar.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/navbar.vue?vue&type=script&lang=js&":
+/*!************************************************************!*\
+ !*** ./src/components/navbar.vue?vue&type=script&lang=js& ***!
+ \************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_navbar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./navbar.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/navbar.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_navbar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/navbar.vue?vue&type=style&index=0&lang=scss&":
+/*!*********************************************************************!*\
+ !*** ./src/components/navbar.vue?vue&type=style&index=0&lang=scss& ***!
+ \*********************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_navbar_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../node_modules/style-loader!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src??ref--7-3!../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../node_modules/vue-loader/lib??vue-loader-options!./navbar.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/navbar.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_navbar_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_navbar_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_navbar_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_navbar_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_navbar_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/components/navbar.vue?vue&type=template&id=688b5e20&":
+/*!******************************************************************!*\
+ !*** ./src/components/navbar.vue?vue&type=template&id=688b5e20& ***!
+ \******************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_navbar_vue_vue_type_template_id_688b5e20___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./navbar.vue?vue&type=template&id=688b5e20& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/navbar.vue?vue&type=template&id=688b5e20&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_navbar_vue_vue_type_template_id_688b5e20___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_navbar_vue_vue_type_template_id_688b5e20___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/sidebar.vue":
+/*!************************************!*\
+ !*** ./src/components/sidebar.vue ***!
+ \************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _sidebar_vue_vue_type_template_id_19f8877c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sidebar.vue?vue&type=template&id=19f8877c& */ "./src/components/sidebar.vue?vue&type=template&id=19f8877c&");
+/* harmony import */ var _sidebar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sidebar.vue?vue&type=script&lang=js& */ "./src/components/sidebar.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _sidebar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _sidebar_vue_vue_type_template_id_19f8877c___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _sidebar_vue_vue_type_template_id_19f8877c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/sidebar.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/sidebar.vue?vue&type=script&lang=js&":
+/*!*************************************************************!*\
+ !*** ./src/components/sidebar.vue?vue&type=script&lang=js& ***!
+ \*************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_sidebar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./sidebar.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/sidebar.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_sidebar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/sidebar.vue?vue&type=template&id=19f8877c&":
+/*!*******************************************************************!*\
+ !*** ./src/components/sidebar.vue?vue&type=template&id=19f8877c& ***!
+ \*******************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_sidebar_vue_vue_type_template_id_19f8877c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./sidebar.vue?vue&type=template&id=19f8877c& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/sidebar.vue?vue&type=template&id=19f8877c&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_sidebar_vue_vue_type_template_id_19f8877c___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_sidebar_vue_vue_type_template_id_19f8877c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/root.vue":
+/*!**********************!*\
+ !*** ./src/root.vue ***!
+ \**********************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _root_vue_vue_type_template_id_32af413b___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./root.vue?vue&type=template&id=32af413b& */ "./src/root.vue?vue&type=template&id=32af413b&");
+/* harmony import */ var _root_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./root.vue?vue&type=script&lang=js& */ "./src/root.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _root_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./root.vue?vue&type=style&index=0&lang=scss& */ "./src/root.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _root_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _root_vue_vue_type_template_id_32af413b___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _root_vue_vue_type_template_id_32af413b___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/root.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/root.vue?vue&type=script&lang=js&":
+/*!***********************************************!*\
+ !*** ./src/root.vue?vue&type=script&lang=js& ***!
+ \***********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_root_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../node_modules/babel-loader/lib??ref--4-0!../node_modules/vue-loader/lib??vue-loader-options!./root.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/root.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_root_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/root.vue?vue&type=style&index=0&lang=scss&":
+/*!********************************************************!*\
+ !*** ./src/root.vue?vue&type=style&index=0&lang=scss& ***!
+ \********************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_root_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../node_modules/style-loader!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src??ref--7-3!../node_modules/sass-loader/lib/loader.js??ref--7-4!../node_modules/vue-loader/lib??vue-loader-options!./root.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/root.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_root_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_root_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_root_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_root_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_root_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/root.vue?vue&type=template&id=32af413b&":
+/*!*****************************************************!*\
+ !*** ./src/root.vue?vue&type=template&id=32af413b& ***!
+ \*****************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_root_vue_vue_type_template_id_32af413b___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../node_modules/vue-loader/lib??vue-loader-options!./root.vue?vue&type=template&id=32af413b& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/root.vue?vue&type=template&id=32af413b&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_root_vue_vue_type_template_id_32af413b___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_root_vue_vue_type_template_id_32af413b___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/24.59458ba0db37c080c078.js b/public/24.59458ba0db37c080c078.js
new file mode 100644
index 00000000..42200271
--- /dev/null
+++ b/public/24.59458ba0db37c080c078.js
@@ -0,0 +1,1044 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[24],{
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "CheckIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Check icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "HeartIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Heart icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "TooltipOutlineIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Tooltip Outline icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=script&lang=js&":
+/*!******************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "VolumeHighIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Volume High icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=script&lang=js&":
+/*!******************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "VolumeMuteIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Volume Mute icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon check-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d: "M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon heart-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M12,21.35L10.55,20.03C5.4,15.36 2,12.27 2,8.5C2,5.41 4.42,3 7.5,3C9.24,3 10.91,3.81 12,5.08C13.09,3.81 14.76,3 16.5,3C19.58,3 22,5.41 22,8.5C22,12.27 18.6,15.36 13.45,20.03L12,21.35Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&":
+/*!********************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a& ***!
+ \********************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon tooltip-outline-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M4,2H20C21.1,2 22,2.9 22,4V16C22,17.1 21.1,18 20,18H16L12,22L8,18H4C2.9,18 2,17.1 2,16V4C2,2.9 2.9,2 4,2M4,4V16H8.83L12,19.17L15.17,16H20V4H4Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=template&id=ffdb55f0&":
+/*!****************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=template&id=ffdb55f0& ***!
+ \****************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon volume-high-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M14,3.23V5.29C16.89,6.15 19,8.83 19,12C19,15.17 16.89,17.84 14,18.7V20.77C18,19.86 21,16.28 21,12C21,7.72 18,4.14 14,3.23M16.5,12C16.5,10.23 15.5,8.71 14,7.97V16C15.5,15.29 16.5,13.76 16.5,12M3,9V15H7L12,20V4L7,9H3Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=template&id=1847b5ff&":
+/*!****************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=template&id=1847b5ff& ***!
+ \****************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon volume-mute-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M3,9H7L12,4V20L7,15H3V9M16.59,12L14,9.41L15.41,8L18,10.59L20.59,8L22,9.41L19.41,12L22,14.59L20.59,16L18,13.41L15.41,16L14,14.59L16.59,12Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
+/* globals __VUE_SSR_CONTEXT__ */
+
+// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
+// This module is a runtime utility for cleaner component module output and will
+// be included in the final webpack user bundle.
+
+function normalizeComponent (
+ scriptExports,
+ render,
+ staticRenderFns,
+ functionalTemplate,
+ injectStyles,
+ scopeId,
+ moduleIdentifier, /* server only */
+ shadowMode /* vue-cli only */
+) {
+ // Vue.extend constructor export interop
+ var options = typeof scriptExports === 'function'
+ ? scriptExports.options
+ : scriptExports
+
+ // render functions
+ if (render) {
+ options.render = render
+ options.staticRenderFns = staticRenderFns
+ options._compiled = true
+ }
+
+ // functional template
+ if (functionalTemplate) {
+ options.functional = true
+ }
+
+ // scopedId
+ if (scopeId) {
+ options._scopeId = 'data-v-' + scopeId
+ }
+
+ var hook
+ if (moduleIdentifier) { // server build
+ hook = function (context) {
+ // 2.3 injection
+ context =
+ context || // cached call
+ (this.$vnode && this.$vnode.ssrContext) || // stateful
+ (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
+ // 2.2 with runInNewContext: true
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
+ context = __VUE_SSR_CONTEXT__
+ }
+ // inject component styles
+ if (injectStyles) {
+ injectStyles.call(this, context)
+ }
+ // register component module identifier for async chunk inferrence
+ if (context && context._registeredComponents) {
+ context._registeredComponents.add(moduleIdentifier)
+ }
+ }
+ // used by ssr in case component is cached and beforeCreate
+ // never gets called
+ options._ssrRegister = hook
+ } else if (injectStyles) {
+ hook = shadowMode
+ ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
+ : injectStyles
+ }
+
+ if (hook) {
+ if (options.functional) {
+ // for template-only hot-reload because in that case the render fn doesn't
+ // go through the normalizer
+ options._injectStyles = hook
+ // register for functioal component in vue file
+ var originalRender = options.render
+ options.render = function renderWithStyleInjection (h, context) {
+ hook.call(context)
+ return originalRender(h, context)
+ }
+ } else {
+ // inject component registration as beforeCreate hook
+ var existing = options.beforeCreate
+ options.beforeCreate = existing
+ ? [].concat(existing, hook)
+ : [hook]
+ }
+ }
+
+ return {
+ exports: scriptExports,
+ options: options
+ }
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Check.vue":
+/*!**********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Check.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Check.vue?vue&type=template&id=7146728c& */ "./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&");
+/* harmony import */ var _Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Check.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Check.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Check.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Check.vue?vue&type=template&id=7146728c& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Heart.vue":
+/*!**********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Heart.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Heart.vue?vue&type=template&id=6577aeca& */ "./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca&");
+/* harmony import */ var _Heart_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Heart.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Heart_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Heart.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Heart_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Heart.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Heart_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Heart.vue?vue&type=template&id=6577aeca& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue":
+/*!*******************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue ***!
+ \*******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TooltipOutline.vue?vue&type=template&id=fff4072a& */ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&");
+/* harmony import */ var _TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TooltipOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/TooltipOutline.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./TooltipOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&":
+/*!**************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a& ***!
+ \**************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./TooltipOutline.vue?vue&type=template&id=fff4072a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/VolumeHigh.vue":
+/*!***************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/VolumeHigh.vue ***!
+ \***************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _VolumeHigh_vue_vue_type_template_id_ffdb55f0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VolumeHigh.vue?vue&type=template&id=ffdb55f0& */ "./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=template&id=ffdb55f0&");
+/* harmony import */ var _VolumeHigh_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VolumeHigh.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _VolumeHigh_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _VolumeHigh_vue_vue_type_template_id_ffdb55f0___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _VolumeHigh_vue_vue_type_template_id_ffdb55f0___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/VolumeHigh.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_VolumeHigh_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./VolumeHigh.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_VolumeHigh_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=template&id=ffdb55f0&":
+/*!**********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=template&id=ffdb55f0& ***!
+ \**********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_VolumeHigh_vue_vue_type_template_id_ffdb55f0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./VolumeHigh.vue?vue&type=template&id=ffdb55f0& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeHigh.vue?vue&type=template&id=ffdb55f0&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_VolumeHigh_vue_vue_type_template_id_ffdb55f0___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_VolumeHigh_vue_vue_type_template_id_ffdb55f0___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/VolumeMute.vue":
+/*!***************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/VolumeMute.vue ***!
+ \***************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _VolumeMute_vue_vue_type_template_id_1847b5ff___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VolumeMute.vue?vue&type=template&id=1847b5ff& */ "./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=template&id=1847b5ff&");
+/* harmony import */ var _VolumeMute_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VolumeMute.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _VolumeMute_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _VolumeMute_vue_vue_type_template_id_1847b5ff___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _VolumeMute_vue_vue_type_template_id_1847b5ff___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/VolumeMute.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_VolumeMute_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./VolumeMute.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_VolumeMute_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=template&id=1847b5ff&":
+/*!**********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=template&id=1847b5ff& ***!
+ \**********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_VolumeMute_vue_vue_type_template_id_1847b5ff___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./VolumeMute.vue?vue&type=template&id=1847b5ff& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/VolumeMute.vue?vue&type=template&id=1847b5ff&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_VolumeMute_vue_vue_type_template_id_1847b5ff___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_VolumeMute_vue_vue_type_template_id_1847b5ff___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/25.d87a38ad5bca1c24d4e3.js b/public/25.d87a38ad5bca1c24d4e3.js
new file mode 100644
index 00000000..93338487
--- /dev/null
+++ b/public/25.d87a38ad5bca1c24d4e3.js
@@ -0,0 +1,1251 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[25],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/new-users.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/new-users.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $components_user_media__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $components/user-media */ "./src/components/user-media.vue");
+/* harmony import */ var $icons_ArrowRight__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/ArrowRight */ "./node_modules/vue-material-design-icons/ArrowRight.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'NewUsers',
+ components: {
+ UserMedia: $components_user_media__WEBPACK_IMPORTED_MODULE_0__["default"],
+ ArrowRight: $icons_ArrowRight__WEBPACK_IMPORTED_MODULE_1__["default"]
+ },
+ data: function data() {
+ return {
+ users: []
+ };
+ },
+ methods: {
+ loadUsers: function loadUsers() {
+ var _this = this;
+
+ this.$http.get('users?latest=1&limit=12').then(function (users) {
+ return _this.users = users.data;
+ });
+ }
+ },
+ mounted: function mounted() {
+ this.loadUsers();
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-locked.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-locked.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $icons_AccountOff__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $icons/AccountOff */ "./node_modules/vue-material-design-icons/AccountOff.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'user-locked',
+ components: {
+ AccountOffIcon: $icons_AccountOff__WEBPACK_IMPORTED_MODULE_0__["default"]
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-ranking.vue?vue&type=script&lang=js&":
+/*!**************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-ranking.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $components_user_media__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $components/user-media */ "./src/components/user-media.vue");
+/* harmony import */ var $icons_ArrowRight__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/ArrowRight */ "./node_modules/vue-material-design-icons/ArrowRight.vue");
+/* harmony import */ var $icons_Check__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/Check */ "./node_modules/vue-material-design-icons/Check.vue");
+/* harmony import */ var $icons_Plus__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $icons/Plus */ "./node_modules/vue-material-design-icons/Plus.vue");
+/* harmony import */ var $components_buttons_follow_btn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! $components/buttons/follow-btn */ "./src/components/buttons/follow-btn.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'NewUsers',
+ components: {
+ FollowBtn: $components_buttons_follow_btn__WEBPACK_IMPORTED_MODULE_4__["default"],
+ UserMedia: $components_user_media__WEBPACK_IMPORTED_MODULE_0__["default"],
+ ArrowRightIcon: $icons_ArrowRight__WEBPACK_IMPORTED_MODULE_1__["default"],
+ CheckIcon: $icons_Check__WEBPACK_IMPORTED_MODULE_2__["default"],
+ PlusIcon: $icons_Plus__WEBPACK_IMPORTED_MODULE_3__["default"]
+ },
+ data: function data() {
+ return {
+ users: []
+ };
+ },
+ methods: {
+ loadUsers: function loadUsers() {
+ var _this = this;
+
+ this.$http.get('users?limit=10').then(function (users) {
+ return _this.users = users.data;
+ });
+ }
+ },
+ mounted: function mounted() {
+ this.loadUsers();
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/show.vue?vue&type=script&lang=js&":
+/*!*********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/show.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js");
+/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dayjs */ "./node_modules/dayjs/dayjs.min.js");
+/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+/* harmony import */ var $components_hot_tags__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $components/hot-tags */ "./src/components/hot-tags.vue");
+/* harmony import */ var $components_user_ranking__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! $components/user-ranking */ "./src/components/user-ranking.vue");
+/* harmony import */ var $components_new_users__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! $components/new-users */ "./src/components/new-users.vue");
+/* harmony import */ var $components_buttons_follow_btn__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! $components/buttons/follow-btn */ "./src/components/buttons/follow-btn.vue");
+/* harmony import */ var $icons_MapMarker__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! $icons/MapMarker */ "./node_modules/vue-material-design-icons/MapMarker.vue");
+/* harmony import */ var $icons_Domain__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! $icons/Domain */ "./node_modules/vue-material-design-icons/Domain.vue");
+/* harmony import */ var $icons_Link__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! $icons/Link */ "./node_modules/vue-material-design-icons/Link.vue");
+/* harmony import */ var $icons_AccountOff__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! $icons/AccountOff */ "./node_modules/vue-material-design-icons/AccountOff.vue");
+/* harmony import */ var $icons_CalendarCheck__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! $icons/CalendarCheck */ "./node_modules/vue-material-design-icons/CalendarCheck.vue");
+/* harmony import */ var $icons_AccountTie__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! $icons/AccountTie */ "./node_modules/vue-material-design-icons/AccountTie.vue");
+/* harmony import */ var $components_user_social_btns__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! $components/user-social-btns */ "./src/components/user-social-btns.vue");
+/* harmony import */ var $components_user_locked__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! $components/user-locked */ "./src/components/user-locked.vue");
+
+
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'show',
+ components: {
+ UserLocked: $components_user_locked__WEBPACK_IMPORTED_MODULE_14__["default"],
+ FollowBtn: $components_buttons_follow_btn__WEBPACK_IMPORTED_MODULE_6__["default"],
+ DomainIcon: $icons_Domain__WEBPACK_IMPORTED_MODULE_8__["default"],
+ CalendarCheckIcon: $icons_CalendarCheck__WEBPACK_IMPORTED_MODULE_11__["default"],
+ LinkIcon: $icons_Link__WEBPACK_IMPORTED_MODULE_9__["default"],
+ AdminIcon: $icons_AccountTie__WEBPACK_IMPORTED_MODULE_12__["default"],
+ AccountOffIcon: $icons_AccountOff__WEBPACK_IMPORTED_MODULE_10__["default"],
+ MapMarkerIcon: $icons_MapMarker__WEBPACK_IMPORTED_MODULE_7__["default"],
+ HotTags: $components_hot_tags__WEBPACK_IMPORTED_MODULE_3__["default"],
+ UserRanking: $components_user_ranking__WEBPACK_IMPORTED_MODULE_4__["default"],
+ NewUsers: $components_new_users__WEBPACK_IMPORTED_MODULE_5__["default"],
+ UserSocialBtns: $components_user_social_btns__WEBPACK_IMPORTED_MODULE_13__["default"]
+ },
+ data: function data() {
+ return {
+ user: {},
+ navFixed: false
+ };
+ },
+ computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_2__["mapGetters"])(['currentUser'])),
+ beforeRouteUpdate: function beforeRouteUpdate(to, from, next) {
+ if (to.params.username !== from.params.username) {
+ this.getUser(to.params.username);
+ }
+
+ next();
+ },
+ created: function created() {
+ this.getUser(this.$route.params.username);
+ this.$nextTick(this.registerEventListener);
+ },
+ methods: {
+ getUser: function () {
+ var _getUser = _asyncToGenerator(
+ /*#__PURE__*/
+ _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee(username) {
+ var _this = this;
+
+ return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ username = username || this.$route.params.username;
+ _context.next = 3;
+ return this.$http.get("users/".concat(username)).catch(function () {
+ _this.$router.replace({
+ name: 'pages.not-found'
+ });
+ });
+
+ case 3:
+ this.user = _context.sent;
+
+ case 4:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, this);
+ }));
+
+ function getUser(_x) {
+ return _getUser.apply(this, arguments);
+ }
+
+ return getUser;
+ }(),
+ toggleStatus: function toggleStatus(timestamp) {
+ var _this2 = this;
+
+ this.user[timestamp] = this.user[timestamp] ? null : dayjs__WEBPACK_IMPORTED_MODULE_1___default()().format('YYYY-MM-DD HH:mm:ss');
+ this.$http.patch("users/".concat(this.user.username), this.user).then(function () {
+ _this2.$message.success('搞定!');
+
+ _this2.getUser();
+ });
+ },
+ registerEventListener: function registerEventListener() {
+ var _this3 = this;
+
+ var vm = this;
+ window.addEventListener('scroll', function () {
+ if (vm.$route.name.substr(0, 5) === 'users') {
+ var top = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
+ _this3.navFixed = top >= document.querySelector('.user-show-navbar').offsetTop;
+ }
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/show.vue?vue&type=style&index=0&id=192747c5&scoped=true&lang=scss&":
+/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/show.vue?vue&type=style&index=0&id=192747c5&scoped=true&lang=scss& ***!
+ \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, ".page-user-show .bg-image[data-v-192747c5] {\n overflow: hidden;\n}\n.page-user-show .bg-image img[data-v-192747c5] {\n width: 100%;\n height: auto;\n}\n.page-user-show .page-header[data-v-192747c5] {\n min-height: 40vh;\n overflow-y: visible;\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n}\n.page-user-show .user-show-navbar[data-v-192747c5] {\n position: -webkit-sticky;\n position: sticky;\n top: -1px;\n z-index: 999;\n}\n.page-user-show .user-show-navbar .nav[data-v-192747c5] {\n position: relative;\n background: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.page-user-show .avatar[data-v-192747c5] {\n border: 2px solid #fff;\n}\n.page-user-show .user-profile[data-v-192747c5] {\n z-index: 2;\n text-shadow: 1px 1px 10px #3d465e;\n}\n@media (max-width: 768px) {\n.page-user-show .user-profile[data-v-192747c5] {\n text-align: center;\n}\n.page-user-show .user-social-btns[data-v-192747c5] {\n -webkit-box-pack: center !important;\n -ms-flex-pack: center !important;\n justify-content: center !important;\n}\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/show.vue?vue&type=style&index=0&id=192747c5&scoped=true&lang=scss&":
+/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/show.vue?vue&type=style&index=0&id=192747c5&scoped=true&lang=scss& ***!
+ \***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src??ref--7-3!../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../node_modules/vue-loader/lib??vue-loader-options!./show.vue?vue&type=style&index=0&id=192747c5&scoped=true&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/show.vue?vue&type=style&index=0&id=192747c5&scoped=true&lang=scss&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/new-users.vue?vue&type=template&id=667f163b&":
+/*!***************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/new-users.vue?vue&type=template&id=667f163b& ***!
+ \***************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box box-flush text-gray-50" }, [
+ _vm._m(0),
+ _vm._v(" "),
+ _c(
+ "ul",
+ { staticClass: "plan-list px-2 pb-2" },
+ _vm._l(_vm.users, function(item) {
+ return _c("user-media", {
+ key: item.id,
+ attrs: { type: "vertical w25", user: item }
+ })
+ }),
+ 1
+ )
+ ])
+}
+var staticRenderFns = [
+ function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box-body" }, [
+ _c(
+ "div",
+ { staticClass: "d-flex align-items-center justify-content-between" },
+ [_c("div", { staticClass: "text-13" }, [_vm._v("最新用户")])]
+ )
+ ])
+ }
+]
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-locked.vue?vue&type=template&id=88e03128&":
+/*!*****************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-locked.vue?vue&type=template&id=88e03128& ***!
+ \*****************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box text-center text-danger" }, [
+ _c("h1", [_c("account-off-icon")], 1),
+ _vm._v(" 该账户已被冻结\n")
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-ranking.vue?vue&type=template&id=1e61b644&":
+/*!******************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-ranking.vue?vue&type=template&id=1e61b644& ***!
+ \******************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box text-gray-50" }, [
+ _vm._m(0),
+ _vm._v(" "),
+ _c(
+ "ul",
+ { staticClass: "plan-list" },
+ _vm._l(_vm.users, function(item) {
+ return _c(
+ "user-media",
+ {
+ key: item.id,
+ staticClass: "mb-2 d-flex align-items-center",
+ attrs: { user: item }
+ },
+ [
+ _c(
+ "template",
+ { slot: "appends" },
+ [
+ _c("follow-btn", {
+ staticClass: "ml-auto",
+ attrs: { item: item, simple: "" }
+ })
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("template", { slot: "description" }, [
+ _c("div", { staticClass: "text-gray-70 text-12" }, [
+ _vm._v(_vm._s(item.created_at_timeago))
+ ])
+ ])
+ ],
+ 2
+ )
+ }),
+ 1
+ )
+ ])
+}
+var staticRenderFns = [
+ function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ {
+ staticClass:
+ "box-heading d-flex align-items-center justify-content-between"
+ },
+ [_c("div", { staticClass: "text-13" }, [_vm._v("活跃用户")])]
+ )
+ }
+]
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/show.vue?vue&type=template&id=192747c5&scoped=true&":
+/*!*************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/show.vue?vue&type=template&id=192747c5&scoped=true& ***!
+ \*************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _vm.user.id
+ ? _c("div", { staticClass: "page-user-show" }, [
+ _c(
+ "header",
+ {
+ staticClass: "page-header d-flex align-items-end bg-grey-blue py-2",
+ staticStyle: { "background-image": "url(/banners/shanghai.jpg)" }
+ },
+ [
+ _c(
+ "div",
+ {
+ staticClass:
+ "user-profile container position-relative w-100 text-white p-2 d-md-flex flex-row align-items-center"
+ },
+ [
+ _c("img", {
+ staticClass: "avatar avatar-120",
+ attrs: { src: _vm.user.avatar, alt: "User avatar" }
+ }),
+ _vm._v(" "),
+ _c("div", { staticClass: "ml-md-3" }, [
+ _c("h1", { staticClass: "mt-2 mb-0" }, [
+ _vm._v(
+ "\n " + _vm._s(_vm.user.name) + "\n "
+ ),
+ _c(
+ "a",
+ {
+ staticClass:
+ "ml-md-1 d-block d-md-inline text-gray-90 text-16"
+ },
+ [_vm._v("@" + _vm._s(_vm.user.username))]
+ )
+ ]),
+ _vm._v(" "),
+ !_vm.user.banned_at
+ ? _c("div", { staticClass: "my-1" }, [
+ _vm._v(_vm._s(_vm.user.bio))
+ ])
+ : _vm._e(),
+ _vm._v(" "),
+ !_vm.user.banned_at
+ ? _c(
+ "div",
+ {
+ staticClass:
+ "extends text-white d-none d-md-block d-lg-flex"
+ },
+ [
+ _vm.user.extends.location
+ ? _c(
+ "div",
+ { staticClass: "mr-1" },
+ [
+ _c("map-marker-icon", {
+ staticClass: "mr-1"
+ }),
+ _vm._v(
+ "\n " +
+ _vm._s(_vm.user.extends.location) +
+ "\n "
+ )
+ ],
+ 1
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.user.extends.company
+ ? _c(
+ "div",
+ { staticClass: "mr-1" },
+ [
+ _c("domain-icon", { staticClass: "mr-1" }),
+ _vm._v(
+ "\n " +
+ _vm._s(_vm.user.extends.company) +
+ "\n "
+ )
+ ],
+ 1
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.user.extends.home_url
+ ? _c(
+ "div",
+ { staticClass: "mr-1" },
+ [
+ _c("link-icon", { staticClass: "mr-1" }),
+ _vm._v(" "),
+ _c(
+ "a",
+ {
+ staticClass: "text-white",
+ attrs: { href: _vm.user.extends.home_url }
+ },
+ [_vm._v(_vm._s(_vm.user.extends.home_url))]
+ )
+ ],
+ 1
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "mr-1" },
+ [
+ _c("calendar-check-icon", {
+ staticClass: "mr-1"
+ }),
+ _vm._v(
+ "\n 加入于 " +
+ _vm._s(_vm.user.created_at_timeago) +
+ "\n "
+ )
+ ],
+ 1
+ )
+ ]
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "pt-2" },
+ [
+ _c("user-social-btns", {
+ attrs: { user: _vm.user, spacing: 2 }
+ })
+ ],
+ 1
+ )
+ ]),
+ _vm._v(" "),
+ _vm.currentUser &&
+ _vm.currentUser.id != _vm.user.id &&
+ !_vm.user.banned_at
+ ? [
+ _c("follow-btn", {
+ staticClass: "d-inline-block ml-md-auto",
+ attrs: { item: _vm.user }
+ })
+ ]
+ : _vm._e()
+ ],
+ 2
+ )
+ ]
+ ),
+ _vm._v(" "),
+ _c("div", { staticClass: "user-show-navbar bg-white" }, [
+ _c("div", { staticClass: "container" }, [
+ _c(
+ "div",
+ {
+ staticClass:
+ "nav nav-tab-line text-center shadow-6 align-items-stretch"
+ },
+ [
+ _c(
+ "div",
+ { staticClass: "nav-item" },
+ [
+ _c(
+ "router-link",
+ {
+ staticClass: "nav-link",
+ attrs: { to: { name: "users.show" }, exact: "" }
+ },
+ [_vm._v("最新动态")]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "nav-item" },
+ [
+ _c(
+ "router-link",
+ {
+ staticClass: "nav-link",
+ attrs: { to: { name: "users.threads" }, exact: "" }
+ },
+ [
+ _vm._v("\n 讨论\n "),
+ _c("span", { staticClass: "text-gray-70 pl-1" }, [
+ _vm._v(_vm._s(_vm.user.cache.threads_count))
+ ])
+ ]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "nav-item" },
+ [
+ _c(
+ "router-link",
+ {
+ staticClass: "nav-link",
+ attrs: { to: { name: "users.following" }, exact: "" }
+ },
+ [
+ _vm._v("\n 关注\n "),
+ _c("span", { staticClass: "text-gray-70 pl-1" }, [
+ _vm._v(_vm._s(_vm.user.cache.followings_count))
+ ])
+ ]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "nav-item" },
+ [
+ _c(
+ "router-link",
+ {
+ staticClass: "nav-link",
+ attrs: { to: { name: "users.followers" }, exact: "" }
+ },
+ [
+ _vm._v("\n 粉丝\n "),
+ _c("span", { staticClass: "text-gray-70 pl-1" }, [
+ _vm._v(_vm._s(_vm.user.cache.followers_count))
+ ])
+ ]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _vm.currentUser.is_admin
+ ? _c("div", { staticClass: "nav-item ml-auto" }, [
+ _c("div", { staticClass: "btn-group" }, [
+ _c(
+ "button",
+ {
+ staticClass:
+ "btn btn-link nav-link dropdown-toggle",
+ attrs: {
+ type: "button",
+ "data-toggle": "dropdown",
+ "aria-haspopup": "true",
+ "aria-expanded": "false"
+ }
+ },
+ [_c("admin-icon"), _vm._v("管理\n ")],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "dropdown-menu dropdown-menu-right" },
+ [
+ _c(
+ "button",
+ {
+ staticClass: "dropdown-item",
+ class: { "text-danger": !_vm.user.banned_at },
+ attrs: { type: "button" },
+ on: {
+ click: function($event) {
+ return _vm.toggleStatus("banned_at")
+ }
+ }
+ },
+ [
+ _c("account-off-icon", { staticClass: "mr-1" }),
+ _vm._v(
+ "\n " +
+ _vm._s(
+ _vm.user.banned_at ? "取消冻结" : "冻结"
+ ) +
+ "\n "
+ )
+ ],
+ 1
+ )
+ ]
+ )
+ ])
+ ])
+ : _vm._e()
+ ]
+ )
+ ])
+ ]),
+ _vm._v(" "),
+ !_vm.user.banned_at
+ ? _c("div", { staticClass: "container pt-4" }, [
+ _c("div", { staticClass: "row" }, [
+ _c("div", { staticClass: "col-lg-9" }, [_c("router-view")], 1),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "col-lg-3" },
+ [
+ _c("hot-tags"),
+ _vm._v(" "),
+ _c("new-users", { staticClass: "mt-2" }),
+ _vm._v(" "),
+ _c("user-ranking", { staticClass: "mt-2" })
+ ],
+ 1
+ )
+ ])
+ ])
+ : _c("div", { staticClass: "container mt-4" }, [_c("user-locked")], 1)
+ ])
+ : _vm._e()
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./src/components/new-users.vue":
+/*!**************************************!*\
+ !*** ./src/components/new-users.vue ***!
+ \**************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _new_users_vue_vue_type_template_id_667f163b___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./new-users.vue?vue&type=template&id=667f163b& */ "./src/components/new-users.vue?vue&type=template&id=667f163b&");
+/* harmony import */ var _new_users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./new-users.vue?vue&type=script&lang=js& */ "./src/components/new-users.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _new_users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _new_users_vue_vue_type_template_id_667f163b___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _new_users_vue_vue_type_template_id_667f163b___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/new-users.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/new-users.vue?vue&type=script&lang=js&":
+/*!***************************************************************!*\
+ !*** ./src/components/new-users.vue?vue&type=script&lang=js& ***!
+ \***************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_new_users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./new-users.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/new-users.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_new_users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/new-users.vue?vue&type=template&id=667f163b&":
+/*!*********************************************************************!*\
+ !*** ./src/components/new-users.vue?vue&type=template&id=667f163b& ***!
+ \*********************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_new_users_vue_vue_type_template_id_667f163b___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./new-users.vue?vue&type=template&id=667f163b& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/new-users.vue?vue&type=template&id=667f163b&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_new_users_vue_vue_type_template_id_667f163b___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_new_users_vue_vue_type_template_id_667f163b___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/user-locked.vue":
+/*!****************************************!*\
+ !*** ./src/components/user-locked.vue ***!
+ \****************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _user_locked_vue_vue_type_template_id_88e03128___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./user-locked.vue?vue&type=template&id=88e03128& */ "./src/components/user-locked.vue?vue&type=template&id=88e03128&");
+/* harmony import */ var _user_locked_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./user-locked.vue?vue&type=script&lang=js& */ "./src/components/user-locked.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _user_locked_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _user_locked_vue_vue_type_template_id_88e03128___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _user_locked_vue_vue_type_template_id_88e03128___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/user-locked.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/user-locked.vue?vue&type=script&lang=js&":
+/*!*****************************************************************!*\
+ !*** ./src/components/user-locked.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_locked_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./user-locked.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-locked.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_locked_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/user-locked.vue?vue&type=template&id=88e03128&":
+/*!***********************************************************************!*\
+ !*** ./src/components/user-locked.vue?vue&type=template&id=88e03128& ***!
+ \***********************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_locked_vue_vue_type_template_id_88e03128___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./user-locked.vue?vue&type=template&id=88e03128& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-locked.vue?vue&type=template&id=88e03128&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_locked_vue_vue_type_template_id_88e03128___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_locked_vue_vue_type_template_id_88e03128___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/user-ranking.vue":
+/*!*****************************************!*\
+ !*** ./src/components/user-ranking.vue ***!
+ \*****************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _user_ranking_vue_vue_type_template_id_1e61b644___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./user-ranking.vue?vue&type=template&id=1e61b644& */ "./src/components/user-ranking.vue?vue&type=template&id=1e61b644&");
+/* harmony import */ var _user_ranking_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./user-ranking.vue?vue&type=script&lang=js& */ "./src/components/user-ranking.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _user_ranking_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _user_ranking_vue_vue_type_template_id_1e61b644___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _user_ranking_vue_vue_type_template_id_1e61b644___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/user-ranking.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/user-ranking.vue?vue&type=script&lang=js&":
+/*!******************************************************************!*\
+ !*** ./src/components/user-ranking.vue?vue&type=script&lang=js& ***!
+ \******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_ranking_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./user-ranking.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-ranking.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_ranking_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/user-ranking.vue?vue&type=template&id=1e61b644&":
+/*!************************************************************************!*\
+ !*** ./src/components/user-ranking.vue?vue&type=template&id=1e61b644& ***!
+ \************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_ranking_vue_vue_type_template_id_1e61b644___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./user-ranking.vue?vue&type=template&id=1e61b644& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-ranking.vue?vue&type=template&id=1e61b644&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_ranking_vue_vue_type_template_id_1e61b644___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_ranking_vue_vue_type_template_id_1e61b644___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/users/show.vue":
+/*!************************************!*\
+ !*** ./src/modules/users/show.vue ***!
+ \************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _show_vue_vue_type_template_id_192747c5_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./show.vue?vue&type=template&id=192747c5&scoped=true& */ "./src/modules/users/show.vue?vue&type=template&id=192747c5&scoped=true&");
+/* harmony import */ var _show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./show.vue?vue&type=script&lang=js& */ "./src/modules/users/show.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _show_vue_vue_type_style_index_0_id_192747c5_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./show.vue?vue&type=style&index=0&id=192747c5&scoped=true&lang=scss& */ "./src/modules/users/show.vue?vue&type=style&index=0&id=192747c5&scoped=true&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _show_vue_vue_type_template_id_192747c5_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _show_vue_vue_type_template_id_192747c5_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ "192747c5",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/users/show.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/users/show.vue?vue&type=script&lang=js&":
+/*!*************************************************************!*\
+ !*** ./src/modules/users/show.vue?vue&type=script&lang=js& ***!
+ \*************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./show.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/show.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/users/show.vue?vue&type=style&index=0&id=192747c5&scoped=true&lang=scss&":
+/*!**********************************************************************************************!*\
+ !*** ./src/modules/users/show.vue?vue&type=style&index=0&id=192747c5&scoped=true&lang=scss& ***!
+ \**********************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_style_index_0_id_192747c5_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../../node_modules/style-loader!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src??ref--7-3!../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../node_modules/vue-loader/lib??vue-loader-options!./show.vue?vue&type=style&index=0&id=192747c5&scoped=true&lang=scss& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/show.vue?vue&type=style&index=0&id=192747c5&scoped=true&lang=scss&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_style_index_0_id_192747c5_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_style_index_0_id_192747c5_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_style_index_0_id_192747c5_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_style_index_0_id_192747c5_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_style_index_0_id_192747c5_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/modules/users/show.vue?vue&type=template&id=192747c5&scoped=true&":
+/*!*******************************************************************************!*\
+ !*** ./src/modules/users/show.vue?vue&type=template&id=192747c5&scoped=true& ***!
+ \*******************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_template_id_192747c5_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./show.vue?vue&type=template&id=192747c5&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/show.vue?vue&type=template&id=192747c5&scoped=true&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_template_id_192747c5_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_template_id_192747c5_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/26.b8030d901505289d5697.js b/public/26.b8030d901505289d5697.js
new file mode 100644
index 00000000..ba82e558
--- /dev/null
+++ b/public/26.b8030d901505289d5697.js
@@ -0,0 +1,858 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[26],{
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ArrowLeft.vue?vue&type=script&lang=js&":
+/*!*****************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/ArrowLeft.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "ArrowLeftIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Arrow Left icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue?vue&type=script&lang=js&":
+/*!******************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "FileDocumentBoxOutlineIcon",
+ props: {
+ title: {
+ type: String,
+ default: "File Document Box Outline icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "HeartIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Heart icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "TooltipOutlineIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Tooltip Outline icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ArrowLeft.vue?vue&type=template&id=b9ea0198&":
+/*!***************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/ArrowLeft.vue?vue&type=template&id=b9ea0198& ***!
+ \***************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon arrow-left-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue?vue&type=template&id=6a70bc3a&":
+/*!****************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue?vue&type=template&id=6a70bc3a& ***!
+ \****************************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon file-document-box-outline-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M5,3C3.89,3 3,3.89 3,5V19C3,20.11 3.89,21 5,21H19C20.11,21 21,20.11 21,19V5C21,3.89 20.11,3 19,3H5M5,5H19V19H5V5M7,7V9H17V7H7M7,11V13H17V11H7M7,15V17H14V15H7Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon heart-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M12,21.35L10.55,20.03C5.4,15.36 2,12.27 2,8.5C2,5.41 4.42,3 7.5,3C9.24,3 10.91,3.81 12,5.08C13.09,3.81 14.76,3 16.5,3C19.58,3 22,5.41 22,8.5C22,12.27 18.6,15.36 13.45,20.03L12,21.35Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&":
+/*!********************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a& ***!
+ \********************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon tooltip-outline-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M4,2H20C21.1,2 22,2.9 22,4V16C22,17.1 21.1,18 20,18H16L12,22L8,18H4C2.9,18 2,17.1 2,16V4C2,2.9 2.9,2 4,2M4,4V16H8.83L12,19.17L15.17,16H20V4H4Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
+/* globals __VUE_SSR_CONTEXT__ */
+
+// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
+// This module is a runtime utility for cleaner component module output and will
+// be included in the final webpack user bundle.
+
+function normalizeComponent (
+ scriptExports,
+ render,
+ staticRenderFns,
+ functionalTemplate,
+ injectStyles,
+ scopeId,
+ moduleIdentifier, /* server only */
+ shadowMode /* vue-cli only */
+) {
+ // Vue.extend constructor export interop
+ var options = typeof scriptExports === 'function'
+ ? scriptExports.options
+ : scriptExports
+
+ // render functions
+ if (render) {
+ options.render = render
+ options.staticRenderFns = staticRenderFns
+ options._compiled = true
+ }
+
+ // functional template
+ if (functionalTemplate) {
+ options.functional = true
+ }
+
+ // scopedId
+ if (scopeId) {
+ options._scopeId = 'data-v-' + scopeId
+ }
+
+ var hook
+ if (moduleIdentifier) { // server build
+ hook = function (context) {
+ // 2.3 injection
+ context =
+ context || // cached call
+ (this.$vnode && this.$vnode.ssrContext) || // stateful
+ (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
+ // 2.2 with runInNewContext: true
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
+ context = __VUE_SSR_CONTEXT__
+ }
+ // inject component styles
+ if (injectStyles) {
+ injectStyles.call(this, context)
+ }
+ // register component module identifier for async chunk inferrence
+ if (context && context._registeredComponents) {
+ context._registeredComponents.add(moduleIdentifier)
+ }
+ }
+ // used by ssr in case component is cached and beforeCreate
+ // never gets called
+ options._ssrRegister = hook
+ } else if (injectStyles) {
+ hook = shadowMode
+ ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
+ : injectStyles
+ }
+
+ if (hook) {
+ if (options.functional) {
+ // for template-only hot-reload because in that case the render fn doesn't
+ // go through the normalizer
+ options._injectStyles = hook
+ // register for functioal component in vue file
+ var originalRender = options.render
+ options.render = function renderWithStyleInjection (h, context) {
+ hook.call(context)
+ return originalRender(h, context)
+ }
+ } else {
+ // inject component registration as beforeCreate hook
+ var existing = options.beforeCreate
+ options.beforeCreate = existing
+ ? [].concat(existing, hook)
+ : [hook]
+ }
+ }
+
+ return {
+ exports: scriptExports,
+ options: options
+ }
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ArrowLeft.vue":
+/*!**************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ArrowLeft.vue ***!
+ \**************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _ArrowLeft_vue_vue_type_template_id_b9ea0198___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ArrowLeft.vue?vue&type=template&id=b9ea0198& */ "./node_modules/vue-material-design-icons/ArrowLeft.vue?vue&type=template&id=b9ea0198&");
+/* harmony import */ var _ArrowLeft_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ArrowLeft.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/ArrowLeft.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _ArrowLeft_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _ArrowLeft_vue_vue_type_template_id_b9ea0198___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _ArrowLeft_vue_vue_type_template_id_b9ea0198___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/ArrowLeft.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ArrowLeft.vue?vue&type=script&lang=js&":
+/*!***************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ArrowLeft.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_ArrowLeft_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./ArrowLeft.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ArrowLeft.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_ArrowLeft_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/ArrowLeft.vue?vue&type=template&id=b9ea0198&":
+/*!*********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/ArrowLeft.vue?vue&type=template&id=b9ea0198& ***!
+ \*********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ArrowLeft_vue_vue_type_template_id_b9ea0198___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./ArrowLeft.vue?vue&type=template&id=b9ea0198& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/ArrowLeft.vue?vue&type=template&id=b9ea0198&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ArrowLeft_vue_vue_type_template_id_b9ea0198___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_ArrowLeft_vue_vue_type_template_id_b9ea0198___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue":
+/*!***************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue ***!
+ \***************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _FileDocumentBoxOutline_vue_vue_type_template_id_6a70bc3a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FileDocumentBoxOutline.vue?vue&type=template&id=6a70bc3a& */ "./node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue?vue&type=template&id=6a70bc3a&");
+/* harmony import */ var _FileDocumentBoxOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FileDocumentBoxOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _FileDocumentBoxOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _FileDocumentBoxOutline_vue_vue_type_template_id_6a70bc3a___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _FileDocumentBoxOutline_vue_vue_type_template_id_6a70bc3a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_FileDocumentBoxOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./FileDocumentBoxOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_FileDocumentBoxOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue?vue&type=template&id=6a70bc3a&":
+/*!**********************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue?vue&type=template&id=6a70bc3a& ***!
+ \**********************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_FileDocumentBoxOutline_vue_vue_type_template_id_6a70bc3a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./FileDocumentBoxOutline.vue?vue&type=template&id=6a70bc3a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/FileDocumentBoxOutline.vue?vue&type=template&id=6a70bc3a&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_FileDocumentBoxOutline_vue_vue_type_template_id_6a70bc3a___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_FileDocumentBoxOutline_vue_vue_type_template_id_6a70bc3a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Heart.vue":
+/*!**********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Heart.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Heart.vue?vue&type=template&id=6577aeca& */ "./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca&");
+/* harmony import */ var _Heart_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Heart.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Heart_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Heart.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Heart_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Heart.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Heart_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Heart.vue?vue&type=template&id=6577aeca& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue":
+/*!*******************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue ***!
+ \*******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TooltipOutline.vue?vue&type=template&id=fff4072a& */ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&");
+/* harmony import */ var _TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TooltipOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/TooltipOutline.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./TooltipOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&":
+/*!**************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a& ***!
+ \**************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./TooltipOutline.vue?vue&type=template&id=fff4072a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/27.01037232ebbfbdd37446.js b/public/27.01037232ebbfbdd37446.js
new file mode 100644
index 00000000..726f8f1b
--- /dev/null
+++ b/public/27.01037232ebbfbdd37446.js
@@ -0,0 +1,857 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[27],{
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Bell.vue?vue&type=script&lang=js&":
+/*!************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Bell.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "BellIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Bell icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "CheckIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Check icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Inbox.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Inbox.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "InboxIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Inbox icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "TooltipOutlineIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Tooltip Outline icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Bell.vue?vue&type=template&id=2f3d3ca2&":
+/*!**********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Bell.vue?vue&type=template&id=2f3d3ca2& ***!
+ \**********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon bell-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M21,19V20H3V19L5,17V11C5,7.9 7.03,5.17 10,4.29C10,4.19 10,4.1 10,4C10,2.9 10.9,2 12,2C13.1,2 14,2.9 14,4C14,4.1 14,4.19 14,4.29C16.97,5.17 19,7.9 19,11V17L21,19M14,21C14,22.1 13.1,23 12,23C10.9,23 10,22.1 10,21"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon check-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d: "M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Inbox.vue?vue&type=template&id=5eb27dec&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Inbox.vue?vue&type=template&id=5eb27dec& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon inbox-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M19,15H15C15,16.66 13.66,18 12,18C10.34,18 9,16.66 9,15H5V5H19M19,3H5C3.89,3 3,3.9 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.9 20.1,3 19,3Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&":
+/*!********************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a& ***!
+ \********************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon tooltip-outline-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M4,2H20C21.1,2 22,2.9 22,4V16C22,17.1 21.1,18 20,18H16L12,22L8,18H4C2.9,18 2,17.1 2,16V4C2,2.9 2.9,2 4,2M4,4V16H8.83L12,19.17L15.17,16H20V4H4Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
+/* globals __VUE_SSR_CONTEXT__ */
+
+// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
+// This module is a runtime utility for cleaner component module output and will
+// be included in the final webpack user bundle.
+
+function normalizeComponent (
+ scriptExports,
+ render,
+ staticRenderFns,
+ functionalTemplate,
+ injectStyles,
+ scopeId,
+ moduleIdentifier, /* server only */
+ shadowMode /* vue-cli only */
+) {
+ // Vue.extend constructor export interop
+ var options = typeof scriptExports === 'function'
+ ? scriptExports.options
+ : scriptExports
+
+ // render functions
+ if (render) {
+ options.render = render
+ options.staticRenderFns = staticRenderFns
+ options._compiled = true
+ }
+
+ // functional template
+ if (functionalTemplate) {
+ options.functional = true
+ }
+
+ // scopedId
+ if (scopeId) {
+ options._scopeId = 'data-v-' + scopeId
+ }
+
+ var hook
+ if (moduleIdentifier) { // server build
+ hook = function (context) {
+ // 2.3 injection
+ context =
+ context || // cached call
+ (this.$vnode && this.$vnode.ssrContext) || // stateful
+ (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
+ // 2.2 with runInNewContext: true
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
+ context = __VUE_SSR_CONTEXT__
+ }
+ // inject component styles
+ if (injectStyles) {
+ injectStyles.call(this, context)
+ }
+ // register component module identifier for async chunk inferrence
+ if (context && context._registeredComponents) {
+ context._registeredComponents.add(moduleIdentifier)
+ }
+ }
+ // used by ssr in case component is cached and beforeCreate
+ // never gets called
+ options._ssrRegister = hook
+ } else if (injectStyles) {
+ hook = shadowMode
+ ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
+ : injectStyles
+ }
+
+ if (hook) {
+ if (options.functional) {
+ // for template-only hot-reload because in that case the render fn doesn't
+ // go through the normalizer
+ options._injectStyles = hook
+ // register for functioal component in vue file
+ var originalRender = options.render
+ options.render = function renderWithStyleInjection (h, context) {
+ hook.call(context)
+ return originalRender(h, context)
+ }
+ } else {
+ // inject component registration as beforeCreate hook
+ var existing = options.beforeCreate
+ options.beforeCreate = existing
+ ? [].concat(existing, hook)
+ : [hook]
+ }
+ }
+
+ return {
+ exports: scriptExports,
+ options: options
+ }
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Bell.vue":
+/*!*********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Bell.vue ***!
+ \*********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Bell_vue_vue_type_template_id_2f3d3ca2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Bell.vue?vue&type=template&id=2f3d3ca2& */ "./node_modules/vue-material-design-icons/Bell.vue?vue&type=template&id=2f3d3ca2&");
+/* harmony import */ var _Bell_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Bell.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Bell.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Bell_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Bell_vue_vue_type_template_id_2f3d3ca2___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Bell_vue_vue_type_template_id_2f3d3ca2___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Bell.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Bell.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Bell.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Bell_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Bell.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Bell.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Bell_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Bell.vue?vue&type=template&id=2f3d3ca2&":
+/*!****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Bell.vue?vue&type=template&id=2f3d3ca2& ***!
+ \****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Bell_vue_vue_type_template_id_2f3d3ca2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Bell.vue?vue&type=template&id=2f3d3ca2& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Bell.vue?vue&type=template&id=2f3d3ca2&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Bell_vue_vue_type_template_id_2f3d3ca2___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Bell_vue_vue_type_template_id_2f3d3ca2___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Check.vue":
+/*!**********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Check.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Check.vue?vue&type=template&id=7146728c& */ "./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&");
+/* harmony import */ var _Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Check.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Check.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Check.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Check.vue?vue&type=template&id=7146728c& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Check.vue?vue&type=template&id=7146728c&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Check_vue_vue_type_template_id_7146728c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Inbox.vue":
+/*!**********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Inbox.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Inbox_vue_vue_type_template_id_5eb27dec___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Inbox.vue?vue&type=template&id=5eb27dec& */ "./node_modules/vue-material-design-icons/Inbox.vue?vue&type=template&id=5eb27dec&");
+/* harmony import */ var _Inbox_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Inbox.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Inbox.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Inbox_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Inbox_vue_vue_type_template_id_5eb27dec___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Inbox_vue_vue_type_template_id_5eb27dec___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Inbox.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Inbox.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Inbox.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Inbox_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Inbox.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Inbox.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Inbox_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Inbox.vue?vue&type=template&id=5eb27dec&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Inbox.vue?vue&type=template&id=5eb27dec& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Inbox_vue_vue_type_template_id_5eb27dec___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Inbox.vue?vue&type=template&id=5eb27dec& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Inbox.vue?vue&type=template&id=5eb27dec&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Inbox_vue_vue_type_template_id_5eb27dec___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Inbox_vue_vue_type_template_id_5eb27dec___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue":
+/*!*******************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue ***!
+ \*******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TooltipOutline.vue?vue&type=template&id=fff4072a& */ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&");
+/* harmony import */ var _TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TooltipOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/TooltipOutline.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./TooltipOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&":
+/*!**************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a& ***!
+ \**************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./TooltipOutline.vue?vue&type=template&id=fff4072a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/28.e38d3c3987dee7e489b5.js b/public/28.e38d3c3987dee7e489b5.js
new file mode 100644
index 00000000..8873ce73
--- /dev/null
+++ b/public/28.e38d3c3987dee7e489b5.js
@@ -0,0 +1,886 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[28],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/relation-btn.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/relation-btn.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+/* harmony default export */ __webpack_exports__["default"] = ({
+ props: {
+ relation: {
+ type: String,
+ required: true
+ },
+ action: {
+ type: String,
+ required: true
+ },
+ item: {
+ type: Object,
+ required: true,
+ default: function _default() {
+ return {};
+ }
+ }
+ },
+ data: function data() {
+ return {
+ types: {
+ thread: 'App\\Thread',
+ user: "App\\User",
+ node: 'App\\Node'
+ },
+ actions: {
+ like: 'has_liked',
+ follow: 'has_followed',
+ subscribe: 'has_subscribed'
+ }
+ };
+ },
+ methods: {
+ toggle: function toggle() {
+ var _this = this;
+
+ // let action = !this.item[this.actions[this.action]] ? this.action : `${this.action}`
+ this.$http.post("relations/".concat(this.action), {
+ followable_type: this.types[this.relation],
+ followable_id: this.item.id
+ }).then(function () {
+ _this.item[_this.actions[_this.action]] = !_this.item[_this.actions[_this.action]];
+
+ _this.$emit('after-toggle', _this.item[_this.actions[_this.action]]);
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/subscribe-btn.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/subscribe-btn.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _relation_btn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./relation-btn */ "./src/components/buttons/relation-btn.vue");
+/* harmony import */ var $icons_VolumeMute__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/VolumeMute */ "./node_modules/vue-material-design-icons/VolumeMute.vue");
+/* harmony import */ var $icons_VolumeHigh__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/VolumeHigh */ "./node_modules/vue-material-design-icons/VolumeHigh.vue");
+/* harmony import */ var $icons_Check__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $icons/Check */ "./node_modules/vue-material-design-icons/Check.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'subscribe-btn',
+ components: {
+ RelationBtn: _relation_btn__WEBPACK_IMPORTED_MODULE_0__["default"],
+ VolumeMute: $icons_VolumeMute__WEBPACK_IMPORTED_MODULE_1__["default"],
+ VolumeHigh: $icons_VolumeHigh__WEBPACK_IMPORTED_MODULE_2__["default"],
+ CheckIcon: $icons_Check__WEBPACK_IMPORTED_MODULE_3__["default"]
+ },
+ props: {
+ relation: {
+ type: String,
+ required: true
+ },
+ item: {
+ type: Object,
+ required: true
+ }
+ },
+ data: function data() {
+ return {
+ hovering: false
+ };
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/hot-tags.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/hot-tags.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'HotTags',
+ data: function data() {
+ return {
+ nodes: []
+ };
+ },
+ methods: {
+ loadNodes: function loadNodes() {
+ var _this = this;
+
+ this.$http.get('nodes?hot=5&per_page=5').then(function (nodes) {
+ return _this.nodes = nodes.data;
+ });
+ }
+ },
+ created: function created() {
+ this.loadNodes();
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/nodes/show.vue?vue&type=script&lang=js&":
+/*!*********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/nodes/show.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+/* harmony import */ var $components_hot_tags__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $components/hot-tags */ "./src/components/hot-tags.vue");
+/* harmony import */ var $components_threads_list__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $components/threads-list */ "./src/components/threads-list.vue");
+/* harmony import */ var $components_buttons_subscribe_btn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $components/buttons/subscribe-btn */ "./src/components/buttons/subscribe-btn.vue");
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ components: {
+ SubscribeBtn: $components_buttons_subscribe_btn__WEBPACK_IMPORTED_MODULE_3__["default"],
+ HotTags: $components_hot_tags__WEBPACK_IMPORTED_MODULE_1__["default"],
+ ThreadsList: $components_threads_list__WEBPACK_IMPORTED_MODULE_2__["default"]
+ },
+ data: function data() {
+ return {
+ node: {},
+ threads: {
+ default: {},
+ featured: {},
+ zeroComment: {},
+ recent: {}
+ },
+ currentThreadsTab: 'default'
+ };
+ },
+ computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_0__["mapGetters"])(['currentUser'])),
+ beforeRouteUpdate: function beforeRouteUpdate(to, from, next) {
+ if (to.params.id != from.params.id) {
+ this.getNode(to.params.id);
+ this.loadThreads(to.params.id);
+ }
+
+ next();
+ },
+ created: function created() {
+ this.getNode(this.$route.params.id);
+ this.loadThreads(this.$route.params.id);
+ },
+ watch: {
+ currentThreadsTab: function currentThreadsTab() {
+ this.loadThreads(this.$route.params.id, 1);
+ }
+ },
+ methods: {
+ loadThreads: function loadThreads(id) {
+ var _this = this;
+
+ var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
+ this.$http.get("nodes/".concat(id, "/threads?all=yes&page=").concat(page)).then(function (threads) {
+ return _this.threads[_this.currentThreadsTab] = threads;
+ });
+ },
+ handlePageChanged: function handlePageChanged(page) {
+ this.loadThreads(page);
+ },
+ getNode: function getNode(id) {
+ var _this2 = this;
+
+ this.$http.get("nodes/".concat(id)).then(function (data) {
+ _this2.node = data;
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69&":
+/*!**************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69& ***!
+ \**************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ { on: { click: _vm.toggle } },
+ [!_vm.item[_vm.actions[_vm.action]] ? [_vm._t("on")] : [_vm._t("off")]],
+ 2
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/subscribe-btn.vue?vue&type=template&id=e241702a&":
+/*!***************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/subscribe-btn.vue?vue&type=template&id=e241702a& ***!
+ \***************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "relation-btn",
+ { attrs: { relation: _vm.relation, action: "subscribe", item: _vm.item } },
+ [
+ _c(
+ "button",
+ {
+ staticClass: "btn btn-sm text-gray-50",
+ attrs: { slot: "on" },
+ slot: "on"
+ },
+ [
+ _c("volume-high"),
+ _c("span", { staticClass: "pl-1" }, [_vm._v("订阅")])
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "button",
+ {
+ staticClass: "btn btn-sm",
+ class: { "btn-primary": !_vm.hovering, "btn-danger": _vm.hovering },
+ attrs: { slot: "off" },
+ on: {
+ mouseenter: function($event) {
+ _vm.hovering = true
+ },
+ mouseleave: function($event) {
+ _vm.hovering = false
+ }
+ },
+ slot: "off"
+ },
+ [
+ _vm.hovering ? _c("volume-mute") : _c("check-icon"),
+ _vm._v(" "),
+ _c("span", { staticClass: "pl-1" }, [
+ _vm._v(_vm._s(_vm.hovering ? "取消订阅" : "已订阅"))
+ ])
+ ],
+ 1
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/hot-tags.vue?vue&type=template&id=622cc129&":
+/*!**************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/hot-tags.vue?vue&type=template&id=622cc129& ***!
+ \**************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box text-gray-50" }, [
+ _vm._m(0),
+ _vm._v(" "),
+ _c(
+ "ul",
+ { staticClass: "plan-list text-13" },
+ [
+ _vm._l(_vm.nodes, function(node) {
+ return [
+ _c(
+ "router-link",
+ {
+ key: node.id,
+ staticClass: "py-1 cursor-pointer",
+ attrs: {
+ tag: "li",
+ to: { name: "nodes.node", params: { id: node.id } }
+ }
+ },
+ [
+ _vm._v("\n #" + _vm._s(node.title) + " "),
+ _c("span", { staticClass: "float-right" }, [
+ _vm._v(_vm._s(node.cache ? node.cache.threads_count : 0))
+ ])
+ ]
+ )
+ ]
+ })
+ ],
+ 2
+ )
+ ])
+}
+var staticRenderFns = [
+ function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box-heading" }, [
+ _c("div", { staticClass: "text-13" }, [_vm._v("热门话题")])
+ ])
+ }
+]
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/nodes/show.vue?vue&type=template&id=ca881d88&":
+/*!*************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/nodes/show.vue?vue&type=template&id=ca881d88& ***!
+ \*************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "page-node-show" }, [
+ _c("header", { staticClass: "page-header bg-grey-blue py-3 text-white" }, [
+ _c("div", { staticClass: "container" }, [
+ _c("div", { staticClass: "row align-items-center" }, [
+ _c("div", { staticClass: "col-md-6" }, [
+ _c("h1", [_vm._v(_vm._s(_vm.node.title))]),
+ _vm._v(" "),
+ _c("p", [_vm._v(_vm._s(_vm.node.description))])
+ ]),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "col-md-6 d-flex justify-content-end" },
+ [
+ _c("subscribe-btn", {
+ attrs: { relation: "node", item: _vm.node }
+ })
+ ],
+ 1
+ )
+ ])
+ ])
+ ]),
+ _vm._v(" "),
+ _c("div", { staticClass: "container" }, [
+ _c("div", { staticClass: "row mt-3" }, [
+ _c("div", { staticClass: "col-md-9" }, [
+ _c(
+ "div",
+ { staticClass: "box box-flush" },
+ [
+ _c("div", { staticClass: "box-body" }, [
+ _c("ul", { staticClass: "nav nav-pills" }, [
+ _c("li", { staticClass: "nav-item" }, [
+ _c(
+ "a",
+ {
+ staticClass: "nav-link",
+ class: { active: _vm.currentThreadsTab == "default" },
+ attrs: { href: "javascript:;" },
+ on: {
+ click: function($event) {
+ _vm.currentThreadsTab = "default"
+ }
+ }
+ },
+ [_vm._v("活跃")]
+ )
+ ]),
+ _vm._v(" "),
+ _c("li", { staticClass: "nav-item" }, [
+ _c(
+ "a",
+ {
+ staticClass: "nav-link",
+ class: { active: _vm.currentThreadsTab == "featured" },
+ attrs: { href: "javascript:;" },
+ on: {
+ click: function($event) {
+ _vm.currentThreadsTab = "featured"
+ }
+ }
+ },
+ [_vm._v("精选")]
+ )
+ ]),
+ _vm._v(" "),
+ _c("li", { staticClass: "nav-item" }, [
+ _c(
+ "a",
+ {
+ staticClass: "nav-link",
+ class: {
+ active: _vm.currentThreadsTab == "zeroComment"
+ },
+ attrs: { href: "javascript:;" },
+ on: {
+ click: function($event) {
+ _vm.currentThreadsTab = "zeroComment"
+ }
+ }
+ },
+ [_vm._v("零回复")]
+ )
+ ]),
+ _vm._v(" "),
+ _c("li", { staticClass: "nav-item" }, [
+ _c(
+ "a",
+ {
+ staticClass: "nav-link",
+ class: { active: _vm.currentThreadsTab == "recent" },
+ attrs: { href: "javascript:;" },
+ on: {
+ click: function($event) {
+ _vm.currentThreadsTab = "recent"
+ }
+ }
+ },
+ [_vm._v("最新发布")]
+ )
+ ])
+ ])
+ ]),
+ _vm._v(" "),
+ _c("threads-list", {
+ attrs: { threads: _vm.threads[_vm.currentThreadsTab] },
+ on: { "page-changed": _vm.handlePageChanged }
+ })
+ ],
+ 1
+ )
+ ]),
+ _vm._v(" "),
+ _c("div", { staticClass: "col-md-3" }, [_c("hot-tags")], 1)
+ ])
+ ])
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./src/components/buttons/relation-btn.vue":
+/*!*************************************************!*\
+ !*** ./src/components/buttons/relation-btn.vue ***!
+ \*************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./relation-btn.vue?vue&type=template&id=4a803e69& */ "./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69&");
+/* harmony import */ var _relation_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./relation-btn.vue?vue&type=script&lang=js& */ "./src/components/buttons/relation-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _relation_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/buttons/relation-btn.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/buttons/relation-btn.vue?vue&type=script&lang=js&":
+/*!**************************************************************************!*\
+ !*** ./src/components/buttons/relation-btn.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_relation_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./relation-btn.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/relation-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_relation_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69&":
+/*!********************************************************************************!*\
+ !*** ./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69& ***!
+ \********************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./relation-btn.vue?vue&type=template&id=4a803e69& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/buttons/subscribe-btn.vue":
+/*!**************************************************!*\
+ !*** ./src/components/buttons/subscribe-btn.vue ***!
+ \**************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _subscribe_btn_vue_vue_type_template_id_e241702a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./subscribe-btn.vue?vue&type=template&id=e241702a& */ "./src/components/buttons/subscribe-btn.vue?vue&type=template&id=e241702a&");
+/* harmony import */ var _subscribe_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./subscribe-btn.vue?vue&type=script&lang=js& */ "./src/components/buttons/subscribe-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _subscribe_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _subscribe_btn_vue_vue_type_template_id_e241702a___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _subscribe_btn_vue_vue_type_template_id_e241702a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/buttons/subscribe-btn.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/buttons/subscribe-btn.vue?vue&type=script&lang=js&":
+/*!***************************************************************************!*\
+ !*** ./src/components/buttons/subscribe-btn.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_subscribe_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./subscribe-btn.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/subscribe-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_subscribe_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/buttons/subscribe-btn.vue?vue&type=template&id=e241702a&":
+/*!*********************************************************************************!*\
+ !*** ./src/components/buttons/subscribe-btn.vue?vue&type=template&id=e241702a& ***!
+ \*********************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_subscribe_btn_vue_vue_type_template_id_e241702a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./subscribe-btn.vue?vue&type=template&id=e241702a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/subscribe-btn.vue?vue&type=template&id=e241702a&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_subscribe_btn_vue_vue_type_template_id_e241702a___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_subscribe_btn_vue_vue_type_template_id_e241702a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/hot-tags.vue":
+/*!*************************************!*\
+ !*** ./src/components/hot-tags.vue ***!
+ \*************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hot-tags.vue?vue&type=template&id=622cc129& */ "./src/components/hot-tags.vue?vue&type=template&id=622cc129&");
+/* harmony import */ var _hot_tags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hot-tags.vue?vue&type=script&lang=js& */ "./src/components/hot-tags.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _hot_tags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/hot-tags.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/hot-tags.vue?vue&type=script&lang=js&":
+/*!**************************************************************!*\
+ !*** ./src/components/hot-tags.vue?vue&type=script&lang=js& ***!
+ \**************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_hot_tags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./hot-tags.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/hot-tags.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_hot_tags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/hot-tags.vue?vue&type=template&id=622cc129&":
+/*!********************************************************************!*\
+ !*** ./src/components/hot-tags.vue?vue&type=template&id=622cc129& ***!
+ \********************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./hot-tags.vue?vue&type=template&id=622cc129& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/hot-tags.vue?vue&type=template&id=622cc129&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_hot_tags_vue_vue_type_template_id_622cc129___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/nodes/show.vue":
+/*!************************************!*\
+ !*** ./src/modules/nodes/show.vue ***!
+ \************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _show_vue_vue_type_template_id_ca881d88___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./show.vue?vue&type=template&id=ca881d88& */ "./src/modules/nodes/show.vue?vue&type=template&id=ca881d88&");
+/* harmony import */ var _show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./show.vue?vue&type=script&lang=js& */ "./src/modules/nodes/show.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _show_vue_vue_type_template_id_ca881d88___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _show_vue_vue_type_template_id_ca881d88___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/nodes/show.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/nodes/show.vue?vue&type=script&lang=js&":
+/*!*************************************************************!*\
+ !*** ./src/modules/nodes/show.vue?vue&type=script&lang=js& ***!
+ \*************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./show.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/nodes/show.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/nodes/show.vue?vue&type=template&id=ca881d88&":
+/*!*******************************************************************!*\
+ !*** ./src/modules/nodes/show.vue?vue&type=template&id=ca881d88& ***!
+ \*******************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_template_id_ca881d88___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./show.vue?vue&type=template&id=ca881d88& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/nodes/show.vue?vue&type=template&id=ca881d88&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_template_id_ca881d88___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_show_vue_vue_type_template_id_ca881d88___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/29.b6d8eb97f89feb4e8b29.js b/public/29.b6d8eb97f89feb4e8b29.js
new file mode 100644
index 00000000..1e81e363
--- /dev/null
+++ b/public/29.b6d8eb97f89feb4e8b29.js
@@ -0,0 +1,668 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[29],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/profile.vue?vue&type=script&lang=js&":
+/*!************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/profile.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $modules_users_profile_sidebar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $modules/users/profile/sidebar */ "./src/modules/users/profile/sidebar.vue");
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'show',
+ components: {
+ Sidebar: $modules_users_profile_sidebar__WEBPACK_IMPORTED_MODULE_0__["default"]
+ },
+ computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_1__["mapGetters"])(['currentUser'])),
+ methods: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_1__["mapActions"])(['setUser']))
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/profile/sidebar.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/profile/sidebar.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $icons_Settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $icons/Settings */ "./node_modules/vue-material-design-icons/Settings.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ components: {
+ SettingIcon: $icons_Settings__WEBPACK_IMPORTED_MODULE_0__["default"]
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/profile.vue?vue&type=style&index=0&lang=scss&":
+/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/profile.vue?vue&type=style&index=0&lang=scss& ***!
+ \*************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, ".page-user-show {\n min-height: 100vh;\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/profile.vue?vue&type=style&index=0&lang=scss&":
+/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/profile.vue?vue&type=style&index=0&lang=scss& ***!
+ \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src??ref--7-3!../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../node_modules/vue-loader/lib??vue-loader-options!./profile.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/profile.vue?vue&type=style&index=0&lang=scss&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Settings.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Settings.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "SettingsIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Settings icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Settings.vue?vue&type=template&id=2a518ecf&":
+/*!**************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Settings.vue?vue&type=template&id=2a518ecf& ***!
+ \**************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon settings-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M12,15.5C10.07,15.5 8.5,13.93 8.5,12C8.5,10.07 10.07,8.5 12,8.5C13.93,8.5 15.5,10.07 15.5,12C15.5,13.93 13.93,15.5 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 21.73,14.78 21.54,14.63L19.43,12.97Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/profile.vue?vue&type=template&id=275bc111&":
+/*!****************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/profile.vue?vue&type=template&id=275bc111& ***!
+ \****************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "page-user-show" }, [
+ _c("div", { staticClass: "row" }, [
+ _c("div", { staticClass: "col-md-3" }, [_c("sidebar")], 1),
+ _vm._v(" "),
+ _c("div", { staticClass: "col-md-9" }, [_c("router-view")], 1)
+ ])
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/profile/sidebar.vue?vue&type=template&id=35c091de&":
+/*!************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/profile/sidebar.vue?vue&type=template&id=35c091de& ***!
+ \************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box" }, [
+ _c(
+ "div",
+ { staticClass: "box-heading" },
+ [_c("setting-icon", { staticClass: "mr-1 text-16" }), _vm._v("设置\n ")],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "nav flex-column nav-pills" },
+ [
+ _c(
+ "router-link",
+ { staticClass: "nav-link", attrs: { to: { name: "user.profile" } } },
+ [_vm._v("基本资料")]
+ ),
+ _vm._v(" "),
+ _c(
+ "router-link",
+ { staticClass: "nav-link", attrs: { to: { name: "user.avatar" } } },
+ [_vm._v("修改头像")]
+ ),
+ _vm._v(" "),
+ _c(
+ "router-link",
+ { staticClass: "nav-link", attrs: { to: { name: "user.account" } } },
+ [_vm._v("账号设置")]
+ ),
+ _vm._v(" "),
+ _c(
+ "router-link",
+ { staticClass: "nav-link", attrs: { to: { name: "user.extends" } } },
+ [_vm._v("拓展资料")]
+ )
+ ],
+ 1
+ )
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
+/* globals __VUE_SSR_CONTEXT__ */
+
+// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
+// This module is a runtime utility for cleaner component module output and will
+// be included in the final webpack user bundle.
+
+function normalizeComponent (
+ scriptExports,
+ render,
+ staticRenderFns,
+ functionalTemplate,
+ injectStyles,
+ scopeId,
+ moduleIdentifier, /* server only */
+ shadowMode /* vue-cli only */
+) {
+ // Vue.extend constructor export interop
+ var options = typeof scriptExports === 'function'
+ ? scriptExports.options
+ : scriptExports
+
+ // render functions
+ if (render) {
+ options.render = render
+ options.staticRenderFns = staticRenderFns
+ options._compiled = true
+ }
+
+ // functional template
+ if (functionalTemplate) {
+ options.functional = true
+ }
+
+ // scopedId
+ if (scopeId) {
+ options._scopeId = 'data-v-' + scopeId
+ }
+
+ var hook
+ if (moduleIdentifier) { // server build
+ hook = function (context) {
+ // 2.3 injection
+ context =
+ context || // cached call
+ (this.$vnode && this.$vnode.ssrContext) || // stateful
+ (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
+ // 2.2 with runInNewContext: true
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
+ context = __VUE_SSR_CONTEXT__
+ }
+ // inject component styles
+ if (injectStyles) {
+ injectStyles.call(this, context)
+ }
+ // register component module identifier for async chunk inferrence
+ if (context && context._registeredComponents) {
+ context._registeredComponents.add(moduleIdentifier)
+ }
+ }
+ // used by ssr in case component is cached and beforeCreate
+ // never gets called
+ options._ssrRegister = hook
+ } else if (injectStyles) {
+ hook = shadowMode
+ ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
+ : injectStyles
+ }
+
+ if (hook) {
+ if (options.functional) {
+ // for template-only hot-reload because in that case the render fn doesn't
+ // go through the normalizer
+ options._injectStyles = hook
+ // register for functioal component in vue file
+ var originalRender = options.render
+ options.render = function renderWithStyleInjection (h, context) {
+ hook.call(context)
+ return originalRender(h, context)
+ }
+ } else {
+ // inject component registration as beforeCreate hook
+ var existing = options.beforeCreate
+ options.beforeCreate = existing
+ ? [].concat(existing, hook)
+ : [hook]
+ }
+ }
+
+ return {
+ exports: scriptExports,
+ options: options
+ }
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Settings.vue":
+/*!*************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Settings.vue ***!
+ \*************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Settings_vue_vue_type_template_id_2a518ecf___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Settings.vue?vue&type=template&id=2a518ecf& */ "./node_modules/vue-material-design-icons/Settings.vue?vue&type=template&id=2a518ecf&");
+/* harmony import */ var _Settings_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Settings.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Settings.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Settings_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Settings_vue_vue_type_template_id_2a518ecf___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Settings_vue_vue_type_template_id_2a518ecf___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Settings.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Settings.vue?vue&type=script&lang=js&":
+/*!**************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Settings.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Settings_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Settings.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Settings.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Settings_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Settings.vue?vue&type=template&id=2a518ecf&":
+/*!********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Settings.vue?vue&type=template&id=2a518ecf& ***!
+ \********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Settings_vue_vue_type_template_id_2a518ecf___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Settings.vue?vue&type=template&id=2a518ecf& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Settings.vue?vue&type=template&id=2a518ecf&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Settings_vue_vue_type_template_id_2a518ecf___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Settings_vue_vue_type_template_id_2a518ecf___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/users/profile.vue":
+/*!***************************************!*\
+ !*** ./src/modules/users/profile.vue ***!
+ \***************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _profile_vue_vue_type_template_id_275bc111___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./profile.vue?vue&type=template&id=275bc111& */ "./src/modules/users/profile.vue?vue&type=template&id=275bc111&");
+/* harmony import */ var _profile_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./profile.vue?vue&type=script&lang=js& */ "./src/modules/users/profile.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _profile_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./profile.vue?vue&type=style&index=0&lang=scss& */ "./src/modules/users/profile.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _profile_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _profile_vue_vue_type_template_id_275bc111___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _profile_vue_vue_type_template_id_275bc111___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/users/profile.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/users/profile.vue?vue&type=script&lang=js&":
+/*!****************************************************************!*\
+ !*** ./src/modules/users/profile.vue?vue&type=script&lang=js& ***!
+ \****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_profile_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./profile.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/profile.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_profile_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/users/profile.vue?vue&type=style&index=0&lang=scss&":
+/*!*************************************************************************!*\
+ !*** ./src/modules/users/profile.vue?vue&type=style&index=0&lang=scss& ***!
+ \*************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_profile_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../../node_modules/style-loader!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src??ref--7-3!../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../node_modules/vue-loader/lib??vue-loader-options!./profile.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/profile.vue?vue&type=style&index=0&lang=scss&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_profile_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_profile_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_profile_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_profile_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_profile_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/modules/users/profile.vue?vue&type=template&id=275bc111&":
+/*!**********************************************************************!*\
+ !*** ./src/modules/users/profile.vue?vue&type=template&id=275bc111& ***!
+ \**********************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_profile_vue_vue_type_template_id_275bc111___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./profile.vue?vue&type=template&id=275bc111& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/profile.vue?vue&type=template&id=275bc111&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_profile_vue_vue_type_template_id_275bc111___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_profile_vue_vue_type_template_id_275bc111___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/users/profile/sidebar.vue":
+/*!***********************************************!*\
+ !*** ./src/modules/users/profile/sidebar.vue ***!
+ \***********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _sidebar_vue_vue_type_template_id_35c091de___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sidebar.vue?vue&type=template&id=35c091de& */ "./src/modules/users/profile/sidebar.vue?vue&type=template&id=35c091de&");
+/* harmony import */ var _sidebar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sidebar.vue?vue&type=script&lang=js& */ "./src/modules/users/profile/sidebar.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _sidebar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _sidebar_vue_vue_type_template_id_35c091de___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _sidebar_vue_vue_type_template_id_35c091de___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/users/profile/sidebar.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/users/profile/sidebar.vue?vue&type=script&lang=js&":
+/*!************************************************************************!*\
+ !*** ./src/modules/users/profile/sidebar.vue?vue&type=script&lang=js& ***!
+ \************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_sidebar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib??ref--4-0!../../../../node_modules/vue-loader/lib??vue-loader-options!./sidebar.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/profile/sidebar.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_sidebar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/users/profile/sidebar.vue?vue&type=template&id=35c091de&":
+/*!******************************************************************************!*\
+ !*** ./src/modules/users/profile/sidebar.vue?vue&type=template&id=35c091de& ***!
+ \******************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_sidebar_vue_vue_type_template_id_35c091de___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./sidebar.vue?vue&type=template&id=35c091de& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/profile/sidebar.vue?vue&type=template&id=35c091de&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_sidebar_vue_vue_type_template_id_35c091de___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_sidebar_vue_vue_type_template_id_35c091de___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/3.8278b66d6119ccf10c85.js b/public/3.8278b66d6119ccf10c85.js
new file mode 100644
index 00000000..44ea677a
--- /dev/null
+++ b/public/3.8278b66d6119ccf10c85.js
@@ -0,0 +1,692 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[3],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/follow-btn.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/follow-btn.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _relation_btn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./relation-btn */ "./src/components/buttons/relation-btn.vue");
+/* harmony import */ var $icons_Plus__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/Plus */ "./node_modules/vue-material-design-icons/Plus.vue");
+/* harmony import */ var $icons_Check__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/Check */ "./node_modules/vue-material-design-icons/Check.vue");
+/* harmony import */ var $icons_Close__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $icons/Close */ "./node_modules/vue-material-design-icons/Close.vue");
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'follow-btn',
+ components: {
+ RelationBtn: _relation_btn__WEBPACK_IMPORTED_MODULE_0__["default"],
+ PlusIcon: $icons_Plus__WEBPACK_IMPORTED_MODULE_1__["default"],
+ CheckIcon: $icons_Check__WEBPACK_IMPORTED_MODULE_2__["default"],
+ CloseIcon: $icons_Close__WEBPACK_IMPORTED_MODULE_3__["default"]
+ },
+ props: {
+ item: {
+ type: Object,
+ required: true
+ },
+ simple: {
+ type: Boolean,
+ default: false
+ }
+ },
+ data: function data() {
+ return {
+ hovering: false
+ };
+ },
+ computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_4__["mapGetters"])(['currentUser']))
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/relation-btn.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/relation-btn.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+/* harmony default export */ __webpack_exports__["default"] = ({
+ props: {
+ relation: {
+ type: String,
+ required: true
+ },
+ action: {
+ type: String,
+ required: true
+ },
+ item: {
+ type: Object,
+ required: true,
+ default: function _default() {
+ return {};
+ }
+ }
+ },
+ data: function data() {
+ return {
+ types: {
+ thread: 'App\\Thread',
+ user: "App\\User",
+ node: 'App\\Node'
+ },
+ actions: {
+ like: 'has_liked',
+ follow: 'has_followed',
+ subscribe: 'has_subscribed'
+ }
+ };
+ },
+ methods: {
+ toggle: function toggle() {
+ var _this = this;
+
+ // let action = !this.item[this.actions[this.action]] ? this.action : `${this.action}`
+ this.$http.post("relations/".concat(this.action), {
+ followable_type: this.types[this.relation],
+ followable_id: this.item.id
+ }).then(function () {
+ _this.item[_this.actions[_this.action]] = !_this.item[_this.actions[_this.action]];
+
+ _this.$emit('after-toggle', _this.item[_this.actions[_this.action]]);
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-media.vue?vue&type=script&lang=js&":
+/*!************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-media.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'UserMedia',
+ props: {
+ type: {
+ type: String,
+ default: 'default'
+ },
+ user: {
+ type: Object
+ },
+ nameClasses: {
+ type: String,
+ default: 'text-black-50 text-14'
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/follow-btn.vue?vue&type=template&id=4bfe56c4&":
+/*!************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/follow-btn.vue?vue&type=template&id=4bfe56c4& ***!
+ \************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _vm.currentUser.id && _vm.item.id != _vm.currentUser.id
+ ? _c(
+ "relation-btn",
+ { attrs: { relation: "user", action: "follow", item: _vm.item } },
+ [
+ _c("template", { slot: "on" }, [
+ _vm.simple
+ ? _c(
+ "button",
+ {
+ staticClass: "btn btn-rounded btn-ghost btn-icon ml-auto",
+ attrs: { title: "关注 TA" }
+ },
+ [_c("plus-icon")],
+ 1
+ )
+ : _c(
+ "button",
+ {
+ staticClass: "btn btn-rounded btn-outline-teal-blue mx-1",
+ attrs: { title: "关注 TA" }
+ },
+ [_c("plus-icon"), _vm._v("关注 TA\n ")],
+ 1
+ )
+ ]),
+ _vm._v(" "),
+ _c("template", { slot: "off" }, [
+ _vm.simple
+ ? _c(
+ "button",
+ {
+ staticClass: "btn btn-icon ml-auto",
+ class: {
+ "btn-ghost": !_vm.hovering,
+ "btn-danger": _vm.hovering
+ },
+ attrs: { title: "取消关注 TA" },
+ on: {
+ mouseenter: function($event) {
+ _vm.hovering = true
+ },
+ mouseleave: function($event) {
+ _vm.hovering = false
+ }
+ }
+ },
+ [!_vm.hovering ? _c("check-icon") : _c("close-icon")],
+ 1
+ )
+ : _c(
+ "button",
+ {
+ staticClass: "btn mx-1",
+ class: {
+ "btn-teal-blue": !_vm.hovering,
+ "btn-danger": _vm.hovering
+ },
+ attrs: { title: "取消关注 TA" },
+ on: {
+ mouseenter: function($event) {
+ _vm.hovering = true
+ },
+ mouseleave: function($event) {
+ _vm.hovering = false
+ }
+ }
+ },
+ [
+ !_vm.hovering ? _c("check-icon") : _c("close-icon"),
+ _vm._v(
+ "\n " +
+ _vm._s(_vm.hovering ? "取消关注" : "正在关注") +
+ "\n "
+ )
+ ],
+ 1
+ )
+ ])
+ ],
+ 2
+ )
+ : _vm._e()
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69&":
+/*!**************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69& ***!
+ \**************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ { on: { click: _vm.toggle } },
+ [!_vm.item[_vm.actions[_vm.action]] ? [_vm._t("on")] : [_vm._t("off")]],
+ 2
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-media.vue?vue&type=template&id=1788f872&":
+/*!****************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-media.vue?vue&type=template&id=1788f872& ***!
+ \****************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _vm.type == "default"
+ ? _c(
+ "div",
+ { staticClass: "user-media d-flex" },
+ [
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "users.show",
+ params: { username: _vm.user.username }
+ }
+ }
+ },
+ [
+ _c("img", {
+ staticClass: "avatar-40",
+ attrs: { src: _vm.user.avatar, alt: _vm.user.name }
+ })
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "ml-2" },
+ [
+ _c(
+ "div",
+ [
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "users.show",
+ params: { username: _vm.user.username }
+ }
+ }
+ },
+ [
+ _vm._t("name", [
+ _c(
+ "h6",
+ {
+ staticClass: "mb-0 text-16 d-inline-block",
+ class: _vm.nameClasses
+ },
+ [_vm._v(_vm._s(_vm.user.name))]
+ )
+ ]),
+ _vm._v(" "),
+ _vm._t("name-appends")
+ ],
+ 2
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _vm._t("description", [
+ _c("div", { staticClass: "text-12 text-gray-70" }, [
+ _vm._v(_vm._s(_vm.user.bio))
+ ])
+ ])
+ ],
+ 2
+ ),
+ _vm._v(" "),
+ _vm._t("appends", null, { data: _vm.user })
+ ],
+ 2
+ )
+ : _c(
+ "div",
+ { staticClass: "user-media text-center d-inline-block p-1" },
+ [
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "users.show",
+ params: { username: _vm.user.username }
+ }
+ }
+ },
+ [
+ _c("img", {
+ staticClass: "avatar-40",
+ attrs: { src: _vm.user.avatar, alt: _vm.user.username }
+ }),
+ _vm._v(" "),
+ _vm._t("default")
+ ],
+ 2
+ )
+ ],
+ 1
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./src/components/buttons/follow-btn.vue":
+/*!***********************************************!*\
+ !*** ./src/components/buttons/follow-btn.vue ***!
+ \***********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _follow_btn_vue_vue_type_template_id_4bfe56c4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./follow-btn.vue?vue&type=template&id=4bfe56c4& */ "./src/components/buttons/follow-btn.vue?vue&type=template&id=4bfe56c4&");
+/* harmony import */ var _follow_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./follow-btn.vue?vue&type=script&lang=js& */ "./src/components/buttons/follow-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _follow_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _follow_btn_vue_vue_type_template_id_4bfe56c4___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _follow_btn_vue_vue_type_template_id_4bfe56c4___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/buttons/follow-btn.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/buttons/follow-btn.vue?vue&type=script&lang=js&":
+/*!************************************************************************!*\
+ !*** ./src/components/buttons/follow-btn.vue?vue&type=script&lang=js& ***!
+ \************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_follow_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./follow-btn.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/follow-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_follow_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/buttons/follow-btn.vue?vue&type=template&id=4bfe56c4&":
+/*!******************************************************************************!*\
+ !*** ./src/components/buttons/follow-btn.vue?vue&type=template&id=4bfe56c4& ***!
+ \******************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_follow_btn_vue_vue_type_template_id_4bfe56c4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./follow-btn.vue?vue&type=template&id=4bfe56c4& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/follow-btn.vue?vue&type=template&id=4bfe56c4&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_follow_btn_vue_vue_type_template_id_4bfe56c4___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_follow_btn_vue_vue_type_template_id_4bfe56c4___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/buttons/relation-btn.vue":
+/*!*************************************************!*\
+ !*** ./src/components/buttons/relation-btn.vue ***!
+ \*************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./relation-btn.vue?vue&type=template&id=4a803e69& */ "./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69&");
+/* harmony import */ var _relation_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./relation-btn.vue?vue&type=script&lang=js& */ "./src/components/buttons/relation-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _relation_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/buttons/relation-btn.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/buttons/relation-btn.vue?vue&type=script&lang=js&":
+/*!**************************************************************************!*\
+ !*** ./src/components/buttons/relation-btn.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_relation_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./relation-btn.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/relation-btn.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_relation_btn_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69&":
+/*!********************************************************************************!*\
+ !*** ./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69& ***!
+ \********************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./relation-btn.vue?vue&type=template&id=4a803e69& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/buttons/relation-btn.vue?vue&type=template&id=4a803e69&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_relation_btn_vue_vue_type_template_id_4a803e69___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/user-media.vue":
+/*!***************************************!*\
+ !*** ./src/components/user-media.vue ***!
+ \***************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _user_media_vue_vue_type_template_id_1788f872___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./user-media.vue?vue&type=template&id=1788f872& */ "./src/components/user-media.vue?vue&type=template&id=1788f872&");
+/* harmony import */ var _user_media_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./user-media.vue?vue&type=script&lang=js& */ "./src/components/user-media.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _user_media_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _user_media_vue_vue_type_template_id_1788f872___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _user_media_vue_vue_type_template_id_1788f872___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/user-media.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/user-media.vue?vue&type=script&lang=js&":
+/*!****************************************************************!*\
+ !*** ./src/components/user-media.vue?vue&type=script&lang=js& ***!
+ \****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_media_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./user-media.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-media.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_media_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/user-media.vue?vue&type=template&id=1788f872&":
+/*!**********************************************************************!*\
+ !*** ./src/components/user-media.vue?vue&type=template&id=1788f872& ***!
+ \**********************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_media_vue_vue_type_template_id_1788f872___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./user-media.vue?vue&type=template&id=1788f872& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-media.vue?vue&type=template&id=1788f872&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_media_vue_vue_type_template_id_1788f872___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_media_vue_vue_type_template_id_1788f872___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/30.5d6fd97603c0f7b9f9cd.js b/public/30.5d6fd97603c0f7b9f9cd.js
new file mode 100644
index 00000000..f07b1180
--- /dev/null
+++ b/public/30.5d6fd97603c0f7b9f9cd.js
@@ -0,0 +1,625 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[30],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/threads.vue?vue&type=script&lang=js&":
+/*!*****************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/tabs/threads.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $components_threads_list__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $components/threads-list */ "./src/components/threads-list.vue");
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'user-threads',
+ components: {
+ ThreadsList: $components_threads_list__WEBPACK_IMPORTED_MODULE_0__["default"]
+ },
+ data: function data() {
+ return {
+ threads: {}
+ };
+ },
+ methods: {
+ loadThreads: function loadThreads() {
+ var _this = this;
+
+ var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
+ this.$http.get("threads?user_id=".concat(this.$parent.user.id, "&page=").concat(page)).then(function (threads) {
+ _this.threads = threads;
+ });
+ },
+ handlePageChanged: function handlePageChanged(page) {
+ this.loadThreads(page);
+ }
+ },
+ mounted: function mounted() {
+ this.loadThreads();
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "HeartIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Heart icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "TooltipOutlineIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Tooltip Outline icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon heart-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M12,21.35L10.55,20.03C5.4,15.36 2,12.27 2,8.5C2,5.41 4.42,3 7.5,3C9.24,3 10.91,3.81 12,5.08C13.09,3.81 14.76,3 16.5,3C19.58,3 22,5.41 22,8.5C22,12.27 18.6,15.36 13.45,20.03L12,21.35Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&":
+/*!********************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a& ***!
+ \********************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon tooltip-outline-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M4,2H20C21.1,2 22,2.9 22,4V16C22,17.1 21.1,18 20,18H16L12,22L8,18H4C2.9,18 2,17.1 2,16V4C2,2.9 2.9,2 4,2M4,4V16H8.83L12,19.17L15.17,16H20V4H4Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/threads.vue?vue&type=template&id=05a67d60&":
+/*!*********************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/tabs/threads.vue?vue&type=template&id=05a67d60& ***!
+ \*********************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("threads-list", {
+ attrs: { threads: _vm.threads },
+ on: { "page-changed": _vm.handlePageChanged }
+ })
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
+/* globals __VUE_SSR_CONTEXT__ */
+
+// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
+// This module is a runtime utility for cleaner component module output and will
+// be included in the final webpack user bundle.
+
+function normalizeComponent (
+ scriptExports,
+ render,
+ staticRenderFns,
+ functionalTemplate,
+ injectStyles,
+ scopeId,
+ moduleIdentifier, /* server only */
+ shadowMode /* vue-cli only */
+) {
+ // Vue.extend constructor export interop
+ var options = typeof scriptExports === 'function'
+ ? scriptExports.options
+ : scriptExports
+
+ // render functions
+ if (render) {
+ options.render = render
+ options.staticRenderFns = staticRenderFns
+ options._compiled = true
+ }
+
+ // functional template
+ if (functionalTemplate) {
+ options.functional = true
+ }
+
+ // scopedId
+ if (scopeId) {
+ options._scopeId = 'data-v-' + scopeId
+ }
+
+ var hook
+ if (moduleIdentifier) { // server build
+ hook = function (context) {
+ // 2.3 injection
+ context =
+ context || // cached call
+ (this.$vnode && this.$vnode.ssrContext) || // stateful
+ (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
+ // 2.2 with runInNewContext: true
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
+ context = __VUE_SSR_CONTEXT__
+ }
+ // inject component styles
+ if (injectStyles) {
+ injectStyles.call(this, context)
+ }
+ // register component module identifier for async chunk inferrence
+ if (context && context._registeredComponents) {
+ context._registeredComponents.add(moduleIdentifier)
+ }
+ }
+ // used by ssr in case component is cached and beforeCreate
+ // never gets called
+ options._ssrRegister = hook
+ } else if (injectStyles) {
+ hook = shadowMode
+ ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
+ : injectStyles
+ }
+
+ if (hook) {
+ if (options.functional) {
+ // for template-only hot-reload because in that case the render fn doesn't
+ // go through the normalizer
+ options._injectStyles = hook
+ // register for functioal component in vue file
+ var originalRender = options.render
+ options.render = function renderWithStyleInjection (h, context) {
+ hook.call(context)
+ return originalRender(h, context)
+ }
+ } else {
+ // inject component registration as beforeCreate hook
+ var existing = options.beforeCreate
+ options.beforeCreate = existing
+ ? [].concat(existing, hook)
+ : [hook]
+ }
+ }
+
+ return {
+ exports: scriptExports,
+ options: options
+ }
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Heart.vue":
+/*!**********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Heart.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Heart.vue?vue&type=template&id=6577aeca& */ "./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca&");
+/* harmony import */ var _Heart_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Heart.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Heart_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Heart.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Heart_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Heart.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Heart.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Heart_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Heart.vue?vue&type=template&id=6577aeca& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Heart.vue?vue&type=template&id=6577aeca&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Heart_vue_vue_type_template_id_6577aeca___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue":
+/*!*******************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue ***!
+ \*******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TooltipOutline.vue?vue&type=template&id=fff4072a& */ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&");
+/* harmony import */ var _TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TooltipOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/TooltipOutline.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./TooltipOutline.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&":
+/*!**************************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a& ***!
+ \**************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./TooltipOutline.vue?vue&type=template&id=fff4072a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/TooltipOutline.vue?vue&type=template&id=fff4072a&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_TooltipOutline_vue_vue_type_template_id_fff4072a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/users/tabs/threads.vue":
+/*!********************************************!*\
+ !*** ./src/modules/users/tabs/threads.vue ***!
+ \********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _threads_vue_vue_type_template_id_05a67d60___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./threads.vue?vue&type=template&id=05a67d60& */ "./src/modules/users/tabs/threads.vue?vue&type=template&id=05a67d60&");
+/* harmony import */ var _threads_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./threads.vue?vue&type=script&lang=js& */ "./src/modules/users/tabs/threads.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _threads_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _threads_vue_vue_type_template_id_05a67d60___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _threads_vue_vue_type_template_id_05a67d60___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/users/tabs/threads.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/users/tabs/threads.vue?vue&type=script&lang=js&":
+/*!*********************************************************************!*\
+ !*** ./src/modules/users/tabs/threads.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_threads_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib??ref--4-0!../../../../node_modules/vue-loader/lib??vue-loader-options!./threads.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/threads.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_threads_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/users/tabs/threads.vue?vue&type=template&id=05a67d60&":
+/*!***************************************************************************!*\
+ !*** ./src/modules/users/tabs/threads.vue?vue&type=template&id=05a67d60& ***!
+ \***************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_threads_vue_vue_type_template_id_05a67d60___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./threads.vue?vue&type=template&id=05a67d60& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/threads.vue?vue&type=template&id=05a67d60&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_threads_vue_vue_type_template_id_05a67d60___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_threads_vue_vue_type_template_id_05a67d60___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/31.8b52d6035df314a177ad.js b/public/31.8b52d6035df314a177ad.js
new file mode 100644
index 00000000..33ef361c
--- /dev/null
+++ b/public/31.8b52d6035df314a177ad.js
@@ -0,0 +1,917 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[31],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/empty-state.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/empty-state.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $icons_TooltipOutline__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $icons/TooltipOutline */ "./node_modules/vue-material-design-icons/TooltipOutline.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'empty-state',
+ components: {
+ EmptyIcon: $icons_TooltipOutline__WEBPACK_IMPORTED_MODULE_0__["default"]
+ },
+ props: {
+ title: {
+ type: String,
+ default: null
+ },
+ message: {
+ type: String,
+ default: '空空如也~~~'
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-card.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-card.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $components_user_media__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $components/user-media */ "./src/components/user-media.vue");
+/* harmony import */ var $components_buttons_follow_btn__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $components/buttons/follow-btn */ "./src/components/buttons/follow-btn.vue");
+/* harmony import */ var $icons_MapMarker__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/MapMarker */ "./node_modules/vue-material-design-icons/MapMarker.vue");
+/* harmony import */ var $icons_Plus__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $icons/Plus */ "./node_modules/vue-material-design-icons/Plus.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'UserCard',
+ props: {
+ user: {
+ type: Object,
+ required: true
+ }
+ },
+ components: {
+ UserMedia: $components_user_media__WEBPACK_IMPORTED_MODULE_0__["default"],
+ FollowBtn: $components_buttons_follow_btn__WEBPACK_IMPORTED_MODULE_1__["default"],
+ MapMarkerIcon: $icons_MapMarker__WEBPACK_IMPORTED_MODULE_2__["default"],
+ PlusIcon: $icons_Plus__WEBPACK_IMPORTED_MODULE_3__["default"]
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/activities.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/tabs/activities.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $components_user_card__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $components/user-card */ "./src/components/user-card.vue");
+/* harmony import */ var $icons_ArrowDown__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/ArrowDown */ "./node_modules/vue-material-design-icons/ArrowDown.vue");
+/* harmony import */ var $icons_SourceCommitEnd__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/SourceCommitEnd */ "./node_modules/vue-material-design-icons/SourceCommitEnd.vue");
+/* harmony import */ var $components_empty_state__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $components/empty-state */ "./src/components/empty-state.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'user-activities',
+ data: function data() {
+ return {
+ activities: {
+ data: [],
+ meta: {
+ current_page: 0,
+ last_page: 0
+ }
+ }
+ };
+ },
+ components: {
+ UserCard: $components_user_card__WEBPACK_IMPORTED_MODULE_0__["default"],
+ ArrowDownIcon: $icons_ArrowDown__WEBPACK_IMPORTED_MODULE_1__["default"],
+ SourceCommitEnd: $icons_SourceCommitEnd__WEBPACK_IMPORTED_MODULE_2__["default"],
+ EmptyState: $components_empty_state__WEBPACK_IMPORTED_MODULE_3__["default"]
+ },
+ beforeRouteUpdate: function beforeRouteUpdate(to, from, next) {
+ if (to.params.username != from.params.username) {
+ this.activities = {
+ data: [],
+ meta: {
+ current_page: 0,
+ last_page: 0
+ }
+ };
+ this.loadActivities(to.params.username);
+ }
+
+ next();
+ },
+ methods: {
+ subjectLink: function subjectLink(activity) {
+ switch (activity.subject_type) {
+ case 'App\\Thread':
+ if (activity.log_name == 'commented.thread') {
+ return {
+ name: 'threads.show',
+ params: {
+ id: activity.subject.id
+ },
+ hash: '#comment-' + activity.properties.comment_id || false
+ };
+ }
+
+ return {
+ name: 'threads.show',
+ params: {
+ id: activity.subject.id
+ }
+ };
+
+ case 'App\\Comment':
+ return {
+ name: 'threads.show',
+ params: {
+ id: activity.subject.id
+ }
+ };
+
+ case "App\\User":
+ return {
+ name: 'users.show',
+ params: {
+ id: activity.subject.username
+ }
+ };
+ }
+
+ return {};
+ },
+ loadActivities: function loadActivities(username) {
+ var _this = this;
+
+ var page = this.activities.meta.current_page + 1;
+ this.$http.get("user/".concat(username, "/activities?per_page=10&page=").concat(page)).then(function (activities) {
+ _this.activities.data = _this.activities.data.concat(activities.data);
+ _this.activities.meta = activities.meta;
+ });
+ }
+ },
+ mounted: function mounted() {
+ this.loadActivities(this.$parent.user.username);
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/empty-state.vue?vue&type=template&id=772b85b1&":
+/*!*****************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/empty-state.vue?vue&type=template&id=772b85b1& ***!
+ \*****************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "text-center p-5 text-gray-50" }, [
+ _c("div", { staticClass: "container" }, [
+ _c(
+ "h1",
+ { staticClass: "display-4" },
+ [_vm._t("icon", [_c("empty-icon")])],
+ 2
+ ),
+ _vm._v(" "),
+ _c("h2", [_vm._t("title", [_vm._v(_vm._s(_vm.title))])], 2),
+ _vm._v(" "),
+ _c(
+ "p",
+ { staticClass: "lead" },
+ [_vm._t("message", [_vm._v(_vm._s(_vm.message))])],
+ 2
+ )
+ ])
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-card.vue?vue&type=template&id=9c78321c&":
+/*!***************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/user-card.vue?vue&type=template&id=9c78321c& ***!
+ \***************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _vm.user
+ ? _c("div", { staticClass: "user-card box" }, [
+ _c(
+ "div",
+ { staticClass: "d-flex flex-md-row flex-column" },
+ [
+ _c(
+ "div",
+ { staticClass: "d-flex align-items-center" },
+ [
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "users.show",
+ params: { username: _vm.user.username }
+ }
+ }
+ },
+ [
+ _c("img", {
+ staticClass: "avatar-40",
+ attrs: { src: _vm.user.avatar, alt: _vm.user.name }
+ })
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "ml-2" },
+ [
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "users.show",
+ params: { username: _vm.user.username }
+ }
+ }
+ },
+ [
+ _c(
+ "h6",
+ { staticClass: "mb-0 text-16 d-inline-block" },
+ [_vm._v(_vm._s(_vm.user.name))]
+ )
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "router-link",
+ {
+ staticClass: "text-12 ml-1 text-muted",
+ attrs: {
+ to: {
+ name: "users.show",
+ params: { id: _vm.user.username }
+ }
+ }
+ },
+ [_vm._v("@" + _vm._s(_vm.user.username))]
+ )
+ ],
+ 1
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("follow-btn", {
+ staticClass: "ml-md-auto mt-1 mtsm-0",
+ attrs: { item: _vm.user }
+ })
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("div", { staticClass: "text-gray-70" }, [
+ _c("div", { staticClass: "py-2" }, [_vm._v(_vm._s(_vm.user.bio))]),
+ _vm._v(" "),
+ _c("div", [_c("map-marker-icon"), _vm._v("Beijing, China\n ")], 1)
+ ])
+ ])
+ : _vm._e()
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/activities.vue?vue&type=template&id=28bef7f4&":
+/*!************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/tabs/activities.vue?vue&type=template&id=28bef7f4& ***!
+ \************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "user-activities" }, [
+ _vm.activities.data.length <= 0
+ ? _c("div", [_c("empty-state")], 1)
+ : _c(
+ "ul",
+ { staticClass: "timeline pb-2" },
+ [
+ _vm._l(_vm.activities.data, function(activity) {
+ return activity.subject
+ ? _c("li", { key: activity.id, staticClass: "timeline-item" }, [
+ _c("div", { staticClass: "timeline-heading" }, [
+ _c(
+ "div",
+ { staticClass: "d-flex" },
+ [
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "users.show",
+ params: {
+ username: _vm.$parent.user.username
+ }
+ }
+ }
+ },
+ [
+ _c("img", {
+ staticClass: "avatar-40",
+ attrs: {
+ src: _vm.$parent.user.avatar,
+ alt: _vm.$parent.user.name
+ }
+ })
+ ]
+ ),
+ _vm._v(" "),
+ _c("div", { staticClass: "ml-2" }, [
+ _c(
+ "div",
+ [
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: {
+ name: "users.show",
+ params: {
+ username: _vm.$parent.user.username
+ }
+ }
+ }
+ },
+ [
+ _c(
+ "h6",
+ {
+ staticClass:
+ "mb-0 text-16 d-inline-block"
+ },
+ [_vm._v(_vm._s(_vm.$parent.user.name))]
+ )
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "span",
+ { staticClass: "text-gray-60 ml-1" },
+ [
+ activity.log_name == "commented.thread"
+ ? [
+ _vm._v("\n 评论了 "),
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: _vm.subjectLink(activity)
+ }
+ },
+ [
+ _vm._v(
+ "《" +
+ _vm._s(
+ activity.subject.title
+ ) +
+ "》"
+ )
+ ]
+ )
+ ]
+ : activity.log_name == "published.thread"
+ ? [
+ _vm._v("\n 发布了 "),
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: _vm.subjectLink(activity)
+ }
+ },
+ [
+ _vm._v(
+ "《" +
+ _vm._s(
+ activity.subject.title
+ ) +
+ "》"
+ )
+ ]
+ )
+ ]
+ : activity.log_name == "like.thread"
+ ? [
+ _vm._v("\n 赞了 "),
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: _vm.subjectLink(activity)
+ }
+ },
+ [
+ _vm._v(
+ "《" +
+ _vm._s(
+ activity.subject.title
+ ) +
+ "》"
+ )
+ ]
+ )
+ ]
+ : activity.log_name == "follow.user"
+ ? [
+ _vm._v("\n 关注了 "),
+ _c(
+ "router-link",
+ {
+ attrs: {
+ to: _vm.subjectLink(activity)
+ }
+ },
+ [
+ _vm._v(
+ _vm._s(
+ activity.subject.username
+ )
+ )
+ ]
+ )
+ ]
+ : _vm._e()
+ ],
+ 2
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("div", { staticClass: "text-12 text-gray-70" }, [
+ _c("small", { staticClass: "text-muted" }, [
+ _vm._v(_vm._s(activity.created_at_timeago))
+ ])
+ ])
+ ])
+ ],
+ 1
+ )
+ ]),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "timeline-body" },
+ [
+ activity.log_name == "follow.user"
+ ? _c("user-card", {
+ attrs: { user: activity.subject }
+ })
+ : _c(
+ "div",
+ { staticClass: "box cursor-pointer" },
+ [
+ _c(
+ "router-link",
+ {
+ staticClass: "text-muted",
+ attrs: { to: _vm.subjectLink(activity) }
+ },
+ [
+ _vm._v(
+ _vm._s(
+ activity.properties["content"] || "无"
+ )
+ )
+ ]
+ )
+ ],
+ 1
+ )
+ ],
+ 1
+ )
+ ])
+ : _vm._e()
+ }),
+ _vm._v(" "),
+ _vm.activities.meta.current_page < _vm.activities.meta.last_page
+ ? _c("li", { staticClass: "timeline-item" }, [
+ _c("div", { staticClass: "timeline-heading" }, [
+ _c("div", { staticClass: "d-flex" }, [
+ _c(
+ "button",
+ {
+ staticClass: "btn btn-secondary btn-icon text-20",
+ on: {
+ click: function($event) {
+ return _vm.loadActivities(
+ _vm.$parent.user.username
+ )
+ }
+ }
+ },
+ [_c("arrow-down-icon")],
+ 1
+ )
+ ])
+ ])
+ ])
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.activities.meta.current_page == _vm.activities.meta.last_page
+ ? _c("li", { staticClass: "timeline-item" }, [
+ _c("div", { staticClass: "timeline-heading" }, [
+ _c("div", { staticClass: "d-flex" }, [
+ _c(
+ "button",
+ {
+ staticClass: "btn btn-secondary btn-icon text-20",
+ attrs: { disabled: "" }
+ },
+ [_c("source-commit-end")],
+ 1
+ )
+ ])
+ ])
+ ])
+ : _vm._e()
+ ],
+ 2
+ )
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./src/components/empty-state.vue":
+/*!****************************************!*\
+ !*** ./src/components/empty-state.vue ***!
+ \****************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./empty-state.vue?vue&type=template&id=772b85b1& */ "./src/components/empty-state.vue?vue&type=template&id=772b85b1&");
+/* harmony import */ var _empty_state_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./empty-state.vue?vue&type=script&lang=js& */ "./src/components/empty-state.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _empty_state_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/empty-state.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/empty-state.vue?vue&type=script&lang=js&":
+/*!*****************************************************************!*\
+ !*** ./src/components/empty-state.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_state_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./empty-state.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/empty-state.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_state_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/empty-state.vue?vue&type=template&id=772b85b1&":
+/*!***********************************************************************!*\
+ !*** ./src/components/empty-state.vue?vue&type=template&id=772b85b1& ***!
+ \***********************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./empty-state.vue?vue&type=template&id=772b85b1& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/empty-state.vue?vue&type=template&id=772b85b1&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_state_vue_vue_type_template_id_772b85b1___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/components/user-card.vue":
+/*!**************************************!*\
+ !*** ./src/components/user-card.vue ***!
+ \**************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _user_card_vue_vue_type_template_id_9c78321c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./user-card.vue?vue&type=template&id=9c78321c& */ "./src/components/user-card.vue?vue&type=template&id=9c78321c&");
+/* harmony import */ var _user_card_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./user-card.vue?vue&type=script&lang=js& */ "./src/components/user-card.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _user_card_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _user_card_vue_vue_type_template_id_9c78321c___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _user_card_vue_vue_type_template_id_9c78321c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/user-card.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/user-card.vue?vue&type=script&lang=js&":
+/*!***************************************************************!*\
+ !*** ./src/components/user-card.vue?vue&type=script&lang=js& ***!
+ \***************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_card_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./user-card.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-card.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_user_card_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/user-card.vue?vue&type=template&id=9c78321c&":
+/*!*********************************************************************!*\
+ !*** ./src/components/user-card.vue?vue&type=template&id=9c78321c& ***!
+ \*********************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_card_vue_vue_type_template_id_9c78321c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./user-card.vue?vue&type=template&id=9c78321c& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/user-card.vue?vue&type=template&id=9c78321c&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_card_vue_vue_type_template_id_9c78321c___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_user_card_vue_vue_type_template_id_9c78321c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/users/tabs/activities.vue":
+/*!***********************************************!*\
+ !*** ./src/modules/users/tabs/activities.vue ***!
+ \***********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _activities_vue_vue_type_template_id_28bef7f4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./activities.vue?vue&type=template&id=28bef7f4& */ "./src/modules/users/tabs/activities.vue?vue&type=template&id=28bef7f4&");
+/* harmony import */ var _activities_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./activities.vue?vue&type=script&lang=js& */ "./src/modules/users/tabs/activities.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _activities_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _activities_vue_vue_type_template_id_28bef7f4___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _activities_vue_vue_type_template_id_28bef7f4___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/users/tabs/activities.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/users/tabs/activities.vue?vue&type=script&lang=js&":
+/*!************************************************************************!*\
+ !*** ./src/modules/users/tabs/activities.vue?vue&type=script&lang=js& ***!
+ \************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_activities_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib??ref--4-0!../../../../node_modules/vue-loader/lib??vue-loader-options!./activities.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/activities.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_activities_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/users/tabs/activities.vue?vue&type=template&id=28bef7f4&":
+/*!******************************************************************************!*\
+ !*** ./src/modules/users/tabs/activities.vue?vue&type=template&id=28bef7f4& ***!
+ \******************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_activities_vue_vue_type_template_id_28bef7f4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./activities.vue?vue&type=template&id=28bef7f4& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/activities.vue?vue&type=template&id=28bef7f4&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_activities_vue_vue_type_template_id_28bef7f4___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_activities_vue_vue_type_template_id_28bef7f4___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/32.bbf23d1419157ca40683.js b/public/32.bbf23d1419157ca40683.js
new file mode 100644
index 00000000..2ad228b2
--- /dev/null
+++ b/public/32.bbf23d1419157ca40683.js
@@ -0,0 +1,471 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[32],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/following.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/tabs/following.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js");
+/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+/* harmony import */ var $components_empty_state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $components/empty-state */ "./src/components/empty-state.vue");
+/* harmony import */ var $components_user_list_item__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $components/user-list-item */ "./src/components/user-list-item.vue");
+/* harmony import */ var $components_paginator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! $components/paginator */ "./src/components/paginator.vue");
+/* harmony import */ var $icons_Email__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! $icons/Email */ "./node_modules/vue-material-design-icons/Email.vue");
+/* harmony import */ var $icons_Plus__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! $icons/Plus */ "./node_modules/vue-material-design-icons/Plus.vue");
+/* harmony import */ var $icons_Minus__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! $icons/Minus */ "./node_modules/vue-material-design-icons/Minus.vue");
+
+
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'user-followings',
+ components: {
+ UserListItem: $components_user_list_item__WEBPACK_IMPORTED_MODULE_3__["default"],
+ EmptyState: $components_empty_state__WEBPACK_IMPORTED_MODULE_2__["default"],
+ Paginator: $components_paginator__WEBPACK_IMPORTED_MODULE_4__["default"],
+ PlusIcon: $icons_Plus__WEBPACK_IMPORTED_MODULE_6__["default"],
+ EmailIcon: $icons_Email__WEBPACK_IMPORTED_MODULE_5__["default"],
+ MinusIcon: $icons_Minus__WEBPACK_IMPORTED_MODULE_7__["default"]
+ },
+ data: function data() {
+ return {
+ users: []
+ };
+ },
+ computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_1__["mapGetters"])(['currentUser'])),
+ created: function created() {
+ this.followings();
+ },
+ methods: {
+ followings: function () {
+ var _followings = _asyncToGenerator(
+ /*#__PURE__*/
+ _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee() {
+ return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ _context.next = 2;
+ return this.$http.get("user/".concat(this.$parent.user.username, "/followings"));
+
+ case 2:
+ this.users = _context.sent;
+
+ case 3:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, this);
+ }));
+
+ function followings() {
+ return _followings.apply(this, arguments);
+ }
+
+ return followings;
+ }()
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/following.vue?vue&type=style&index=0&id=83e6c6f0&lang=scss&scoped=true&":
+/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/tabs/following.vue?vue&type=style&index=0&id=83e6c6f0&lang=scss&scoped=true& ***!
+ \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, ".form-control[data-v-83e6c6f0]:focus {\n border: none;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/following.vue?vue&type=style&index=0&id=83e6c6f0&lang=scss&scoped=true&":
+/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/tabs/following.vue?vue&type=style&index=0&id=83e6c6f0&lang=scss&scoped=true& ***!
+ \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src??ref--7-3!../../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../../node_modules/vue-loader/lib??vue-loader-options!./following.vue?vue&type=style&index=0&id=83e6c6f0&lang=scss&scoped=true& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/following.vue?vue&type=style&index=0&id=83e6c6f0&lang=scss&scoped=true&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Minus.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Minus.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "MinusIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Minus icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Minus.vue?vue&type=template&id=c1d7fc18&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/Minus.vue?vue&type=template&id=c1d7fc18& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon minus-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c("path", { attrs: { d: "M19,13H5V11H19V13Z" } }, [
+ _c("title", [_vm._v(_vm._s(_vm.title))])
+ ])
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/following.vue?vue&type=template&id=83e6c6f0&scoped=true&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/tabs/following.vue?vue&type=template&id=83e6c6f0&scoped=true& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box box-flush" }, [
+ _c(
+ "div",
+ { staticClass: "list-group list-group-flush" },
+ [
+ _vm._l(_vm.users.data, function(user) {
+ return _c("user-list-item", {
+ key: user.id,
+ staticClass: "list-group-item",
+ attrs: { user: user }
+ })
+ }),
+ _vm._v(" "),
+ _vm.users.data && _vm.users.data.length == 0
+ ? _c("empty-state")
+ : _vm._e(),
+ _vm._v(" "),
+ _c("paginator", { attrs: { meta: _vm.users.meta } })
+ ],
+ 2
+ ),
+ _vm._v(" "),
+ false
+ ? undefined
+ : _vm._e()
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Minus.vue":
+/*!**********************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Minus.vue ***!
+ \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Minus_vue_vue_type_template_id_c1d7fc18___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Minus.vue?vue&type=template&id=c1d7fc18& */ "./node_modules/vue-material-design-icons/Minus.vue?vue&type=template&id=c1d7fc18&");
+/* harmony import */ var _Minus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Minus.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/Minus.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Minus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Minus_vue_vue_type_template_id_c1d7fc18___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Minus_vue_vue_type_template_id_c1d7fc18___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/Minus.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Minus.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Minus.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_Minus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./Minus.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Minus.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_Minus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/Minus.vue?vue&type=template&id=c1d7fc18&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/Minus.vue?vue&type=template&id=c1d7fc18& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Minus_vue_vue_type_template_id_c1d7fc18___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./Minus.vue?vue&type=template&id=c1d7fc18& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/Minus.vue?vue&type=template&id=c1d7fc18&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Minus_vue_vue_type_template_id_c1d7fc18___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_Minus_vue_vue_type_template_id_c1d7fc18___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/users/tabs/following.vue":
+/*!**********************************************!*\
+ !*** ./src/modules/users/tabs/following.vue ***!
+ \**********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _following_vue_vue_type_template_id_83e6c6f0_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./following.vue?vue&type=template&id=83e6c6f0&scoped=true& */ "./src/modules/users/tabs/following.vue?vue&type=template&id=83e6c6f0&scoped=true&");
+/* harmony import */ var _following_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./following.vue?vue&type=script&lang=js& */ "./src/modules/users/tabs/following.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _following_vue_vue_type_style_index_0_id_83e6c6f0_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./following.vue?vue&type=style&index=0&id=83e6c6f0&lang=scss&scoped=true& */ "./src/modules/users/tabs/following.vue?vue&type=style&index=0&id=83e6c6f0&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _following_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _following_vue_vue_type_template_id_83e6c6f0_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _following_vue_vue_type_template_id_83e6c6f0_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ "83e6c6f0",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/users/tabs/following.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/users/tabs/following.vue?vue&type=script&lang=js&":
+/*!***********************************************************************!*\
+ !*** ./src/modules/users/tabs/following.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_following_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib??ref--4-0!../../../../node_modules/vue-loader/lib??vue-loader-options!./following.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/following.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_following_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/users/tabs/following.vue?vue&type=style&index=0&id=83e6c6f0&lang=scss&scoped=true&":
+/*!********************************************************************************************************!*\
+ !*** ./src/modules/users/tabs/following.vue?vue&type=style&index=0&id=83e6c6f0&lang=scss&scoped=true& ***!
+ \********************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_following_vue_vue_type_style_index_0_id_83e6c6f0_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../../../node_modules/style-loader!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src??ref--7-3!../../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../../node_modules/vue-loader/lib??vue-loader-options!./following.vue?vue&type=style&index=0&id=83e6c6f0&lang=scss&scoped=true& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/following.vue?vue&type=style&index=0&id=83e6c6f0&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_following_vue_vue_type_style_index_0_id_83e6c6f0_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_following_vue_vue_type_style_index_0_id_83e6c6f0_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_following_vue_vue_type_style_index_0_id_83e6c6f0_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_following_vue_vue_type_style_index_0_id_83e6c6f0_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_following_vue_vue_type_style_index_0_id_83e6c6f0_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/modules/users/tabs/following.vue?vue&type=template&id=83e6c6f0&scoped=true&":
+/*!*****************************************************************************************!*\
+ !*** ./src/modules/users/tabs/following.vue?vue&type=template&id=83e6c6f0&scoped=true& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_following_vue_vue_type_template_id_83e6c6f0_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./following.vue?vue&type=template&id=83e6c6f0&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/following.vue?vue&type=template&id=83e6c6f0&scoped=true&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_following_vue_vue_type_template_id_83e6c6f0_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_following_vue_vue_type_template_id_83e6c6f0_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/33.9520bc675d0bb780c44c.js b/public/33.9520bc675d0bb780c44c.js
new file mode 100644
index 00000000..93180863
--- /dev/null
+++ b/public/33.9520bc675d0bb780c44c.js
@@ -0,0 +1,426 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[33],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/pages/not-found.vue?vue&type=script&lang=js&":
+/*!**************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/pages/not-found.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $icons_AlertCircle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $icons/AlertCircle */ "./node_modules/vue-material-design-icons/AlertCircle.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'not-found',
+ components: {
+ AlertCircleIcon: $icons_AlertCircle__WEBPACK_IMPORTED_MODULE_0__["default"]
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/AlertCircle.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/AlertCircle.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: "AlertCircleIcon",
+ props: {
+ title: {
+ type: String,
+ default: "Alert Circle icon"
+ },
+ decorative: {
+ type: Boolean,
+ default: false
+ },
+ fillColor: {
+ type: String,
+ default: "currentColor"
+ },
+ size: {
+ type: Number,
+ default: 24
+ }
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/AlertCircle.vue?vue&type=template&id=7b52a7d0&":
+/*!*****************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/vue-material-design-icons/AlertCircle.vue?vue&type=template&id=7b52a7d0& ***!
+ \*****************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "span",
+ {
+ staticClass: "material-design-icon alert-circle-icon",
+ attrs: {
+ "aria-hidden": _vm.decorative,
+ "aria-label": _vm.title,
+ role: "img"
+ },
+ on: {
+ click: function($event) {
+ return _vm.$emit("click", $event)
+ }
+ }
+ },
+ [
+ _c(
+ "svg",
+ {
+ staticClass: "material-design-icon__svg",
+ attrs: {
+ fill: _vm.fillColor,
+ width: _vm.size,
+ height: _vm.size,
+ viewBox: "0 0 24 24"
+ }
+ },
+ [
+ _c(
+ "path",
+ {
+ attrs: {
+ d:
+ "M13,13H11V7H13M13,17H11V15H13M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z"
+ }
+ },
+ [_c("title", [_vm._v(_vm._s(_vm.title))])]
+ )
+ ]
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/pages/not-found.vue?vue&type=template&id=49cb9ea8&":
+/*!******************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/pages/not-found.vue?vue&type=template&id=49cb9ea8& ***!
+ \******************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "text-center p-5 text-gray-40" }, [
+ _c("div", { staticClass: "display-1" }, [_c("alert-circle-icon")], 1),
+ _vm._v(" "),
+ _c("div", { staticClass: "display-2" }, [_vm._v("404")]),
+ _vm._v(" "),
+ _c("div", { staticClass: "display-4" }, [_vm._v("页面未找到~")])
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
+/* globals __VUE_SSR_CONTEXT__ */
+
+// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
+// This module is a runtime utility for cleaner component module output and will
+// be included in the final webpack user bundle.
+
+function normalizeComponent (
+ scriptExports,
+ render,
+ staticRenderFns,
+ functionalTemplate,
+ injectStyles,
+ scopeId,
+ moduleIdentifier, /* server only */
+ shadowMode /* vue-cli only */
+) {
+ // Vue.extend constructor export interop
+ var options = typeof scriptExports === 'function'
+ ? scriptExports.options
+ : scriptExports
+
+ // render functions
+ if (render) {
+ options.render = render
+ options.staticRenderFns = staticRenderFns
+ options._compiled = true
+ }
+
+ // functional template
+ if (functionalTemplate) {
+ options.functional = true
+ }
+
+ // scopedId
+ if (scopeId) {
+ options._scopeId = 'data-v-' + scopeId
+ }
+
+ var hook
+ if (moduleIdentifier) { // server build
+ hook = function (context) {
+ // 2.3 injection
+ context =
+ context || // cached call
+ (this.$vnode && this.$vnode.ssrContext) || // stateful
+ (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
+ // 2.2 with runInNewContext: true
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
+ context = __VUE_SSR_CONTEXT__
+ }
+ // inject component styles
+ if (injectStyles) {
+ injectStyles.call(this, context)
+ }
+ // register component module identifier for async chunk inferrence
+ if (context && context._registeredComponents) {
+ context._registeredComponents.add(moduleIdentifier)
+ }
+ }
+ // used by ssr in case component is cached and beforeCreate
+ // never gets called
+ options._ssrRegister = hook
+ } else if (injectStyles) {
+ hook = shadowMode
+ ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
+ : injectStyles
+ }
+
+ if (hook) {
+ if (options.functional) {
+ // for template-only hot-reload because in that case the render fn doesn't
+ // go through the normalizer
+ options._injectStyles = hook
+ // register for functioal component in vue file
+ var originalRender = options.render
+ options.render = function renderWithStyleInjection (h, context) {
+ hook.call(context)
+ return originalRender(h, context)
+ }
+ } else {
+ // inject component registration as beforeCreate hook
+ var existing = options.beforeCreate
+ options.beforeCreate = existing
+ ? [].concat(existing, hook)
+ : [hook]
+ }
+ }
+
+ return {
+ exports: scriptExports,
+ options: options
+ }
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/AlertCircle.vue":
+/*!****************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/AlertCircle.vue ***!
+ \****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _AlertCircle_vue_vue_type_template_id_7b52a7d0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AlertCircle.vue?vue&type=template&id=7b52a7d0& */ "./node_modules/vue-material-design-icons/AlertCircle.vue?vue&type=template&id=7b52a7d0&");
+/* harmony import */ var _AlertCircle_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AlertCircle.vue?vue&type=script&lang=js& */ "./node_modules/vue-material-design-icons/AlertCircle.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _AlertCircle_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _AlertCircle_vue_vue_type_template_id_7b52a7d0___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _AlertCircle_vue_vue_type_template_id_7b52a7d0___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "node_modules/vue-material-design-icons/AlertCircle.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/AlertCircle.vue?vue&type=script&lang=js&":
+/*!*****************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/AlertCircle.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_AlertCircle_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib??vue-loader-options!./AlertCircle.vue?vue&type=script&lang=js& */ "./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/AlertCircle.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_vue_loader_lib_index_js_vue_loader_options_AlertCircle_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./node_modules/vue-material-design-icons/AlertCircle.vue?vue&type=template&id=7b52a7d0&":
+/*!***********************************************************************************************!*\
+ !*** ./node_modules/vue-material-design-icons/AlertCircle.vue?vue&type=template&id=7b52a7d0& ***!
+ \***********************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_AlertCircle_vue_vue_type_template_id_7b52a7d0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../vue-loader/lib??vue-loader-options!./AlertCircle.vue?vue&type=template&id=7b52a7d0& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./node_modules/vue-material-design-icons/AlertCircle.vue?vue&type=template&id=7b52a7d0&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_AlertCircle_vue_vue_type_template_id_7b52a7d0___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _vue_loader_lib_loaders_templateLoader_js_vue_loader_options_vue_loader_lib_index_js_vue_loader_options_AlertCircle_vue_vue_type_template_id_7b52a7d0___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/pages/not-found.vue":
+/*!*****************************************!*\
+ !*** ./src/modules/pages/not-found.vue ***!
+ \*****************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _not_found_vue_vue_type_template_id_49cb9ea8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./not-found.vue?vue&type=template&id=49cb9ea8& */ "./src/modules/pages/not-found.vue?vue&type=template&id=49cb9ea8&");
+/* harmony import */ var _not_found_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./not-found.vue?vue&type=script&lang=js& */ "./src/modules/pages/not-found.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _not_found_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _not_found_vue_vue_type_template_id_49cb9ea8___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _not_found_vue_vue_type_template_id_49cb9ea8___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/pages/not-found.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/pages/not-found.vue?vue&type=script&lang=js&":
+/*!******************************************************************!*\
+ !*** ./src/modules/pages/not-found.vue?vue&type=script&lang=js& ***!
+ \******************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_not_found_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./not-found.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/pages/not-found.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_not_found_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/pages/not-found.vue?vue&type=template&id=49cb9ea8&":
+/*!************************************************************************!*\
+ !*** ./src/modules/pages/not-found.vue?vue&type=template&id=49cb9ea8& ***!
+ \************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_not_found_vue_vue_type_template_id_49cb9ea8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./not-found.vue?vue&type=template&id=49cb9ea8& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/pages/not-found.vue?vue&type=template&id=49cb9ea8&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_not_found_vue_vue_type_template_id_49cb9ea8___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_not_found_vue_vue_type_template_id_49cb9ea8___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/34.c36a6175297d0182cf45.js b/public/34.c36a6175297d0182cf45.js
new file mode 100644
index 00000000..28808754
--- /dev/null
+++ b/public/34.c36a6175297d0182cf45.js
@@ -0,0 +1,572 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[34],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/socialite-login.vue?vue&type=script&lang=js&":
+/*!*****************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/socialite-login.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var $icons_GooglePlus__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! $icons/GooglePlus */ "./node_modules/vue-material-design-icons/GooglePlus.vue");
+/* harmony import */ var $icons_Facebook__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $icons/Facebook */ "./node_modules/vue-material-design-icons/Facebook.vue");
+/* harmony import */ var $icons_Qqchat__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $icons/Qqchat */ "./node_modules/vue-material-design-icons/Qqchat.vue");
+/* harmony import */ var $icons_GithubCircle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $icons/GithubCircle */ "./node_modules/vue-material-design-icons/GithubCircle.vue");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'oauth-btn',
+ components: {
+ GooglePlus: $icons_GooglePlus__WEBPACK_IMPORTED_MODULE_0__["default"],
+ FacebookIcon: $icons_Facebook__WEBPACK_IMPORTED_MODULE_1__["default"],
+ QqIcon: $icons_Qqchat__WEBPACK_IMPORTED_MODULE_2__["default"],
+ GithubIcon: $icons_GithubCircle__WEBPACK_IMPORTED_MODULE_3__["default"]
+ },
+ methods: {
+ oauth: function oauth(platform) {
+ var iOSChrome = /Mobile/.test(navigator.userAgent) && /CriOS/.test(navigator.userAgent);
+ var url = '/auth/oauth-redirect/' + platform;
+
+ if (iOSChrome) {
+ window.location.href = url;
+ } else {
+ var windowObjectReference = null;
+
+ if (windowObjectReference == null || windowObjectReference.closed) {
+ var heights = {
+ github: 680,
+ google: 540,
+ facebook: 700
+ };
+ windowObjectReference = this.popupCenter(url, '_blank', 500, heights[platform]);
+ } else {
+ windowObjectReference.focus();
+ }
+ }
+ },
+ popupCenter: function popupCenter(url, title, w, h) {
+ // Fixes dual-screen position Most browsers Firefox
+ var dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : window.screenX;
+ var dualScreenTop = window.screenTop !== undefined ? window.screenTop : window.screenY;
+ var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : window.screen.width;
+ var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : window.screen.height;
+ var left = width / 2 - w / 2 + dualScreenLeft;
+ var top = height / 2 - h / 2 + dualScreenTop;
+ var newWindow = window.open(url, title, 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); // Puts focus on the newWindow
+
+ if (window.focus) {
+ newWindow.focus();
+ }
+
+ return newWindow;
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/login.vue?vue&type=script&lang=js&":
+/*!*********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/auth/login.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js");
+/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+/* harmony import */ var $components_socialite_login__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $components/socialite-login */ "./src/components/socialite-login.vue");
+
+
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ data: function data() {
+ return {
+ username: '',
+ password: ''
+ };
+ },
+ components: {
+ SocialiteBtns: $components_socialite_login__WEBPACK_IMPORTED_MODULE_2__["default"]
+ },
+ methods: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_1__["mapActions"])(['attemptLogin']), {
+ submit: function () {
+ var _submit = _asyncToGenerator(
+ /*#__PURE__*/
+ _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee() {
+ var username, password;
+ return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ username = this.username, password = this.password;
+ _context.prev = 1;
+ _context.next = 4;
+ return this.attemptLogin({
+ username: username,
+ password: password
+ });
+
+ case 4:
+ this.$message.success('欢迎回来~');
+ this.$router.push({
+ name: 'home'
+ });
+ _context.next = 11;
+ break;
+
+ case 8:
+ _context.prev = 8;
+ _context.t0 = _context["catch"](1);
+
+ if (_context.t0.status !== 422) {
+ this.$message.error('账号密码错误!');
+ }
+
+ case 11:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, this, [[1, 8]]);
+ }));
+
+ function submit() {
+ return _submit.apply(this, arguments);
+ }
+
+ return submit;
+ }()
+ })
+});
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/socialite-login.vue?vue&type=template&id=201c8d6e&":
+/*!*********************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/socialite-login.vue?vue&type=template&id=201c8d6e& ***!
+ \*********************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ {
+ staticClass:
+ "oauth-btns d-flex align-items-center justify-content-between"
+ },
+ [
+ _c(
+ "div",
+ {
+ staticClass: "text-20 btn mx-1 btn-icon btn-dark",
+ on: {
+ click: function($event) {
+ return _vm.oauth("github")
+ }
+ }
+ },
+ [_c("github-icon")],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "text-20 btn mx-1 btn-icon btn-pink",
+ on: {
+ click: function($event) {
+ return _vm.oauth("google")
+ }
+ }
+ },
+ [_c("google-plus")],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "text-20 btn mx-1 btn-icon btn-facebook",
+ on: {
+ click: function($event) {
+ return _vm.oauth("facebook")
+ }
+ }
+ },
+ [_c("facebook-icon")],
+ 1
+ )
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/login.vue?vue&type=template&id=f60e4b3a&":
+/*!*************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/auth/login.vue?vue&type=template&id=f60e4b3a& ***!
+ \*************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "row pt-3" }, [
+ _c("div", { staticClass: "offset-sm-4 col-sm-4" }, [
+ _c("div", { staticClass: "box" }, [
+ _c("h4", { staticClass: "text-center font-weight-normal mt-2" }, [
+ _vm._v("用户登录")
+ ]),
+ _vm._v(" "),
+ _c(
+ "form",
+ {
+ on: {
+ submit: function($event) {
+ $event.preventDefault()
+ return _vm.submit($event)
+ }
+ }
+ },
+ [
+ _c("div", { staticClass: "form-group" }, [
+ _vm._m(0),
+ _vm._v(" "),
+ _c("input", {
+ directives: [
+ {
+ name: "model",
+ rawName: "v-model",
+ value: _vm.username,
+ expression: "username"
+ }
+ ],
+ staticClass: "form-control",
+ attrs: { type: "text", required: "" },
+ domProps: { value: _vm.username },
+ on: {
+ input: function($event) {
+ if ($event.target.composing) {
+ return
+ }
+ _vm.username = $event.target.value
+ }
+ }
+ })
+ ]),
+ _vm._v(" "),
+ _c("div", { staticClass: "form-group" }, [
+ _c("label", [_vm._v("密码")]),
+ _vm._v(" "),
+ _c("input", {
+ directives: [
+ {
+ name: "model",
+ rawName: "v-model",
+ value: _vm.password,
+ expression: "password"
+ }
+ ],
+ staticClass: "form-control",
+ attrs: { type: "password", required: "" },
+ domProps: { value: _vm.password },
+ on: {
+ input: function($event) {
+ if ($event.target.composing) {
+ return
+ }
+ _vm.password = $event.target.value
+ }
+ }
+ })
+ ]),
+ _vm._v(" "),
+ _c(
+ "button",
+ {
+ staticClass: "my-2 btn btn-primary w-100",
+ attrs: { type: "submit" }
+ },
+ [_vm._v("登录")]
+ )
+ ]
+ ),
+ _vm._v(" "),
+ _c("div", { staticClass: "mb-2 d-flex justify-content-around" })
+ ])
+ ]),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass:
+ "offset-sm-4 col-sm-4 text-center mt-2 d-flex justify-content-between"
+ },
+ [
+ _c(
+ "p",
+ [
+ _vm._v("没有账号? "),
+ _c(
+ "router-link",
+ {
+ staticClass: "text-blue",
+ attrs: { to: { name: "auth.register" } }
+ },
+ [_vm._v("快速注册")]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "p",
+ [
+ _c(
+ "router-link",
+ {
+ staticClass: "text-blue",
+ attrs: { to: { name: "auth.forget-password" } }
+ },
+ [_vm._v("忘记密码?")]
+ )
+ ],
+ 1
+ )
+ ]
+ )
+ ])
+}
+var staticRenderFns = [
+ function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("label", [_vm._v("用户名"), _c("small", [_vm._v("(或邮箱)")])])
+ }
+]
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./src/components/socialite-login.vue":
+/*!********************************************!*\
+ !*** ./src/components/socialite-login.vue ***!
+ \********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _socialite_login_vue_vue_type_template_id_201c8d6e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./socialite-login.vue?vue&type=template&id=201c8d6e& */ "./src/components/socialite-login.vue?vue&type=template&id=201c8d6e&");
+/* harmony import */ var _socialite_login_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./socialite-login.vue?vue&type=script&lang=js& */ "./src/components/socialite-login.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _socialite_login_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _socialite_login_vue_vue_type_template_id_201c8d6e___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _socialite_login_vue_vue_type_template_id_201c8d6e___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/components/socialite-login.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/components/socialite-login.vue?vue&type=script&lang=js&":
+/*!*********************************************************************!*\
+ !*** ./src/components/socialite-login.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_socialite_login_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--4-0!../../node_modules/vue-loader/lib??vue-loader-options!./socialite-login.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/components/socialite-login.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_socialite_login_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/components/socialite-login.vue?vue&type=template&id=201c8d6e&":
+/*!***************************************************************************!*\
+ !*** ./src/components/socialite-login.vue?vue&type=template&id=201c8d6e& ***!
+ \***************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_socialite_login_vue_vue_type_template_id_201c8d6e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./socialite-login.vue?vue&type=template&id=201c8d6e& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/socialite-login.vue?vue&type=template&id=201c8d6e&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_socialite_login_vue_vue_type_template_id_201c8d6e___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_socialite_login_vue_vue_type_template_id_201c8d6e___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./src/modules/auth/login.vue":
+/*!************************************!*\
+ !*** ./src/modules/auth/login.vue ***!
+ \************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _login_vue_vue_type_template_id_f60e4b3a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./login.vue?vue&type=template&id=f60e4b3a& */ "./src/modules/auth/login.vue?vue&type=template&id=f60e4b3a&");
+/* harmony import */ var _login_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./login.vue?vue&type=script&lang=js& */ "./src/modules/auth/login.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _login_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _login_vue_vue_type_template_id_f60e4b3a___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _login_vue_vue_type_template_id_f60e4b3a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/auth/login.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/auth/login.vue?vue&type=script&lang=js&":
+/*!*************************************************************!*\
+ !*** ./src/modules/auth/login.vue?vue&type=script&lang=js& ***!
+ \*************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./login.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/login.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/auth/login.vue?vue&type=template&id=f60e4b3a&":
+/*!*******************************************************************!*\
+ !*** ./src/modules/auth/login.vue?vue&type=template&id=f60e4b3a& ***!
+ \*******************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_template_id_f60e4b3a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./login.vue?vue&type=template&id=f60e4b3a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/login.vue?vue&type=template&id=f60e4b3a&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_template_id_f60e4b3a___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_template_id_f60e4b3a___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/35.483e497d4563c1a5d184.js b/public/35.483e497d4563c1a5d184.js
new file mode 100644
index 00000000..9259bb54
--- /dev/null
+++ b/public/35.483e497d4563c1a5d184.js
@@ -0,0 +1,145 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[35],{
+
+/***/ "./node_modules/css-loader/dist/cjs.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/typeface-ubuntu-mono/index.css":
+/*!*************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js??ref--6-2!./node_modules/postcss-loader/src??ref--6-3!./node_modules/typeface-ubuntu-mono/index.css ***!
+ \*************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Imports
+var getUrl = __webpack_require__(/*! ../css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js");
+var ___CSS_LOADER_URL___0___ = getUrl(__webpack_require__(/*! ./files/ubuntu-mono-latin-400.woff2 */ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-400.woff2"));
+var ___CSS_LOADER_URL___1___ = getUrl(__webpack_require__(/*! ./files/ubuntu-mono-latin-400.woff */ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-400.woff"));
+var ___CSS_LOADER_URL___2___ = getUrl(__webpack_require__(/*! ./files/ubuntu-mono-latin-400italic.woff2 */ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-400italic.woff2"));
+var ___CSS_LOADER_URL___3___ = getUrl(__webpack_require__(/*! ./files/ubuntu-mono-latin-400italic.woff */ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-400italic.woff"));
+var ___CSS_LOADER_URL___4___ = getUrl(__webpack_require__(/*! ./files/ubuntu-mono-latin-700.woff2 */ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-700.woff2"));
+var ___CSS_LOADER_URL___5___ = getUrl(__webpack_require__(/*! ./files/ubuntu-mono-latin-700.woff */ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-700.woff"));
+var ___CSS_LOADER_URL___6___ = getUrl(__webpack_require__(/*! ./files/ubuntu-mono-latin-700italic.woff2 */ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-700italic.woff2"));
+var ___CSS_LOADER_URL___7___ = getUrl(__webpack_require__(/*! ./files/ubuntu-mono-latin-700italic.woff */ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-700italic.woff"));
+// Module
+exports.push([module.i, "/* ubuntu-mono-400normal - latin */\n@font-face {\n font-family: 'Ubuntu Mono';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src:\n local('Ubuntu Mono Regular '),\n local('Ubuntu Mono-Regular'),\n url(" + ___CSS_LOADER_URL___0___ + ") format('woff2'), \n url(" + ___CSS_LOADER_URL___1___ + ") format('woff'); /* Modern Browsers */\n}\n\n/* ubuntu-mono-400italic - latin */\n@font-face {\n font-family: 'Ubuntu Mono';\n font-style: italic;\n font-display: swap;\n font-weight: 400;\n src:\n local('Ubuntu Mono Regular italic'),\n local('Ubuntu Mono-Regularitalic'),\n url(" + ___CSS_LOADER_URL___2___ + ") format('woff2'), \n url(" + ___CSS_LOADER_URL___3___ + ") format('woff'); /* Modern Browsers */\n}\n\n/* ubuntu-mono-700normal - latin */\n@font-face {\n font-family: 'Ubuntu Mono';\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src:\n local('Ubuntu Mono Bold '),\n local('Ubuntu Mono-Bold'),\n url(" + ___CSS_LOADER_URL___4___ + ") format('woff2'), \n url(" + ___CSS_LOADER_URL___5___ + ") format('woff'); /* Modern Browsers */\n}\n\n/* ubuntu-mono-700italic - latin */\n@font-face {\n font-family: 'Ubuntu Mono';\n font-style: italic;\n font-display: swap;\n font-weight: 700;\n src:\n local('Ubuntu Mono Bold italic'),\n local('Ubuntu Mono-Bolditalic'),\n url(" + ___CSS_LOADER_URL___6___ + ") format('woff2'), \n url(" + ___CSS_LOADER_URL___7___ + ") format('woff'); /* Modern Browsers */\n}\n\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-400.woff":
+/*!****************************************************************************!*\
+ !*** ./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-400.woff ***!
+ \****************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = "/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400.woff?84924f07cdf2bc11727cbdb92bdecb60";
+
+/***/ }),
+
+/***/ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-400.woff2":
+/*!*****************************************************************************!*\
+ !*** ./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-400.woff2 ***!
+ \*****************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = "/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400.woff2?469ee47867fa81c9eb1677cb6df36493";
+
+/***/ }),
+
+/***/ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-400italic.woff":
+/*!**********************************************************************************!*\
+ !*** ./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-400italic.woff ***!
+ \**********************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = "/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400italic.woff?cb47101ae05a75cababcf320c3f18521";
+
+/***/ }),
+
+/***/ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-400italic.woff2":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-400italic.woff2 ***!
+ \***********************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = "/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-400italic.woff2?b058de1ff02721b7c227749a6842c386";
+
+/***/ }),
+
+/***/ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-700.woff":
+/*!****************************************************************************!*\
+ !*** ./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-700.woff ***!
+ \****************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = "/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700.woff?ad755437adc718d060c2ebe9e76b47f6";
+
+/***/ }),
+
+/***/ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-700.woff2":
+/*!*****************************************************************************!*\
+ !*** ./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-700.woff2 ***!
+ \*****************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = "/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700.woff2?5fb8b6fc36c4131b485e76b5834c02f7";
+
+/***/ }),
+
+/***/ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-700italic.woff":
+/*!**********************************************************************************!*\
+ !*** ./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-700italic.woff ***!
+ \**********************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = "/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700italic.woff?449ed936ed1e019ed9115637e3d8549c";
+
+/***/ }),
+
+/***/ "./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-700italic.woff2":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/typeface-ubuntu-mono/files/ubuntu-mono-latin-700italic.woff2 ***!
+ \***********************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = "/fonts/vendor/typeface-ubuntu-mono/files/ubuntu-mono-latin-700italic.woff2?5c6270425bb30b6ba25abbb42c628221";
+
+/***/ }),
+
+/***/ "./node_modules/typeface-ubuntu-mono/index.css":
+/*!*****************************************************!*\
+ !*** ./node_modules/typeface-ubuntu-mono/index.css ***!
+ \*****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../css-loader/dist/cjs.js??ref--6-2!../postcss-loader/src??ref--6-3!./index.css */ "./node_modules/css-loader/dist/cjs.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/typeface-ubuntu-mono/index.css");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/36.a16ce06c2846dd84f6b3.js b/public/36.a16ce06c2846dd84f6b3.js
new file mode 100644
index 00000000..f0782e0b
--- /dev/null
+++ b/public/36.a16ce06c2846dd84f6b3.js
@@ -0,0 +1,288 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[36],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/followers.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/tabs/followers.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js");
+/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+/* harmony import */ var $components_empty_state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $components/empty-state */ "./src/components/empty-state.vue");
+/* harmony import */ var $components_user_list_item__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $components/user-list-item */ "./src/components/user-list-item.vue");
+/* harmony import */ var $components_paginator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! $components/paginator */ "./src/components/paginator.vue");
+/* harmony import */ var $icons_Email__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! $icons/Email */ "./node_modules/vue-material-design-icons/Email.vue");
+/* harmony import */ var $icons_Plus__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! $icons/Plus */ "./node_modules/vue-material-design-icons/Plus.vue");
+
+
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'user-followers',
+ components: {
+ UserListItem: $components_user_list_item__WEBPACK_IMPORTED_MODULE_3__["default"],
+ EmptyState: $components_empty_state__WEBPACK_IMPORTED_MODULE_2__["default"],
+ Paginator: $components_paginator__WEBPACK_IMPORTED_MODULE_4__["default"],
+ PlusIcon: $icons_Plus__WEBPACK_IMPORTED_MODULE_6__["default"],
+ EmailIcon: $icons_Email__WEBPACK_IMPORTED_MODULE_5__["default"]
+ },
+ data: function data() {
+ return {
+ users: []
+ };
+ },
+ created: function created() {
+ this.followers();
+ },
+ computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_1__["mapGetters"])(['currentUser'])),
+ methods: {
+ followers: function () {
+ var _followers = _asyncToGenerator(
+ /*#__PURE__*/
+ _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee() {
+ return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ _context.next = 2;
+ return this.$http.get("user/".concat(this.$parent.user.username, "/followers"));
+
+ case 2:
+ this.users = _context.sent;
+
+ case 3:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, this);
+ }));
+
+ function followers() {
+ return _followers.apply(this, arguments);
+ }
+
+ return followers;
+ }()
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/followers.vue?vue&type=style&index=0&id=1c1fa7e8&lang=scss&scoped=true&":
+/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/tabs/followers.vue?vue&type=style&index=0&id=1c1fa7e8&lang=scss&scoped=true& ***!
+ \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
+// Module
+exports.push([module.i, ".form-control[data-v-1c1fa7e8]:focus {\n border: none;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n", ""]);
+
+
+/***/ }),
+
+/***/ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/followers.vue?vue&type=style&index=0&id=1c1fa7e8&lang=scss&scoped=true&":
+/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!./node_modules/style-loader!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-3!./node_modules/sass-loader/lib/loader.js??ref--7-4!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/tabs/followers.vue?vue&type=style&index=0&id=1c1fa7e8&lang=scss&scoped=true& ***!
+ \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(/*! !../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src??ref--7-3!../../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../../node_modules/vue-loader/lib??vue-loader-options!./followers.vue?vue&type=style&index=0&id=1c1fa7e8&lang=scss&scoped=true& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/followers.vue?vue&type=style&index=0&id=1c1fa7e8&lang=scss&scoped=true&");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(/*! ../../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/followers.vue?vue&type=template&id=1c1fa7e8&scoped=true&":
+/*!***********************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/users/tabs/followers.vue?vue&type=template&id=1c1fa7e8&scoped=true& ***!
+ \***********************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "box box-flush" }, [
+ _c(
+ "div",
+ { staticClass: "list-group list-group-flush" },
+ [
+ _vm._l(_vm.users.data, function(user) {
+ return _c("user-list-item", {
+ key: user.id,
+ staticClass: "list-group-item",
+ attrs: { user: user }
+ })
+ }),
+ _vm._v(" "),
+ _vm.users.data && _vm.users.data.length == 0
+ ? _c("empty-state")
+ : _vm._e(),
+ _vm._v(" "),
+ _c("paginator", { attrs: { meta: _vm.users.meta } })
+ ],
+ 2
+ ),
+ _vm._v(" "),
+ false
+ ? undefined
+ : _vm._e()
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./src/modules/users/tabs/followers.vue":
+/*!**********************************************!*\
+ !*** ./src/modules/users/tabs/followers.vue ***!
+ \**********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _followers_vue_vue_type_template_id_1c1fa7e8_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./followers.vue?vue&type=template&id=1c1fa7e8&scoped=true& */ "./src/modules/users/tabs/followers.vue?vue&type=template&id=1c1fa7e8&scoped=true&");
+/* harmony import */ var _followers_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./followers.vue?vue&type=script&lang=js& */ "./src/modules/users/tabs/followers.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _followers_vue_vue_type_style_index_0_id_1c1fa7e8_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./followers.vue?vue&type=style&index=0&id=1c1fa7e8&lang=scss&scoped=true& */ "./src/modules/users/tabs/followers.vue?vue&type=style&index=0&id=1c1fa7e8&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _followers_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _followers_vue_vue_type_template_id_1c1fa7e8_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _followers_vue_vue_type_template_id_1c1fa7e8_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ "1c1fa7e8",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/users/tabs/followers.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/users/tabs/followers.vue?vue&type=script&lang=js&":
+/*!***********************************************************************!*\
+ !*** ./src/modules/users/tabs/followers.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_followers_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib??ref--4-0!../../../../node_modules/vue-loader/lib??vue-loader-options!./followers.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/followers.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_followers_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/users/tabs/followers.vue?vue&type=style&index=0&id=1c1fa7e8&lang=scss&scoped=true&":
+/*!********************************************************************************************************!*\
+ !*** ./src/modules/users/tabs/followers.vue?vue&type=style&index=0&id=1c1fa7e8&lang=scss&scoped=true& ***!
+ \********************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_followers_vue_vue_type_style_index_0_id_1c1fa7e8_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js??ref--7-0!../../../../node_modules/style-loader!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src??ref--7-3!../../../../node_modules/sass-loader/lib/loader.js??ref--7-4!../../../../node_modules/vue-loader/lib??vue-loader-options!./followers.vue?vue&type=style&index=0&id=1c1fa7e8&lang=scss&scoped=true& */ "./node_modules/laravel-mix/node_modules/extract-text-webpack-plugin/dist/loader.js?!./node_modules/style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/followers.vue?vue&type=style&index=0&id=1c1fa7e8&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_followers_vue_vue_type_style_index_0_id_1c1fa7e8_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_followers_vue_vue_type_style_index_0_id_1c1fa7e8_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_followers_vue_vue_type_style_index_0_id_1c1fa7e8_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_followers_vue_vue_type_style_index_0_id_1c1fa7e8_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_laravel_mix_node_modules_extract_text_webpack_plugin_dist_loader_js_ref_7_0_node_modules_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_3_node_modules_sass_loader_lib_loader_js_ref_7_4_node_modules_vue_loader_lib_index_js_vue_loader_options_followers_vue_vue_type_style_index_0_id_1c1fa7e8_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a);
+
+/***/ }),
+
+/***/ "./src/modules/users/tabs/followers.vue?vue&type=template&id=1c1fa7e8&scoped=true&":
+/*!*****************************************************************************************!*\
+ !*** ./src/modules/users/tabs/followers.vue?vue&type=template&id=1c1fa7e8&scoped=true& ***!
+ \*****************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_followers_vue_vue_type_template_id_1c1fa7e8_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./followers.vue?vue&type=template&id=1c1fa7e8&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/users/tabs/followers.vue?vue&type=template&id=1c1fa7e8&scoped=true&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_followers_vue_vue_type_template_id_1c1fa7e8_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_followers_vue_vue_type_template_id_1c1fa7e8_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/37.71b575d6ef77dea8533c.js b/public/37.71b575d6ef77dea8533c.js
new file mode 100644
index 00000000..ff0520b0
--- /dev/null
+++ b/public/37.71b575d6ef77dea8533c.js
@@ -0,0 +1,303 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[37],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/forget-password.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/auth/forget-password.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+/* harmony default export */ __webpack_exports__["default"] = ({
+ data: function data() {
+ return {
+ email: ''
+ };
+ },
+ methods: {
+ submit: function submit() {
+ var _this = this;
+
+ this.$http.post('user/forget-password', {
+ email: this.email
+ }).then(function () {
+ _this.$message.success('邮件发送成功,请及时查看您的邮箱!');
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/forget-password.vue?vue&type=template&id=5bae15f5&":
+/*!***********************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/auth/forget-password.vue?vue&type=template&id=5bae15f5& ***!
+ \***********************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "row pt-3" }, [
+ _c("div", { staticClass: "offset-sm-4 col-sm-4" }, [
+ _c("div", { staticClass: "box" }, [
+ _c("h4", { staticClass: "text-center font-weight-normal mt-2 pb-2" }, [
+ _vm._v("忘记密码")
+ ]),
+ _vm._v(" "),
+ _c(
+ "form",
+ {
+ on: {
+ submit: function($event) {
+ $event.preventDefault()
+ return _vm.submit($event)
+ }
+ }
+ },
+ [
+ _c("div", { staticClass: "form-group input-group" }, [
+ _c("input", {
+ directives: [
+ {
+ name: "model",
+ rawName: "v-model",
+ value: _vm.email,
+ expression: "email"
+ }
+ ],
+ staticClass: "form-control",
+ attrs: { type: "text", placeholder: "请输入邮箱地址" },
+ domProps: { value: _vm.email },
+ on: {
+ input: function($event) {
+ if ($event.target.composing) {
+ return
+ }
+ _vm.email = $event.target.value
+ }
+ }
+ })
+ ]),
+ _vm._v(" "),
+ _c(
+ "button",
+ {
+ staticClass: "my-2 btn btn-primary w-100 btn-sm",
+ attrs: { type: "submit" }
+ },
+ [_vm._v("发送邮件")]
+ )
+ ]
+ )
+ ])
+ ])
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
+/* globals __VUE_SSR_CONTEXT__ */
+
+// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
+// This module is a runtime utility for cleaner component module output and will
+// be included in the final webpack user bundle.
+
+function normalizeComponent (
+ scriptExports,
+ render,
+ staticRenderFns,
+ functionalTemplate,
+ injectStyles,
+ scopeId,
+ moduleIdentifier, /* server only */
+ shadowMode /* vue-cli only */
+) {
+ // Vue.extend constructor export interop
+ var options = typeof scriptExports === 'function'
+ ? scriptExports.options
+ : scriptExports
+
+ // render functions
+ if (render) {
+ options.render = render
+ options.staticRenderFns = staticRenderFns
+ options._compiled = true
+ }
+
+ // functional template
+ if (functionalTemplate) {
+ options.functional = true
+ }
+
+ // scopedId
+ if (scopeId) {
+ options._scopeId = 'data-v-' + scopeId
+ }
+
+ var hook
+ if (moduleIdentifier) { // server build
+ hook = function (context) {
+ // 2.3 injection
+ context =
+ context || // cached call
+ (this.$vnode && this.$vnode.ssrContext) || // stateful
+ (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
+ // 2.2 with runInNewContext: true
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
+ context = __VUE_SSR_CONTEXT__
+ }
+ // inject component styles
+ if (injectStyles) {
+ injectStyles.call(this, context)
+ }
+ // register component module identifier for async chunk inferrence
+ if (context && context._registeredComponents) {
+ context._registeredComponents.add(moduleIdentifier)
+ }
+ }
+ // used by ssr in case component is cached and beforeCreate
+ // never gets called
+ options._ssrRegister = hook
+ } else if (injectStyles) {
+ hook = shadowMode
+ ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
+ : injectStyles
+ }
+
+ if (hook) {
+ if (options.functional) {
+ // for template-only hot-reload because in that case the render fn doesn't
+ // go through the normalizer
+ options._injectStyles = hook
+ // register for functioal component in vue file
+ var originalRender = options.render
+ options.render = function renderWithStyleInjection (h, context) {
+ hook.call(context)
+ return originalRender(h, context)
+ }
+ } else {
+ // inject component registration as beforeCreate hook
+ var existing = options.beforeCreate
+ options.beforeCreate = existing
+ ? [].concat(existing, hook)
+ : [hook]
+ }
+ }
+
+ return {
+ exports: scriptExports,
+ options: options
+ }
+}
+
+
+/***/ }),
+
+/***/ "./src/modules/auth/forget-password.vue":
+/*!**********************************************!*\
+ !*** ./src/modules/auth/forget-password.vue ***!
+ \**********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _forget_password_vue_vue_type_template_id_5bae15f5___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./forget-password.vue?vue&type=template&id=5bae15f5& */ "./src/modules/auth/forget-password.vue?vue&type=template&id=5bae15f5&");
+/* harmony import */ var _forget_password_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./forget-password.vue?vue&type=script&lang=js& */ "./src/modules/auth/forget-password.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _forget_password_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _forget_password_vue_vue_type_template_id_5bae15f5___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _forget_password_vue_vue_type_template_id_5bae15f5___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/auth/forget-password.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/auth/forget-password.vue?vue&type=script&lang=js&":
+/*!***********************************************************************!*\
+ !*** ./src/modules/auth/forget-password.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_forget_password_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./forget-password.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/forget-password.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_forget_password_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/auth/forget-password.vue?vue&type=template&id=5bae15f5&":
+/*!*****************************************************************************!*\
+ !*** ./src/modules/auth/forget-password.vue?vue&type=template&id=5bae15f5& ***!
+ \*****************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_forget_password_vue_vue_type_template_id_5bae15f5___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./forget-password.vue?vue&type=template&id=5bae15f5& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/forget-password.vue?vue&type=template&id=5bae15f5&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_forget_password_vue_vue_type_template_id_5bae15f5___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_forget_password_vue_vue_type_template_id_5bae15f5___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/38.860cbe75296d6bf490b9.js b/public/38.860cbe75296d6bf490b9.js
new file mode 100644
index 00000000..7368d00d
--- /dev/null
+++ b/public/38.860cbe75296d6bf490b9.js
@@ -0,0 +1,343 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[38],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/reset-password.vue?vue&type=script&lang=js&":
+/*!******************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/auth/reset-password.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ data: function data() {
+ return {
+ password: '',
+ password_confirmation: ''
+ };
+ },
+ methods: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_0__["mapActions"])(['logout']), {
+ submit: function submit() {
+ this.$http.post('user/reset-password', {
+ token: this.$route.query.token,
+ email: this.$route.query.email,
+ password: this.password,
+ password_confirmation: this.password_confirmation
+ });
+ this.logout();
+ this.$router.push({
+ name: 'auth.login'
+ });
+ this.$message.success('成功修改密码,请重新登录!');
+ }
+ })
+});
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/reset-password.vue?vue&type=template&id=8c035e62&":
+/*!**********************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/auth/reset-password.vue?vue&type=template&id=8c035e62& ***!
+ \**********************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "row pt-3" }, [
+ _c("div", { staticClass: "offset-sm-4 col-sm-4" }, [
+ _c("div", { staticClass: "box" }, [
+ _c("h4", { staticClass: "text-center font-weight-normal mt-2 pb-2" }, [
+ _vm._v("重置密码")
+ ]),
+ _vm._v(" "),
+ _c(
+ "form",
+ {
+ on: {
+ submit: function($event) {
+ $event.preventDefault()
+ return _vm.submit($event)
+ }
+ }
+ },
+ [
+ _c("div", { staticClass: "form-group input-group" }, [
+ _c("input", {
+ directives: [
+ {
+ name: "model",
+ rawName: "v-model",
+ value: _vm.password,
+ expression: "password"
+ }
+ ],
+ staticClass: "form-control",
+ attrs: { type: "password", placeholder: "请输入密码" },
+ domProps: { value: _vm.password },
+ on: {
+ input: function($event) {
+ if ($event.target.composing) {
+ return
+ }
+ _vm.password = $event.target.value
+ }
+ }
+ })
+ ]),
+ _vm._v(" "),
+ _c("div", { staticClass: "form-group input-group" }, [
+ _c("input", {
+ directives: [
+ {
+ name: "model",
+ rawName: "v-model",
+ value: _vm.password_confirmation,
+ expression: "password_confirmation"
+ }
+ ],
+ staticClass: "form-control",
+ attrs: { type: "password", placeholder: "请输入确认密码" },
+ domProps: { value: _vm.password_confirmation },
+ on: {
+ input: function($event) {
+ if ($event.target.composing) {
+ return
+ }
+ _vm.password_confirmation = $event.target.value
+ }
+ }
+ })
+ ]),
+ _vm._v(" "),
+ _c(
+ "button",
+ {
+ staticClass: "my-2 btn btn-primary w-100 btn-sm",
+ attrs: { type: "submit" }
+ },
+ [_vm._v("修改密码")]
+ )
+ ]
+ )
+ ])
+ ])
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
+/* globals __VUE_SSR_CONTEXT__ */
+
+// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
+// This module is a runtime utility for cleaner component module output and will
+// be included in the final webpack user bundle.
+
+function normalizeComponent (
+ scriptExports,
+ render,
+ staticRenderFns,
+ functionalTemplate,
+ injectStyles,
+ scopeId,
+ moduleIdentifier, /* server only */
+ shadowMode /* vue-cli only */
+) {
+ // Vue.extend constructor export interop
+ var options = typeof scriptExports === 'function'
+ ? scriptExports.options
+ : scriptExports
+
+ // render functions
+ if (render) {
+ options.render = render
+ options.staticRenderFns = staticRenderFns
+ options._compiled = true
+ }
+
+ // functional template
+ if (functionalTemplate) {
+ options.functional = true
+ }
+
+ // scopedId
+ if (scopeId) {
+ options._scopeId = 'data-v-' + scopeId
+ }
+
+ var hook
+ if (moduleIdentifier) { // server build
+ hook = function (context) {
+ // 2.3 injection
+ context =
+ context || // cached call
+ (this.$vnode && this.$vnode.ssrContext) || // stateful
+ (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
+ // 2.2 with runInNewContext: true
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
+ context = __VUE_SSR_CONTEXT__
+ }
+ // inject component styles
+ if (injectStyles) {
+ injectStyles.call(this, context)
+ }
+ // register component module identifier for async chunk inferrence
+ if (context && context._registeredComponents) {
+ context._registeredComponents.add(moduleIdentifier)
+ }
+ }
+ // used by ssr in case component is cached and beforeCreate
+ // never gets called
+ options._ssrRegister = hook
+ } else if (injectStyles) {
+ hook = shadowMode
+ ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
+ : injectStyles
+ }
+
+ if (hook) {
+ if (options.functional) {
+ // for template-only hot-reload because in that case the render fn doesn't
+ // go through the normalizer
+ options._injectStyles = hook
+ // register for functioal component in vue file
+ var originalRender = options.render
+ options.render = function renderWithStyleInjection (h, context) {
+ hook.call(context)
+ return originalRender(h, context)
+ }
+ } else {
+ // inject component registration as beforeCreate hook
+ var existing = options.beforeCreate
+ options.beforeCreate = existing
+ ? [].concat(existing, hook)
+ : [hook]
+ }
+ }
+
+ return {
+ exports: scriptExports,
+ options: options
+ }
+}
+
+
+/***/ }),
+
+/***/ "./src/modules/auth/reset-password.vue":
+/*!*********************************************!*\
+ !*** ./src/modules/auth/reset-password.vue ***!
+ \*********************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _reset_password_vue_vue_type_template_id_8c035e62___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./reset-password.vue?vue&type=template&id=8c035e62& */ "./src/modules/auth/reset-password.vue?vue&type=template&id=8c035e62&");
+/* harmony import */ var _reset_password_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reset-password.vue?vue&type=script&lang=js& */ "./src/modules/auth/reset-password.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _reset_password_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _reset_password_vue_vue_type_template_id_8c035e62___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _reset_password_vue_vue_type_template_id_8c035e62___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/auth/reset-password.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/auth/reset-password.vue?vue&type=script&lang=js&":
+/*!**********************************************************************!*\
+ !*** ./src/modules/auth/reset-password.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_reset_password_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./reset-password.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/reset-password.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_reset_password_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/auth/reset-password.vue?vue&type=template&id=8c035e62&":
+/*!****************************************************************************!*\
+ !*** ./src/modules/auth/reset-password.vue?vue&type=template&id=8c035e62& ***!
+ \****************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_reset_password_vue_vue_type_template_id_8c035e62___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./reset-password.vue?vue&type=template&id=8c035e62& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/auth/reset-password.vue?vue&type=template&id=8c035e62&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_reset_password_vue_vue_type_template_id_8c035e62___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_reset_password_vue_vue_type_template_id_8c035e62___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/39.09e96dce1f3b81bcb26a.js b/public/39.09e96dce1f3b81bcb26a.js
new file mode 100644
index 00000000..3ad01bd9
--- /dev/null
+++ b/public/39.09e96dce1f3b81bcb26a.js
@@ -0,0 +1,306 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[39],{
+
+/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/nodes/list.vue?vue&type=script&lang=js&":
+/*!*********************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/nodes/list.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+/* harmony default export */ __webpack_exports__["default"] = ({
+ data: function data() {
+ return {
+ nodes: []
+ };
+ },
+ created: function created() {
+ this.getNodes();
+ },
+ methods: {
+ getNodes: function getNodes() {
+ var _this = this;
+
+ this.$http.get('nodes?all=yes').then(function (_ref) {
+ var data = _ref.data;
+ _this.nodes = data;
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/nodes/list.vue?vue&type=template&id=01b9e346&":
+/*!*************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/modules/nodes/list.vue?vue&type=template&id=01b9e346& ***!
+ \*************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c("div", { staticClass: "page-node-show" }, [
+ _c("div", { staticClass: "row mt-3" }, [
+ _c(
+ "div",
+ { staticClass: "col-md-12" },
+ _vm._l(_vm.nodes, function(node) {
+ return _c("div", { key: node.id, staticClass: "box mb-3" }, [
+ _c("div", { staticClass: "box-heading" }, [
+ _vm._v("\n " + _vm._s(node.title) + "\n ")
+ ]),
+ _vm._v(" "),
+ _c("div", { staticClass: "box-body" }, [
+ _c(
+ "ul",
+ { staticClass: "nav nav-pills" },
+ _vm._l(node.children, function(child) {
+ return _c(
+ "li",
+ { key: child.id, staticClass: "nav-item mr-2 mb-1" },
+ [
+ _c(
+ "router-link",
+ {
+ staticClass: "btn text-gray-40 btn-outline-light",
+ attrs: {
+ to: { name: "nodes.node", params: { id: child.id } }
+ }
+ },
+ [
+ _vm._v(
+ "\n " +
+ _vm._s(child.title) +
+ "\n "
+ )
+ ]
+ )
+ ],
+ 1
+ )
+ }),
+ 0
+ )
+ ])
+ ])
+ }),
+ 0
+ )
+ ])
+ ])
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
+/* globals __VUE_SSR_CONTEXT__ */
+
+// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
+// This module is a runtime utility for cleaner component module output and will
+// be included in the final webpack user bundle.
+
+function normalizeComponent (
+ scriptExports,
+ render,
+ staticRenderFns,
+ functionalTemplate,
+ injectStyles,
+ scopeId,
+ moduleIdentifier, /* server only */
+ shadowMode /* vue-cli only */
+) {
+ // Vue.extend constructor export interop
+ var options = typeof scriptExports === 'function'
+ ? scriptExports.options
+ : scriptExports
+
+ // render functions
+ if (render) {
+ options.render = render
+ options.staticRenderFns = staticRenderFns
+ options._compiled = true
+ }
+
+ // functional template
+ if (functionalTemplate) {
+ options.functional = true
+ }
+
+ // scopedId
+ if (scopeId) {
+ options._scopeId = 'data-v-' + scopeId
+ }
+
+ var hook
+ if (moduleIdentifier) { // server build
+ hook = function (context) {
+ // 2.3 injection
+ context =
+ context || // cached call
+ (this.$vnode && this.$vnode.ssrContext) || // stateful
+ (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
+ // 2.2 with runInNewContext: true
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
+ context = __VUE_SSR_CONTEXT__
+ }
+ // inject component styles
+ if (injectStyles) {
+ injectStyles.call(this, context)
+ }
+ // register component module identifier for async chunk inferrence
+ if (context && context._registeredComponents) {
+ context._registeredComponents.add(moduleIdentifier)
+ }
+ }
+ // used by ssr in case component is cached and beforeCreate
+ // never gets called
+ options._ssrRegister = hook
+ } else if (injectStyles) {
+ hook = shadowMode
+ ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
+ : injectStyles
+ }
+
+ if (hook) {
+ if (options.functional) {
+ // for template-only hot-reload because in that case the render fn doesn't
+ // go through the normalizer
+ options._injectStyles = hook
+ // register for functioal component in vue file
+ var originalRender = options.render
+ options.render = function renderWithStyleInjection (h, context) {
+ hook.call(context)
+ return originalRender(h, context)
+ }
+ } else {
+ // inject component registration as beforeCreate hook
+ var existing = options.beforeCreate
+ options.beforeCreate = existing
+ ? [].concat(existing, hook)
+ : [hook]
+ }
+ }
+
+ return {
+ exports: scriptExports,
+ options: options
+ }
+}
+
+
+/***/ }),
+
+/***/ "./src/modules/nodes/list.vue":
+/*!************************************!*\
+ !*** ./src/modules/nodes/list.vue ***!
+ \************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _list_vue_vue_type_template_id_01b9e346___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./list.vue?vue&type=template&id=01b9e346& */ "./src/modules/nodes/list.vue?vue&type=template&id=01b9e346&");
+/* harmony import */ var _list_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./list.vue?vue&type=script&lang=js& */ "./src/modules/nodes/list.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _list_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _list_vue_vue_type_template_id_01b9e346___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _list_vue_vue_type_template_id_01b9e346___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "src/modules/nodes/list.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./src/modules/nodes/list.vue?vue&type=script&lang=js&":
+/*!*************************************************************!*\
+ !*** ./src/modules/nodes/list.vue?vue&type=script&lang=js& ***!
+ \*************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--4-0!../../../node_modules/vue-loader/lib??vue-loader-options!./list.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/nodes/list.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./src/modules/nodes/list.vue?vue&type=template&id=01b9e346&":
+/*!*******************************************************************!*\
+ !*** ./src/modules/nodes/list.vue?vue&type=template&id=01b9e346& ***!
+ \*******************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_01b9e346___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./list.vue?vue&type=template&id=01b9e346& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/modules/nodes/list.vue?vue&type=template&id=01b9e346&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_01b9e346___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_01b9e346___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/public/4.e3c896f652480a50d859.js b/public/4.e3c896f652480a50d859.js
new file mode 100644
index 00000000..e2ff5fdc
--- /dev/null
+++ b/public/4.e3c896f652480a50d859.js
@@ -0,0 +1,17901 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[4],{
+
+/***/ "./node_modules/codemirror/addon/display/placeholder.js":
+/*!**************************************************************!*\
+ !*** ./node_modules/codemirror/addon/display/placeholder.js ***!
+ \**************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"));
+ else {}
+})(function(CodeMirror) {
+ CodeMirror.defineOption("placeholder", "", function(cm, val, old) {
+ var prev = old && old != CodeMirror.Init;
+ if (val && !prev) {
+ cm.on("blur", onBlur);
+ cm.on("change", onChange);
+ cm.on("swapDoc", onChange);
+ onChange(cm);
+ } else if (!val && prev) {
+ cm.off("blur", onBlur);
+ cm.off("change", onChange);
+ cm.off("swapDoc", onChange);
+ clearPlaceholder(cm);
+ var wrapper = cm.getWrapperElement();
+ wrapper.className = wrapper.className.replace(" CodeMirror-empty", "");
+ }
+
+ if (val && !cm.hasFocus()) onBlur(cm);
+ });
+
+ function clearPlaceholder(cm) {
+ if (cm.state.placeholder) {
+ cm.state.placeholder.parentNode.removeChild(cm.state.placeholder);
+ cm.state.placeholder = null;
+ }
+ }
+ function setPlaceholder(cm) {
+ clearPlaceholder(cm);
+ var elt = cm.state.placeholder = document.createElement("pre");
+ elt.style.cssText = "height: 0; overflow: visible";
+ elt.style.direction = cm.getOption("direction");
+ elt.className = "CodeMirror-placeholder";
+ var placeHolder = cm.getOption("placeholder")
+ if (typeof placeHolder == "string") placeHolder = document.createTextNode(placeHolder)
+ elt.appendChild(placeHolder)
+ cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild);
+ }
+
+ function onBlur(cm) {
+ if (isEmpty(cm)) setPlaceholder(cm);
+ }
+ function onChange(cm) {
+ var wrapper = cm.getWrapperElement(), empty = isEmpty(cm);
+ wrapper.className = wrapper.className.replace(" CodeMirror-empty", "") + (empty ? " CodeMirror-empty" : "");
+
+ if (empty) setPlaceholder(cm);
+ else clearPlaceholder(cm);
+ }
+
+ function isEmpty(cm) {
+ return (cm.lineCount() === 1) && (cm.getLine(0) === "");
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/addon/edit/closebrackets.js":
+/*!*************************************************************!*\
+ !*** ./node_modules/codemirror/addon/edit/closebrackets.js ***!
+ \*************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"));
+ else {}
+})(function(CodeMirror) {
+ var defaults = {
+ pairs: "()[]{}''\"\"",
+ closeBefore: ")]}'\":;>",
+ triples: "",
+ explode: "[]{}"
+ };
+
+ var Pos = CodeMirror.Pos;
+
+ CodeMirror.defineOption("autoCloseBrackets", false, function(cm, val, old) {
+ if (old && old != CodeMirror.Init) {
+ cm.removeKeyMap(keyMap);
+ cm.state.closeBrackets = null;
+ }
+ if (val) {
+ ensureBound(getOption(val, "pairs"))
+ cm.state.closeBrackets = val;
+ cm.addKeyMap(keyMap);
+ }
+ });
+
+ function getOption(conf, name) {
+ if (name == "pairs" && typeof conf == "string") return conf;
+ if (typeof conf == "object" && conf[name] != null) return conf[name];
+ return defaults[name];
+ }
+
+ var keyMap = {Backspace: handleBackspace, Enter: handleEnter};
+ function ensureBound(chars) {
+ for (var i = 0; i < chars.length; i++) {
+ var ch = chars.charAt(i), key = "'" + ch + "'"
+ if (!keyMap[key]) keyMap[key] = handler(ch)
+ }
+ }
+ ensureBound(defaults.pairs + "`")
+
+ function handler(ch) {
+ return function(cm) { return handleChar(cm, ch); };
+ }
+
+ function getConfig(cm) {
+ var deflt = cm.state.closeBrackets;
+ if (!deflt || deflt.override) return deflt;
+ var mode = cm.getModeAt(cm.getCursor());
+ return mode.closeBrackets || deflt;
+ }
+
+ function handleBackspace(cm) {
+ var conf = getConfig(cm);
+ if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass;
+
+ var pairs = getOption(conf, "pairs");
+ var ranges = cm.listSelections();
+ for (var i = 0; i < ranges.length; i++) {
+ if (!ranges[i].empty()) return CodeMirror.Pass;
+ var around = charsAround(cm, ranges[i].head);
+ if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass;
+ }
+ for (var i = ranges.length - 1; i >= 0; i--) {
+ var cur = ranges[i].head;
+ cm.replaceRange("", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1), "+delete");
+ }
+ }
+
+ function handleEnter(cm) {
+ var conf = getConfig(cm);
+ var explode = conf && getOption(conf, "explode");
+ if (!explode || cm.getOption("disableInput")) return CodeMirror.Pass;
+
+ var ranges = cm.listSelections();
+ for (var i = 0; i < ranges.length; i++) {
+ if (!ranges[i].empty()) return CodeMirror.Pass;
+ var around = charsAround(cm, ranges[i].head);
+ if (!around || explode.indexOf(around) % 2 != 0) return CodeMirror.Pass;
+ }
+ cm.operation(function() {
+ var linesep = cm.lineSeparator() || "\n";
+ cm.replaceSelection(linesep + linesep, null);
+ cm.execCommand("goCharLeft");
+ ranges = cm.listSelections();
+ for (var i = 0; i < ranges.length; i++) {
+ var line = ranges[i].head.line;
+ cm.indentLine(line, null, true);
+ cm.indentLine(line + 1, null, true);
+ }
+ });
+ }
+
+ function contractSelection(sel) {
+ var inverted = CodeMirror.cmpPos(sel.anchor, sel.head) > 0;
+ return {anchor: new Pos(sel.anchor.line, sel.anchor.ch + (inverted ? -1 : 1)),
+ head: new Pos(sel.head.line, sel.head.ch + (inverted ? 1 : -1))};
+ }
+
+ function handleChar(cm, ch) {
+ var conf = getConfig(cm);
+ if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass;
+
+ var pairs = getOption(conf, "pairs");
+ var pos = pairs.indexOf(ch);
+ if (pos == -1) return CodeMirror.Pass;
+
+ var closeBefore = getOption(conf,"closeBefore");
+
+ var triples = getOption(conf, "triples");
+
+ var identical = pairs.charAt(pos + 1) == ch;
+ var ranges = cm.listSelections();
+ var opening = pos % 2 == 0;
+
+ var type;
+ for (var i = 0; i < ranges.length; i++) {
+ var range = ranges[i], cur = range.head, curType;
+ var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1));
+ if (opening && !range.empty()) {
+ curType = "surround";
+ } else if ((identical || !opening) && next == ch) {
+ if (identical && stringStartsAfter(cm, cur))
+ curType = "both";
+ else if (triples.indexOf(ch) >= 0 && cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == ch + ch + ch)
+ curType = "skipThree";
+ else
+ curType = "skip";
+ } else if (identical && cur.ch > 1 && triples.indexOf(ch) >= 0 &&
+ cm.getRange(Pos(cur.line, cur.ch - 2), cur) == ch + ch) {
+ if (cur.ch > 2 && /\bstring/.test(cm.getTokenTypeAt(Pos(cur.line, cur.ch - 2)))) return CodeMirror.Pass;
+ curType = "addFour";
+ } else if (identical) {
+ var prev = cur.ch == 0 ? " " : cm.getRange(Pos(cur.line, cur.ch - 1), cur)
+ if (!CodeMirror.isWordChar(next) && prev != ch && !CodeMirror.isWordChar(prev)) curType = "both";
+ else return CodeMirror.Pass;
+ } else if (opening && (next.length === 0 || /\s/.test(next) || closeBefore.indexOf(next) > -1)) {
+ curType = "both";
+ } else {
+ return CodeMirror.Pass;
+ }
+ if (!type) type = curType;
+ else if (type != curType) return CodeMirror.Pass;
+ }
+
+ var left = pos % 2 ? pairs.charAt(pos - 1) : ch;
+ var right = pos % 2 ? ch : pairs.charAt(pos + 1);
+ cm.operation(function() {
+ if (type == "skip") {
+ cm.execCommand("goCharRight");
+ } else if (type == "skipThree") {
+ for (var i = 0; i < 3; i++)
+ cm.execCommand("goCharRight");
+ } else if (type == "surround") {
+ var sels = cm.getSelections();
+ for (var i = 0; i < sels.length; i++)
+ sels[i] = left + sels[i] + right;
+ cm.replaceSelections(sels, "around");
+ sels = cm.listSelections().slice();
+ for (var i = 0; i < sels.length; i++)
+ sels[i] = contractSelection(sels[i]);
+ cm.setSelections(sels);
+ } else if (type == "both") {
+ cm.replaceSelection(left + right, null);
+ cm.triggerElectric(left + right);
+ cm.execCommand("goCharLeft");
+ } else if (type == "addFour") {
+ cm.replaceSelection(left + left + left + left, "before");
+ cm.execCommand("goCharRight");
+ }
+ });
+ }
+
+ function charsAround(cm, pos) {
+ var str = cm.getRange(Pos(pos.line, pos.ch - 1),
+ Pos(pos.line, pos.ch + 1));
+ return str.length == 2 ? str : null;
+ }
+
+ function stringStartsAfter(cm, pos) {
+ var token = cm.getTokenAt(Pos(pos.line, pos.ch + 1))
+ return /\bstring/.test(token.type) && token.start == pos.ch &&
+ (pos.ch == 0 || !/\bstring/.test(cm.getTokenTypeAt(pos)))
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/addon/edit/continuelist.js":
+/*!************************************************************!*\
+ !*** ./node_modules/codemirror/addon/edit/continuelist.js ***!
+ \************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"));
+ else {}
+})(function(CodeMirror) {
+ "use strict";
+
+ var listRE = /^(\s*)(>[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/,
+ emptyListRE = /^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/,
+ unorderedListRE = /[*+-]\s/;
+
+ CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) {
+ if (cm.getOption("disableInput")) return CodeMirror.Pass;
+ var ranges = cm.listSelections(), replacements = [];
+ for (var i = 0; i < ranges.length; i++) {
+ var pos = ranges[i].head;
+
+ // If we're not in Markdown mode, fall back to normal newlineAndIndent
+ var eolState = cm.getStateAfter(pos.line);
+ var inner = CodeMirror.innerMode(cm.getMode(), eolState);
+ if (inner.mode.name !== "markdown") {
+ cm.execCommand("newlineAndIndent");
+ return;
+ } else {
+ eolState = inner.state;
+ }
+
+ var inList = eolState.list !== false;
+ var inQuote = eolState.quote !== 0;
+
+ var line = cm.getLine(pos.line), match = listRE.exec(line);
+ var cursorBeforeBullet = /^\s*$/.test(line.slice(0, pos.ch));
+ if (!ranges[i].empty() || (!inList && !inQuote) || !match || cursorBeforeBullet) {
+ cm.execCommand("newlineAndIndent");
+ return;
+ }
+ if (emptyListRE.test(line)) {
+ if (!/>\s*$/.test(line)) cm.replaceRange("", {
+ line: pos.line, ch: 0
+ }, {
+ line: pos.line, ch: pos.ch + 1
+ });
+ replacements[i] = "\n";
+ } else {
+ var indent = match[1], after = match[5];
+ var numbered = !(unorderedListRE.test(match[2]) || match[2].indexOf(">") >= 0);
+ var bullet = numbered ? (parseInt(match[3], 10) + 1) + match[4] : match[2].replace("x", " ");
+ replacements[i] = "\n" + indent + bullet + after;
+
+ if (numbered) incrementRemainingMarkdownListNumbers(cm, pos);
+ }
+ }
+
+ cm.replaceSelections(replacements);
+ };
+
+ // Auto-updating Markdown list numbers when a new item is added to the
+ // middle of a list
+ function incrementRemainingMarkdownListNumbers(cm, pos) {
+ var startLine = pos.line, lookAhead = 0, skipCount = 0;
+ var startItem = listRE.exec(cm.getLine(startLine)), startIndent = startItem[1];
+
+ do {
+ lookAhead += 1;
+ var nextLineNumber = startLine + lookAhead;
+ var nextLine = cm.getLine(nextLineNumber), nextItem = listRE.exec(nextLine);
+
+ if (nextItem) {
+ var nextIndent = nextItem[1];
+ var newNumber = (parseInt(startItem[3], 10) + lookAhead - skipCount);
+ var nextNumber = (parseInt(nextItem[3], 10)), itemNumber = nextNumber;
+
+ if (startIndent === nextIndent && !isNaN(nextNumber)) {
+ if (newNumber === nextNumber) itemNumber = nextNumber + 1;
+ if (newNumber > nextNumber) itemNumber = newNumber + 1;
+ cm.replaceRange(
+ nextLine.replace(listRE, nextIndent + itemNumber + nextItem[4] + nextItem[5]),
+ {
+ line: nextLineNumber, ch: 0
+ }, {
+ line: nextLineNumber, ch: nextLine.length
+ });
+ } else {
+ if (startIndent.length > nextIndent.length) return;
+ // This doesn't run if the next line immediatley indents, as it is
+ // not clear of the users intention (new indented item or same level)
+ if ((startIndent.length < nextIndent.length) && (lookAhead === 1)) return;
+ skipCount += 1;
+ }
+ }
+ } while (nextItem);
+ }
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/addon/edit/matchbrackets.js":
+/*!*************************************************************!*\
+ !*** ./node_modules/codemirror/addon/edit/matchbrackets.js ***!
+ \*************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"));
+ else {}
+})(function(CodeMirror) {
+ var ie_lt8 = /MSIE \d/.test(navigator.userAgent) &&
+ (document.documentMode == null || document.documentMode < 8);
+
+ var Pos = CodeMirror.Pos;
+
+ var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<", "<": ">>", ">": "<<"};
+
+ function bracketRegex(config) {
+ return config && config.bracketRegex || /[(){}[\]]/
+ }
+
+ function findMatchingBracket(cm, where, config) {
+ var line = cm.getLineHandle(where.line), pos = where.ch - 1;
+ var afterCursor = config && config.afterCursor
+ if (afterCursor == null)
+ afterCursor = /(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className)
+ var re = bracketRegex(config)
+
+ // A cursor is defined as between two characters, but in in vim command mode
+ // (i.e. not insert mode), the cursor is visually represented as a
+ // highlighted box on top of the 2nd character. Otherwise, we allow matches
+ // from before or after the cursor.
+ var match = (!afterCursor && pos >= 0 && re.test(line.text.charAt(pos)) && matching[line.text.charAt(pos)]) ||
+ re.test(line.text.charAt(pos + 1)) && matching[line.text.charAt(++pos)];
+ if (!match) return null;
+ var dir = match.charAt(1) == ">" ? 1 : -1;
+ if (config && config.strict && (dir > 0) != (pos == where.ch)) return null;
+ var style = cm.getTokenTypeAt(Pos(where.line, pos + 1));
+
+ var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style || null, config);
+ if (found == null) return null;
+ return {from: Pos(where.line, pos), to: found && found.pos,
+ match: found && found.ch == match.charAt(0), forward: dir > 0};
+ }
+
+ // bracketRegex is used to specify which type of bracket to scan
+ // should be a regexp, e.g. /[[\]]/
+ //
+ // Note: If "where" is on an open bracket, then this bracket is ignored.
+ //
+ // Returns false when no bracket was found, null when it reached
+ // maxScanLines and gave up
+ function scanForBracket(cm, where, dir, style, config) {
+ var maxScanLen = (config && config.maxScanLineLength) || 10000;
+ var maxScanLines = (config && config.maxScanLines) || 1000;
+
+ var stack = [];
+ var re = bracketRegex(config)
+ var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1)
+ : Math.max(cm.firstLine() - 1, where.line - maxScanLines);
+ for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) {
+ var line = cm.getLine(lineNo);
+ if (!line) continue;
+ var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1;
+ if (line.length > maxScanLen) continue;
+ if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0);
+ for (; pos != end; pos += dir) {
+ var ch = line.charAt(pos);
+ if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) {
+ var match = matching[ch];
+ if (match && (match.charAt(1) == ">") == (dir > 0)) stack.push(ch);
+ else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch};
+ else stack.pop();
+ }
+ }
+ }
+ return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null;
+ }
+
+ function matchBrackets(cm, autoclear, config) {
+ // Disable brace matching in long lines, since it'll cause hugely slow updates
+ var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000;
+ var marks = [], ranges = cm.listSelections();
+ for (var i = 0; i < ranges.length; i++) {
+ var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, config);
+ if (match && cm.getLine(match.from.line).length <= maxHighlightLen) {
+ var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket";
+ marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style}));
+ if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen)
+ marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style}));
+ }
+ }
+
+ if (marks.length) {
+ // Kludge to work around the IE bug from issue #1193, where text
+ // input stops going to the textare whever this fires.
+ if (ie_lt8 && cm.state.focused) cm.focus();
+
+ var clear = function() {
+ cm.operation(function() {
+ for (var i = 0; i < marks.length; i++) marks[i].clear();
+ });
+ };
+ if (autoclear) setTimeout(clear, 800);
+ else return clear;
+ }
+ }
+
+ function doMatchBrackets(cm) {
+ cm.operation(function() {
+ if (cm.state.matchBrackets.currentlyHighlighted) {
+ cm.state.matchBrackets.currentlyHighlighted();
+ cm.state.matchBrackets.currentlyHighlighted = null;
+ }
+ cm.state.matchBrackets.currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets);
+ });
+ }
+
+ CodeMirror.defineOption("matchBrackets", false, function(cm, val, old) {
+ if (old && old != CodeMirror.Init) {
+ cm.off("cursorActivity", doMatchBrackets);
+ if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) {
+ cm.state.matchBrackets.currentlyHighlighted();
+ cm.state.matchBrackets.currentlyHighlighted = null;
+ }
+ }
+ if (val) {
+ cm.state.matchBrackets = typeof val == "object" ? val : {};
+ cm.on("cursorActivity", doMatchBrackets);
+ }
+ });
+
+ CodeMirror.defineExtension("matchBrackets", function() {matchBrackets(this, true);});
+ CodeMirror.defineExtension("findMatchingBracket", function(pos, config, oldConfig){
+ // Backwards-compatibility kludge
+ if (oldConfig || typeof config == "boolean") {
+ if (!oldConfig) {
+ config = config ? {strict: true} : null
+ } else {
+ oldConfig.strict = config
+ config = oldConfig
+ }
+ }
+ return findMatchingBracket(this, pos, config)
+ });
+ CodeMirror.defineExtension("scanForBracket", function(pos, dir, style, config){
+ return scanForBracket(this, pos, dir, style, config);
+ });
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/addon/edit/matchtags.js":
+/*!*********************************************************!*\
+ !*** ./node_modules/codemirror/addon/edit/matchtags.js ***!
+ \*********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"), __webpack_require__(/*! ../fold/xml-fold */ "./node_modules/codemirror/addon/fold/xml-fold.js"));
+ else {}
+})(function(CodeMirror) {
+ "use strict";
+
+ CodeMirror.defineOption("matchTags", false, function(cm, val, old) {
+ if (old && old != CodeMirror.Init) {
+ cm.off("cursorActivity", doMatchTags);
+ cm.off("viewportChange", maybeUpdateMatch);
+ clear(cm);
+ }
+ if (val) {
+ cm.state.matchBothTags = typeof val == "object" && val.bothTags;
+ cm.on("cursorActivity", doMatchTags);
+ cm.on("viewportChange", maybeUpdateMatch);
+ doMatchTags(cm);
+ }
+ });
+
+ function clear(cm) {
+ if (cm.state.tagHit) cm.state.tagHit.clear();
+ if (cm.state.tagOther) cm.state.tagOther.clear();
+ cm.state.tagHit = cm.state.tagOther = null;
+ }
+
+ function doMatchTags(cm) {
+ cm.state.failedTagMatch = false;
+ cm.operation(function() {
+ clear(cm);
+ if (cm.somethingSelected()) return;
+ var cur = cm.getCursor(), range = cm.getViewport();
+ range.from = Math.min(range.from, cur.line); range.to = Math.max(cur.line + 1, range.to);
+ var match = CodeMirror.findMatchingTag(cm, cur, range);
+ if (!match) return;
+ if (cm.state.matchBothTags) {
+ var hit = match.at == "open" ? match.open : match.close;
+ if (hit) cm.state.tagHit = cm.markText(hit.from, hit.to, {className: "CodeMirror-matchingtag"});
+ }
+ var other = match.at == "close" ? match.open : match.close;
+ if (other)
+ cm.state.tagOther = cm.markText(other.from, other.to, {className: "CodeMirror-matchingtag"});
+ else
+ cm.state.failedTagMatch = true;
+ });
+ }
+
+ function maybeUpdateMatch(cm) {
+ if (cm.state.failedTagMatch) doMatchTags(cm);
+ }
+
+ CodeMirror.commands.toMatchingTag = function(cm) {
+ var found = CodeMirror.findMatchingTag(cm, cm.getCursor());
+ if (found) {
+ var other = found.at == "close" ? found.open : found.close;
+ if (other) cm.extendSelection(other.to, other.from);
+ }
+ };
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/addon/fold/xml-fold.js":
+/*!********************************************************!*\
+ !*** ./node_modules/codemirror/addon/fold/xml-fold.js ***!
+ \********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"));
+ else {}
+})(function(CodeMirror) {
+ "use strict";
+
+ var Pos = CodeMirror.Pos;
+ function cmp(a, b) { return a.line - b.line || a.ch - b.ch; }
+
+ var nameStartChar = "A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD";
+ var nameChar = nameStartChar + "\-\:\.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040";
+ var xmlTagStart = new RegExp("<(/?)([" + nameStartChar + "][" + nameChar + "]*)", "g");
+
+ function Iter(cm, line, ch, range) {
+ this.line = line; this.ch = ch;
+ this.cm = cm; this.text = cm.getLine(line);
+ this.min = range ? Math.max(range.from, cm.firstLine()) : cm.firstLine();
+ this.max = range ? Math.min(range.to - 1, cm.lastLine()) : cm.lastLine();
+ }
+
+ function tagAt(iter, ch) {
+ var type = iter.cm.getTokenTypeAt(Pos(iter.line, ch));
+ return type && /\btag\b/.test(type);
+ }
+
+ function nextLine(iter) {
+ if (iter.line >= iter.max) return;
+ iter.ch = 0;
+ iter.text = iter.cm.getLine(++iter.line);
+ return true;
+ }
+ function prevLine(iter) {
+ if (iter.line <= iter.min) return;
+ iter.text = iter.cm.getLine(--iter.line);
+ iter.ch = iter.text.length;
+ return true;
+ }
+
+ function toTagEnd(iter) {
+ for (;;) {
+ var gt = iter.text.indexOf(">", iter.ch);
+ if (gt == -1) { if (nextLine(iter)) continue; else return; }
+ if (!tagAt(iter, gt + 1)) { iter.ch = gt + 1; continue; }
+ var lastSlash = iter.text.lastIndexOf("/", gt);
+ var selfClose = lastSlash > -1 && !/\S/.test(iter.text.slice(lastSlash + 1, gt));
+ iter.ch = gt + 1;
+ return selfClose ? "selfClose" : "regular";
+ }
+ }
+ function toTagStart(iter) {
+ for (;;) {
+ var lt = iter.ch ? iter.text.lastIndexOf("<", iter.ch - 1) : -1;
+ if (lt == -1) { if (prevLine(iter)) continue; else return; }
+ if (!tagAt(iter, lt + 1)) { iter.ch = lt; continue; }
+ xmlTagStart.lastIndex = lt;
+ iter.ch = lt;
+ var match = xmlTagStart.exec(iter.text);
+ if (match && match.index == lt) return match;
+ }
+ }
+
+ function toNextTag(iter) {
+ for (;;) {
+ xmlTagStart.lastIndex = iter.ch;
+ var found = xmlTagStart.exec(iter.text);
+ if (!found) { if (nextLine(iter)) continue; else return; }
+ if (!tagAt(iter, found.index + 1)) { iter.ch = found.index + 1; continue; }
+ iter.ch = found.index + found[0].length;
+ return found;
+ }
+ }
+ function toPrevTag(iter) {
+ for (;;) {
+ var gt = iter.ch ? iter.text.lastIndexOf(">", iter.ch - 1) : -1;
+ if (gt == -1) { if (prevLine(iter)) continue; else return; }
+ if (!tagAt(iter, gt + 1)) { iter.ch = gt; continue; }
+ var lastSlash = iter.text.lastIndexOf("/", gt);
+ var selfClose = lastSlash > -1 && !/\S/.test(iter.text.slice(lastSlash + 1, gt));
+ iter.ch = gt + 1;
+ return selfClose ? "selfClose" : "regular";
+ }
+ }
+
+ function findMatchingClose(iter, tag) {
+ var stack = [];
+ for (;;) {
+ var next = toNextTag(iter), end, startLine = iter.line, startCh = iter.ch - (next ? next[0].length : 0);
+ if (!next || !(end = toTagEnd(iter))) return;
+ if (end == "selfClose") continue;
+ if (next[1]) { // closing tag
+ for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == next[2]) {
+ stack.length = i;
+ break;
+ }
+ if (i < 0 && (!tag || tag == next[2])) return {
+ tag: next[2],
+ from: Pos(startLine, startCh),
+ to: Pos(iter.line, iter.ch)
+ };
+ } else { // opening tag
+ stack.push(next[2]);
+ }
+ }
+ }
+ function findMatchingOpen(iter, tag) {
+ var stack = [];
+ for (;;) {
+ var prev = toPrevTag(iter);
+ if (!prev) return;
+ if (prev == "selfClose") { toTagStart(iter); continue; }
+ var endLine = iter.line, endCh = iter.ch;
+ var start = toTagStart(iter);
+ if (!start) return;
+ if (start[1]) { // closing tag
+ stack.push(start[2]);
+ } else { // opening tag
+ for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == start[2]) {
+ stack.length = i;
+ break;
+ }
+ if (i < 0 && (!tag || tag == start[2])) return {
+ tag: start[2],
+ from: Pos(iter.line, iter.ch),
+ to: Pos(endLine, endCh)
+ };
+ }
+ }
+ }
+
+ CodeMirror.registerHelper("fold", "xml", function(cm, start) {
+ var iter = new Iter(cm, start.line, 0);
+ for (;;) {
+ var openTag = toNextTag(iter)
+ if (!openTag || iter.line != start.line) return
+ var end = toTagEnd(iter)
+ if (!end) return
+ if (!openTag[1] && end != "selfClose") {
+ var startPos = Pos(iter.line, iter.ch);
+ var endPos = findMatchingClose(iter, openTag[2]);
+ return endPos && cmp(endPos.from, startPos) > 0 ? {from: startPos, to: endPos.from} : null
+ }
+ }
+ });
+ CodeMirror.findMatchingTag = function(cm, pos, range) {
+ var iter = new Iter(cm, pos.line, pos.ch, range);
+ if (iter.text.indexOf(">") == -1 && iter.text.indexOf("<") == -1) return;
+ var end = toTagEnd(iter), to = end && Pos(iter.line, iter.ch);
+ var start = end && toTagStart(iter);
+ if (!end || !start || cmp(iter, pos) > 0) return;
+ var here = {from: Pos(iter.line, iter.ch), to: to, tag: start[2]};
+ if (end == "selfClose") return {open: here, close: null, at: "open"};
+
+ if (start[1]) { // closing tag
+ return {open: findMatchingOpen(iter, start[2]), close: here, at: "close"};
+ } else { // opening tag
+ iter = new Iter(cm, to.line, to.ch, range);
+ return {open: here, close: findMatchingClose(iter, start[2]), at: "open"};
+ }
+ };
+
+ CodeMirror.findEnclosingTag = function(cm, pos, range, tag) {
+ var iter = new Iter(cm, pos.line, pos.ch, range);
+ for (;;) {
+ var open = findMatchingOpen(iter, tag);
+ if (!open) break;
+ var forward = new Iter(cm, pos.line, pos.ch, range);
+ var close = findMatchingClose(forward, open.tag);
+ if (close) return {open: open, close: close};
+ }
+ };
+
+ // Used by addon/edit/closetag.js
+ CodeMirror.scanForClosingTag = function(cm, pos, name, end) {
+ var iter = new Iter(cm, pos.line, pos.ch, end ? {from: 0, to: end} : null);
+ return findMatchingClose(iter, name);
+ };
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/addon/hint/html-hint.js":
+/*!*********************************************************!*\
+ !*** ./node_modules/codemirror/addon/hint/html-hint.js ***!
+ \*********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"), __webpack_require__(/*! ./xml-hint */ "./node_modules/codemirror/addon/hint/xml-hint.js"));
+ else {}
+})(function(CodeMirror) {
+ "use strict";
+
+ var langs = "ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nb nd ne ng nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa cy wo fy xh yi yo za zu".split(" ");
+ var targets = ["_blank", "_self", "_top", "_parent"];
+ var charsets = ["ascii", "utf-8", "utf-16", "latin1", "latin1"];
+ var methods = ["get", "post", "put", "delete"];
+ var encs = ["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"];
+ var media = ["all", "screen", "print", "embossed", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "speech",
+ "3d-glasses", "resolution [>][<][=] [X]", "device-aspect-ratio: X/Y", "orientation:portrait",
+ "orientation:landscape", "device-height: [X]", "device-width: [X]"];
+ var s = { attrs: {} }; // Simple tag, reused for a whole lot of tags
+
+ var data = {
+ a: {
+ attrs: {
+ href: null, ping: null, type: null,
+ media: media,
+ target: targets,
+ hreflang: langs
+ }
+ },
+ abbr: s,
+ acronym: s,
+ address: s,
+ applet: s,
+ area: {
+ attrs: {
+ alt: null, coords: null, href: null, target: null, ping: null,
+ media: media, hreflang: langs, type: null,
+ shape: ["default", "rect", "circle", "poly"]
+ }
+ },
+ article: s,
+ aside: s,
+ audio: {
+ attrs: {
+ src: null, mediagroup: null,
+ crossorigin: ["anonymous", "use-credentials"],
+ preload: ["none", "metadata", "auto"],
+ autoplay: ["", "autoplay"],
+ loop: ["", "loop"],
+ controls: ["", "controls"]
+ }
+ },
+ b: s,
+ base: { attrs: { href: null, target: targets } },
+ basefont: s,
+ bdi: s,
+ bdo: s,
+ big: s,
+ blockquote: { attrs: { cite: null } },
+ body: s,
+ br: s,
+ button: {
+ attrs: {
+ form: null, formaction: null, name: null, value: null,
+ autofocus: ["", "autofocus"],
+ disabled: ["", "autofocus"],
+ formenctype: encs,
+ formmethod: methods,
+ formnovalidate: ["", "novalidate"],
+ formtarget: targets,
+ type: ["submit", "reset", "button"]
+ }
+ },
+ canvas: { attrs: { width: null, height: null } },
+ caption: s,
+ center: s,
+ cite: s,
+ code: s,
+ col: { attrs: { span: null } },
+ colgroup: { attrs: { span: null } },
+ command: {
+ attrs: {
+ type: ["command", "checkbox", "radio"],
+ label: null, icon: null, radiogroup: null, command: null, title: null,
+ disabled: ["", "disabled"],
+ checked: ["", "checked"]
+ }
+ },
+ data: { attrs: { value: null } },
+ datagrid: { attrs: { disabled: ["", "disabled"], multiple: ["", "multiple"] } },
+ datalist: { attrs: { data: null } },
+ dd: s,
+ del: { attrs: { cite: null, datetime: null } },
+ details: { attrs: { open: ["", "open"] } },
+ dfn: s,
+ dir: s,
+ div: s,
+ dl: s,
+ dt: s,
+ em: s,
+ embed: { attrs: { src: null, type: null, width: null, height: null } },
+ eventsource: { attrs: { src: null } },
+ fieldset: { attrs: { disabled: ["", "disabled"], form: null, name: null } },
+ figcaption: s,
+ figure: s,
+ font: s,
+ footer: s,
+ form: {
+ attrs: {
+ action: null, name: null,
+ "accept-charset": charsets,
+ autocomplete: ["on", "off"],
+ enctype: encs,
+ method: methods,
+ novalidate: ["", "novalidate"],
+ target: targets
+ }
+ },
+ frame: s,
+ frameset: s,
+ h1: s, h2: s, h3: s, h4: s, h5: s, h6: s,
+ head: {
+ attrs: {},
+ children: ["title", "base", "link", "style", "meta", "script", "noscript", "command"]
+ },
+ header: s,
+ hgroup: s,
+ hr: s,
+ html: {
+ attrs: { manifest: null },
+ children: ["head", "body"]
+ },
+ i: s,
+ iframe: {
+ attrs: {
+ src: null, srcdoc: null, name: null, width: null, height: null,
+ sandbox: ["allow-top-navigation", "allow-same-origin", "allow-forms", "allow-scripts"],
+ seamless: ["", "seamless"]
+ }
+ },
+ img: {
+ attrs: {
+ alt: null, src: null, ismap: null, usemap: null, width: null, height: null,
+ crossorigin: ["anonymous", "use-credentials"]
+ }
+ },
+ input: {
+ attrs: {
+ alt: null, dirname: null, form: null, formaction: null,
+ height: null, list: null, max: null, maxlength: null, min: null,
+ name: null, pattern: null, placeholder: null, size: null, src: null,
+ step: null, value: null, width: null,
+ accept: ["audio/*", "video/*", "image/*"],
+ autocomplete: ["on", "off"],
+ autofocus: ["", "autofocus"],
+ checked: ["", "checked"],
+ disabled: ["", "disabled"],
+ formenctype: encs,
+ formmethod: methods,
+ formnovalidate: ["", "novalidate"],
+ formtarget: targets,
+ multiple: ["", "multiple"],
+ readonly: ["", "readonly"],
+ required: ["", "required"],
+ type: ["hidden", "text", "search", "tel", "url", "email", "password", "datetime", "date", "month",
+ "week", "time", "datetime-local", "number", "range", "color", "checkbox", "radio",
+ "file", "submit", "image", "reset", "button"]
+ }
+ },
+ ins: { attrs: { cite: null, datetime: null } },
+ kbd: s,
+ keygen: {
+ attrs: {
+ challenge: null, form: null, name: null,
+ autofocus: ["", "autofocus"],
+ disabled: ["", "disabled"],
+ keytype: ["RSA"]
+ }
+ },
+ label: { attrs: { "for": null, form: null } },
+ legend: s,
+ li: { attrs: { value: null } },
+ link: {
+ attrs: {
+ href: null, type: null,
+ hreflang: langs,
+ media: media,
+ sizes: ["all", "16x16", "16x16 32x32", "16x16 32x32 64x64"]
+ }
+ },
+ map: { attrs: { name: null } },
+ mark: s,
+ menu: { attrs: { label: null, type: ["list", "context", "toolbar"] } },
+ meta: {
+ attrs: {
+ content: null,
+ charset: charsets,
+ name: ["viewport", "application-name", "author", "description", "generator", "keywords"],
+ "http-equiv": ["content-language", "content-type", "default-style", "refresh"]
+ }
+ },
+ meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } },
+ nav: s,
+ noframes: s,
+ noscript: s,
+ object: {
+ attrs: {
+ data: null, type: null, name: null, usemap: null, form: null, width: null, height: null,
+ typemustmatch: ["", "typemustmatch"]
+ }
+ },
+ ol: { attrs: { reversed: ["", "reversed"], start: null, type: ["1", "a", "A", "i", "I"] } },
+ optgroup: { attrs: { disabled: ["", "disabled"], label: null } },
+ option: { attrs: { disabled: ["", "disabled"], label: null, selected: ["", "selected"], value: null } },
+ output: { attrs: { "for": null, form: null, name: null } },
+ p: s,
+ param: { attrs: { name: null, value: null } },
+ pre: s,
+ progress: { attrs: { value: null, max: null } },
+ q: { attrs: { cite: null } },
+ rp: s,
+ rt: s,
+ ruby: s,
+ s: s,
+ samp: s,
+ script: {
+ attrs: {
+ type: ["text/javascript"],
+ src: null,
+ async: ["", "async"],
+ defer: ["", "defer"],
+ charset: charsets
+ }
+ },
+ section: s,
+ select: {
+ attrs: {
+ form: null, name: null, size: null,
+ autofocus: ["", "autofocus"],
+ disabled: ["", "disabled"],
+ multiple: ["", "multiple"]
+ }
+ },
+ small: s,
+ source: { attrs: { src: null, type: null, media: null } },
+ span: s,
+ strike: s,
+ strong: s,
+ style: {
+ attrs: {
+ type: ["text/css"],
+ media: media,
+ scoped: null
+ }
+ },
+ sub: s,
+ summary: s,
+ sup: s,
+ table: s,
+ tbody: s,
+ td: { attrs: { colspan: null, rowspan: null, headers: null } },
+ textarea: {
+ attrs: {
+ dirname: null, form: null, maxlength: null, name: null, placeholder: null,
+ rows: null, cols: null,
+ autofocus: ["", "autofocus"],
+ disabled: ["", "disabled"],
+ readonly: ["", "readonly"],
+ required: ["", "required"],
+ wrap: ["soft", "hard"]
+ }
+ },
+ tfoot: s,
+ th: { attrs: { colspan: null, rowspan: null, headers: null, scope: ["row", "col", "rowgroup", "colgroup"] } },
+ thead: s,
+ time: { attrs: { datetime: null } },
+ title: s,
+ tr: s,
+ track: {
+ attrs: {
+ src: null, label: null, "default": null,
+ kind: ["subtitles", "captions", "descriptions", "chapters", "metadata"],
+ srclang: langs
+ }
+ },
+ tt: s,
+ u: s,
+ ul: s,
+ "var": s,
+ video: {
+ attrs: {
+ src: null, poster: null, width: null, height: null,
+ crossorigin: ["anonymous", "use-credentials"],
+ preload: ["auto", "metadata", "none"],
+ autoplay: ["", "autoplay"],
+ mediagroup: ["movie"],
+ muted: ["", "muted"],
+ controls: ["", "controls"]
+ }
+ },
+ wbr: s
+ };
+
+ var globalAttrs = {
+ accesskey: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"],
+ "class": null,
+ contenteditable: ["true", "false"],
+ contextmenu: null,
+ dir: ["ltr", "rtl", "auto"],
+ draggable: ["true", "false", "auto"],
+ dropzone: ["copy", "move", "link", "string:", "file:"],
+ hidden: ["hidden"],
+ id: null,
+ inert: ["inert"],
+ itemid: null,
+ itemprop: null,
+ itemref: null,
+ itemscope: ["itemscope"],
+ itemtype: null,
+ lang: ["en", "es"],
+ spellcheck: ["true", "false"],
+ autocorrect: ["true", "false"],
+ autocapitalize: ["true", "false"],
+ style: null,
+ tabindex: ["1", "2", "3", "4", "5", "6", "7", "8", "9"],
+ title: null,
+ translate: ["yes", "no"],
+ onclick: null,
+ rel: ["stylesheet", "alternate", "author", "bookmark", "help", "license", "next", "nofollow", "noreferrer", "prefetch", "prev", "search", "tag"]
+ };
+ function populate(obj) {
+ for (var attr in globalAttrs) if (globalAttrs.hasOwnProperty(attr))
+ obj.attrs[attr] = globalAttrs[attr];
+ }
+
+ populate(s);
+ for (var tag in data) if (data.hasOwnProperty(tag) && data[tag] != s)
+ populate(data[tag]);
+
+ CodeMirror.htmlSchema = data;
+ function htmlHint(cm, options) {
+ var local = {schemaInfo: data};
+ if (options) for (var opt in options) local[opt] = options[opt];
+ return CodeMirror.hint.xml(cm, local);
+ }
+ CodeMirror.registerHelper("hint", "html", htmlHint);
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/addon/hint/show-hint.js":
+/*!*********************************************************!*\
+ !*** ./node_modules/codemirror/addon/hint/show-hint.js ***!
+ \*********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"));
+ else {}
+})(function(CodeMirror) {
+ "use strict";
+
+ var HINT_ELEMENT_CLASS = "CodeMirror-hint";
+ var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active";
+
+ // This is the old interface, kept around for now to stay
+ // backwards-compatible.
+ CodeMirror.showHint = function(cm, getHints, options) {
+ if (!getHints) return cm.showHint(options);
+ if (options && options.async) getHints.async = true;
+ var newOpts = {hint: getHints};
+ if (options) for (var prop in options) newOpts[prop] = options[prop];
+ return cm.showHint(newOpts);
+ };
+
+ CodeMirror.defineExtension("showHint", function(options) {
+ options = parseOptions(this, this.getCursor("start"), options);
+ var selections = this.listSelections()
+ if (selections.length > 1) return;
+ // By default, don't allow completion when something is selected.
+ // A hint function can have a `supportsSelection` property to
+ // indicate that it can handle selections.
+ if (this.somethingSelected()) {
+ if (!options.hint.supportsSelection) return;
+ // Don't try with cross-line selections
+ for (var i = 0; i < selections.length; i++)
+ if (selections[i].head.line != selections[i].anchor.line) return;
+ }
+
+ if (this.state.completionActive) this.state.completionActive.close();
+ var completion = this.state.completionActive = new Completion(this, options);
+ if (!completion.options.hint) return;
+
+ CodeMirror.signal(this, "startCompletion", this);
+ completion.update(true);
+ });
+
+ CodeMirror.defineExtension("closeHint", function() {
+ if (this.state.completionActive) this.state.completionActive.close()
+ })
+
+ function Completion(cm, options) {
+ this.cm = cm;
+ this.options = options;
+ this.widget = null;
+ this.debounce = 0;
+ this.tick = 0;
+ this.startPos = this.cm.getCursor("start");
+ this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length;
+
+ var self = this;
+ cm.on("cursorActivity", this.activityFunc = function() { self.cursorActivity(); });
+ }
+
+ var requestAnimationFrame = window.requestAnimationFrame || function(fn) {
+ return setTimeout(fn, 1000/60);
+ };
+ var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout;
+
+ Completion.prototype = {
+ close: function() {
+ if (!this.active()) return;
+ this.cm.state.completionActive = null;
+ this.tick = null;
+ this.cm.off("cursorActivity", this.activityFunc);
+
+ if (this.widget && this.data) CodeMirror.signal(this.data, "close");
+ if (this.widget) this.widget.close();
+ CodeMirror.signal(this.cm, "endCompletion", this.cm);
+ },
+
+ active: function() {
+ return this.cm.state.completionActive == this;
+ },
+
+ pick: function(data, i) {
+ var completion = data.list[i];
+ if (completion.hint) completion.hint(this.cm, data, completion);
+ else this.cm.replaceRange(getText(completion), completion.from || data.from,
+ completion.to || data.to, "complete");
+ CodeMirror.signal(data, "pick", completion);
+ this.close();
+ },
+
+ cursorActivity: function() {
+ if (this.debounce) {
+ cancelAnimationFrame(this.debounce);
+ this.debounce = 0;
+ }
+
+ var pos = this.cm.getCursor(), line = this.cm.getLine(pos.line);
+ if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch ||
+ pos.ch < this.startPos.ch || this.cm.somethingSelected() ||
+ (!pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) {
+ this.close();
+ } else {
+ var self = this;
+ this.debounce = requestAnimationFrame(function() {self.update();});
+ if (this.widget) this.widget.disable();
+ }
+ },
+
+ update: function(first) {
+ if (this.tick == null) return
+ var self = this, myTick = ++this.tick
+ fetchHints(this.options.hint, this.cm, this.options, function(data) {
+ if (self.tick == myTick) self.finishUpdate(data, first)
+ })
+ },
+
+ finishUpdate: function(data, first) {
+ if (this.data) CodeMirror.signal(this.data, "update");
+
+ var picked = (this.widget && this.widget.picked) || (first && this.options.completeSingle);
+ if (this.widget) this.widget.close();
+
+ this.data = data;
+
+ if (data && data.list.length) {
+ if (picked && data.list.length == 1) {
+ this.pick(data, 0);
+ } else {
+ this.widget = new Widget(this, data);
+ CodeMirror.signal(data, "shown");
+ }
+ }
+ }
+ };
+
+ function parseOptions(cm, pos, options) {
+ var editor = cm.options.hintOptions;
+ var out = {};
+ for (var prop in defaultOptions) out[prop] = defaultOptions[prop];
+ if (editor) for (var prop in editor)
+ if (editor[prop] !== undefined) out[prop] = editor[prop];
+ if (options) for (var prop in options)
+ if (options[prop] !== undefined) out[prop] = options[prop];
+ if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos)
+ return out;
+ }
+
+ function getText(completion) {
+ if (typeof completion == "string") return completion;
+ else return completion.text;
+ }
+
+ function buildKeyMap(completion, handle) {
+ var baseMap = {
+ Up: function() {handle.moveFocus(-1);},
+ Down: function() {handle.moveFocus(1);},
+ PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);},
+ PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);},
+ Home: function() {handle.setFocus(0);},
+ End: function() {handle.setFocus(handle.length - 1);},
+ Enter: handle.pick,
+ Tab: handle.pick,
+ Esc: handle.close
+ };
+
+ var mac = /Mac/.test(navigator.platform);
+
+ if (mac) {
+ baseMap["Ctrl-P"] = function() {handle.moveFocus(-1);};
+ baseMap["Ctrl-N"] = function() {handle.moveFocus(1);};
+ }
+
+ var custom = completion.options.customKeys;
+ var ourMap = custom ? {} : baseMap;
+ function addBinding(key, val) {
+ var bound;
+ if (typeof val != "string")
+ bound = function(cm) { return val(cm, handle); };
+ // This mechanism is deprecated
+ else if (baseMap.hasOwnProperty(val))
+ bound = baseMap[val];
+ else
+ bound = val;
+ ourMap[key] = bound;
+ }
+ if (custom)
+ for (var key in custom) if (custom.hasOwnProperty(key))
+ addBinding(key, custom[key]);
+ var extra = completion.options.extraKeys;
+ if (extra)
+ for (var key in extra) if (extra.hasOwnProperty(key))
+ addBinding(key, extra[key]);
+ return ourMap;
+ }
+
+ function getHintElement(hintsElement, el) {
+ while (el && el != hintsElement) {
+ if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el;
+ el = el.parentNode;
+ }
+ }
+
+ function Widget(completion, data) {
+ this.completion = completion;
+ this.data = data;
+ this.picked = false;
+ var widget = this, cm = completion.cm;
+ var ownerDocument = cm.getInputField().ownerDocument;
+ var parentWindow = ownerDocument.defaultView || ownerDocument.parentWindow;
+
+ var hints = this.hints = ownerDocument.createElement("ul");
+ var theme = completion.cm.options.theme;
+ hints.className = "CodeMirror-hints " + theme;
+ this.selectedHint = data.selectedHint || 0;
+
+ var completions = data.list;
+ for (var i = 0; i < completions.length; ++i) {
+ var elt = hints.appendChild(ownerDocument.createElement("li")), cur = completions[i];
+ var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS);
+ if (cur.className != null) className = cur.className + " " + className;
+ elt.className = className;
+ if (cur.render) cur.render(elt, data, cur);
+ else elt.appendChild(ownerDocument.createTextNode(cur.displayText || getText(cur)));
+ elt.hintId = i;
+ }
+
+ var container = completion.options.container || ownerDocument.body;
+ var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null);
+ var left = pos.left, top = pos.bottom, below = true;
+ var offsetLeft = 0, offsetTop = 0;
+ if (container !== ownerDocument.body) {
+ // We offset the cursor position because left and top are relative to the offsetParent's top left corner.
+ var isContainerPositioned = ['absolute', 'relative', 'fixed'].indexOf(parentWindow.getComputedStyle(container).position) !== -1;
+ var offsetParent = isContainerPositioned ? container : container.offsetParent;
+ var offsetParentPosition = offsetParent.getBoundingClientRect();
+ var bodyPosition = ownerDocument.body.getBoundingClientRect();
+ offsetLeft = (offsetParentPosition.left - bodyPosition.left - offsetParent.scrollLeft);
+ offsetTop = (offsetParentPosition.top - bodyPosition.top - offsetParent.scrollTop);
+ }
+ hints.style.left = (left - offsetLeft) + "px";
+ hints.style.top = (top - offsetTop) + "px";
+
+ // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.
+ var winW = parentWindow.innerWidth || Math.max(ownerDocument.body.offsetWidth, ownerDocument.documentElement.offsetWidth);
+ var winH = parentWindow.innerHeight || Math.max(ownerDocument.body.offsetHeight, ownerDocument.documentElement.offsetHeight);
+ container.appendChild(hints);
+ var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH;
+ var scrolls = hints.scrollHeight > hints.clientHeight + 1
+ var startScroll = cm.getScrollInfo();
+
+ if (overlapY > 0) {
+ var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top);
+ if (curTop - height > 0) { // Fits above cursor
+ hints.style.top = (top = pos.top - height - offsetTop) + "px";
+ below = false;
+ } else if (height > winH) {
+ hints.style.height = (winH - 5) + "px";
+ hints.style.top = (top = pos.bottom - box.top - offsetTop) + "px";
+ var cursor = cm.getCursor();
+ if (data.from.ch != cursor.ch) {
+ pos = cm.cursorCoords(cursor);
+ hints.style.left = (left = pos.left - offsetLeft) + "px";
+ box = hints.getBoundingClientRect();
+ }
+ }
+ }
+ var overlapX = box.right - winW;
+ if (overlapX > 0) {
+ if (box.right - box.left > winW) {
+ hints.style.width = (winW - 5) + "px";
+ overlapX -= (box.right - box.left) - winW;
+ }
+ hints.style.left = (left = pos.left - overlapX - offsetLeft) + "px";
+ }
+ if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling)
+ node.style.paddingRight = cm.display.nativeBarWidth + "px"
+
+ cm.addKeyMap(this.keyMap = buildKeyMap(completion, {
+ moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); },
+ setFocus: function(n) { widget.changeActive(n); },
+ menuSize: function() { return widget.screenAmount(); },
+ length: completions.length,
+ close: function() { completion.close(); },
+ pick: function() { widget.pick(); },
+ data: data
+ }));
+
+ if (completion.options.closeOnUnfocus) {
+ var closingOnBlur;
+ cm.on("blur", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); });
+ cm.on("focus", this.onFocus = function() { clearTimeout(closingOnBlur); });
+ }
+
+ cm.on("scroll", this.onScroll = function() {
+ var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect();
+ var newTop = top + startScroll.top - curScroll.top;
+ var point = newTop - (parentWindow.pageYOffset || (ownerDocument.documentElement || ownerDocument.body).scrollTop);
+ if (!below) point += hints.offsetHeight;
+ if (point <= editor.top || point >= editor.bottom) return completion.close();
+ hints.style.top = newTop + "px";
+ hints.style.left = (left + startScroll.left - curScroll.left) + "px";
+ });
+
+ CodeMirror.on(hints, "dblclick", function(e) {
+ var t = getHintElement(hints, e.target || e.srcElement);
+ if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();}
+ });
+
+ CodeMirror.on(hints, "click", function(e) {
+ var t = getHintElement(hints, e.target || e.srcElement);
+ if (t && t.hintId != null) {
+ widget.changeActive(t.hintId);
+ if (completion.options.completeOnSingleClick) widget.pick();
+ }
+ });
+
+ CodeMirror.on(hints, "mousedown", function() {
+ setTimeout(function(){cm.focus();}, 20);
+ });
+
+ CodeMirror.signal(data, "select", completions[this.selectedHint], hints.childNodes[this.selectedHint]);
+ return true;
+ }
+
+ Widget.prototype = {
+ close: function() {
+ if (this.completion.widget != this) return;
+ this.completion.widget = null;
+ this.hints.parentNode.removeChild(this.hints);
+ this.completion.cm.removeKeyMap(this.keyMap);
+
+ var cm = this.completion.cm;
+ if (this.completion.options.closeOnUnfocus) {
+ cm.off("blur", this.onBlur);
+ cm.off("focus", this.onFocus);
+ }
+ cm.off("scroll", this.onScroll);
+ },
+
+ disable: function() {
+ this.completion.cm.removeKeyMap(this.keyMap);
+ var widget = this;
+ this.keyMap = {Enter: function() { widget.picked = true; }};
+ this.completion.cm.addKeyMap(this.keyMap);
+ },
+
+ pick: function() {
+ this.completion.pick(this.data, this.selectedHint);
+ },
+
+ changeActive: function(i, avoidWrap) {
+ if (i >= this.data.list.length)
+ i = avoidWrap ? this.data.list.length - 1 : 0;
+ else if (i < 0)
+ i = avoidWrap ? 0 : this.data.list.length - 1;
+ if (this.selectedHint == i) return;
+ var node = this.hints.childNodes[this.selectedHint];
+ if (node) node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, "");
+ node = this.hints.childNodes[this.selectedHint = i];
+ node.className += " " + ACTIVE_HINT_ELEMENT_CLASS;
+ if (node.offsetTop < this.hints.scrollTop)
+ this.hints.scrollTop = node.offsetTop - 3;
+ else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight)
+ this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3;
+ CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node);
+ },
+
+ screenAmount: function() {
+ return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1;
+ }
+ };
+
+ function applicableHelpers(cm, helpers) {
+ if (!cm.somethingSelected()) return helpers
+ var result = []
+ for (var i = 0; i < helpers.length; i++)
+ if (helpers[i].supportsSelection) result.push(helpers[i])
+ return result
+ }
+
+ function fetchHints(hint, cm, options, callback) {
+ if (hint.async) {
+ hint(cm, callback, options)
+ } else {
+ var result = hint(cm, options)
+ if (result && result.then) result.then(callback)
+ else callback(result)
+ }
+ }
+
+ function resolveAutoHints(cm, pos) {
+ var helpers = cm.getHelpers(pos, "hint"), words
+ if (helpers.length) {
+ var resolved = function(cm, callback, options) {
+ var app = applicableHelpers(cm, helpers);
+ function run(i) {
+ if (i == app.length) return callback(null)
+ fetchHints(app[i], cm, options, function(result) {
+ if (result && result.list.length > 0) callback(result)
+ else run(i + 1)
+ })
+ }
+ run(0)
+ }
+ resolved.async = true
+ resolved.supportsSelection = true
+ return resolved
+ } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) {
+ return function(cm) { return CodeMirror.hint.fromList(cm, {words: words}) }
+ } else if (CodeMirror.hint.anyword) {
+ return function(cm, options) { return CodeMirror.hint.anyword(cm, options) }
+ } else {
+ return function() {}
+ }
+ }
+
+ CodeMirror.registerHelper("hint", "auto", {
+ resolve: resolveAutoHints
+ });
+
+ CodeMirror.registerHelper("hint", "fromList", function(cm, options) {
+ var cur = cm.getCursor(), token = cm.getTokenAt(cur)
+ var term, from = CodeMirror.Pos(cur.line, token.start), to = cur
+ if (token.start < cur.ch && /\w/.test(token.string.charAt(cur.ch - token.start - 1))) {
+ term = token.string.substr(0, cur.ch - token.start)
+ } else {
+ term = ""
+ from = cur
+ }
+ var found = [];
+ for (var i = 0; i < options.words.length; i++) {
+ var word = options.words[i];
+ if (word.slice(0, term.length) == term)
+ found.push(word);
+ }
+
+ if (found.length) return {list: found, from: from, to: to};
+ });
+
+ CodeMirror.commands.autocomplete = CodeMirror.showHint;
+
+ var defaultOptions = {
+ hint: CodeMirror.hint.auto,
+ completeSingle: true,
+ alignWithWord: true,
+ closeCharacters: /[\s()\[\]{};:>,]/,
+ closeOnUnfocus: true,
+ completeOnSingleClick: true,
+ container: null,
+ customKeys: null,
+ extraKeys: null
+ };
+
+ CodeMirror.defineOption("hintOptions", null);
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/addon/hint/xml-hint.js":
+/*!********************************************************!*\
+ !*** ./node_modules/codemirror/addon/hint/xml-hint.js ***!
+ \********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"));
+ else {}
+})(function(CodeMirror) {
+ "use strict";
+
+ var Pos = CodeMirror.Pos;
+
+ function matches(hint, typed, matchInMiddle) {
+ if (matchInMiddle) return hint.indexOf(typed) >= 0;
+ else return hint.lastIndexOf(typed, 0) == 0;
+ }
+
+ function getHints(cm, options) {
+ var tags = options && options.schemaInfo;
+ var quote = (options && options.quoteChar) || '"';
+ var matchInMiddle = options && options.matchInMiddle;
+ if (!tags) return;
+ var cur = cm.getCursor(), token = cm.getTokenAt(cur);
+ if (token.end > cur.ch) {
+ token.end = cur.ch;
+ token.string = token.string.slice(0, cur.ch - token.start);
+ }
+ var inner = CodeMirror.innerMode(cm.getMode(), token.state);
+ if (inner.mode.name != "xml") return;
+ var result = [], replaceToken = false, prefix;
+ var tag = /\btag\b/.test(token.type) && !/>$/.test(token.string);
+ var tagName = tag && /^\w/.test(token.string), tagStart;
+
+ if (tagName) {
+ var before = cm.getLine(cur.line).slice(Math.max(0, token.start - 2), token.start);
+ var tagType = /<\/$/.test(before) ? "close" : /<$/.test(before) ? "open" : null;
+ if (tagType) tagStart = token.start - (tagType == "close" ? 2 : 1);
+ } else if (tag && token.string == "<") {
+ tagType = "open";
+ } else if (tag && token.string == "") {
+ tagType = "close";
+ }
+
+ if (!tag && !inner.state.tagName || tagType) {
+ if (tagName)
+ prefix = token.string;
+ replaceToken = tagType;
+ var cx = inner.state.context, curTag = cx && tags[cx.tagName];
+ var childList = cx ? curTag && curTag.children : tags["!top"];
+ if (childList && tagType != "close") {
+ for (var i = 0; i < childList.length; ++i) if (!prefix || matches(childList[i], prefix, matchInMiddle))
+ result.push("<" + childList[i]);
+ } else if (tagType != "close") {
+ for (var name in tags)
+ if (tags.hasOwnProperty(name) && name != "!top" && name != "!attrs" && (!prefix || matches(name, prefix, matchInMiddle)))
+ result.push("<" + name);
+ }
+ if (cx && (!prefix || tagType == "close" && matches(cx.tagName, prefix, matchInMiddle)))
+ result.push("" + cx.tagName + ">");
+ } else {
+ // Attribute completion
+ var curTag = tags[inner.state.tagName], attrs = curTag && curTag.attrs;
+ var globalAttrs = tags["!attrs"];
+ if (!attrs && !globalAttrs) return;
+ if (!attrs) {
+ attrs = globalAttrs;
+ } else if (globalAttrs) { // Combine tag-local and global attributes
+ var set = {};
+ for (var nm in globalAttrs) if (globalAttrs.hasOwnProperty(nm)) set[nm] = globalAttrs[nm];
+ for (var nm in attrs) if (attrs.hasOwnProperty(nm)) set[nm] = attrs[nm];
+ attrs = set;
+ }
+ if (token.type == "string" || token.string == "=") { // A value
+ var before = cm.getRange(Pos(cur.line, Math.max(0, cur.ch - 60)),
+ Pos(cur.line, token.type == "string" ? token.start : token.end));
+ var atName = before.match(/([^\s\u00a0=<>\"\']+)=$/), atValues;
+ if (!atName || !attrs.hasOwnProperty(atName[1]) || !(atValues = attrs[atName[1]])) return;
+ if (typeof atValues == 'function') atValues = atValues.call(this, cm); // Functions can be used to supply values for autocomplete widget
+ if (token.type == "string") {
+ prefix = token.string;
+ var n = 0;
+ if (/['"]/.test(token.string.charAt(0))) {
+ quote = token.string.charAt(0);
+ prefix = token.string.slice(1);
+ n++;
+ }
+ var len = token.string.length;
+ if (/['"]/.test(token.string.charAt(len - 1))) {
+ quote = token.string.charAt(len - 1);
+ prefix = token.string.substr(n, len - 2);
+ }
+ if (n) { // an opening quote
+ var line = cm.getLine(cur.line);
+ if (line.length > token.end && line.charAt(token.end) == quote) token.end++; // include a closing quote
+ }
+ replaceToken = true;
+ }
+ for (var i = 0; i < atValues.length; ++i) if (!prefix || matches(atValues[i], prefix, matchInMiddle))
+ result.push(quote + atValues[i] + quote);
+ } else { // An attribute name
+ if (token.type == "attribute") {
+ prefix = token.string;
+ replaceToken = true;
+ }
+ for (var attr in attrs) if (attrs.hasOwnProperty(attr) && (!prefix || matches(attr, prefix, matchInMiddle)))
+ result.push(attr);
+ }
+ }
+ return {
+ list: result,
+ from: replaceToken ? Pos(cur.line, tagStart == null ? token.start : tagStart) : cur,
+ to: replaceToken ? Pos(cur.line, token.end) : cur
+ };
+ }
+
+ CodeMirror.registerHelper("hint", "xml", getHints);
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/addon/mode/overlay.js":
+/*!*******************************************************!*\
+ !*** ./node_modules/codemirror/addon/mode/overlay.js ***!
+ \*******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+// Utility function that allows modes to be combined. The mode given
+// as the base argument takes care of most of the normal mode
+// functionality, but a second (typically simple) mode is used, which
+// can override the style of text. Both modes get to parse all of the
+// text, but when both assign a non-null style to a piece of code, the
+// overlay wins, unless the combine argument was true and not overridden,
+// or state.overlay.combineTokens was true, in which case the styles are
+// combined.
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"));
+ else {}
+})(function(CodeMirror) {
+"use strict";
+
+CodeMirror.overlayMode = function(base, overlay, combine) {
+ return {
+ startState: function() {
+ return {
+ base: CodeMirror.startState(base),
+ overlay: CodeMirror.startState(overlay),
+ basePos: 0, baseCur: null,
+ overlayPos: 0, overlayCur: null,
+ streamSeen: null
+ };
+ },
+ copyState: function(state) {
+ return {
+ base: CodeMirror.copyState(base, state.base),
+ overlay: CodeMirror.copyState(overlay, state.overlay),
+ basePos: state.basePos, baseCur: null,
+ overlayPos: state.overlayPos, overlayCur: null
+ };
+ },
+
+ token: function(stream, state) {
+ if (stream != state.streamSeen ||
+ Math.min(state.basePos, state.overlayPos) < stream.start) {
+ state.streamSeen = stream;
+ state.basePos = state.overlayPos = stream.start;
+ }
+
+ if (stream.start == state.basePos) {
+ state.baseCur = base.token(stream, state.base);
+ state.basePos = stream.pos;
+ }
+ if (stream.start == state.overlayPos) {
+ stream.pos = stream.start;
+ state.overlayCur = overlay.token(stream, state.overlay);
+ state.overlayPos = stream.pos;
+ }
+ stream.pos = Math.min(state.basePos, state.overlayPos);
+
+ // state.overlay.combineTokens always takes precedence over combine,
+ // unless set to null
+ if (state.overlayCur == null) return state.baseCur;
+ else if (state.baseCur != null &&
+ state.overlay.combineTokens ||
+ combine && state.overlay.combineTokens == null)
+ return state.baseCur + " " + state.overlayCur;
+ else return state.overlayCur;
+ },
+
+ indent: base.indent && function(state, textAfter, line) {
+ return base.indent(state.base, textAfter, line);
+ },
+ electricChars: base.electricChars,
+
+ innerMode: function(state) { return {state: state.base, mode: base}; },
+
+ blankLine: function(state) {
+ var baseToken, overlayToken;
+ if (base.blankLine) baseToken = base.blankLine(state.base);
+ if (overlay.blankLine) overlayToken = overlay.blankLine(state.overlay);
+
+ return overlayToken == null ?
+ baseToken :
+ (combine && baseToken != null ? baseToken + " " + overlayToken : overlayToken);
+ }
+ };
+};
+
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/addon/search/searchcursor.js":
+/*!**************************************************************!*\
+ !*** ./node_modules/codemirror/addon/search/searchcursor.js ***!
+ \**************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"))
+ else {}
+})(function(CodeMirror) {
+ "use strict"
+ var Pos = CodeMirror.Pos
+
+ function regexpFlags(regexp) {
+ var flags = regexp.flags
+ return flags != null ? flags : (regexp.ignoreCase ? "i" : "")
+ + (regexp.global ? "g" : "")
+ + (regexp.multiline ? "m" : "")
+ }
+
+ function ensureFlags(regexp, flags) {
+ var current = regexpFlags(regexp), target = current
+ for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1)
+ target += flags.charAt(i)
+ return current == target ? regexp : new RegExp(regexp.source, target)
+ }
+
+ function maybeMultiline(regexp) {
+ return /\\s|\\n|\n|\\W|\\D|\[\^/.test(regexp.source)
+ }
+
+ function searchRegexpForward(doc, regexp, start) {
+ regexp = ensureFlags(regexp, "g")
+ for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) {
+ regexp.lastIndex = ch
+ var string = doc.getLine(line), match = regexp.exec(string)
+ if (match)
+ return {from: Pos(line, match.index),
+ to: Pos(line, match.index + match[0].length),
+ match: match}
+ }
+ }
+
+ function searchRegexpForwardMultiline(doc, regexp, start) {
+ if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start)
+
+ regexp = ensureFlags(regexp, "gm")
+ var string, chunk = 1
+ for (var line = start.line, last = doc.lastLine(); line <= last;) {
+ // This grows the search buffer in exponentially-sized chunks
+ // between matches, so that nearby matches are fast and don't
+ // require concatenating the whole document (in case we're
+ // searching for something that has tons of matches), but at the
+ // same time, the amount of retries is limited.
+ for (var i = 0; i < chunk; i++) {
+ if (line > last) break
+ var curLine = doc.getLine(line++)
+ string = string == null ? curLine : string + "\n" + curLine
+ }
+ chunk = chunk * 2
+ regexp.lastIndex = start.ch
+ var match = regexp.exec(string)
+ if (match) {
+ var before = string.slice(0, match.index).split("\n"), inside = match[0].split("\n")
+ var startLine = start.line + before.length - 1, startCh = before[before.length - 1].length
+ return {from: Pos(startLine, startCh),
+ to: Pos(startLine + inside.length - 1,
+ inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),
+ match: match}
+ }
+ }
+ }
+
+ function lastMatchIn(string, regexp) {
+ var cutOff = 0, match
+ for (;;) {
+ regexp.lastIndex = cutOff
+ var newMatch = regexp.exec(string)
+ if (!newMatch) return match
+ match = newMatch
+ cutOff = match.index + (match[0].length || 1)
+ if (cutOff == string.length) return match
+ }
+ }
+
+ function searchRegexpBackward(doc, regexp, start) {
+ regexp = ensureFlags(regexp, "g")
+ for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) {
+ var string = doc.getLine(line)
+ if (ch > -1) string = string.slice(0, ch)
+ var match = lastMatchIn(string, regexp)
+ if (match)
+ return {from: Pos(line, match.index),
+ to: Pos(line, match.index + match[0].length),
+ match: match}
+ }
+ }
+
+ function searchRegexpBackwardMultiline(doc, regexp, start) {
+ regexp = ensureFlags(regexp, "gm")
+ var string, chunk = 1
+ for (var line = start.line, first = doc.firstLine(); line >= first;) {
+ for (var i = 0; i < chunk; i++) {
+ var curLine = doc.getLine(line--)
+ string = string == null ? curLine.slice(0, start.ch) : curLine + "\n" + string
+ }
+ chunk *= 2
+
+ var match = lastMatchIn(string, regexp)
+ if (match) {
+ var before = string.slice(0, match.index).split("\n"), inside = match[0].split("\n")
+ var startLine = line + before.length, startCh = before[before.length - 1].length
+ return {from: Pos(startLine, startCh),
+ to: Pos(startLine + inside.length - 1,
+ inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),
+ match: match}
+ }
+ }
+ }
+
+ var doFold, noFold
+ if (String.prototype.normalize) {
+ doFold = function(str) { return str.normalize("NFD").toLowerCase() }
+ noFold = function(str) { return str.normalize("NFD") }
+ } else {
+ doFold = function(str) { return str.toLowerCase() }
+ noFold = function(str) { return str }
+ }
+
+ // Maps a position in a case-folded line back to a position in the original line
+ // (compensating for codepoints increasing in number during folding)
+ function adjustPos(orig, folded, pos, foldFunc) {
+ if (orig.length == folded.length) return pos
+ for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) {
+ if (min == max) return min
+ var mid = (min + max) >> 1
+ var len = foldFunc(orig.slice(0, mid)).length
+ if (len == pos) return mid
+ else if (len > pos) max = mid
+ else min = mid + 1
+ }
+ }
+
+ function searchStringForward(doc, query, start, caseFold) {
+ // Empty string would match anything and never progress, so we
+ // define it to match nothing instead.
+ if (!query.length) return null
+ var fold = caseFold ? doFold : noFold
+ var lines = fold(query).split(/\r|\n\r?/)
+
+ search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) {
+ var orig = doc.getLine(line).slice(ch), string = fold(orig)
+ if (lines.length == 1) {
+ var found = string.indexOf(lines[0])
+ if (found == -1) continue search
+ var start = adjustPos(orig, string, found, fold) + ch
+ return {from: Pos(line, adjustPos(orig, string, found, fold) + ch),
+ to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch)}
+ } else {
+ var cutFrom = string.length - lines[0].length
+ if (string.slice(cutFrom) != lines[0]) continue search
+ for (var i = 1; i < lines.length - 1; i++)
+ if (fold(doc.getLine(line + i)) != lines[i]) continue search
+ var end = doc.getLine(line + lines.length - 1), endString = fold(end), lastLine = lines[lines.length - 1]
+ if (endString.slice(0, lastLine.length) != lastLine) continue search
+ return {from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch),
+ to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold))}
+ }
+ }
+ }
+
+ function searchStringBackward(doc, query, start, caseFold) {
+ if (!query.length) return null
+ var fold = caseFold ? doFold : noFold
+ var lines = fold(query).split(/\r|\n\r?/)
+
+ search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) {
+ var orig = doc.getLine(line)
+ if (ch > -1) orig = orig.slice(0, ch)
+ var string = fold(orig)
+ if (lines.length == 1) {
+ var found = string.lastIndexOf(lines[0])
+ if (found == -1) continue search
+ return {from: Pos(line, adjustPos(orig, string, found, fold)),
+ to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold))}
+ } else {
+ var lastLine = lines[lines.length - 1]
+ if (string.slice(0, lastLine.length) != lastLine) continue search
+ for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++)
+ if (fold(doc.getLine(start + i)) != lines[i]) continue search
+ var top = doc.getLine(line + 1 - lines.length), topString = fold(top)
+ if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search
+ return {from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)),
+ to: Pos(line, adjustPos(orig, string, lastLine.length, fold))}
+ }
+ }
+ }
+
+ function SearchCursor(doc, query, pos, options) {
+ this.atOccurrence = false
+ this.doc = doc
+ pos = pos ? doc.clipPos(pos) : Pos(0, 0)
+ this.pos = {from: pos, to: pos}
+
+ var caseFold
+ if (typeof options == "object") {
+ caseFold = options.caseFold
+ } else { // Backwards compat for when caseFold was the 4th argument
+ caseFold = options
+ options = null
+ }
+
+ if (typeof query == "string") {
+ if (caseFold == null) caseFold = false
+ this.matches = function(reverse, pos) {
+ return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos, caseFold)
+ }
+ } else {
+ query = ensureFlags(query, "gm")
+ if (!options || options.multiline !== false)
+ this.matches = function(reverse, pos) {
+ return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos)
+ }
+ else
+ this.matches = function(reverse, pos) {
+ return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos)
+ }
+ }
+ }
+
+ SearchCursor.prototype = {
+ findNext: function() {return this.find(false)},
+ findPrevious: function() {return this.find(true)},
+
+ find: function(reverse) {
+ var result = this.matches(reverse, this.doc.clipPos(reverse ? this.pos.from : this.pos.to))
+
+ // Implements weird auto-growing behavior on null-matches for
+ // backwards-compatiblity with the vim code (unfortunately)
+ while (result && CodeMirror.cmpPos(result.from, result.to) == 0) {
+ if (reverse) {
+ if (result.from.ch) result.from = Pos(result.from.line, result.from.ch - 1)
+ else if (result.from.line == this.doc.firstLine()) result = null
+ else result = this.matches(reverse, this.doc.clipPos(Pos(result.from.line - 1)))
+ } else {
+ if (result.to.ch < this.doc.getLine(result.to.line).length) result.to = Pos(result.to.line, result.to.ch + 1)
+ else if (result.to.line == this.doc.lastLine()) result = null
+ else result = this.matches(reverse, Pos(result.to.line + 1, 0))
+ }
+ }
+
+ if (result) {
+ this.pos = result
+ this.atOccurrence = true
+ return this.pos.match || true
+ } else {
+ var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0)
+ this.pos = {from: end, to: end}
+ return this.atOccurrence = false
+ }
+ },
+
+ from: function() {if (this.atOccurrence) return this.pos.from},
+ to: function() {if (this.atOccurrence) return this.pos.to},
+
+ replace: function(newText, origin) {
+ if (!this.atOccurrence) return
+ var lines = CodeMirror.splitLines(newText)
+ this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin)
+ this.pos.to = Pos(this.pos.from.line + lines.length - 1,
+ lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0))
+ }
+ }
+
+ CodeMirror.defineExtension("getSearchCursor", function(query, pos, caseFold) {
+ return new SearchCursor(this.doc, query, pos, caseFold)
+ })
+ CodeMirror.defineDocExtension("getSearchCursor", function(query, pos, caseFold) {
+ return new SearchCursor(this, query, pos, caseFold)
+ })
+
+ CodeMirror.defineExtension("selectMatches", function(query, caseFold) {
+ var ranges = []
+ var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold)
+ while (cur.findNext()) {
+ if (CodeMirror.cmpPos(cur.to(), this.getCursor("to")) > 0) break
+ ranges.push({anchor: cur.from(), head: cur.to()})
+ }
+ if (ranges.length)
+ this.setSelections(ranges, 0)
+ })
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/keymap/sublime.js":
+/*!***************************************************!*\
+ !*** ./node_modules/codemirror/keymap/sublime.js ***!
+ \***************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+// A rough approximation of Sublime Text's keybindings
+// Depends on addon/search/searchcursor.js and optionally addon/dialog/dialogs.js
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"), __webpack_require__(/*! ../addon/search/searchcursor */ "./node_modules/codemirror/addon/search/searchcursor.js"), __webpack_require__(/*! ../addon/edit/matchbrackets */ "./node_modules/codemirror/addon/edit/matchbrackets.js"));
+ else {}
+})(function(CodeMirror) {
+ "use strict";
+
+ var cmds = CodeMirror.commands;
+ var Pos = CodeMirror.Pos;
+
+ // This is not exactly Sublime's algorithm. I couldn't make heads or tails of that.
+ function findPosSubword(doc, start, dir) {
+ if (dir < 0 && start.ch == 0) return doc.clipPos(Pos(start.line - 1));
+ var line = doc.getLine(start.line);
+ if (dir > 0 && start.ch >= line.length) return doc.clipPos(Pos(start.line + 1, 0));
+ var state = "start", type;
+ for (var pos = start.ch, e = dir < 0 ? 0 : line.length, i = 0; pos != e; pos += dir, i++) {
+ var next = line.charAt(dir < 0 ? pos - 1 : pos);
+ var cat = next != "_" && CodeMirror.isWordChar(next) ? "w" : "o";
+ if (cat == "w" && next.toUpperCase() == next) cat = "W";
+ if (state == "start") {
+ if (cat != "o") { state = "in"; type = cat; }
+ } else if (state == "in") {
+ if (type != cat) {
+ if (type == "w" && cat == "W" && dir < 0) pos--;
+ if (type == "W" && cat == "w" && dir > 0) { type = "w"; continue; }
+ break;
+ }
+ }
+ }
+ return Pos(start.line, pos);
+ }
+
+ function moveSubword(cm, dir) {
+ cm.extendSelectionsBy(function(range) {
+ if (cm.display.shift || cm.doc.extend || range.empty())
+ return findPosSubword(cm.doc, range.head, dir);
+ else
+ return dir < 0 ? range.from() : range.to();
+ });
+ }
+
+ cmds.goSubwordLeft = function(cm) { moveSubword(cm, -1); };
+ cmds.goSubwordRight = function(cm) { moveSubword(cm, 1); };
+
+ cmds.scrollLineUp = function(cm) {
+ var info = cm.getScrollInfo();
+ if (!cm.somethingSelected()) {
+ var visibleBottomLine = cm.lineAtHeight(info.top + info.clientHeight, "local");
+ if (cm.getCursor().line >= visibleBottomLine)
+ cm.execCommand("goLineUp");
+ }
+ cm.scrollTo(null, info.top - cm.defaultTextHeight());
+ };
+ cmds.scrollLineDown = function(cm) {
+ var info = cm.getScrollInfo();
+ if (!cm.somethingSelected()) {
+ var visibleTopLine = cm.lineAtHeight(info.top, "local")+1;
+ if (cm.getCursor().line <= visibleTopLine)
+ cm.execCommand("goLineDown");
+ }
+ cm.scrollTo(null, info.top + cm.defaultTextHeight());
+ };
+
+ cmds.splitSelectionByLine = function(cm) {
+ var ranges = cm.listSelections(), lineRanges = [];
+ for (var i = 0; i < ranges.length; i++) {
+ var from = ranges[i].from(), to = ranges[i].to();
+ for (var line = from.line; line <= to.line; ++line)
+ if (!(to.line > from.line && line == to.line && to.ch == 0))
+ lineRanges.push({anchor: line == from.line ? from : Pos(line, 0),
+ head: line == to.line ? to : Pos(line)});
+ }
+ cm.setSelections(lineRanges, 0);
+ };
+
+ cmds.singleSelectionTop = function(cm) {
+ var range = cm.listSelections()[0];
+ cm.setSelection(range.anchor, range.head, {scroll: false});
+ };
+
+ cmds.selectLine = function(cm) {
+ var ranges = cm.listSelections(), extended = [];
+ for (var i = 0; i < ranges.length; i++) {
+ var range = ranges[i];
+ extended.push({anchor: Pos(range.from().line, 0),
+ head: Pos(range.to().line + 1, 0)});
+ }
+ cm.setSelections(extended);
+ };
+
+ function insertLine(cm, above) {
+ if (cm.isReadOnly()) return CodeMirror.Pass
+ cm.operation(function() {
+ var len = cm.listSelections().length, newSelection = [], last = -1;
+ for (var i = 0; i < len; i++) {
+ var head = cm.listSelections()[i].head;
+ if (head.line <= last) continue;
+ var at = Pos(head.line + (above ? 0 : 1), 0);
+ cm.replaceRange("\n", at, null, "+insertLine");
+ cm.indentLine(at.line, null, true);
+ newSelection.push({head: at, anchor: at});
+ last = head.line + 1;
+ }
+ cm.setSelections(newSelection);
+ });
+ cm.execCommand("indentAuto");
+ }
+
+ cmds.insertLineAfter = function(cm) { return insertLine(cm, false); };
+
+ cmds.insertLineBefore = function(cm) { return insertLine(cm, true); };
+
+ function wordAt(cm, pos) {
+ var start = pos.ch, end = start, line = cm.getLine(pos.line);
+ while (start && CodeMirror.isWordChar(line.charAt(start - 1))) --start;
+ while (end < line.length && CodeMirror.isWordChar(line.charAt(end))) ++end;
+ return {from: Pos(pos.line, start), to: Pos(pos.line, end), word: line.slice(start, end)};
+ }
+
+ cmds.selectNextOccurrence = function(cm) {
+ var from = cm.getCursor("from"), to = cm.getCursor("to");
+ var fullWord = cm.state.sublimeFindFullWord == cm.doc.sel;
+ if (CodeMirror.cmpPos(from, to) == 0) {
+ var word = wordAt(cm, from);
+ if (!word.word) return;
+ cm.setSelection(word.from, word.to);
+ fullWord = true;
+ } else {
+ var text = cm.getRange(from, to);
+ var query = fullWord ? new RegExp("\\b" + text + "\\b") : text;
+ var cur = cm.getSearchCursor(query, to);
+ var found = cur.findNext();
+ if (!found) {
+ cur = cm.getSearchCursor(query, Pos(cm.firstLine(), 0));
+ found = cur.findNext();
+ }
+ if (!found || isSelectedRange(cm.listSelections(), cur.from(), cur.to()))
+ return CodeMirror.Pass
+ cm.addSelection(cur.from(), cur.to());
+ }
+ if (fullWord)
+ cm.state.sublimeFindFullWord = cm.doc.sel;
+ };
+
+ function addCursorToSelection(cm, dir) {
+ var ranges = cm.listSelections(), newRanges = [];
+ for (var i = 0; i < ranges.length; i++) {
+ var range = ranges[i];
+ var newAnchor = cm.findPosV(
+ range.anchor, dir, "line", range.anchor.goalColumn);
+ var newHead = cm.findPosV(
+ range.head, dir, "line", range.head.goalColumn);
+ newAnchor.goalColumn = range.anchor.goalColumn != null ?
+ range.anchor.goalColumn : cm.cursorCoords(range.anchor, "div").left;
+ newHead.goalColumn = range.head.goalColumn != null ?
+ range.head.goalColumn : cm.cursorCoords(range.head, "div").left;
+ var newRange = {anchor: newAnchor, head: newHead};
+ newRanges.push(range);
+ newRanges.push(newRange);
+ }
+ cm.setSelections(newRanges);
+ }
+ cmds.addCursorToPrevLine = function(cm) { addCursorToSelection(cm, -1); };
+ cmds.addCursorToNextLine = function(cm) { addCursorToSelection(cm, 1); };
+
+ function isSelectedRange(ranges, from, to) {
+ for (var i = 0; i < ranges.length; i++)
+ if (ranges[i].from() == from && ranges[i].to() == to) return true
+ return false
+ }
+
+ var mirror = "(){}[]";
+ function selectBetweenBrackets(cm) {
+ var ranges = cm.listSelections(), newRanges = []
+ for (var i = 0; i < ranges.length; i++) {
+ var range = ranges[i], pos = range.head, opening = cm.scanForBracket(pos, -1);
+ if (!opening) return false;
+ for (;;) {
+ var closing = cm.scanForBracket(pos, 1);
+ if (!closing) return false;
+ if (closing.ch == mirror.charAt(mirror.indexOf(opening.ch) + 1)) {
+ var startPos = Pos(opening.pos.line, opening.pos.ch + 1);
+ if (CodeMirror.cmpPos(startPos, range.from()) == 0 &&
+ CodeMirror.cmpPos(closing.pos, range.to()) == 0) {
+ opening = cm.scanForBracket(opening.pos, -1);
+ if (!opening) return false;
+ } else {
+ newRanges.push({anchor: startPos, head: closing.pos});
+ break;
+ }
+ }
+ pos = Pos(closing.pos.line, closing.pos.ch + 1);
+ }
+ }
+ cm.setSelections(newRanges);
+ return true;
+ }
+
+ cmds.selectScope = function(cm) {
+ selectBetweenBrackets(cm) || cm.execCommand("selectAll");
+ };
+ cmds.selectBetweenBrackets = function(cm) {
+ if (!selectBetweenBrackets(cm)) return CodeMirror.Pass;
+ };
+
+ cmds.goToBracket = function(cm) {
+ cm.extendSelectionsBy(function(range) {
+ var next = cm.scanForBracket(range.head, 1);
+ if (next && CodeMirror.cmpPos(next.pos, range.head) != 0) return next.pos;
+ var prev = cm.scanForBracket(range.head, -1);
+ return prev && Pos(prev.pos.line, prev.pos.ch + 1) || range.head;
+ });
+ };
+
+ cmds.swapLineUp = function(cm) {
+ if (cm.isReadOnly()) return CodeMirror.Pass
+ var ranges = cm.listSelections(), linesToMove = [], at = cm.firstLine() - 1, newSels = [];
+ for (var i = 0; i < ranges.length; i++) {
+ var range = ranges[i], from = range.from().line - 1, to = range.to().line;
+ newSels.push({anchor: Pos(range.anchor.line - 1, range.anchor.ch),
+ head: Pos(range.head.line - 1, range.head.ch)});
+ if (range.to().ch == 0 && !range.empty()) --to;
+ if (from > at) linesToMove.push(from, to);
+ else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to;
+ at = to;
+ }
+ cm.operation(function() {
+ for (var i = 0; i < linesToMove.length; i += 2) {
+ var from = linesToMove[i], to = linesToMove[i + 1];
+ var line = cm.getLine(from);
+ cm.replaceRange("", Pos(from, 0), Pos(from + 1, 0), "+swapLine");
+ if (to > cm.lastLine())
+ cm.replaceRange("\n" + line, Pos(cm.lastLine()), null, "+swapLine");
+ else
+ cm.replaceRange(line + "\n", Pos(to, 0), null, "+swapLine");
+ }
+ cm.setSelections(newSels);
+ cm.scrollIntoView();
+ });
+ };
+
+ cmds.swapLineDown = function(cm) {
+ if (cm.isReadOnly()) return CodeMirror.Pass
+ var ranges = cm.listSelections(), linesToMove = [], at = cm.lastLine() + 1;
+ for (var i = ranges.length - 1; i >= 0; i--) {
+ var range = ranges[i], from = range.to().line + 1, to = range.from().line;
+ if (range.to().ch == 0 && !range.empty()) from--;
+ if (from < at) linesToMove.push(from, to);
+ else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to;
+ at = to;
+ }
+ cm.operation(function() {
+ for (var i = linesToMove.length - 2; i >= 0; i -= 2) {
+ var from = linesToMove[i], to = linesToMove[i + 1];
+ var line = cm.getLine(from);
+ if (from == cm.lastLine())
+ cm.replaceRange("", Pos(from - 1), Pos(from), "+swapLine");
+ else
+ cm.replaceRange("", Pos(from, 0), Pos(from + 1, 0), "+swapLine");
+ cm.replaceRange(line + "\n", Pos(to, 0), null, "+swapLine");
+ }
+ cm.scrollIntoView();
+ });
+ };
+
+ cmds.toggleCommentIndented = function(cm) {
+ cm.toggleComment({ indent: true });
+ }
+
+ cmds.joinLines = function(cm) {
+ var ranges = cm.listSelections(), joined = [];
+ for (var i = 0; i < ranges.length; i++) {
+ var range = ranges[i], from = range.from();
+ var start = from.line, end = range.to().line;
+ while (i < ranges.length - 1 && ranges[i + 1].from().line == end)
+ end = ranges[++i].to().line;
+ joined.push({start: start, end: end, anchor: !range.empty() && from});
+ }
+ cm.operation(function() {
+ var offset = 0, ranges = [];
+ for (var i = 0; i < joined.length; i++) {
+ var obj = joined[i];
+ var anchor = obj.anchor && Pos(obj.anchor.line - offset, obj.anchor.ch), head;
+ for (var line = obj.start; line <= obj.end; line++) {
+ var actual = line - offset;
+ if (line == obj.end) head = Pos(actual, cm.getLine(actual).length + 1);
+ if (actual < cm.lastLine()) {
+ cm.replaceRange(" ", Pos(actual), Pos(actual + 1, /^\s*/.exec(cm.getLine(actual + 1))[0].length));
+ ++offset;
+ }
+ }
+ ranges.push({anchor: anchor || head, head: head});
+ }
+ cm.setSelections(ranges, 0);
+ });
+ };
+
+ cmds.duplicateLine = function(cm) {
+ cm.operation(function() {
+ var rangeCount = cm.listSelections().length;
+ for (var i = 0; i < rangeCount; i++) {
+ var range = cm.listSelections()[i];
+ if (range.empty())
+ cm.replaceRange(cm.getLine(range.head.line) + "\n", Pos(range.head.line, 0));
+ else
+ cm.replaceRange(cm.getRange(range.from(), range.to()), range.from());
+ }
+ cm.scrollIntoView();
+ });
+ };
+
+
+ function sortLines(cm, caseSensitive) {
+ if (cm.isReadOnly()) return CodeMirror.Pass
+ var ranges = cm.listSelections(), toSort = [], selected;
+ for (var i = 0; i < ranges.length; i++) {
+ var range = ranges[i];
+ if (range.empty()) continue;
+ var from = range.from().line, to = range.to().line;
+ while (i < ranges.length - 1 && ranges[i + 1].from().line == to)
+ to = ranges[++i].to().line;
+ if (!ranges[i].to().ch) to--;
+ toSort.push(from, to);
+ }
+ if (toSort.length) selected = true;
+ else toSort.push(cm.firstLine(), cm.lastLine());
+
+ cm.operation(function() {
+ var ranges = [];
+ for (var i = 0; i < toSort.length; i += 2) {
+ var from = toSort[i], to = toSort[i + 1];
+ var start = Pos(from, 0), end = Pos(to);
+ var lines = cm.getRange(start, end, false);
+ if (caseSensitive)
+ lines.sort();
+ else
+ lines.sort(function(a, b) {
+ var au = a.toUpperCase(), bu = b.toUpperCase();
+ if (au != bu) { a = au; b = bu; }
+ return a < b ? -1 : a == b ? 0 : 1;
+ });
+ cm.replaceRange(lines, start, end);
+ if (selected) ranges.push({anchor: start, head: Pos(to + 1, 0)});
+ }
+ if (selected) cm.setSelections(ranges, 0);
+ });
+ }
+
+ cmds.sortLines = function(cm) { sortLines(cm, true); };
+ cmds.sortLinesInsensitive = function(cm) { sortLines(cm, false); };
+
+ cmds.nextBookmark = function(cm) {
+ var marks = cm.state.sublimeBookmarks;
+ if (marks) while (marks.length) {
+ var current = marks.shift();
+ var found = current.find();
+ if (found) {
+ marks.push(current);
+ return cm.setSelection(found.from, found.to);
+ }
+ }
+ };
+
+ cmds.prevBookmark = function(cm) {
+ var marks = cm.state.sublimeBookmarks;
+ if (marks) while (marks.length) {
+ marks.unshift(marks.pop());
+ var found = marks[marks.length - 1].find();
+ if (!found)
+ marks.pop();
+ else
+ return cm.setSelection(found.from, found.to);
+ }
+ };
+
+ cmds.toggleBookmark = function(cm) {
+ var ranges = cm.listSelections();
+ var marks = cm.state.sublimeBookmarks || (cm.state.sublimeBookmarks = []);
+ for (var i = 0; i < ranges.length; i++) {
+ var from = ranges[i].from(), to = ranges[i].to();
+ var found = ranges[i].empty() ? cm.findMarksAt(from) : cm.findMarks(from, to);
+ for (var j = 0; j < found.length; j++) {
+ if (found[j].sublimeBookmark) {
+ found[j].clear();
+ for (var k = 0; k < marks.length; k++)
+ if (marks[k] == found[j])
+ marks.splice(k--, 1);
+ break;
+ }
+ }
+ if (j == found.length)
+ marks.push(cm.markText(from, to, {sublimeBookmark: true, clearWhenEmpty: false}));
+ }
+ };
+
+ cmds.clearBookmarks = function(cm) {
+ var marks = cm.state.sublimeBookmarks;
+ if (marks) for (var i = 0; i < marks.length; i++) marks[i].clear();
+ marks.length = 0;
+ };
+
+ cmds.selectBookmarks = function(cm) {
+ var marks = cm.state.sublimeBookmarks, ranges = [];
+ if (marks) for (var i = 0; i < marks.length; i++) {
+ var found = marks[i].find();
+ if (!found)
+ marks.splice(i--, 0);
+ else
+ ranges.push({anchor: found.from, head: found.to});
+ }
+ if (ranges.length)
+ cm.setSelections(ranges, 0);
+ };
+
+ function modifyWordOrSelection(cm, mod) {
+ cm.operation(function() {
+ var ranges = cm.listSelections(), indices = [], replacements = [];
+ for (var i = 0; i < ranges.length; i++) {
+ var range = ranges[i];
+ if (range.empty()) { indices.push(i); replacements.push(""); }
+ else replacements.push(mod(cm.getRange(range.from(), range.to())));
+ }
+ cm.replaceSelections(replacements, "around", "case");
+ for (var i = indices.length - 1, at; i >= 0; i--) {
+ var range = ranges[indices[i]];
+ if (at && CodeMirror.cmpPos(range.head, at) > 0) continue;
+ var word = wordAt(cm, range.head);
+ at = word.from;
+ cm.replaceRange(mod(word.word), word.from, word.to);
+ }
+ });
+ }
+
+ cmds.smartBackspace = function(cm) {
+ if (cm.somethingSelected()) return CodeMirror.Pass;
+
+ cm.operation(function() {
+ var cursors = cm.listSelections();
+ var indentUnit = cm.getOption("indentUnit");
+
+ for (var i = cursors.length - 1; i >= 0; i--) {
+ var cursor = cursors[i].head;
+ var toStartOfLine = cm.getRange({line: cursor.line, ch: 0}, cursor);
+ var column = CodeMirror.countColumn(toStartOfLine, null, cm.getOption("tabSize"));
+
+ // Delete by one character by default
+ var deletePos = cm.findPosH(cursor, -1, "char", false);
+
+ if (toStartOfLine && !/\S/.test(toStartOfLine) && column % indentUnit == 0) {
+ var prevIndent = new Pos(cursor.line,
+ CodeMirror.findColumn(toStartOfLine, column - indentUnit, indentUnit));
+
+ // Smart delete only if we found a valid prevIndent location
+ if (prevIndent.ch != cursor.ch) deletePos = prevIndent;
+ }
+
+ cm.replaceRange("", deletePos, cursor, "+delete");
+ }
+ });
+ };
+
+ cmds.delLineRight = function(cm) {
+ cm.operation(function() {
+ var ranges = cm.listSelections();
+ for (var i = ranges.length - 1; i >= 0; i--)
+ cm.replaceRange("", ranges[i].anchor, Pos(ranges[i].to().line), "+delete");
+ cm.scrollIntoView();
+ });
+ };
+
+ cmds.upcaseAtCursor = function(cm) {
+ modifyWordOrSelection(cm, function(str) { return str.toUpperCase(); });
+ };
+ cmds.downcaseAtCursor = function(cm) {
+ modifyWordOrSelection(cm, function(str) { return str.toLowerCase(); });
+ };
+
+ cmds.setSublimeMark = function(cm) {
+ if (cm.state.sublimeMark) cm.state.sublimeMark.clear();
+ cm.state.sublimeMark = cm.setBookmark(cm.getCursor());
+ };
+ cmds.selectToSublimeMark = function(cm) {
+ var found = cm.state.sublimeMark && cm.state.sublimeMark.find();
+ if (found) cm.setSelection(cm.getCursor(), found);
+ };
+ cmds.deleteToSublimeMark = function(cm) {
+ var found = cm.state.sublimeMark && cm.state.sublimeMark.find();
+ if (found) {
+ var from = cm.getCursor(), to = found;
+ if (CodeMirror.cmpPos(from, to) > 0) { var tmp = to; to = from; from = tmp; }
+ cm.state.sublimeKilled = cm.getRange(from, to);
+ cm.replaceRange("", from, to);
+ }
+ };
+ cmds.swapWithSublimeMark = function(cm) {
+ var found = cm.state.sublimeMark && cm.state.sublimeMark.find();
+ if (found) {
+ cm.state.sublimeMark.clear();
+ cm.state.sublimeMark = cm.setBookmark(cm.getCursor());
+ cm.setCursor(found);
+ }
+ };
+ cmds.sublimeYank = function(cm) {
+ if (cm.state.sublimeKilled != null)
+ cm.replaceSelection(cm.state.sublimeKilled, null, "paste");
+ };
+
+ cmds.showInCenter = function(cm) {
+ var pos = cm.cursorCoords(null, "local");
+ cm.scrollTo(null, (pos.top + pos.bottom) / 2 - cm.getScrollInfo().clientHeight / 2);
+ };
+
+ function getTarget(cm) {
+ var from = cm.getCursor("from"), to = cm.getCursor("to");
+ if (CodeMirror.cmpPos(from, to) == 0) {
+ var word = wordAt(cm, from);
+ if (!word.word) return;
+ from = word.from;
+ to = word.to;
+ }
+ return {from: from, to: to, query: cm.getRange(from, to), word: word};
+ }
+
+ function findAndGoTo(cm, forward) {
+ var target = getTarget(cm);
+ if (!target) return;
+ var query = target.query;
+ var cur = cm.getSearchCursor(query, forward ? target.to : target.from);
+
+ if (forward ? cur.findNext() : cur.findPrevious()) {
+ cm.setSelection(cur.from(), cur.to());
+ } else {
+ cur = cm.getSearchCursor(query, forward ? Pos(cm.firstLine(), 0)
+ : cm.clipPos(Pos(cm.lastLine())));
+ if (forward ? cur.findNext() : cur.findPrevious())
+ cm.setSelection(cur.from(), cur.to());
+ else if (target.word)
+ cm.setSelection(target.from, target.to);
+ }
+ };
+ cmds.findUnder = function(cm) { findAndGoTo(cm, true); };
+ cmds.findUnderPrevious = function(cm) { findAndGoTo(cm,false); };
+ cmds.findAllUnder = function(cm) {
+ var target = getTarget(cm);
+ if (!target) return;
+ var cur = cm.getSearchCursor(target.query);
+ var matches = [];
+ var primaryIndex = -1;
+ while (cur.findNext()) {
+ matches.push({anchor: cur.from(), head: cur.to()});
+ if (cur.from().line <= target.from.line && cur.from().ch <= target.from.ch)
+ primaryIndex++;
+ }
+ cm.setSelections(matches, primaryIndex);
+ };
+
+
+ var keyMap = CodeMirror.keyMap;
+ keyMap.macSublime = {
+ "Cmd-Left": "goLineStartSmart",
+ "Shift-Tab": "indentLess",
+ "Shift-Ctrl-K": "deleteLine",
+ "Alt-Q": "wrapLines",
+ "Ctrl-Left": "goSubwordLeft",
+ "Ctrl-Right": "goSubwordRight",
+ "Ctrl-Alt-Up": "scrollLineUp",
+ "Ctrl-Alt-Down": "scrollLineDown",
+ "Cmd-L": "selectLine",
+ "Shift-Cmd-L": "splitSelectionByLine",
+ "Esc": "singleSelectionTop",
+ "Cmd-Enter": "insertLineAfter",
+ "Shift-Cmd-Enter": "insertLineBefore",
+ "Cmd-D": "selectNextOccurrence",
+ "Shift-Cmd-Space": "selectScope",
+ "Shift-Cmd-M": "selectBetweenBrackets",
+ "Cmd-M": "goToBracket",
+ "Cmd-Ctrl-Up": "swapLineUp",
+ "Cmd-Ctrl-Down": "swapLineDown",
+ "Cmd-/": "toggleCommentIndented",
+ "Cmd-J": "joinLines",
+ "Shift-Cmd-D": "duplicateLine",
+ "F5": "sortLines",
+ "Cmd-F5": "sortLinesInsensitive",
+ "F2": "nextBookmark",
+ "Shift-F2": "prevBookmark",
+ "Cmd-F2": "toggleBookmark",
+ "Shift-Cmd-F2": "clearBookmarks",
+ "Alt-F2": "selectBookmarks",
+ "Backspace": "smartBackspace",
+ "Cmd-K Cmd-K": "delLineRight",
+ "Cmd-K Cmd-U": "upcaseAtCursor",
+ "Cmd-K Cmd-L": "downcaseAtCursor",
+ "Cmd-K Cmd-Space": "setSublimeMark",
+ "Cmd-K Cmd-A": "selectToSublimeMark",
+ "Cmd-K Cmd-W": "deleteToSublimeMark",
+ "Cmd-K Cmd-X": "swapWithSublimeMark",
+ "Cmd-K Cmd-Y": "sublimeYank",
+ "Cmd-K Cmd-C": "showInCenter",
+ "Cmd-K Cmd-G": "clearBookmarks",
+ "Cmd-K Cmd-Backspace": "delLineLeft",
+ "Cmd-K Cmd-0": "unfoldAll",
+ "Cmd-K Cmd-J": "unfoldAll",
+ "Ctrl-Shift-Up": "addCursorToPrevLine",
+ "Ctrl-Shift-Down": "addCursorToNextLine",
+ "Cmd-F3": "findUnder",
+ "Shift-Cmd-F3": "findUnderPrevious",
+ "Alt-F3": "findAllUnder",
+ "Shift-Cmd-[": "fold",
+ "Shift-Cmd-]": "unfold",
+ "Cmd-I": "findIncremental",
+ "Shift-Cmd-I": "findIncrementalReverse",
+ "Cmd-H": "replace",
+ "F3": "findNext",
+ "Shift-F3": "findPrev",
+ "fallthrough": "macDefault"
+ };
+ CodeMirror.normalizeKeyMap(keyMap.macSublime);
+
+ keyMap.pcSublime = {
+ "Shift-Tab": "indentLess",
+ "Shift-Ctrl-K": "deleteLine",
+ "Alt-Q": "wrapLines",
+ "Ctrl-T": "transposeChars",
+ "Alt-Left": "goSubwordLeft",
+ "Alt-Right": "goSubwordRight",
+ "Ctrl-Up": "scrollLineUp",
+ "Ctrl-Down": "scrollLineDown",
+ "Ctrl-L": "selectLine",
+ "Shift-Ctrl-L": "splitSelectionByLine",
+ "Esc": "singleSelectionTop",
+ "Ctrl-Enter": "insertLineAfter",
+ "Shift-Ctrl-Enter": "insertLineBefore",
+ "Ctrl-D": "selectNextOccurrence",
+ "Shift-Ctrl-Space": "selectScope",
+ "Shift-Ctrl-M": "selectBetweenBrackets",
+ "Ctrl-M": "goToBracket",
+ "Shift-Ctrl-Up": "swapLineUp",
+ "Shift-Ctrl-Down": "swapLineDown",
+ "Ctrl-/": "toggleCommentIndented",
+ "Ctrl-J": "joinLines",
+ "Shift-Ctrl-D": "duplicateLine",
+ "F9": "sortLines",
+ "Ctrl-F9": "sortLinesInsensitive",
+ "F2": "nextBookmark",
+ "Shift-F2": "prevBookmark",
+ "Ctrl-F2": "toggleBookmark",
+ "Shift-Ctrl-F2": "clearBookmarks",
+ "Alt-F2": "selectBookmarks",
+ "Backspace": "smartBackspace",
+ "Ctrl-K Ctrl-K": "delLineRight",
+ "Ctrl-K Ctrl-U": "upcaseAtCursor",
+ "Ctrl-K Ctrl-L": "downcaseAtCursor",
+ "Ctrl-K Ctrl-Space": "setSublimeMark",
+ "Ctrl-K Ctrl-A": "selectToSublimeMark",
+ "Ctrl-K Ctrl-W": "deleteToSublimeMark",
+ "Ctrl-K Ctrl-X": "swapWithSublimeMark",
+ "Ctrl-K Ctrl-Y": "sublimeYank",
+ "Ctrl-K Ctrl-C": "showInCenter",
+ "Ctrl-K Ctrl-G": "clearBookmarks",
+ "Ctrl-K Ctrl-Backspace": "delLineLeft",
+ "Ctrl-K Ctrl-0": "unfoldAll",
+ "Ctrl-K Ctrl-J": "unfoldAll",
+ "Ctrl-Alt-Up": "addCursorToPrevLine",
+ "Ctrl-Alt-Down": "addCursorToNextLine",
+ "Ctrl-F3": "findUnder",
+ "Shift-Ctrl-F3": "findUnderPrevious",
+ "Alt-F3": "findAllUnder",
+ "Shift-Ctrl-[": "fold",
+ "Shift-Ctrl-]": "unfold",
+ "Ctrl-I": "findIncremental",
+ "Shift-Ctrl-I": "findIncrementalReverse",
+ "Ctrl-H": "replace",
+ "F3": "findNext",
+ "Shift-F3": "findPrev",
+ "fallthrough": "pcDefault"
+ };
+ CodeMirror.normalizeKeyMap(keyMap.pcSublime);
+
+ var mac = keyMap.default == keyMap.macDefault;
+ keyMap.sublime = mac ? keyMap.macSublime : keyMap.pcSublime;
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/lib/codemirror.js":
+/*!***************************************************!*\
+ !*** ./node_modules/codemirror/lib/codemirror.js ***!
+ \***************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+// This is CodeMirror (https://codemirror.net), a code editor
+// implemented in JavaScript on top of the browser's DOM.
+//
+// You can find some technical background for some of the code below
+// at http://marijnhaverbeke.nl/blog/#cm-internals .
+
+(function (global, factory) {
+ true ? module.exports = factory() :
+ undefined;
+}(this, (function () { 'use strict';
+
+ // Kludges for bugs and behavior differences that can't be feature
+ // detected are enabled based on userAgent etc sniffing.
+ var userAgent = navigator.userAgent;
+ var platform = navigator.platform;
+
+ var gecko = /gecko\/\d/i.test(userAgent);
+ var ie_upto10 = /MSIE \d/.test(userAgent);
+ var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent);
+ var edge = /Edge\/(\d+)/.exec(userAgent);
+ var ie = ie_upto10 || ie_11up || edge;
+ var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);
+ var webkit = !edge && /WebKit\//.test(userAgent);
+ var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent);
+ var chrome = !edge && /Chrome\//.test(userAgent);
+ var presto = /Opera\//.test(userAgent);
+ var safari = /Apple Computer/.test(navigator.vendor);
+ var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent);
+ var phantom = /PhantomJS/.test(userAgent);
+
+ var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent);
+ var android = /Android/.test(userAgent);
+ // This is woefully incomplete. Suggestions for alternative methods welcome.
+ var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);
+ var mac = ios || /Mac/.test(platform);
+ var chromeOS = /\bCrOS\b/.test(userAgent);
+ var windows = /win/i.test(platform);
+
+ var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/);
+ if (presto_version) { presto_version = Number(presto_version[1]); }
+ if (presto_version && presto_version >= 15) { presto = false; webkit = true; }
+ // Some browsers use the wrong event properties to signal cmd/ctrl on OS X
+ var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));
+ var captureRightClick = gecko || (ie && ie_version >= 9);
+
+ function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") }
+
+ var rmClass = function(node, cls) {
+ var current = node.className;
+ var match = classTest(cls).exec(current);
+ if (match) {
+ var after = current.slice(match.index + match[0].length);
+ node.className = current.slice(0, match.index) + (after ? match[1] + after : "");
+ }
+ };
+
+ function removeChildren(e) {
+ for (var count = e.childNodes.length; count > 0; --count)
+ { e.removeChild(e.firstChild); }
+ return e
+ }
+
+ function removeChildrenAndAdd(parent, e) {
+ return removeChildren(parent).appendChild(e)
+ }
+
+ function elt(tag, content, className, style) {
+ var e = document.createElement(tag);
+ if (className) { e.className = className; }
+ if (style) { e.style.cssText = style; }
+ if (typeof content == "string") { e.appendChild(document.createTextNode(content)); }
+ else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }
+ return e
+ }
+ // wrapper for elt, which removes the elt from the accessibility tree
+ function eltP(tag, content, className, style) {
+ var e = elt(tag, content, className, style);
+ e.setAttribute("role", "presentation");
+ return e
+ }
+
+ var range;
+ if (document.createRange) { range = function(node, start, end, endNode) {
+ var r = document.createRange();
+ r.setEnd(endNode || node, end);
+ r.setStart(node, start);
+ return r
+ }; }
+ else { range = function(node, start, end) {
+ var r = document.body.createTextRange();
+ try { r.moveToElementText(node.parentNode); }
+ catch(e) { return r }
+ r.collapse(true);
+ r.moveEnd("character", end);
+ r.moveStart("character", start);
+ return r
+ }; }
+
+ function contains(parent, child) {
+ if (child.nodeType == 3) // Android browser always returns false when child is a textnode
+ { child = child.parentNode; }
+ if (parent.contains)
+ { return parent.contains(child) }
+ do {
+ if (child.nodeType == 11) { child = child.host; }
+ if (child == parent) { return true }
+ } while (child = child.parentNode)
+ }
+
+ function activeElt() {
+ // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement.
+ // IE < 10 will throw when accessed while the page is loading or in an iframe.
+ // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.
+ var activeElement;
+ try {
+ activeElement = document.activeElement;
+ } catch(e) {
+ activeElement = document.body || null;
+ }
+ while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)
+ { activeElement = activeElement.shadowRoot.activeElement; }
+ return activeElement
+ }
+
+ function addClass(node, cls) {
+ var current = node.className;
+ if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls; }
+ }
+ function joinClasses(a, b) {
+ var as = a.split(" ");
+ for (var i = 0; i < as.length; i++)
+ { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i]; } }
+ return b
+ }
+
+ var selectInput = function(node) { node.select(); };
+ if (ios) // Mobile Safari apparently has a bug where select() is broken.
+ { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }
+ else if (ie) // Suppress mysterious IE10 errors
+ { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }
+
+ function bind(f) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function(){return f.apply(null, args)}
+ }
+
+ function copyObj(obj, target, overwrite) {
+ if (!target) { target = {}; }
+ for (var prop in obj)
+ { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))
+ { target[prop] = obj[prop]; } }
+ return target
+ }
+
+ // Counts the column offset in a string, taking tabs into account.
+ // Used mostly to find indentation.
+ function countColumn(string, end, tabSize, startIndex, startValue) {
+ if (end == null) {
+ end = string.search(/[^\s\u00a0]/);
+ if (end == -1) { end = string.length; }
+ }
+ for (var i = startIndex || 0, n = startValue || 0;;) {
+ var nextTab = string.indexOf("\t", i);
+ if (nextTab < 0 || nextTab >= end)
+ { return n + (end - i) }
+ n += nextTab - i;
+ n += tabSize - (n % tabSize);
+ i = nextTab + 1;
+ }
+ }
+
+ var Delayed = function() {this.id = null;};
+ Delayed.prototype.set = function (ms, f) {
+ clearTimeout(this.id);
+ this.id = setTimeout(f, ms);
+ };
+
+ function indexOf(array, elt) {
+ for (var i = 0; i < array.length; ++i)
+ { if (array[i] == elt) { return i } }
+ return -1
+ }
+
+ // Number of pixels added to scroller and sizer to hide scrollbar
+ var scrollerGap = 30;
+
+ // Returned or thrown by various protocols to signal 'I'm not
+ // handling this'.
+ var Pass = {toString: function(){return "CodeMirror.Pass"}};
+
+ // Reused option objects for setSelection & friends
+ var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"};
+
+ // The inverse of countColumn -- find the offset that corresponds to
+ // a particular column.
+ function findColumn(string, goal, tabSize) {
+ for (var pos = 0, col = 0;;) {
+ var nextTab = string.indexOf("\t", pos);
+ if (nextTab == -1) { nextTab = string.length; }
+ var skipped = nextTab - pos;
+ if (nextTab == string.length || col + skipped >= goal)
+ { return pos + Math.min(skipped, goal - col) }
+ col += nextTab - pos;
+ col += tabSize - (col % tabSize);
+ pos = nextTab + 1;
+ if (col >= goal) { return pos }
+ }
+ }
+
+ var spaceStrs = [""];
+ function spaceStr(n) {
+ while (spaceStrs.length <= n)
+ { spaceStrs.push(lst(spaceStrs) + " "); }
+ return spaceStrs[n]
+ }
+
+ function lst(arr) { return arr[arr.length-1] }
+
+ function map(array, f) {
+ var out = [];
+ for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }
+ return out
+ }
+
+ function insertSorted(array, value, score) {
+ var pos = 0, priority = score(value);
+ while (pos < array.length && score(array[pos]) <= priority) { pos++; }
+ array.splice(pos, 0, value);
+ }
+
+ function nothing() {}
+
+ function createObj(base, props) {
+ var inst;
+ if (Object.create) {
+ inst = Object.create(base);
+ } else {
+ nothing.prototype = base;
+ inst = new nothing();
+ }
+ if (props) { copyObj(props, inst); }
+ return inst
+ }
+
+ var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;
+ function isWordCharBasic(ch) {
+ return /\w/.test(ch) || ch > "\x80" &&
+ (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))
+ }
+ function isWordChar(ch, helper) {
+ if (!helper) { return isWordCharBasic(ch) }
+ if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true }
+ return helper.test(ch)
+ }
+
+ function isEmpty(obj) {
+ for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }
+ return true
+ }
+
+ // Extending unicode characters. A series of a non-extending char +
+ // any number of extending chars is treated as a single unit as far
+ // as editing and measuring is concerned. This is not fully correct,
+ // since some scripts/fonts/browsers also treat other configurations
+ // of code points as a group.
+ var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;
+ function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }
+
+ // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.
+ function skipExtendingChars(str, pos, dir) {
+ while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }
+ return pos
+ }
+
+ // Returns the value from the range [`from`; `to`] that satisfies
+ // `pred` and is closest to `from`. Assumes that at least `to`
+ // satisfies `pred`. Supports `from` being greater than `to`.
+ function findFirst(pred, from, to) {
+ // At any point we are certain `to` satisfies `pred`, don't know
+ // whether `from` does.
+ var dir = from > to ? -1 : 1;
+ for (;;) {
+ if (from == to) { return from }
+ var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);
+ if (mid == from) { return pred(mid) ? from : to }
+ if (pred(mid)) { to = mid; }
+ else { from = mid + dir; }
+ }
+ }
+
+ // BIDI HELPERS
+
+ function iterateBidiSections(order, from, to, f) {
+ if (!order) { return f(from, to, "ltr", 0) }
+ var found = false;
+ for (var i = 0; i < order.length; ++i) {
+ var part = order[i];
+ if (part.from < to && part.to > from || from == to && part.to == from) {
+ f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i);
+ found = true;
+ }
+ }
+ if (!found) { f(from, to, "ltr"); }
+ }
+
+ var bidiOther = null;
+ function getBidiPartAt(order, ch, sticky) {
+ var found;
+ bidiOther = null;
+ for (var i = 0; i < order.length; ++i) {
+ var cur = order[i];
+ if (cur.from < ch && cur.to > ch) { return i }
+ if (cur.to == ch) {
+ if (cur.from != cur.to && sticky == "before") { found = i; }
+ else { bidiOther = i; }
+ }
+ if (cur.from == ch) {
+ if (cur.from != cur.to && sticky != "before") { found = i; }
+ else { bidiOther = i; }
+ }
+ }
+ return found != null ? found : bidiOther
+ }
+
+ // Bidirectional ordering algorithm
+ // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm
+ // that this (partially) implements.
+
+ // One-char codes used for character types:
+ // L (L): Left-to-Right
+ // R (R): Right-to-Left
+ // r (AL): Right-to-Left Arabic
+ // 1 (EN): European Number
+ // + (ES): European Number Separator
+ // % (ET): European Number Terminator
+ // n (AN): Arabic Number
+ // , (CS): Common Number Separator
+ // m (NSM): Non-Spacing Mark
+ // b (BN): Boundary Neutral
+ // s (B): Paragraph Separator
+ // t (S): Segment Separator
+ // w (WS): Whitespace
+ // N (ON): Other Neutrals
+
+ // Returns null if characters are ordered as they appear
+ // (left-to-right), or an array of sections ({from, to, level}
+ // objects) in the order in which they occur visually.
+ var bidiOrdering = (function() {
+ // Character types for codepoints 0 to 0xff
+ var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN";
+ // Character types for codepoints 0x600 to 0x6f9
+ var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";
+ function charType(code) {
+ if (code <= 0xf7) { return lowTypes.charAt(code) }
+ else if (0x590 <= code && code <= 0x5f4) { return "R" }
+ else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }
+ else if (0x6ee <= code && code <= 0x8ac) { return "r" }
+ else if (0x2000 <= code && code <= 0x200b) { return "w" }
+ else if (code == 0x200c) { return "b" }
+ else { return "L" }
+ }
+
+ var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;
+ var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;
+
+ function BidiSpan(level, from, to) {
+ this.level = level;
+ this.from = from; this.to = to;
+ }
+
+ return function(str, direction) {
+ var outerType = direction == "ltr" ? "L" : "R";
+
+ if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false }
+ var len = str.length, types = [];
+ for (var i = 0; i < len; ++i)
+ { types.push(charType(str.charCodeAt(i))); }
+
+ // W1. Examine each non-spacing mark (NSM) in the level run, and
+ // change the type of the NSM to the type of the previous
+ // character. If the NSM is at the start of the level run, it will
+ // get the type of sor.
+ for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {
+ var type = types[i$1];
+ if (type == "m") { types[i$1] = prev; }
+ else { prev = type; }
+ }
+
+ // W2. Search backwards from each instance of a European number
+ // until the first strong type (R, L, AL, or sor) is found. If an
+ // AL is found, change the type of the European number to Arabic
+ // number.
+ // W3. Change all ALs to R.
+ for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {
+ var type$1 = types[i$2];
+ if (type$1 == "1" && cur == "r") { types[i$2] = "n"; }
+ else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R"; } }
+ }
+
+ // W4. A single European separator between two European numbers
+ // changes to a European number. A single common separator between
+ // two numbers of the same type changes to that type.
+ for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {
+ var type$2 = types[i$3];
+ if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1"; }
+ else if (type$2 == "," && prev$1 == types[i$3+1] &&
+ (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1; }
+ prev$1 = type$2;
+ }
+
+ // W5. A sequence of European terminators adjacent to European
+ // numbers changes to all European numbers.
+ // W6. Otherwise, separators and terminators change to Other
+ // Neutral.
+ for (var i$4 = 0; i$4 < len; ++i$4) {
+ var type$3 = types[i$4];
+ if (type$3 == ",") { types[i$4] = "N"; }
+ else if (type$3 == "%") {
+ var end = (void 0);
+ for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {}
+ var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N";
+ for (var j = i$4; j < end; ++j) { types[j] = replace; }
+ i$4 = end - 1;
+ }
+ }
+
+ // W7. Search backwards from each instance of a European number
+ // until the first strong type (R, L, or sor) is found. If an L is
+ // found, then change the type of the European number to L.
+ for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {
+ var type$4 = types[i$5];
+ if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L"; }
+ else if (isStrong.test(type$4)) { cur$1 = type$4; }
+ }
+
+ // N1. A sequence of neutrals takes the direction of the
+ // surrounding strong text if the text on both sides has the same
+ // direction. European and Arabic numbers act as if they were R in
+ // terms of their influence on neutrals. Start-of-level-run (sor)
+ // and end-of-level-run (eor) are used at level run boundaries.
+ // N2. Any remaining neutrals take the embedding direction.
+ for (var i$6 = 0; i$6 < len; ++i$6) {
+ if (isNeutral.test(types[i$6])) {
+ var end$1 = (void 0);
+ for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}
+ var before = (i$6 ? types[i$6-1] : outerType) == "L";
+ var after = (end$1 < len ? types[end$1] : outerType) == "L";
+ var replace$1 = before == after ? (before ? "L" : "R") : outerType;
+ for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }
+ i$6 = end$1 - 1;
+ }
+ }
+
+ // Here we depart from the documented algorithm, in order to avoid
+ // building up an actual levels array. Since there are only three
+ // levels (0, 1, 2) in an implementation that doesn't take
+ // explicit embedding into account, we can build up the order on
+ // the fly, without following the level-based algorithm.
+ var order = [], m;
+ for (var i$7 = 0; i$7 < len;) {
+ if (countsAsLeft.test(types[i$7])) {
+ var start = i$7;
+ for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}
+ order.push(new BidiSpan(0, start, i$7));
+ } else {
+ var pos = i$7, at = order.length;
+ for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {}
+ for (var j$2 = pos; j$2 < i$7;) {
+ if (countsAsNum.test(types[j$2])) {
+ if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); }
+ var nstart = j$2;
+ for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}
+ order.splice(at, 0, new BidiSpan(2, nstart, j$2));
+ pos = j$2;
+ } else { ++j$2; }
+ }
+ if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }
+ }
+ }
+ if (direction == "ltr") {
+ if (order[0].level == 1 && (m = str.match(/^\s+/))) {
+ order[0].from = m[0].length;
+ order.unshift(new BidiSpan(0, 0, m[0].length));
+ }
+ if (lst(order).level == 1 && (m = str.match(/\s+$/))) {
+ lst(order).to -= m[0].length;
+ order.push(new BidiSpan(0, len - m[0].length, len));
+ }
+ }
+
+ return direction == "rtl" ? order.reverse() : order
+ }
+ })();
+
+ // Get the bidi ordering for the given line (and cache it). Returns
+ // false for lines that are fully left-to-right, and an array of
+ // BidiSpan objects otherwise.
+ function getOrder(line, direction) {
+ var order = line.order;
+ if (order == null) { order = line.order = bidiOrdering(line.text, direction); }
+ return order
+ }
+
+ // EVENT HANDLING
+
+ // Lightweight event framework. on/off also work on DOM nodes,
+ // registering native DOM handlers.
+
+ var noHandlers = [];
+
+ var on = function(emitter, type, f) {
+ if (emitter.addEventListener) {
+ emitter.addEventListener(type, f, false);
+ } else if (emitter.attachEvent) {
+ emitter.attachEvent("on" + type, f);
+ } else {
+ var map$$1 = emitter._handlers || (emitter._handlers = {});
+ map$$1[type] = (map$$1[type] || noHandlers).concat(f);
+ }
+ };
+
+ function getHandlers(emitter, type) {
+ return emitter._handlers && emitter._handlers[type] || noHandlers
+ }
+
+ function off(emitter, type, f) {
+ if (emitter.removeEventListener) {
+ emitter.removeEventListener(type, f, false);
+ } else if (emitter.detachEvent) {
+ emitter.detachEvent("on" + type, f);
+ } else {
+ var map$$1 = emitter._handlers, arr = map$$1 && map$$1[type];
+ if (arr) {
+ var index = indexOf(arr, f);
+ if (index > -1)
+ { map$$1[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }
+ }
+ }
+ }
+
+ function signal(emitter, type /*, values...*/) {
+ var handlers = getHandlers(emitter, type);
+ if (!handlers.length) { return }
+ var args = Array.prototype.slice.call(arguments, 2);
+ for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }
+ }
+
+ // The DOM events that CodeMirror handles can be overridden by
+ // registering a (non-DOM) handler on the editor for the event name,
+ // and preventDefault-ing the event in that handler.
+ function signalDOMEvent(cm, e, override) {
+ if (typeof e == "string")
+ { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }
+ signal(cm, override || e.type, cm, e);
+ return e_defaultPrevented(e) || e.codemirrorIgnore
+ }
+
+ function signalCursorActivity(cm) {
+ var arr = cm._handlers && cm._handlers.cursorActivity;
+ if (!arr) { return }
+ var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);
+ for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)
+ { set.push(arr[i]); } }
+ }
+
+ function hasHandler(emitter, type) {
+ return getHandlers(emitter, type).length > 0
+ }
+
+ // Add on and off methods to a constructor's prototype, to make
+ // registering events on such objects more convenient.
+ function eventMixin(ctor) {
+ ctor.prototype.on = function(type, f) {on(this, type, f);};
+ ctor.prototype.off = function(type, f) {off(this, type, f);};
+ }
+
+ // Due to the fact that we still support jurassic IE versions, some
+ // compatibility wrappers are needed.
+
+ function e_preventDefault(e) {
+ if (e.preventDefault) { e.preventDefault(); }
+ else { e.returnValue = false; }
+ }
+ function e_stopPropagation(e) {
+ if (e.stopPropagation) { e.stopPropagation(); }
+ else { e.cancelBubble = true; }
+ }
+ function e_defaultPrevented(e) {
+ return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false
+ }
+ function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}
+
+ function e_target(e) {return e.target || e.srcElement}
+ function e_button(e) {
+ var b = e.which;
+ if (b == null) {
+ if (e.button & 1) { b = 1; }
+ else if (e.button & 2) { b = 3; }
+ else if (e.button & 4) { b = 2; }
+ }
+ if (mac && e.ctrlKey && b == 1) { b = 3; }
+ return b
+ }
+
+ // Detect drag-and-drop
+ var dragAndDrop = function() {
+ // There is *some* kind of drag-and-drop support in IE6-8, but I
+ // couldn't get it to work yet.
+ if (ie && ie_version < 9) { return false }
+ var div = elt('div');
+ return "draggable" in div || "dragDrop" in div
+ }();
+
+ var zwspSupported;
+ function zeroWidthElement(measure) {
+ if (zwspSupported == null) {
+ var test = elt("span", "\u200b");
+ removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")]));
+ if (measure.firstChild.offsetHeight != 0)
+ { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }
+ }
+ var node = zwspSupported ? elt("span", "\u200b") :
+ elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px");
+ node.setAttribute("cm-text", "");
+ return node
+ }
+
+ // Feature-detect IE's crummy client rect reporting for bidi text
+ var badBidiRects;
+ function hasBadBidiRects(measure) {
+ if (badBidiRects != null) { return badBidiRects }
+ var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA"));
+ var r0 = range(txt, 0, 1).getBoundingClientRect();
+ var r1 = range(txt, 1, 2).getBoundingClientRect();
+ removeChildren(measure);
+ if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)
+ return badBidiRects = (r1.right - r0.right < 3)
+ }
+
+ // See if "".split is the broken IE version, if so, provide an
+ // alternative way to split lines.
+ var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) {
+ var pos = 0, result = [], l = string.length;
+ while (pos <= l) {
+ var nl = string.indexOf("\n", pos);
+ if (nl == -1) { nl = string.length; }
+ var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl);
+ var rt = line.indexOf("\r");
+ if (rt != -1) {
+ result.push(line.slice(0, rt));
+ pos += rt + 1;
+ } else {
+ result.push(line);
+ pos = nl + 1;
+ }
+ }
+ return result
+ } : function (string) { return string.split(/\r\n?|\n/); };
+
+ var hasSelection = window.getSelection ? function (te) {
+ try { return te.selectionStart != te.selectionEnd }
+ catch(e) { return false }
+ } : function (te) {
+ var range$$1;
+ try {range$$1 = te.ownerDocument.selection.createRange();}
+ catch(e) {}
+ if (!range$$1 || range$$1.parentElement() != te) { return false }
+ return range$$1.compareEndPoints("StartToEnd", range$$1) != 0
+ };
+
+ var hasCopyEvent = (function () {
+ var e = elt("div");
+ if ("oncopy" in e) { return true }
+ e.setAttribute("oncopy", "return;");
+ return typeof e.oncopy == "function"
+ })();
+
+ var badZoomedRects = null;
+ function hasBadZoomedRects(measure) {
+ if (badZoomedRects != null) { return badZoomedRects }
+ var node = removeChildrenAndAdd(measure, elt("span", "x"));
+ var normal = node.getBoundingClientRect();
+ var fromRange = range(node, 0, 1).getBoundingClientRect();
+ return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1
+ }
+
+ // Known modes, by name and by MIME
+ var modes = {}, mimeModes = {};
+
+ // Extra arguments are stored as the mode's dependencies, which is
+ // used by (legacy) mechanisms like loadmode.js to automatically
+ // load a mode. (Preferred mechanism is the require/define calls.)
+ function defineMode(name, mode) {
+ if (arguments.length > 2)
+ { mode.dependencies = Array.prototype.slice.call(arguments, 2); }
+ modes[name] = mode;
+ }
+
+ function defineMIME(mime, spec) {
+ mimeModes[mime] = spec;
+ }
+
+ // Given a MIME type, a {name, ...options} config object, or a name
+ // string, return a mode config object.
+ function resolveMode(spec) {
+ if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
+ spec = mimeModes[spec];
+ } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
+ var found = mimeModes[spec.name];
+ if (typeof found == "string") { found = {name: found}; }
+ spec = createObj(found, spec);
+ spec.name = found.name;
+ } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) {
+ return resolveMode("application/xml")
+ } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) {
+ return resolveMode("application/json")
+ }
+ if (typeof spec == "string") { return {name: spec} }
+ else { return spec || {name: "null"} }
+ }
+
+ // Given a mode spec (anything that resolveMode accepts), find and
+ // initialize an actual mode object.
+ function getMode(options, spec) {
+ spec = resolveMode(spec);
+ var mfactory = modes[spec.name];
+ if (!mfactory) { return getMode(options, "text/plain") }
+ var modeObj = mfactory(options, spec);
+ if (modeExtensions.hasOwnProperty(spec.name)) {
+ var exts = modeExtensions[spec.name];
+ for (var prop in exts) {
+ if (!exts.hasOwnProperty(prop)) { continue }
+ if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop]; }
+ modeObj[prop] = exts[prop];
+ }
+ }
+ modeObj.name = spec.name;
+ if (spec.helperType) { modeObj.helperType = spec.helperType; }
+ if (spec.modeProps) { for (var prop$1 in spec.modeProps)
+ { modeObj[prop$1] = spec.modeProps[prop$1]; } }
+
+ return modeObj
+ }
+
+ // This can be used to attach properties to mode objects from
+ // outside the actual mode definition.
+ var modeExtensions = {};
+ function extendMode(mode, properties) {
+ var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});
+ copyObj(properties, exts);
+ }
+
+ function copyState(mode, state) {
+ if (state === true) { return state }
+ if (mode.copyState) { return mode.copyState(state) }
+ var nstate = {};
+ for (var n in state) {
+ var val = state[n];
+ if (val instanceof Array) { val = val.concat([]); }
+ nstate[n] = val;
+ }
+ return nstate
+ }
+
+ // Given a mode and a state (for that mode), find the inner mode and
+ // state at the position that the state refers to.
+ function innerMode(mode, state) {
+ var info;
+ while (mode.innerMode) {
+ info = mode.innerMode(state);
+ if (!info || info.mode == mode) { break }
+ state = info.state;
+ mode = info.mode;
+ }
+ return info || {mode: mode, state: state}
+ }
+
+ function startState(mode, a1, a2) {
+ return mode.startState ? mode.startState(a1, a2) : true
+ }
+
+ // STRING STREAM
+
+ // Fed to the mode parsers, provides helper functions to make
+ // parsers more succinct.
+
+ var StringStream = function(string, tabSize, lineOracle) {
+ this.pos = this.start = 0;
+ this.string = string;
+ this.tabSize = tabSize || 8;
+ this.lastColumnPos = this.lastColumnValue = 0;
+ this.lineStart = 0;
+ this.lineOracle = lineOracle;
+ };
+
+ StringStream.prototype.eol = function () {return this.pos >= this.string.length};
+ StringStream.prototype.sol = function () {return this.pos == this.lineStart};
+ StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};
+ StringStream.prototype.next = function () {
+ if (this.pos < this.string.length)
+ { return this.string.charAt(this.pos++) }
+ };
+ StringStream.prototype.eat = function (match) {
+ var ch = this.string.charAt(this.pos);
+ var ok;
+ if (typeof match == "string") { ok = ch == match; }
+ else { ok = ch && (match.test ? match.test(ch) : match(ch)); }
+ if (ok) {++this.pos; return ch}
+ };
+ StringStream.prototype.eatWhile = function (match) {
+ var start = this.pos;
+ while (this.eat(match)){}
+ return this.pos > start
+ };
+ StringStream.prototype.eatSpace = function () {
+ var this$1 = this;
+
+ var start = this.pos;
+ while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos; }
+ return this.pos > start
+ };
+ StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};
+ StringStream.prototype.skipTo = function (ch) {
+ var found = this.string.indexOf(ch, this.pos);
+ if (found > -1) {this.pos = found; return true}
+ };
+ StringStream.prototype.backUp = function (n) {this.pos -= n;};
+ StringStream.prototype.column = function () {
+ if (this.lastColumnPos < this.start) {
+ this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);
+ this.lastColumnPos = this.start;
+ }
+ return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
+ };
+ StringStream.prototype.indentation = function () {
+ return countColumn(this.string, null, this.tabSize) -
+ (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
+ };
+ StringStream.prototype.match = function (pattern, consume, caseInsensitive) {
+ if (typeof pattern == "string") {
+ var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };
+ var substr = this.string.substr(this.pos, pattern.length);
+ if (cased(substr) == cased(pattern)) {
+ if (consume !== false) { this.pos += pattern.length; }
+ return true
+ }
+ } else {
+ var match = this.string.slice(this.pos).match(pattern);
+ if (match && match.index > 0) { return null }
+ if (match && consume !== false) { this.pos += match[0].length; }
+ return match
+ }
+ };
+ StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};
+ StringStream.prototype.hideFirstChars = function (n, inner) {
+ this.lineStart += n;
+ try { return inner() }
+ finally { this.lineStart -= n; }
+ };
+ StringStream.prototype.lookAhead = function (n) {
+ var oracle = this.lineOracle;
+ return oracle && oracle.lookAhead(n)
+ };
+ StringStream.prototype.baseToken = function () {
+ var oracle = this.lineOracle;
+ return oracle && oracle.baseToken(this.pos)
+ };
+
+ // Find the line object corresponding to the given line number.
+ function getLine(doc, n) {
+ n -= doc.first;
+ if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") }
+ var chunk = doc;
+ while (!chunk.lines) {
+ for (var i = 0;; ++i) {
+ var child = chunk.children[i], sz = child.chunkSize();
+ if (n < sz) { chunk = child; break }
+ n -= sz;
+ }
+ }
+ return chunk.lines[n]
+ }
+
+ // Get the part of a document between two positions, as an array of
+ // strings.
+ function getBetween(doc, start, end) {
+ var out = [], n = start.line;
+ doc.iter(start.line, end.line + 1, function (line) {
+ var text = line.text;
+ if (n == end.line) { text = text.slice(0, end.ch); }
+ if (n == start.line) { text = text.slice(start.ch); }
+ out.push(text);
+ ++n;
+ });
+ return out
+ }
+ // Get the lines between from and to, as array of strings.
+ function getLines(doc, from, to) {
+ var out = [];
+ doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value
+ return out
+ }
+
+ // Update the height of a line, propagating the height change
+ // upwards to parent nodes.
+ function updateLineHeight(line, height) {
+ var diff = height - line.height;
+ if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }
+ }
+
+ // Given a line object, find its line number by walking up through
+ // its parent links.
+ function lineNo(line) {
+ if (line.parent == null) { return null }
+ var cur = line.parent, no = indexOf(cur.lines, line);
+ for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {
+ for (var i = 0;; ++i) {
+ if (chunk.children[i] == cur) { break }
+ no += chunk.children[i].chunkSize();
+ }
+ }
+ return no + cur.first
+ }
+
+ // Find the line at the given vertical position, using the height
+ // information in the document tree.
+ function lineAtHeight(chunk, h) {
+ var n = chunk.first;
+ outer: do {
+ for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {
+ var child = chunk.children[i$1], ch = child.height;
+ if (h < ch) { chunk = child; continue outer }
+ h -= ch;
+ n += child.chunkSize();
+ }
+ return n
+ } while (!chunk.lines)
+ var i = 0;
+ for (; i < chunk.lines.length; ++i) {
+ var line = chunk.lines[i], lh = line.height;
+ if (h < lh) { break }
+ h -= lh;
+ }
+ return n + i
+ }
+
+ function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}
+
+ function lineNumberFor(options, i) {
+ return String(options.lineNumberFormatter(i + options.firstLineNumber))
+ }
+
+ // A Pos instance represents a position within the text.
+ function Pos(line, ch, sticky) {
+ if ( sticky === void 0 ) sticky = null;
+
+ if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }
+ this.line = line;
+ this.ch = ch;
+ this.sticky = sticky;
+ }
+
+ // Compare two positions, return 0 if they are the same, a negative
+ // number when a is less, and a positive number otherwise.
+ function cmp(a, b) { return a.line - b.line || a.ch - b.ch }
+
+ function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }
+
+ function copyPos(x) {return Pos(x.line, x.ch)}
+ function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }
+ function minPos(a, b) { return cmp(a, b) < 0 ? a : b }
+
+ // Most of the external API clips given positions to make sure they
+ // actually exist within the document.
+ function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}
+ function clipPos(doc, pos) {
+ if (pos.line < doc.first) { return Pos(doc.first, 0) }
+ var last = doc.first + doc.size - 1;
+ if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }
+ return clipToLen(pos, getLine(doc, pos.line).text.length)
+ }
+ function clipToLen(pos, linelen) {
+ var ch = pos.ch;
+ if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }
+ else if (ch < 0) { return Pos(pos.line, 0) }
+ else { return pos }
+ }
+ function clipPosArray(doc, array) {
+ var out = [];
+ for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }
+ return out
+ }
+
+ var SavedContext = function(state, lookAhead) {
+ this.state = state;
+ this.lookAhead = lookAhead;
+ };
+
+ var Context = function(doc, state, line, lookAhead) {
+ this.state = state;
+ this.doc = doc;
+ this.line = line;
+ this.maxLookAhead = lookAhead || 0;
+ this.baseTokens = null;
+ this.baseTokenPos = 1;
+ };
+
+ Context.prototype.lookAhead = function (n) {
+ var line = this.doc.getLine(this.line + n);
+ if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }
+ return line
+ };
+
+ Context.prototype.baseToken = function (n) {
+ var this$1 = this;
+
+ if (!this.baseTokens) { return null }
+ while (this.baseTokens[this.baseTokenPos] <= n)
+ { this$1.baseTokenPos += 2; }
+ var type = this.baseTokens[this.baseTokenPos + 1];
+ return {type: type && type.replace(/( |^)overlay .*/, ""),
+ size: this.baseTokens[this.baseTokenPos] - n}
+ };
+
+ Context.prototype.nextLine = function () {
+ this.line++;
+ if (this.maxLookAhead > 0) { this.maxLookAhead--; }
+ };
+
+ Context.fromSaved = function (doc, saved, line) {
+ if (saved instanceof SavedContext)
+ { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }
+ else
+ { return new Context(doc, copyState(doc.mode, saved), line) }
+ };
+
+ Context.prototype.save = function (copy) {
+ var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;
+ return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state
+ };
+
+
+ // Compute a style array (an array starting with a mode generation
+ // -- for invalidation -- followed by pairs of end positions and
+ // style strings), which is used to highlight the tokens on the
+ // line.
+ function highlightLine(cm, line, context, forceToEnd) {
+ // A styles array always starts with a number identifying the
+ // mode/overlays that it is based on (for easy invalidation).
+ var st = [cm.state.modeGen], lineClasses = {};
+ // Compute the base array of styles
+ runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },
+ lineClasses, forceToEnd);
+ var state = context.state;
+
+ // Run overlays, adjust style array.
+ var loop = function ( o ) {
+ context.baseTokens = st;
+ var overlay = cm.state.overlays[o], i = 1, at = 0;
+ context.state = true;
+ runMode(cm, line.text, overlay.mode, context, function (end, style) {
+ var start = i;
+ // Ensure there's a token end at the current position, and that i points at it
+ while (at < end) {
+ var i_end = st[i];
+ if (i_end > end)
+ { st.splice(i, 1, end, st[i+1], i_end); }
+ i += 2;
+ at = Math.min(end, i_end);
+ }
+ if (!style) { return }
+ if (overlay.opaque) {
+ st.splice(start, i - start, end, "overlay " + style);
+ i = start + 2;
+ } else {
+ for (; start < i; start += 2) {
+ var cur = st[start+1];
+ st[start+1] = (cur ? cur + " " : "") + "overlay " + style;
+ }
+ }
+ }, lineClasses);
+ context.state = state;
+ context.baseTokens = null;
+ context.baseTokenPos = 1;
+ };
+
+ for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );
+
+ return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}
+ }
+
+ function getLineStyles(cm, line, updateFrontier) {
+ if (!line.styles || line.styles[0] != cm.state.modeGen) {
+ var context = getContextBefore(cm, lineNo(line));
+ var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);
+ var result = highlightLine(cm, line, context);
+ if (resetState) { context.state = resetState; }
+ line.stateAfter = context.save(!resetState);
+ line.styles = result.styles;
+ if (result.classes) { line.styleClasses = result.classes; }
+ else if (line.styleClasses) { line.styleClasses = null; }
+ if (updateFrontier === cm.doc.highlightFrontier)
+ { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }
+ }
+ return line.styles
+ }
+
+ function getContextBefore(cm, n, precise) {
+ var doc = cm.doc, display = cm.display;
+ if (!doc.mode.startState) { return new Context(doc, true, n) }
+ var start = findStartLine(cm, n, precise);
+ var saved = start > doc.first && getLine(doc, start - 1).stateAfter;
+ var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);
+
+ doc.iter(start, n, function (line) {
+ processLine(cm, line.text, context);
+ var pos = context.line;
+ line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;
+ context.nextLine();
+ });
+ if (precise) { doc.modeFrontier = context.line; }
+ return context
+ }
+
+ // Lightweight form of highlight -- proceed over this line and
+ // update state, but don't save a style array. Used for lines that
+ // aren't currently visible.
+ function processLine(cm, text, context, startAt) {
+ var mode = cm.doc.mode;
+ var stream = new StringStream(text, cm.options.tabSize, context);
+ stream.start = stream.pos = startAt || 0;
+ if (text == "") { callBlankLine(mode, context.state); }
+ while (!stream.eol()) {
+ readToken(mode, stream, context.state);
+ stream.start = stream.pos;
+ }
+ }
+
+ function callBlankLine(mode, state) {
+ if (mode.blankLine) { return mode.blankLine(state) }
+ if (!mode.innerMode) { return }
+ var inner = innerMode(mode, state);
+ if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }
+ }
+
+ function readToken(mode, stream, state, inner) {
+ for (var i = 0; i < 10; i++) {
+ if (inner) { inner[0] = innerMode(mode, state).mode; }
+ var style = mode.token(stream, state);
+ if (stream.pos > stream.start) { return style }
+ }
+ throw new Error("Mode " + mode.name + " failed to advance stream.")
+ }
+
+ var Token = function(stream, type, state) {
+ this.start = stream.start; this.end = stream.pos;
+ this.string = stream.current();
+ this.type = type || null;
+ this.state = state;
+ };
+
+ // Utility for getTokenAt and getLineTokens
+ function takeToken(cm, pos, precise, asArray) {
+ var doc = cm.doc, mode = doc.mode, style;
+ pos = clipPos(doc, pos);
+ var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);
+ var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;
+ if (asArray) { tokens = []; }
+ while ((asArray || stream.pos < pos.ch) && !stream.eol()) {
+ stream.start = stream.pos;
+ style = readToken(mode, stream, context.state);
+ if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }
+ }
+ return asArray ? tokens : new Token(stream, style, context.state)
+ }
+
+ function extractLineClasses(type, output) {
+ if (type) { for (;;) {
+ var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/);
+ if (!lineClass) { break }
+ type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);
+ var prop = lineClass[1] ? "bgClass" : "textClass";
+ if (output[prop] == null)
+ { output[prop] = lineClass[2]; }
+ else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop]))
+ { output[prop] += " " + lineClass[2]; }
+ } }
+ return type
+ }
+
+ // Run the given mode's parser over a line, calling f for each token.
+ function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {
+ var flattenSpans = mode.flattenSpans;
+ if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }
+ var curStart = 0, curStyle = null;
+ var stream = new StringStream(text, cm.options.tabSize, context), style;
+ var inner = cm.options.addModeClass && [null];
+ if (text == "") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }
+ while (!stream.eol()) {
+ if (stream.pos > cm.options.maxHighlightLength) {
+ flattenSpans = false;
+ if (forceToEnd) { processLine(cm, text, context, stream.pos); }
+ stream.pos = text.length;
+ style = null;
+ } else {
+ style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);
+ }
+ if (inner) {
+ var mName = inner[0].name;
+ if (mName) { style = "m-" + (style ? mName + " " + style : mName); }
+ }
+ if (!flattenSpans || curStyle != style) {
+ while (curStart < stream.start) {
+ curStart = Math.min(stream.start, curStart + 5000);
+ f(curStart, curStyle);
+ }
+ curStyle = style;
+ }
+ stream.start = stream.pos;
+ }
+ while (curStart < stream.pos) {
+ // Webkit seems to refuse to render text nodes longer than 57444
+ // characters, and returns inaccurate measurements in nodes
+ // starting around 5000 chars.
+ var pos = Math.min(stream.pos, curStart + 5000);
+ f(pos, curStyle);
+ curStart = pos;
+ }
+ }
+
+ // Finds the line to start with when starting a parse. Tries to
+ // find a line with a stateAfter, so that it can start with a
+ // valid state. If that fails, it returns the line with the
+ // smallest indentation, which tends to need the least context to
+ // parse correctly.
+ function findStartLine(cm, n, precise) {
+ var minindent, minline, doc = cm.doc;
+ var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);
+ for (var search = n; search > lim; --search) {
+ if (search <= doc.first) { return doc.first }
+ var line = getLine(doc, search - 1), after = line.stateAfter;
+ if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))
+ { return search }
+ var indented = countColumn(line.text, null, cm.options.tabSize);
+ if (minline == null || minindent > indented) {
+ minline = search - 1;
+ minindent = indented;
+ }
+ }
+ return minline
+ }
+
+ function retreatFrontier(doc, n) {
+ doc.modeFrontier = Math.min(doc.modeFrontier, n);
+ if (doc.highlightFrontier < n - 10) { return }
+ var start = doc.first;
+ for (var line = n - 1; line > start; line--) {
+ var saved = getLine(doc, line).stateAfter;
+ // change is on 3
+ // state on line 1 looked ahead 2 -- so saw 3
+ // test 1 + 2 < 3 should cover this
+ if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {
+ start = line + 1;
+ break
+ }
+ }
+ doc.highlightFrontier = Math.min(doc.highlightFrontier, start);
+ }
+
+ // Optimize some code when these features are not used.
+ var sawReadOnlySpans = false, sawCollapsedSpans = false;
+
+ function seeReadOnlySpans() {
+ sawReadOnlySpans = true;
+ }
+
+ function seeCollapsedSpans() {
+ sawCollapsedSpans = true;
+ }
+
+ // TEXTMARKER SPANS
+
+ function MarkedSpan(marker, from, to) {
+ this.marker = marker;
+ this.from = from; this.to = to;
+ }
+
+ // Search an array of spans for a span matching the given marker.
+ function getMarkedSpanFor(spans, marker) {
+ if (spans) { for (var i = 0; i < spans.length; ++i) {
+ var span = spans[i];
+ if (span.marker == marker) { return span }
+ } }
+ }
+ // Remove a span from an array, returning undefined if no spans are
+ // left (we don't store arrays for lines without spans).
+ function removeMarkedSpan(spans, span) {
+ var r;
+ for (var i = 0; i < spans.length; ++i)
+ { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }
+ return r
+ }
+ // Add a span to a line.
+ function addMarkedSpan(line, span) {
+ line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];
+ span.marker.attachLine(line);
+ }
+
+ // Used for the algorithm that adjusts markers for a change in the
+ // document. These functions cut an array of spans at a given
+ // character position, returning an array of remaining chunks (or
+ // undefined if nothing remains).
+ function markedSpansBefore(old, startCh, isInsert) {
+ var nw;
+ if (old) { for (var i = 0; i < old.length; ++i) {
+ var span = old[i], marker = span.marker;
+ var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);
+ if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) {
+ var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)
+ ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));
+ }
+ } }
+ return nw
+ }
+ function markedSpansAfter(old, endCh, isInsert) {
+ var nw;
+ if (old) { for (var i = 0; i < old.length; ++i) {
+ var span = old[i], marker = span.marker;
+ var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);
+ if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) {
+ var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)
+ ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,
+ span.to == null ? null : span.to - endCh));
+ }
+ } }
+ return nw
+ }
+
+ // Given a change object, compute the new set of marker spans that
+ // cover the line in which the change took place. Removes spans
+ // entirely within the change, reconnects spans belonging to the
+ // same marker that appear on both sides of the change, and cuts off
+ // spans partially within the change. Returns an array of span
+ // arrays with one element for each line in (after) the change.
+ function stretchSpansOverChange(doc, change) {
+ if (change.full) { return null }
+ var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;
+ var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;
+ if (!oldFirst && !oldLast) { return null }
+
+ var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;
+ // Get the spans that 'stick out' on both sides
+ var first = markedSpansBefore(oldFirst, startCh, isInsert);
+ var last = markedSpansAfter(oldLast, endCh, isInsert);
+
+ // Next, merge those two ends
+ var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);
+ if (first) {
+ // Fix up .to properties of first
+ for (var i = 0; i < first.length; ++i) {
+ var span = first[i];
+ if (span.to == null) {
+ var found = getMarkedSpanFor(last, span.marker);
+ if (!found) { span.to = startCh; }
+ else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }
+ }
+ }
+ }
+ if (last) {
+ // Fix up .from in last (or move them into first in case of sameLine)
+ for (var i$1 = 0; i$1 < last.length; ++i$1) {
+ var span$1 = last[i$1];
+ if (span$1.to != null) { span$1.to += offset; }
+ if (span$1.from == null) {
+ var found$1 = getMarkedSpanFor(first, span$1.marker);
+ if (!found$1) {
+ span$1.from = offset;
+ if (sameLine) { (first || (first = [])).push(span$1); }
+ }
+ } else {
+ span$1.from += offset;
+ if (sameLine) { (first || (first = [])).push(span$1); }
+ }
+ }
+ }
+ // Make sure we didn't create any zero-length spans
+ if (first) { first = clearEmptySpans(first); }
+ if (last && last != first) { last = clearEmptySpans(last); }
+
+ var newMarkers = [first];
+ if (!sameLine) {
+ // Fill gap with whole-line-spans
+ var gap = change.text.length - 2, gapMarkers;
+ if (gap > 0 && first)
+ { for (var i$2 = 0; i$2 < first.length; ++i$2)
+ { if (first[i$2].to == null)
+ { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }
+ for (var i$3 = 0; i$3 < gap; ++i$3)
+ { newMarkers.push(gapMarkers); }
+ newMarkers.push(last);
+ }
+ return newMarkers
+ }
+
+ // Remove spans that are empty and don't have a clearWhenEmpty
+ // option of false.
+ function clearEmptySpans(spans) {
+ for (var i = 0; i < spans.length; ++i) {
+ var span = spans[i];
+ if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)
+ { spans.splice(i--, 1); }
+ }
+ if (!spans.length) { return null }
+ return spans
+ }
+
+ // Used to 'clip' out readOnly ranges when making a change.
+ function removeReadOnlyRanges(doc, from, to) {
+ var markers = null;
+ doc.iter(from.line, to.line + 1, function (line) {
+ if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
+ var mark = line.markedSpans[i].marker;
+ if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))
+ { (markers || (markers = [])).push(mark); }
+ } }
+ });
+ if (!markers) { return null }
+ var parts = [{from: from, to: to}];
+ for (var i = 0; i < markers.length; ++i) {
+ var mk = markers[i], m = mk.find(0);
+ for (var j = 0; j < parts.length; ++j) {
+ var p = parts[j];
+ if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }
+ var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);
+ if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)
+ { newParts.push({from: p.from, to: m.from}); }
+ if (dto > 0 || !mk.inclusiveRight && !dto)
+ { newParts.push({from: m.to, to: p.to}); }
+ parts.splice.apply(parts, newParts);
+ j += newParts.length - 3;
+ }
+ }
+ return parts
+ }
+
+ // Connect or disconnect spans from a line.
+ function detachMarkedSpans(line) {
+ var spans = line.markedSpans;
+ if (!spans) { return }
+ for (var i = 0; i < spans.length; ++i)
+ { spans[i].marker.detachLine(line); }
+ line.markedSpans = null;
+ }
+ function attachMarkedSpans(line, spans) {
+ if (!spans) { return }
+ for (var i = 0; i < spans.length; ++i)
+ { spans[i].marker.attachLine(line); }
+ line.markedSpans = spans;
+ }
+
+ // Helpers used when computing which overlapping collapsed span
+ // counts as the larger one.
+ function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }
+ function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }
+
+ // Returns a number indicating which of two overlapping collapsed
+ // spans is larger (and thus includes the other). Falls back to
+ // comparing ids when the spans cover exactly the same range.
+ function compareCollapsedMarkers(a, b) {
+ var lenDiff = a.lines.length - b.lines.length;
+ if (lenDiff != 0) { return lenDiff }
+ var aPos = a.find(), bPos = b.find();
+ var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);
+ if (fromCmp) { return -fromCmp }
+ var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);
+ if (toCmp) { return toCmp }
+ return b.id - a.id
+ }
+
+ // Find out whether a line ends or starts in a collapsed span. If
+ // so, return the marker for that span.
+ function collapsedSpanAtSide(line, start) {
+ var sps = sawCollapsedSpans && line.markedSpans, found;
+ if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
+ sp = sps[i];
+ if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&
+ (!found || compareCollapsedMarkers(found, sp.marker) < 0))
+ { found = sp.marker; }
+ } }
+ return found
+ }
+ function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }
+ function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }
+
+ function collapsedSpanAround(line, ch) {
+ var sps = sawCollapsedSpans && line.markedSpans, found;
+ if (sps) { for (var i = 0; i < sps.length; ++i) {
+ var sp = sps[i];
+ if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&
+ (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }
+ } }
+ return found
+ }
+
+ // Test whether there exists a collapsed span that partially
+ // overlaps (covers the start or end, but not both) of a new span.
+ // Such overlap is not allowed.
+ function conflictingCollapsedRange(doc, lineNo$$1, from, to, marker) {
+ var line = getLine(doc, lineNo$$1);
+ var sps = sawCollapsedSpans && line.markedSpans;
+ if (sps) { for (var i = 0; i < sps.length; ++i) {
+ var sp = sps[i];
+ if (!sp.marker.collapsed) { continue }
+ var found = sp.marker.find(0);
+ var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);
+ var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);
+ if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }
+ if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||
+ fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))
+ { return true }
+ } }
+ }
+
+ // A visual line is a line as drawn on the screen. Folding, for
+ // example, can cause multiple logical lines to appear on the same
+ // visual line. This finds the start of the visual line that the
+ // given line is part of (usually that is the line itself).
+ function visualLine(line) {
+ var merged;
+ while (merged = collapsedSpanAtStart(line))
+ { line = merged.find(-1, true).line; }
+ return line
+ }
+
+ function visualLineEnd(line) {
+ var merged;
+ while (merged = collapsedSpanAtEnd(line))
+ { line = merged.find(1, true).line; }
+ return line
+ }
+
+ // Returns an array of logical lines that continue the visual line
+ // started by the argument, or undefined if there are no such lines.
+ function visualLineContinued(line) {
+ var merged, lines;
+ while (merged = collapsedSpanAtEnd(line)) {
+ line = merged.find(1, true).line
+ ;(lines || (lines = [])).push(line);
+ }
+ return lines
+ }
+
+ // Get the line number of the start of the visual line that the
+ // given line number is part of.
+ function visualLineNo(doc, lineN) {
+ var line = getLine(doc, lineN), vis = visualLine(line);
+ if (line == vis) { return lineN }
+ return lineNo(vis)
+ }
+
+ // Get the line number of the start of the next visual line after
+ // the given line.
+ function visualLineEndNo(doc, lineN) {
+ if (lineN > doc.lastLine()) { return lineN }
+ var line = getLine(doc, lineN), merged;
+ if (!lineIsHidden(doc, line)) { return lineN }
+ while (merged = collapsedSpanAtEnd(line))
+ { line = merged.find(1, true).line; }
+ return lineNo(line) + 1
+ }
+
+ // Compute whether a line is hidden. Lines count as hidden when they
+ // are part of a visual line that starts with another line, or when
+ // they are entirely covered by collapsed, non-widget span.
+ function lineIsHidden(doc, line) {
+ var sps = sawCollapsedSpans && line.markedSpans;
+ if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
+ sp = sps[i];
+ if (!sp.marker.collapsed) { continue }
+ if (sp.from == null) { return true }
+ if (sp.marker.widgetNode) { continue }
+ if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))
+ { return true }
+ } }
+ }
+ function lineIsHiddenInner(doc, line, span) {
+ if (span.to == null) {
+ var end = span.marker.find(1, true);
+ return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))
+ }
+ if (span.marker.inclusiveRight && span.to == line.text.length)
+ { return true }
+ for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {
+ sp = line.markedSpans[i];
+ if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&
+ (sp.to == null || sp.to != span.from) &&
+ (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&
+ lineIsHiddenInner(doc, line, sp)) { return true }
+ }
+ }
+
+ // Find the height above the given line.
+ function heightAtLine(lineObj) {
+ lineObj = visualLine(lineObj);
+
+ var h = 0, chunk = lineObj.parent;
+ for (var i = 0; i < chunk.lines.length; ++i) {
+ var line = chunk.lines[i];
+ if (line == lineObj) { break }
+ else { h += line.height; }
+ }
+ for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {
+ for (var i$1 = 0; i$1 < p.children.length; ++i$1) {
+ var cur = p.children[i$1];
+ if (cur == chunk) { break }
+ else { h += cur.height; }
+ }
+ }
+ return h
+ }
+
+ // Compute the character length of a line, taking into account
+ // collapsed ranges (see markText) that might hide parts, and join
+ // other lines onto it.
+ function lineLength(line) {
+ if (line.height == 0) { return 0 }
+ var len = line.text.length, merged, cur = line;
+ while (merged = collapsedSpanAtStart(cur)) {
+ var found = merged.find(0, true);
+ cur = found.from.line;
+ len += found.from.ch - found.to.ch;
+ }
+ cur = line;
+ while (merged = collapsedSpanAtEnd(cur)) {
+ var found$1 = merged.find(0, true);
+ len -= cur.text.length - found$1.from.ch;
+ cur = found$1.to.line;
+ len += cur.text.length - found$1.to.ch;
+ }
+ return len
+ }
+
+ // Find the longest line in the document.
+ function findMaxLine(cm) {
+ var d = cm.display, doc = cm.doc;
+ d.maxLine = getLine(doc, doc.first);
+ d.maxLineLength = lineLength(d.maxLine);
+ d.maxLineChanged = true;
+ doc.iter(function (line) {
+ var len = lineLength(line);
+ if (len > d.maxLineLength) {
+ d.maxLineLength = len;
+ d.maxLine = line;
+ }
+ });
+ }
+
+ // LINE DATA STRUCTURE
+
+ // Line objects. These hold state related to a line, including
+ // highlighting info (the styles array).
+ var Line = function(text, markedSpans, estimateHeight) {
+ this.text = text;
+ attachMarkedSpans(this, markedSpans);
+ this.height = estimateHeight ? estimateHeight(this) : 1;
+ };
+
+ Line.prototype.lineNo = function () { return lineNo(this) };
+ eventMixin(Line);
+
+ // Change the content (text, markers) of a line. Automatically
+ // invalidates cached information and tries to re-estimate the
+ // line's height.
+ function updateLine(line, text, markedSpans, estimateHeight) {
+ line.text = text;
+ if (line.stateAfter) { line.stateAfter = null; }
+ if (line.styles) { line.styles = null; }
+ if (line.order != null) { line.order = null; }
+ detachMarkedSpans(line);
+ attachMarkedSpans(line, markedSpans);
+ var estHeight = estimateHeight ? estimateHeight(line) : 1;
+ if (estHeight != line.height) { updateLineHeight(line, estHeight); }
+ }
+
+ // Detach a line from the document tree and its markers.
+ function cleanUpLine(line) {
+ line.parent = null;
+ detachMarkedSpans(line);
+ }
+
+ // Convert a style as returned by a mode (either null, or a string
+ // containing one or more styles) to a CSS style. This is cached,
+ // and also looks for line-wide styles.
+ var styleToClassCache = {}, styleToClassCacheWithMode = {};
+ function interpretTokenStyle(style, options) {
+ if (!style || /^\s*$/.test(style)) { return null }
+ var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;
+ return cache[style] ||
+ (cache[style] = style.replace(/\S+/g, "cm-$&"))
+ }
+
+ // Render the DOM representation of the text of a line. Also builds
+ // up a 'line map', which points at the DOM nodes that represent
+ // specific stretches of text, and is used by the measuring code.
+ // The returned object contains the DOM node, this map, and
+ // information about line-wide styles that were set by the mode.
+ function buildLineContent(cm, lineView) {
+ // The padding-right forces the element to have a 'border', which
+ // is needed on Webkit to be able to get line-level bounding
+ // rectangles for it (in measureChar).
+ var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null);
+ var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content,
+ col: 0, pos: 0, cm: cm,
+ trailingSpace: false,
+ splitSpaces: cm.getOption("lineWrapping")};
+ lineView.measure = {};
+
+ // Iterate over the logical lines that make up this visual line.
+ for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {
+ var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);
+ builder.pos = 0;
+ builder.addToken = buildToken;
+ // Optionally wire in some hacks into the token-rendering
+ // algorithm, to deal with browser quirks.
+ if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))
+ { builder.addToken = buildTokenBadBidi(builder.addToken, order); }
+ builder.map = [];
+ var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);
+ insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));
+ if (line.styleClasses) {
+ if (line.styleClasses.bgClass)
+ { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); }
+ if (line.styleClasses.textClass)
+ { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); }
+ }
+
+ // Ensure at least a single node is present, for measuring.
+ if (builder.map.length == 0)
+ { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }
+
+ // Store the map and a cache object for the current logical line
+ if (i == 0) {
+ lineView.measure.map = builder.map;
+ lineView.measure.cache = {};
+ } else {
+ (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)
+ ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});
+ }
+ }
+
+ // See issue #2901
+ if (webkit) {
+ var last = builder.content.lastChild;
+ if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab")))
+ { builder.content.className = "cm-tab-wrap-hack"; }
+ }
+
+ signal(cm, "renderLine", cm, lineView.line, builder.pre);
+ if (builder.pre.className)
+ { builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); }
+
+ return builder
+ }
+
+ function defaultSpecialCharPlaceholder(ch) {
+ var token = elt("span", "\u2022", "cm-invalidchar");
+ token.title = "\\u" + ch.charCodeAt(0).toString(16);
+ token.setAttribute("aria-label", token.title);
+ return token
+ }
+
+ // Build up the DOM representation for a single token, and add it to
+ // the line map. Takes care to render special characters separately.
+ function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {
+ if (!text) { return }
+ var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;
+ var special = builder.cm.state.specialChars, mustWrap = false;
+ var content;
+ if (!special.test(text)) {
+ builder.col += text.length;
+ content = document.createTextNode(displayText);
+ builder.map.push(builder.pos, builder.pos + text.length, content);
+ if (ie && ie_version < 9) { mustWrap = true; }
+ builder.pos += text.length;
+ } else {
+ content = document.createDocumentFragment();
+ var pos = 0;
+ while (true) {
+ special.lastIndex = pos;
+ var m = special.exec(text);
+ var skipped = m ? m.index - pos : text.length - pos;
+ if (skipped) {
+ var txt = document.createTextNode(displayText.slice(pos, pos + skipped));
+ if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])); }
+ else { content.appendChild(txt); }
+ builder.map.push(builder.pos, builder.pos + skipped, txt);
+ builder.col += skipped;
+ builder.pos += skipped;
+ }
+ if (!m) { break }
+ pos += skipped + 1;
+ var txt$1 = (void 0);
+ if (m[0] == "\t") {
+ var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;
+ txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab"));
+ txt$1.setAttribute("role", "presentation");
+ txt$1.setAttribute("cm-text", "\t");
+ builder.col += tabWidth;
+ } else if (m[0] == "\r" || m[0] == "\n") {
+ txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar"));
+ txt$1.setAttribute("cm-text", m[0]);
+ builder.col += 1;
+ } else {
+ txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);
+ txt$1.setAttribute("cm-text", m[0]);
+ if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])); }
+ else { content.appendChild(txt$1); }
+ builder.col += 1;
+ }
+ builder.map.push(builder.pos, builder.pos + 1, txt$1);
+ builder.pos++;
+ }
+ }
+ builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;
+ if (style || startStyle || endStyle || mustWrap || css) {
+ var fullStyle = style || "";
+ if (startStyle) { fullStyle += startStyle; }
+ if (endStyle) { fullStyle += endStyle; }
+ var token = elt("span", [content], fullStyle, css);
+ if (attributes) {
+ for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class")
+ { token.setAttribute(attr, attributes[attr]); } }
+ }
+ return builder.content.appendChild(token)
+ }
+ builder.content.appendChild(content);
+ }
+
+ // Change some spaces to NBSP to prevent the browser from collapsing
+ // trailing spaces at the end of a line when rendering text (issue #1362).
+ function splitSpaces(text, trailingBefore) {
+ if (text.length > 1 && !/ /.test(text)) { return text }
+ var spaceBefore = trailingBefore, result = "";
+ for (var i = 0; i < text.length; i++) {
+ var ch = text.charAt(i);
+ if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))
+ { ch = "\u00a0"; }
+ result += ch;
+ spaceBefore = ch == " ";
+ }
+ return result
+ }
+
+ // Work around nonsense dimensions being reported for stretches of
+ // right-to-left text.
+ function buildTokenBadBidi(inner, order) {
+ return function (builder, text, style, startStyle, endStyle, css, attributes) {
+ style = style ? style + " cm-force-border" : "cm-force-border";
+ var start = builder.pos, end = start + text.length;
+ for (;;) {
+ // Find the part that overlaps with the start of this text
+ var part = (void 0);
+ for (var i = 0; i < order.length; i++) {
+ part = order[i];
+ if (part.to > start && part.from <= start) { break }
+ }
+ if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }
+ inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);
+ startStyle = null;
+ text = text.slice(part.to - start);
+ start = part.to;
+ }
+ }
+ }
+
+ function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
+ var widget = !ignoreWidget && marker.widgetNode;
+ if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }
+ if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {
+ if (!widget)
+ { widget = builder.content.appendChild(document.createElement("span")); }
+ widget.setAttribute("cm-marker", marker.id);
+ }
+ if (widget) {
+ builder.cm.display.input.setUneditable(widget);
+ builder.content.appendChild(widget);
+ }
+ builder.pos += size;
+ builder.trailingSpace = false;
+ }
+
+ // Outputs a number of spans to make up a line, taking highlighting
+ // and marked text into account.
+ function insertLineContent(line, builder, styles) {
+ var spans = line.markedSpans, allText = line.text, at = 0;
+ if (!spans) {
+ for (var i$1 = 1; i$1 < styles.length; i$1+=2)
+ { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }
+ return
+ }
+
+ var len = allText.length, pos = 0, i = 1, text = "", style, css;
+ var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;
+ for (;;) {
+ if (nextChange == pos) { // Update current marker set
+ spanStyle = spanEndStyle = spanStartStyle = css = "";
+ attributes = null;
+ collapsed = null; nextChange = Infinity;
+ var foundBookmarks = [], endStyles = (void 0);
+ for (var j = 0; j < spans.length; ++j) {
+ var sp = spans[j], m = sp.marker;
+ if (m.type == "bookmark" && sp.from == pos && m.widgetNode) {
+ foundBookmarks.push(m);
+ } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {
+ if (sp.to != null && sp.to != pos && nextChange > sp.to) {
+ nextChange = sp.to;
+ spanEndStyle = "";
+ }
+ if (m.className) { spanStyle += " " + m.className; }
+ if (m.css) { css = (css ? css + ";" : "") + m.css; }
+ if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle; }
+ if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }
+ // support for the old title property
+ // https://github.com/codemirror/CodeMirror/pull/5673
+ if (m.title) { (attributes || (attributes = {})).title = m.title; }
+ if (m.attributes) {
+ for (var attr in m.attributes)
+ { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }
+ }
+ if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))
+ { collapsed = sp; }
+ } else if (sp.from > pos && nextChange > sp.from) {
+ nextChange = sp.from;
+ }
+ }
+ if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)
+ { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1]; } } }
+
+ if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)
+ { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }
+ if (collapsed && (collapsed.from || 0) == pos) {
+ buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,
+ collapsed.marker, collapsed.from == null);
+ if (collapsed.to == null) { return }
+ if (collapsed.to == pos) { collapsed = false; }
+ }
+ }
+ if (pos >= len) { break }
+
+ var upto = Math.min(len, nextChange);
+ while (true) {
+ if (text) {
+ var end = pos + text.length;
+ if (!collapsed) {
+ var tokenText = end > upto ? text.slice(0, upto - pos) : text;
+ builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,
+ spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes);
+ }
+ if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}
+ pos = end;
+ spanStartStyle = "";
+ }
+ text = allText.slice(at, at = styles[i++]);
+ style = interpretTokenStyle(styles[i++], builder.cm.options);
+ }
+ }
+ }
+
+
+ // These objects are used to represent the visible (currently drawn)
+ // part of the document. A LineView may correspond to multiple
+ // logical lines, if those are connected by collapsed ranges.
+ function LineView(doc, line, lineN) {
+ // The starting line
+ this.line = line;
+ // Continuing lines, if any
+ this.rest = visualLineContinued(line);
+ // Number of logical lines in this visual line
+ this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;
+ this.node = this.text = null;
+ this.hidden = lineIsHidden(doc, line);
+ }
+
+ // Create a range of LineView objects for the given lines.
+ function buildViewArray(cm, from, to) {
+ var array = [], nextPos;
+ for (var pos = from; pos < to; pos = nextPos) {
+ var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);
+ nextPos = pos + view.size;
+ array.push(view);
+ }
+ return array
+ }
+
+ var operationGroup = null;
+
+ function pushOperation(op) {
+ if (operationGroup) {
+ operationGroup.ops.push(op);
+ } else {
+ op.ownsGroup = operationGroup = {
+ ops: [op],
+ delayedCallbacks: []
+ };
+ }
+ }
+
+ function fireCallbacksForOps(group) {
+ // Calls delayed callbacks and cursorActivity handlers until no
+ // new ones appear
+ var callbacks = group.delayedCallbacks, i = 0;
+ do {
+ for (; i < callbacks.length; i++)
+ { callbacks[i].call(null); }
+ for (var j = 0; j < group.ops.length; j++) {
+ var op = group.ops[j];
+ if (op.cursorActivityHandlers)
+ { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)
+ { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }
+ }
+ } while (i < callbacks.length)
+ }
+
+ function finishOperation(op, endCb) {
+ var group = op.ownsGroup;
+ if (!group) { return }
+
+ try { fireCallbacksForOps(group); }
+ finally {
+ operationGroup = null;
+ endCb(group);
+ }
+ }
+
+ var orphanDelayedCallbacks = null;
+
+ // Often, we want to signal events at a point where we are in the
+ // middle of some work, but don't want the handler to start calling
+ // other methods on the editor, which might be in an inconsistent
+ // state or simply not expect any other events to happen.
+ // signalLater looks whether there are any handlers, and schedules
+ // them to be executed when the last operation ends, or, if no
+ // operation is active, when a timeout fires.
+ function signalLater(emitter, type /*, values...*/) {
+ var arr = getHandlers(emitter, type);
+ if (!arr.length) { return }
+ var args = Array.prototype.slice.call(arguments, 2), list;
+ if (operationGroup) {
+ list = operationGroup.delayedCallbacks;
+ } else if (orphanDelayedCallbacks) {
+ list = orphanDelayedCallbacks;
+ } else {
+ list = orphanDelayedCallbacks = [];
+ setTimeout(fireOrphanDelayed, 0);
+ }
+ var loop = function ( i ) {
+ list.push(function () { return arr[i].apply(null, args); });
+ };
+
+ for (var i = 0; i < arr.length; ++i)
+ loop( i );
+ }
+
+ function fireOrphanDelayed() {
+ var delayed = orphanDelayedCallbacks;
+ orphanDelayedCallbacks = null;
+ for (var i = 0; i < delayed.length; ++i) { delayed[i](); }
+ }
+
+ // When an aspect of a line changes, a string is added to
+ // lineView.changes. This updates the relevant part of the line's
+ // DOM structure.
+ function updateLineForChanges(cm, lineView, lineN, dims) {
+ for (var j = 0; j < lineView.changes.length; j++) {
+ var type = lineView.changes[j];
+ if (type == "text") { updateLineText(cm, lineView); }
+ else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims); }
+ else if (type == "class") { updateLineClasses(cm, lineView); }
+ else if (type == "widget") { updateLineWidgets(cm, lineView, dims); }
+ }
+ lineView.changes = null;
+ }
+
+ // Lines with gutter elements, widgets or a background class need to
+ // be wrapped, and have the extra elements added to the wrapper div
+ function ensureLineWrapped(lineView) {
+ if (lineView.node == lineView.text) {
+ lineView.node = elt("div", null, null, "position: relative");
+ if (lineView.text.parentNode)
+ { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }
+ lineView.node.appendChild(lineView.text);
+ if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }
+ }
+ return lineView.node
+ }
+
+ function updateLineBackground(cm, lineView) {
+ var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass;
+ if (cls) { cls += " CodeMirror-linebackground"; }
+ if (lineView.background) {
+ if (cls) { lineView.background.className = cls; }
+ else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }
+ } else if (cls) {
+ var wrap = ensureLineWrapped(lineView);
+ lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild);
+ cm.display.input.setUneditable(lineView.background);
+ }
+ }
+
+ // Wrapper around buildLineContent which will reuse the structure
+ // in display.externalMeasured when possible.
+ function getLineContent(cm, lineView) {
+ var ext = cm.display.externalMeasured;
+ if (ext && ext.line == lineView.line) {
+ cm.display.externalMeasured = null;
+ lineView.measure = ext.measure;
+ return ext.built
+ }
+ return buildLineContent(cm, lineView)
+ }
+
+ // Redraw the line's text. Interacts with the background and text
+ // classes because the mode may output tokens that influence these
+ // classes.
+ function updateLineText(cm, lineView) {
+ var cls = lineView.text.className;
+ var built = getLineContent(cm, lineView);
+ if (lineView.text == lineView.node) { lineView.node = built.pre; }
+ lineView.text.parentNode.replaceChild(built.pre, lineView.text);
+ lineView.text = built.pre;
+ if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {
+ lineView.bgClass = built.bgClass;
+ lineView.textClass = built.textClass;
+ updateLineClasses(cm, lineView);
+ } else if (cls) {
+ lineView.text.className = cls;
+ }
+ }
+
+ function updateLineClasses(cm, lineView) {
+ updateLineBackground(cm, lineView);
+ if (lineView.line.wrapClass)
+ { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }
+ else if (lineView.node != lineView.text)
+ { lineView.node.className = ""; }
+ var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass;
+ lineView.text.className = textClass || "";
+ }
+
+ function updateLineGutter(cm, lineView, lineN, dims) {
+ if (lineView.gutter) {
+ lineView.node.removeChild(lineView.gutter);
+ lineView.gutter = null;
+ }
+ if (lineView.gutterBackground) {
+ lineView.node.removeChild(lineView.gutterBackground);
+ lineView.gutterBackground = null;
+ }
+ if (lineView.line.gutterClass) {
+ var wrap = ensureLineWrapped(lineView);
+ lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass,
+ ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px"));
+ cm.display.input.setUneditable(lineView.gutterBackground);
+ wrap.insertBefore(lineView.gutterBackground, lineView.text);
+ }
+ var markers = lineView.line.gutterMarkers;
+ if (cm.options.lineNumbers || markers) {
+ var wrap$1 = ensureLineWrapped(lineView);
+ var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"));
+ cm.display.input.setUneditable(gutterWrap);
+ wrap$1.insertBefore(gutterWrap, lineView.text);
+ if (lineView.line.gutterClass)
+ { gutterWrap.className += " " + lineView.line.gutterClass; }
+ if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
+ { lineView.lineNumber = gutterWrap.appendChild(
+ elt("div", lineNumberFor(cm.options, lineN),
+ "CodeMirror-linenumber CodeMirror-gutter-elt",
+ ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))); }
+ if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {
+ var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];
+ if (found)
+ { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt",
+ ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))); }
+ } }
+ }
+ }
+
+ function updateLineWidgets(cm, lineView, dims) {
+ if (lineView.alignable) { lineView.alignable = null; }
+ for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {
+ next = node.nextSibling;
+ if (node.className == "CodeMirror-linewidget")
+ { lineView.node.removeChild(node); }
+ }
+ insertLineWidgets(cm, lineView, dims);
+ }
+
+ // Build a line's DOM representation from scratch
+ function buildLineElement(cm, lineView, lineN, dims) {
+ var built = getLineContent(cm, lineView);
+ lineView.text = lineView.node = built.pre;
+ if (built.bgClass) { lineView.bgClass = built.bgClass; }
+ if (built.textClass) { lineView.textClass = built.textClass; }
+
+ updateLineClasses(cm, lineView);
+ updateLineGutter(cm, lineView, lineN, dims);
+ insertLineWidgets(cm, lineView, dims);
+ return lineView.node
+ }
+
+ // A lineView may contain multiple logical lines (when merged by
+ // collapsed spans). The widgets for all of them need to be drawn.
+ function insertLineWidgets(cm, lineView, dims) {
+ insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);
+ if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
+ { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }
+ }
+
+ function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {
+ if (!line.widgets) { return }
+ var wrap = ensureLineWrapped(lineView);
+ for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
+ var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget");
+ if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true"); }
+ positionLineWidget(widget, node, lineView, dims);
+ cm.display.input.setUneditable(node);
+ if (allowAbove && widget.above)
+ { wrap.insertBefore(node, lineView.gutter || lineView.text); }
+ else
+ { wrap.appendChild(node); }
+ signalLater(widget, "redraw");
+ }
+ }
+
+ function positionLineWidget(widget, node, lineView, dims) {
+ if (widget.noHScroll) {
+ (lineView.alignable || (lineView.alignable = [])).push(node);
+ var width = dims.wrapperWidth;
+ node.style.left = dims.fixedPos + "px";
+ if (!widget.coverGutter) {
+ width -= dims.gutterTotalWidth;
+ node.style.paddingLeft = dims.gutterTotalWidth + "px";
+ }
+ node.style.width = width + "px";
+ }
+ if (widget.coverGutter) {
+ node.style.zIndex = 5;
+ node.style.position = "relative";
+ if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px"; }
+ }
+ }
+
+ function widgetHeight(widget) {
+ if (widget.height != null) { return widget.height }
+ var cm = widget.doc.cm;
+ if (!cm) { return 0 }
+ if (!contains(document.body, widget.node)) {
+ var parentStyle = "position: relative;";
+ if (widget.coverGutter)
+ { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; }
+ if (widget.noHScroll)
+ { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; }
+ removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle));
+ }
+ return widget.height = widget.node.parentNode.offsetHeight
+ }
+
+ // Return true when the given mouse event happened in a widget
+ function eventInWidget(display, e) {
+ for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {
+ if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") ||
+ (n.parentNode == display.sizer && n != display.mover))
+ { return true }
+ }
+ }
+
+ // POSITION MEASUREMENT
+
+ function paddingTop(display) {return display.lineSpace.offsetTop}
+ function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}
+ function paddingH(display) {
+ if (display.cachedPaddingH) { return display.cachedPaddingH }
+ var e = removeChildrenAndAdd(display.measure, elt("pre", "x"));
+ var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;
+ var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};
+ if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }
+ return data
+ }
+
+ function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }
+ function displayWidth(cm) {
+ return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth
+ }
+ function displayHeight(cm) {
+ return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight
+ }
+
+ // Ensure the lineView.wrapping.heights array is populated. This is
+ // an array of bottom offsets for the lines that make up a drawn
+ // line. When lineWrapping is on, there might be more than one
+ // height.
+ function ensureLineHeights(cm, lineView, rect) {
+ var wrapping = cm.options.lineWrapping;
+ var curWidth = wrapping && displayWidth(cm);
+ if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {
+ var heights = lineView.measure.heights = [];
+ if (wrapping) {
+ lineView.measure.width = curWidth;
+ var rects = lineView.text.firstChild.getClientRects();
+ for (var i = 0; i < rects.length - 1; i++) {
+ var cur = rects[i], next = rects[i + 1];
+ if (Math.abs(cur.bottom - next.bottom) > 2)
+ { heights.push((cur.bottom + next.top) / 2 - rect.top); }
+ }
+ }
+ heights.push(rect.bottom - rect.top);
+ }
+ }
+
+ // Find a line map (mapping character offsets to text nodes) and a
+ // measurement cache for the given line number. (A line view might
+ // contain multiple lines when collapsed ranges are present.)
+ function mapFromLineView(lineView, line, lineN) {
+ if (lineView.line == line)
+ { return {map: lineView.measure.map, cache: lineView.measure.cache} }
+ for (var i = 0; i < lineView.rest.length; i++)
+ { if (lineView.rest[i] == line)
+ { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }
+ for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)
+ { if (lineNo(lineView.rest[i$1]) > lineN)
+ { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }
+ }
+
+ // Render a line into the hidden node display.externalMeasured. Used
+ // when measurement is needed for a line that's not in the viewport.
+ function updateExternalMeasurement(cm, line) {
+ line = visualLine(line);
+ var lineN = lineNo(line);
+ var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);
+ view.lineN = lineN;
+ var built = view.built = buildLineContent(cm, view);
+ view.text = built.pre;
+ removeChildrenAndAdd(cm.display.lineMeasure, built.pre);
+ return view
+ }
+
+ // Get a {top, bottom, left, right} box (in line-local coordinates)
+ // for a given character.
+ function measureChar(cm, line, ch, bias) {
+ return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)
+ }
+
+ // Find a line view that corresponds to the given line number.
+ function findViewForLine(cm, lineN) {
+ if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)
+ { return cm.display.view[findViewIndex(cm, lineN)] }
+ var ext = cm.display.externalMeasured;
+ if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)
+ { return ext }
+ }
+
+ // Measurement can be split in two steps, the set-up work that
+ // applies to the whole line, and the measurement of the actual
+ // character. Functions like coordsChar, that need to do a lot of
+ // measurements in a row, can thus ensure that the set-up work is
+ // only done once.
+ function prepareMeasureForLine(cm, line) {
+ var lineN = lineNo(line);
+ var view = findViewForLine(cm, lineN);
+ if (view && !view.text) {
+ view = null;
+ } else if (view && view.changes) {
+ updateLineForChanges(cm, view, lineN, getDimensions(cm));
+ cm.curOp.forceUpdate = true;
+ }
+ if (!view)
+ { view = updateExternalMeasurement(cm, line); }
+
+ var info = mapFromLineView(view, line, lineN);
+ return {
+ line: line, view: view, rect: null,
+ map: info.map, cache: info.cache, before: info.before,
+ hasHeights: false
+ }
+ }
+
+ // Given a prepared measurement object, measures the position of an
+ // actual character (or fetches it from the cache).
+ function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
+ if (prepared.before) { ch = -1; }
+ var key = ch + (bias || ""), found;
+ if (prepared.cache.hasOwnProperty(key)) {
+ found = prepared.cache[key];
+ } else {
+ if (!prepared.rect)
+ { prepared.rect = prepared.view.text.getBoundingClientRect(); }
+ if (!prepared.hasHeights) {
+ ensureLineHeights(cm, prepared.view, prepared.rect);
+ prepared.hasHeights = true;
+ }
+ found = measureCharInner(cm, prepared, ch, bias);
+ if (!found.bogus) { prepared.cache[key] = found; }
+ }
+ return {left: found.left, right: found.right,
+ top: varHeight ? found.rtop : found.top,
+ bottom: varHeight ? found.rbottom : found.bottom}
+ }
+
+ var nullRect = {left: 0, right: 0, top: 0, bottom: 0};
+
+ function nodeAndOffsetInLineMap(map$$1, ch, bias) {
+ var node, start, end, collapse, mStart, mEnd;
+ // First, search the line map for the text node corresponding to,
+ // or closest to, the target character.
+ for (var i = 0; i < map$$1.length; i += 3) {
+ mStart = map$$1[i];
+ mEnd = map$$1[i + 1];
+ if (ch < mStart) {
+ start = 0; end = 1;
+ collapse = "left";
+ } else if (ch < mEnd) {
+ start = ch - mStart;
+ end = start + 1;
+ } else if (i == map$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) {
+ end = mEnd - mStart;
+ start = end - 1;
+ if (ch >= mEnd) { collapse = "right"; }
+ }
+ if (start != null) {
+ node = map$$1[i + 2];
+ if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right"))
+ { collapse = bias; }
+ if (bias == "left" && start == 0)
+ { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) {
+ node = map$$1[(i -= 3) + 2];
+ collapse = "left";
+ } }
+ if (bias == "right" && start == mEnd - mStart)
+ { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) {
+ node = map$$1[(i += 3) + 2];
+ collapse = "right";
+ } }
+ break
+ }
+ }
+ return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}
+ }
+
+ function getUsefulRect(rects, bias) {
+ var rect = nullRect;
+ if (bias == "left") { for (var i = 0; i < rects.length; i++) {
+ if ((rect = rects[i]).left != rect.right) { break }
+ } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {
+ if ((rect = rects[i$1]).left != rect.right) { break }
+ } }
+ return rect
+ }
+
+ function measureCharInner(cm, prepared, ch, bias) {
+ var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);
+ var node = place.node, start = place.start, end = place.end, collapse = place.collapse;
+
+ var rect;
+ if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.
+ for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned
+ while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }
+ while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }
+ if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)
+ { rect = node.parentNode.getBoundingClientRect(); }
+ else
+ { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }
+ if (rect.left || rect.right || start == 0) { break }
+ end = start;
+ start = start - 1;
+ collapse = "right";
+ }
+ if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }
+ } else { // If it is a widget, simply get the box for the whole widget.
+ if (start > 0) { collapse = bias = "right"; }
+ var rects;
+ if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)
+ { rect = rects[bias == "right" ? rects.length - 1 : 0]; }
+ else
+ { rect = node.getBoundingClientRect(); }
+ }
+ if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {
+ var rSpan = node.parentNode.getClientRects()[0];
+ if (rSpan)
+ { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }
+ else
+ { rect = nullRect; }
+ }
+
+ var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;
+ var mid = (rtop + rbot) / 2;
+ var heights = prepared.view.measure.heights;
+ var i = 0;
+ for (; i < heights.length - 1; i++)
+ { if (mid < heights[i]) { break } }
+ var top = i ? heights[i - 1] : 0, bot = heights[i];
+ var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left,
+ right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left,
+ top: top, bottom: bot};
+ if (!rect.left && !rect.right) { result.bogus = true; }
+ if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }
+
+ return result
+ }
+
+ // Work around problem with bounding client rects on ranges being
+ // returned incorrectly when zoomed on IE10 and below.
+ function maybeUpdateRectForZooming(measure, rect) {
+ if (!window.screen || screen.logicalXDPI == null ||
+ screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))
+ { return rect }
+ var scaleX = screen.logicalXDPI / screen.deviceXDPI;
+ var scaleY = screen.logicalYDPI / screen.deviceYDPI;
+ return {left: rect.left * scaleX, right: rect.right * scaleX,
+ top: rect.top * scaleY, bottom: rect.bottom * scaleY}
+ }
+
+ function clearLineMeasurementCacheFor(lineView) {
+ if (lineView.measure) {
+ lineView.measure.cache = {};
+ lineView.measure.heights = null;
+ if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
+ { lineView.measure.caches[i] = {}; } }
+ }
+ }
+
+ function clearLineMeasurementCache(cm) {
+ cm.display.externalMeasure = null;
+ removeChildren(cm.display.lineMeasure);
+ for (var i = 0; i < cm.display.view.length; i++)
+ { clearLineMeasurementCacheFor(cm.display.view[i]); }
+ }
+
+ function clearCaches(cm) {
+ clearLineMeasurementCache(cm);
+ cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;
+ if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }
+ cm.display.lineNumChars = null;
+ }
+
+ function pageScrollX() {
+ // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206
+ // which causes page_Offset and bounding client rects to use
+ // different reference viewports and invalidate our calculations.
+ if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }
+ return window.pageXOffset || (document.documentElement || document.body).scrollLeft
+ }
+ function pageScrollY() {
+ if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }
+ return window.pageYOffset || (document.documentElement || document.body).scrollTop
+ }
+
+ function widgetTopHeight(lineObj) {
+ var height = 0;
+ if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)
+ { height += widgetHeight(lineObj.widgets[i]); } } }
+ return height
+ }
+
+ // Converts a {top, bottom, left, right} box from line-local
+ // coordinates into another coordinate system. Context may be one of
+ // "line", "div" (display.lineDiv), "local"./null (editor), "window",
+ // or "page".
+ function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {
+ if (!includeWidgets) {
+ var height = widgetTopHeight(lineObj);
+ rect.top += height; rect.bottom += height;
+ }
+ if (context == "line") { return rect }
+ if (!context) { context = "local"; }
+ var yOff = heightAtLine(lineObj);
+ if (context == "local") { yOff += paddingTop(cm.display); }
+ else { yOff -= cm.display.viewOffset; }
+ if (context == "page" || context == "window") {
+ var lOff = cm.display.lineSpace.getBoundingClientRect();
+ yOff += lOff.top + (context == "window" ? 0 : pageScrollY());
+ var xOff = lOff.left + (context == "window" ? 0 : pageScrollX());
+ rect.left += xOff; rect.right += xOff;
+ }
+ rect.top += yOff; rect.bottom += yOff;
+ return rect
+ }
+
+ // Coverts a box from "div" coords to another coordinate system.
+ // Context may be "window", "page", "div", or "local"./null.
+ function fromCoordSystem(cm, coords, context) {
+ if (context == "div") { return coords }
+ var left = coords.left, top = coords.top;
+ // First move into "page" coordinate system
+ if (context == "page") {
+ left -= pageScrollX();
+ top -= pageScrollY();
+ } else if (context == "local" || !context) {
+ var localBox = cm.display.sizer.getBoundingClientRect();
+ left += localBox.left;
+ top += localBox.top;
+ }
+
+ var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();
+ return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}
+ }
+
+ function charCoords(cm, pos, context, lineObj, bias) {
+ if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }
+ return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)
+ }
+
+ // Returns a box for a given cursor position, which may have an
+ // 'other' property containing the position of the secondary cursor
+ // on a bidi boundary.
+ // A cursor Pos(line, char, "before") is on the same visual line as `char - 1`
+ // and after `char - 1` in writing order of `char - 1`
+ // A cursor Pos(line, char, "after") is on the same visual line as `char`
+ // and before `char` in writing order of `char`
+ // Examples (upper-case letters are RTL, lower-case are LTR):
+ // Pos(0, 1, ...)
+ // before after
+ // ab a|b a|b
+ // aB a|B aB|
+ // Ab |Ab A|b
+ // AB B|A B|A
+ // Every position after the last character on a line is considered to stick
+ // to the last character on the line.
+ function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {
+ lineObj = lineObj || getLine(cm.doc, pos.line);
+ if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }
+ function get(ch, right) {
+ var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight);
+ if (right) { m.left = m.right; } else { m.right = m.left; }
+ return intoCoordSystem(cm, lineObj, m, context)
+ }
+ var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;
+ if (ch >= lineObj.text.length) {
+ ch = lineObj.text.length;
+ sticky = "before";
+ } else if (ch <= 0) {
+ ch = 0;
+ sticky = "after";
+ }
+ if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") }
+
+ function getBidi(ch, partPos, invert) {
+ var part = order[partPos], right = part.level == 1;
+ return get(invert ? ch - 1 : ch, right != invert)
+ }
+ var partPos = getBidiPartAt(order, ch, sticky);
+ var other = bidiOther;
+ var val = getBidi(ch, partPos, sticky == "before");
+ if (other != null) { val.other = getBidi(ch, other, sticky != "before"); }
+ return val
+ }
+
+ // Used to cheaply estimate the coordinates for a position. Used for
+ // intermediate scroll updates.
+ function estimateCoords(cm, pos) {
+ var left = 0;
+ pos = clipPos(cm.doc, pos);
+ if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }
+ var lineObj = getLine(cm.doc, pos.line);
+ var top = heightAtLine(lineObj) + paddingTop(cm.display);
+ return {left: left, right: left, top: top, bottom: top + lineObj.height}
+ }
+
+ // Positions returned by coordsChar contain some extra information.
+ // xRel is the relative x position of the input coordinates compared
+ // to the found position (so xRel > 0 means the coordinates are to
+ // the right of the character position, for example). When outside
+ // is true, that means the coordinates lie outside the line's
+ // vertical range.
+ function PosWithInfo(line, ch, sticky, outside, xRel) {
+ var pos = Pos(line, ch, sticky);
+ pos.xRel = xRel;
+ if (outside) { pos.outside = true; }
+ return pos
+ }
+
+ // Compute the character position closest to the given coordinates.
+ // Input must be lineSpace-local ("div" coordinate system).
+ function coordsChar(cm, x, y) {
+ var doc = cm.doc;
+ y += cm.display.viewOffset;
+ if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) }
+ var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;
+ if (lineN > last)
+ { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) }
+ if (x < 0) { x = 0; }
+
+ var lineObj = getLine(doc, lineN);
+ for (;;) {
+ var found = coordsCharInner(cm, lineObj, lineN, x, y);
+ var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 ? 1 : 0));
+ if (!collapsed) { return found }
+ var rangeEnd = collapsed.find(1);
+ if (rangeEnd.line == lineN) { return rangeEnd }
+ lineObj = getLine(doc, lineN = rangeEnd.line);
+ }
+ }
+
+ function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {
+ y -= widgetTopHeight(lineObj);
+ var end = lineObj.text.length;
+ var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);
+ end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);
+ return {begin: begin, end: end}
+ }
+
+ function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {
+ if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }
+ var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top;
+ return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)
+ }
+
+ // Returns true if the given side of a box is after the given
+ // coordinates, in top-to-bottom, left-to-right order.
+ function boxIsAfter(box, x, y, left) {
+ return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x
+ }
+
+ function coordsCharInner(cm, lineObj, lineNo$$1, x, y) {
+ // Move y into line-local coordinate space
+ y -= heightAtLine(lineObj);
+ var preparedMeasure = prepareMeasureForLine(cm, lineObj);
+ // When directly calling `measureCharPrepared`, we have to adjust
+ // for the widgets at this line.
+ var widgetHeight$$1 = widgetTopHeight(lineObj);
+ var begin = 0, end = lineObj.text.length, ltr = true;
+
+ var order = getOrder(lineObj, cm.doc.direction);
+ // If the line isn't plain left-to-right text, first figure out
+ // which bidi section the coordinates fall into.
+ if (order) {
+ var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)
+ (cm, lineObj, lineNo$$1, preparedMeasure, order, x, y);
+ ltr = part.level != 1;
+ // The awkward -1 offsets are needed because findFirst (called
+ // on these below) will treat its first bound as inclusive,
+ // second as exclusive, but we want to actually address the
+ // characters in the part's range
+ begin = ltr ? part.from : part.to - 1;
+ end = ltr ? part.to : part.from - 1;
+ }
+
+ // A binary search to find the first character whose bounding box
+ // starts after the coordinates. If we run across any whose box wrap
+ // the coordinates, store that.
+ var chAround = null, boxAround = null;
+ var ch = findFirst(function (ch) {
+ var box = measureCharPrepared(cm, preparedMeasure, ch);
+ box.top += widgetHeight$$1; box.bottom += widgetHeight$$1;
+ if (!boxIsAfter(box, x, y, false)) { return false }
+ if (box.top <= y && box.left <= x) {
+ chAround = ch;
+ boxAround = box;
+ }
+ return true
+ }, begin, end);
+
+ var baseX, sticky, outside = false;
+ // If a box around the coordinates was found, use that
+ if (boxAround) {
+ // Distinguish coordinates nearer to the left or right side of the box
+ var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;
+ ch = chAround + (atStart ? 0 : 1);
+ sticky = atStart ? "after" : "before";
+ baseX = atLeft ? boxAround.left : boxAround.right;
+ } else {
+ // (Adjust for extended bound, if necessary.)
+ if (!ltr && (ch == end || ch == begin)) { ch++; }
+ // To determine which side to associate with, get the box to the
+ // left of the character and compare it's vertical position to the
+ // coordinates
+ sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" :
+ (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight$$1 <= y) == ltr ?
+ "after" : "before";
+ // Now get accurate coordinates for this place, in order to get a
+ // base X position
+ var coords = cursorCoords(cm, Pos(lineNo$$1, ch, sticky), "line", lineObj, preparedMeasure);
+ baseX = coords.left;
+ outside = y < coords.top || y >= coords.bottom;
+ }
+
+ ch = skipExtendingChars(lineObj.text, ch, 1);
+ return PosWithInfo(lineNo$$1, ch, sticky, outside, x - baseX)
+ }
+
+ function coordsBidiPart(cm, lineObj, lineNo$$1, preparedMeasure, order, x, y) {
+ // Bidi parts are sorted left-to-right, and in a non-line-wrapping
+ // situation, we can take this ordering to correspond to the visual
+ // ordering. This finds the first part whose end is after the given
+ // coordinates.
+ var index = findFirst(function (i) {
+ var part = order[i], ltr = part.level != 1;
+ return boxIsAfter(cursorCoords(cm, Pos(lineNo$$1, ltr ? part.to : part.from, ltr ? "before" : "after"),
+ "line", lineObj, preparedMeasure), x, y, true)
+ }, 0, order.length - 1);
+ var part = order[index];
+ // If this isn't the first part, the part's start is also after
+ // the coordinates, and the coordinates aren't on the same line as
+ // that start, move one part back.
+ if (index > 0) {
+ var ltr = part.level != 1;
+ var start = cursorCoords(cm, Pos(lineNo$$1, ltr ? part.from : part.to, ltr ? "after" : "before"),
+ "line", lineObj, preparedMeasure);
+ if (boxIsAfter(start, x, y, true) && start.top > y)
+ { part = order[index - 1]; }
+ }
+ return part
+ }
+
+ function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {
+ // In a wrapped line, rtl text on wrapping boundaries can do things
+ // that don't correspond to the ordering in our `order` array at
+ // all, so a binary search doesn't work, and we want to return a
+ // part that only spans one line so that the binary search in
+ // coordsCharInner is safe. As such, we first find the extent of the
+ // wrapped line, and then do a flat search in which we discard any
+ // spans that aren't on the line.
+ var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);
+ var begin = ref.begin;
+ var end = ref.end;
+ if (/\s/.test(lineObj.text.charAt(end - 1))) { end--; }
+ var part = null, closestDist = null;
+ for (var i = 0; i < order.length; i++) {
+ var p = order[i];
+ if (p.from >= end || p.to <= begin) { continue }
+ var ltr = p.level != 1;
+ var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;
+ // Weigh against spans ending before this, so that they are only
+ // picked if nothing ends after
+ var dist = endX < x ? x - endX + 1e9 : endX - x;
+ if (!part || closestDist > dist) {
+ part = p;
+ closestDist = dist;
+ }
+ }
+ if (!part) { part = order[order.length - 1]; }
+ // Clip the part to the wrapped line.
+ if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }
+ if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }
+ return part
+ }
+
+ var measureText;
+ // Compute the default text height.
+ function textHeight(display) {
+ if (display.cachedTextHeight != null) { return display.cachedTextHeight }
+ if (measureText == null) {
+ measureText = elt("pre");
+ // Measure a bunch of lines, for browsers that compute
+ // fractional heights.
+ for (var i = 0; i < 49; ++i) {
+ measureText.appendChild(document.createTextNode("x"));
+ measureText.appendChild(elt("br"));
+ }
+ measureText.appendChild(document.createTextNode("x"));
+ }
+ removeChildrenAndAdd(display.measure, measureText);
+ var height = measureText.offsetHeight / 50;
+ if (height > 3) { display.cachedTextHeight = height; }
+ removeChildren(display.measure);
+ return height || 1
+ }
+
+ // Compute the default character width.
+ function charWidth(display) {
+ if (display.cachedCharWidth != null) { return display.cachedCharWidth }
+ var anchor = elt("span", "xxxxxxxxxx");
+ var pre = elt("pre", [anchor]);
+ removeChildrenAndAdd(display.measure, pre);
+ var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;
+ if (width > 2) { display.cachedCharWidth = width; }
+ return width || 10
+ }
+
+ // Do a bulk-read of the DOM positions and sizes needed to draw the
+ // view, so that we don't interleave reading and writing to the DOM.
+ function getDimensions(cm) {
+ var d = cm.display, left = {}, width = {};
+ var gutterLeft = d.gutters.clientLeft;
+ for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {
+ var id = cm.display.gutterSpecs[i].className;
+ left[id] = n.offsetLeft + n.clientLeft + gutterLeft;
+ width[id] = n.clientWidth;
+ }
+ return {fixedPos: compensateForHScroll(d),
+ gutterTotalWidth: d.gutters.offsetWidth,
+ gutterLeft: left,
+ gutterWidth: width,
+ wrapperWidth: d.wrapper.clientWidth}
+ }
+
+ // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,
+ // but using getBoundingClientRect to get a sub-pixel-accurate
+ // result.
+ function compensateForHScroll(display) {
+ return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left
+ }
+
+ // Returns a function that estimates the height of a line, to use as
+ // first approximation until the line becomes visible (and is thus
+ // properly measurable).
+ function estimateHeight(cm) {
+ var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;
+ var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);
+ return function (line) {
+ if (lineIsHidden(cm.doc, line)) { return 0 }
+
+ var widgetsHeight = 0;
+ if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {
+ if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }
+ } }
+
+ if (wrapping)
+ { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }
+ else
+ { return widgetsHeight + th }
+ }
+ }
+
+ function estimateLineHeights(cm) {
+ var doc = cm.doc, est = estimateHeight(cm);
+ doc.iter(function (line) {
+ var estHeight = est(line);
+ if (estHeight != line.height) { updateLineHeight(line, estHeight); }
+ });
+ }
+
+ // Given a mouse event, find the corresponding position. If liberal
+ // is false, it checks whether a gutter or scrollbar was clicked,
+ // and returns null if it was. forRect is used by rectangular
+ // selections, and tries to estimate a character position even for
+ // coordinates beyond the right of the text.
+ function posFromMouse(cm, e, liberal, forRect) {
+ var display = cm.display;
+ if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null }
+
+ var x, y, space = display.lineSpace.getBoundingClientRect();
+ // Fails unpredictably on IE[67] when mouse is dragged around quickly.
+ try { x = e.clientX - space.left; y = e.clientY - space.top; }
+ catch (e) { return null }
+ var coords = coordsChar(cm, x, y), line;
+ if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {
+ var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;
+ coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));
+ }
+ return coords
+ }
+
+ // Find the view element corresponding to a given line. Return null
+ // when the line isn't visible.
+ function findViewIndex(cm, n) {
+ if (n >= cm.display.viewTo) { return null }
+ n -= cm.display.viewFrom;
+ if (n < 0) { return null }
+ var view = cm.display.view;
+ for (var i = 0; i < view.length; i++) {
+ n -= view[i].size;
+ if (n < 0) { return i }
+ }
+ }
+
+ // Updates the display.view data structure for a given change to the
+ // document. From and to are in pre-change coordinates. Lendiff is
+ // the amount of lines added or subtracted by the change. This is
+ // used for changes that span multiple lines, or change the way
+ // lines are divided into visual lines. regLineChange (below)
+ // registers single-line changes.
+ function regChange(cm, from, to, lendiff) {
+ if (from == null) { from = cm.doc.first; }
+ if (to == null) { to = cm.doc.first + cm.doc.size; }
+ if (!lendiff) { lendiff = 0; }
+
+ var display = cm.display;
+ if (lendiff && to < display.viewTo &&
+ (display.updateLineNumbers == null || display.updateLineNumbers > from))
+ { display.updateLineNumbers = from; }
+
+ cm.curOp.viewChanged = true;
+
+ if (from >= display.viewTo) { // Change after
+ if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)
+ { resetView(cm); }
+ } else if (to <= display.viewFrom) { // Change before
+ if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {
+ resetView(cm);
+ } else {
+ display.viewFrom += lendiff;
+ display.viewTo += lendiff;
+ }
+ } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap
+ resetView(cm);
+ } else if (from <= display.viewFrom) { // Top overlap
+ var cut = viewCuttingPoint(cm, to, to + lendiff, 1);
+ if (cut) {
+ display.view = display.view.slice(cut.index);
+ display.viewFrom = cut.lineN;
+ display.viewTo += lendiff;
+ } else {
+ resetView(cm);
+ }
+ } else if (to >= display.viewTo) { // Bottom overlap
+ var cut$1 = viewCuttingPoint(cm, from, from, -1);
+ if (cut$1) {
+ display.view = display.view.slice(0, cut$1.index);
+ display.viewTo = cut$1.lineN;
+ } else {
+ resetView(cm);
+ }
+ } else { // Gap in the middle
+ var cutTop = viewCuttingPoint(cm, from, from, -1);
+ var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);
+ if (cutTop && cutBot) {
+ display.view = display.view.slice(0, cutTop.index)
+ .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))
+ .concat(display.view.slice(cutBot.index));
+ display.viewTo += lendiff;
+ } else {
+ resetView(cm);
+ }
+ }
+
+ var ext = display.externalMeasured;
+ if (ext) {
+ if (to < ext.lineN)
+ { ext.lineN += lendiff; }
+ else if (from < ext.lineN + ext.size)
+ { display.externalMeasured = null; }
+ }
+ }
+
+ // Register a change to a single line. Type must be one of "text",
+ // "gutter", "class", "widget"
+ function regLineChange(cm, line, type) {
+ cm.curOp.viewChanged = true;
+ var display = cm.display, ext = cm.display.externalMeasured;
+ if (ext && line >= ext.lineN && line < ext.lineN + ext.size)
+ { display.externalMeasured = null; }
+
+ if (line < display.viewFrom || line >= display.viewTo) { return }
+ var lineView = display.view[findViewIndex(cm, line)];
+ if (lineView.node == null) { return }
+ var arr = lineView.changes || (lineView.changes = []);
+ if (indexOf(arr, type) == -1) { arr.push(type); }
+ }
+
+ // Clear the view.
+ function resetView(cm) {
+ cm.display.viewFrom = cm.display.viewTo = cm.doc.first;
+ cm.display.view = [];
+ cm.display.viewOffset = 0;
+ }
+
+ function viewCuttingPoint(cm, oldN, newN, dir) {
+ var index = findViewIndex(cm, oldN), diff, view = cm.display.view;
+ if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)
+ { return {index: index, lineN: newN} }
+ var n = cm.display.viewFrom;
+ for (var i = 0; i < index; i++)
+ { n += view[i].size; }
+ if (n != oldN) {
+ if (dir > 0) {
+ if (index == view.length - 1) { return null }
+ diff = (n + view[index].size) - oldN;
+ index++;
+ } else {
+ diff = n - oldN;
+ }
+ oldN += diff; newN += diff;
+ }
+ while (visualLineNo(cm.doc, newN) != newN) {
+ if (index == (dir < 0 ? 0 : view.length - 1)) { return null }
+ newN += dir * view[index - (dir < 0 ? 1 : 0)].size;
+ index += dir;
+ }
+ return {index: index, lineN: newN}
+ }
+
+ // Force the view to cover a given range, adding empty view element
+ // or clipping off existing ones as needed.
+ function adjustView(cm, from, to) {
+ var display = cm.display, view = display.view;
+ if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {
+ display.view = buildViewArray(cm, from, to);
+ display.viewFrom = from;
+ } else {
+ if (display.viewFrom > from)
+ { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }
+ else if (display.viewFrom < from)
+ { display.view = display.view.slice(findViewIndex(cm, from)); }
+ display.viewFrom = from;
+ if (display.viewTo < to)
+ { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }
+ else if (display.viewTo > to)
+ { display.view = display.view.slice(0, findViewIndex(cm, to)); }
+ }
+ display.viewTo = to;
+ }
+
+ // Count the number of lines in the view whose DOM representation is
+ // out of date (or nonexistent).
+ function countDirtyView(cm) {
+ var view = cm.display.view, dirty = 0;
+ for (var i = 0; i < view.length; i++) {
+ var lineView = view[i];
+ if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }
+ }
+ return dirty
+ }
+
+ function updateSelection(cm) {
+ cm.display.input.showSelection(cm.display.input.prepareSelection());
+ }
+
+ function prepareSelection(cm, primary) {
+ if ( primary === void 0 ) primary = true;
+
+ var doc = cm.doc, result = {};
+ var curFragment = result.cursors = document.createDocumentFragment();
+ var selFragment = result.selection = document.createDocumentFragment();
+
+ for (var i = 0; i < doc.sel.ranges.length; i++) {
+ if (!primary && i == doc.sel.primIndex) { continue }
+ var range$$1 = doc.sel.ranges[i];
+ if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue }
+ var collapsed = range$$1.empty();
+ if (collapsed || cm.options.showCursorWhenSelecting)
+ { drawSelectionCursor(cm, range$$1.head, curFragment); }
+ if (!collapsed)
+ { drawSelectionRange(cm, range$$1, selFragment); }
+ }
+ return result
+ }
+
+ // Draws a cursor for the given range
+ function drawSelectionCursor(cm, head, output) {
+ var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine);
+
+ var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"));
+ cursor.style.left = pos.left + "px";
+ cursor.style.top = pos.top + "px";
+ cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px";
+
+ if (pos.other) {
+ // Secondary cursor, shown when on a 'jump' in bi-directional text
+ var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"));
+ otherCursor.style.display = "";
+ otherCursor.style.left = pos.other.left + "px";
+ otherCursor.style.top = pos.other.top + "px";
+ otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px";
+ }
+ }
+
+ function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }
+
+ // Draws the given range as a highlighted selection
+ function drawSelectionRange(cm, range$$1, output) {
+ var display = cm.display, doc = cm.doc;
+ var fragment = document.createDocumentFragment();
+ var padding = paddingH(cm.display), leftSide = padding.left;
+ var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;
+ var docLTR = doc.direction == "ltr";
+
+ function add(left, top, width, bottom) {
+ if (top < 0) { top = 0; }
+ top = Math.round(top);
+ bottom = Math.round(bottom);
+ fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px")));
+ }
+
+ function drawForLine(line, fromArg, toArg) {
+ var lineObj = getLine(doc, line);
+ var lineLen = lineObj.text.length;
+ var start, end;
+ function coords(ch, bias) {
+ return charCoords(cm, Pos(line, ch), "div", lineObj, bias)
+ }
+
+ function wrapX(pos, dir, side) {
+ var extent = wrappedLineExtentChar(cm, lineObj, null, pos);
+ var prop = (dir == "ltr") == (side == "after") ? "left" : "right";
+ var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);
+ return coords(ch, prop)[prop]
+ }
+
+ var order = getOrder(lineObj, doc.direction);
+ iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {
+ var ltr = dir == "ltr";
+ var fromPos = coords(from, ltr ? "left" : "right");
+ var toPos = coords(to - 1, ltr ? "right" : "left");
+
+ var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;
+ var first = i == 0, last = !order || i == order.length - 1;
+ if (toPos.top - fromPos.top <= 3) { // Single line
+ var openLeft = (docLTR ? openStart : openEnd) && first;
+ var openRight = (docLTR ? openEnd : openStart) && last;
+ var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;
+ var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;
+ add(left, fromPos.top, right - left, fromPos.bottom);
+ } else { // Multiple lines
+ var topLeft, topRight, botLeft, botRight;
+ if (ltr) {
+ topLeft = docLTR && openStart && first ? leftSide : fromPos.left;
+ topRight = docLTR ? rightSide : wrapX(from, dir, "before");
+ botLeft = docLTR ? leftSide : wrapX(to, dir, "after");
+ botRight = docLTR && openEnd && last ? rightSide : toPos.right;
+ } else {
+ topLeft = !docLTR ? leftSide : wrapX(from, dir, "before");
+ topRight = !docLTR && openStart && first ? rightSide : fromPos.right;
+ botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;
+ botRight = !docLTR ? rightSide : wrapX(to, dir, "after");
+ }
+ add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);
+ if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }
+ add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);
+ }
+
+ if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }
+ if (cmpCoords(toPos, start) < 0) { start = toPos; }
+ if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }
+ if (cmpCoords(toPos, end) < 0) { end = toPos; }
+ });
+ return {start: start, end: end}
+ }
+
+ var sFrom = range$$1.from(), sTo = range$$1.to();
+ if (sFrom.line == sTo.line) {
+ drawForLine(sFrom.line, sFrom.ch, sTo.ch);
+ } else {
+ var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);
+ var singleVLine = visualLine(fromLine) == visualLine(toLine);
+ var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;
+ var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;
+ if (singleVLine) {
+ if (leftEnd.top < rightStart.top - 2) {
+ add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);
+ add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);
+ } else {
+ add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);
+ }
+ }
+ if (leftEnd.bottom < rightStart.top)
+ { add(leftSide, leftEnd.bottom, null, rightStart.top); }
+ }
+
+ output.appendChild(fragment);
+ }
+
+ // Cursor-blinking
+ function restartBlink(cm) {
+ if (!cm.state.focused) { return }
+ var display = cm.display;
+ clearInterval(display.blinker);
+ var on = true;
+ display.cursorDiv.style.visibility = "";
+ if (cm.options.cursorBlinkRate > 0)
+ { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; },
+ cm.options.cursorBlinkRate); }
+ else if (cm.options.cursorBlinkRate < 0)
+ { display.cursorDiv.style.visibility = "hidden"; }
+ }
+
+ function ensureFocus(cm) {
+ if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); }
+ }
+
+ function delayBlurEvent(cm) {
+ cm.state.delayingBlurEvent = true;
+ setTimeout(function () { if (cm.state.delayingBlurEvent) {
+ cm.state.delayingBlurEvent = false;
+ onBlur(cm);
+ } }, 100);
+ }
+
+ function onFocus(cm, e) {
+ if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; }
+
+ if (cm.options.readOnly == "nocursor") { return }
+ if (!cm.state.focused) {
+ signal(cm, "focus", cm, e);
+ cm.state.focused = true;
+ addClass(cm.display.wrapper, "CodeMirror-focused");
+ // This test prevents this from firing when a context
+ // menu is closed (since the input reset would kill the
+ // select-all detection hack)
+ if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {
+ cm.display.input.reset();
+ if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730
+ }
+ cm.display.input.receivedFocus();
+ }
+ restartBlink(cm);
+ }
+ function onBlur(cm, e) {
+ if (cm.state.delayingBlurEvent) { return }
+
+ if (cm.state.focused) {
+ signal(cm, "blur", cm, e);
+ cm.state.focused = false;
+ rmClass(cm.display.wrapper, "CodeMirror-focused");
+ }
+ clearInterval(cm.display.blinker);
+ setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);
+ }
+
+ // Read the actual heights of the rendered lines, and update their
+ // stored heights to match.
+ function updateHeightsInViewport(cm) {
+ var display = cm.display;
+ var prevBottom = display.lineDiv.offsetTop;
+ for (var i = 0; i < display.view.length; i++) {
+ var cur = display.view[i], wrapping = cm.options.lineWrapping;
+ var height = (void 0), width = 0;
+ if (cur.hidden) { continue }
+ if (ie && ie_version < 8) {
+ var bot = cur.node.offsetTop + cur.node.offsetHeight;
+ height = bot - prevBottom;
+ prevBottom = bot;
+ } else {
+ var box = cur.node.getBoundingClientRect();
+ height = box.bottom - box.top;
+ // Check that lines don't extend past the right of the current
+ // editor width
+ if (!wrapping && cur.text.firstChild)
+ { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }
+ }
+ var diff = cur.line.height - height;
+ if (diff > .005 || diff < -.005) {
+ updateLineHeight(cur.line, height);
+ updateWidgetHeight(cur.line);
+ if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)
+ { updateWidgetHeight(cur.rest[j]); } }
+ }
+ if (width > cm.display.sizerWidth) {
+ var chWidth = Math.ceil(width / charWidth(cm.display));
+ if (chWidth > cm.display.maxLineLength) {
+ cm.display.maxLineLength = chWidth;
+ cm.display.maxLine = cur.line;
+ cm.display.maxLineChanged = true;
+ }
+ }
+ }
+ }
+
+ // Read and store the height of line widgets associated with the
+ // given line.
+ function updateWidgetHeight(line) {
+ if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {
+ var w = line.widgets[i], parent = w.node.parentNode;
+ if (parent) { w.height = parent.offsetHeight; }
+ } }
+ }
+
+ // Compute the lines that are visible in a given viewport (defaults
+ // the the current scroll position). viewport may contain top,
+ // height, and ensure (see op.scrollToPos) properties.
+ function visibleLines(display, doc, viewport) {
+ var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;
+ top = Math.floor(top - paddingTop(display));
+ var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;
+
+ var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);
+ // Ensure is a {from: {line, ch}, to: {line, ch}} object, and
+ // forces those lines into the viewport (if possible).
+ if (viewport && viewport.ensure) {
+ var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;
+ if (ensureFrom < from) {
+ from = ensureFrom;
+ to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);
+ } else if (Math.min(ensureTo, doc.lastLine()) >= to) {
+ from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);
+ to = ensureTo;
+ }
+ }
+ return {from: from, to: Math.max(to, from + 1)}
+ }
+
+ // SCROLLING THINGS INTO VIEW
+
+ // If an editor sits on the top or bottom of the window, partially
+ // scrolled out of view, this ensures that the cursor is visible.
+ function maybeScrollWindow(cm, rect) {
+ if (signalDOMEvent(cm, "scrollCursorIntoView")) { return }
+
+ var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;
+ if (rect.top + box.top < 0) { doScroll = true; }
+ else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }
+ if (doScroll != null && !phantom) {
+ var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;"));
+ cm.display.lineSpace.appendChild(scrollNode);
+ scrollNode.scrollIntoView(doScroll);
+ cm.display.lineSpace.removeChild(scrollNode);
+ }
+ }
+
+ // Scroll a given position into view (immediately), verifying that
+ // it actually became visible (as line heights are accurately
+ // measured, the position of something may 'drift' during drawing).
+ function scrollPosIntoView(cm, pos, end, margin) {
+ if (margin == null) { margin = 0; }
+ var rect;
+ if (!cm.options.lineWrapping && pos == end) {
+ // Set pos and end to the cursor positions around the character pos sticks to
+ // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch
+ // If pos == Pos(_, 0, "before"), pos and end are unchanged
+ pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos;
+ end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos;
+ }
+ for (var limit = 0; limit < 5; limit++) {
+ var changed = false;
+ var coords = cursorCoords(cm, pos);
+ var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);
+ rect = {left: Math.min(coords.left, endCoords.left),
+ top: Math.min(coords.top, endCoords.top) - margin,
+ right: Math.max(coords.left, endCoords.left),
+ bottom: Math.max(coords.bottom, endCoords.bottom) + margin};
+ var scrollPos = calculateScrollPos(cm, rect);
+ var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;
+ if (scrollPos.scrollTop != null) {
+ updateScrollTop(cm, scrollPos.scrollTop);
+ if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }
+ }
+ if (scrollPos.scrollLeft != null) {
+ setScrollLeft(cm, scrollPos.scrollLeft);
+ if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }
+ }
+ if (!changed) { break }
+ }
+ return rect
+ }
+
+ // Scroll a given set of coordinates into view (immediately).
+ function scrollIntoView(cm, rect) {
+ var scrollPos = calculateScrollPos(cm, rect);
+ if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }
+ if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }
+ }
+
+ // Calculate a new scroll position needed to scroll the given
+ // rectangle into view. Returns an object with scrollTop and
+ // scrollLeft properties. When these are undefined, the
+ // vertical/horizontal position does not need to be adjusted.
+ function calculateScrollPos(cm, rect) {
+ var display = cm.display, snapMargin = textHeight(cm.display);
+ if (rect.top < 0) { rect.top = 0; }
+ var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;
+ var screen = displayHeight(cm), result = {};
+ if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }
+ var docBottom = cm.doc.height + paddingVert(display);
+ var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;
+ if (rect.top < screentop) {
+ result.scrollTop = atTop ? 0 : rect.top;
+ } else if (rect.bottom > screentop + screen) {
+ var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);
+ if (newTop != screentop) { result.scrollTop = newTop; }
+ }
+
+ var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;
+ var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);
+ var tooWide = rect.right - rect.left > screenw;
+ if (tooWide) { rect.right = rect.left + screenw; }
+ if (rect.left < 10)
+ { result.scrollLeft = 0; }
+ else if (rect.left < screenleft)
+ { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)); }
+ else if (rect.right > screenw + screenleft - 3)
+ { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }
+ return result
+ }
+
+ // Store a relative adjustment to the scroll position in the current
+ // operation (to be applied when the operation finishes).
+ function addToScrollTop(cm, top) {
+ if (top == null) { return }
+ resolveScrollToPos(cm);
+ cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;
+ }
+
+ // Make sure that at the end of the operation the current cursor is
+ // shown.
+ function ensureCursorVisible(cm) {
+ resolveScrollToPos(cm);
+ var cur = cm.getCursor();
+ cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};
+ }
+
+ function scrollToCoords(cm, x, y) {
+ if (x != null || y != null) { resolveScrollToPos(cm); }
+ if (x != null) { cm.curOp.scrollLeft = x; }
+ if (y != null) { cm.curOp.scrollTop = y; }
+ }
+
+ function scrollToRange(cm, range$$1) {
+ resolveScrollToPos(cm);
+ cm.curOp.scrollToPos = range$$1;
+ }
+
+ // When an operation has its scrollToPos property set, and another
+ // scroll action is applied before the end of the operation, this
+ // 'simulates' scrolling that position into view in a cheap way, so
+ // that the effect of intermediate scroll commands is not ignored.
+ function resolveScrollToPos(cm) {
+ var range$$1 = cm.curOp.scrollToPos;
+ if (range$$1) {
+ cm.curOp.scrollToPos = null;
+ var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to);
+ scrollToCoordsRange(cm, from, to, range$$1.margin);
+ }
+ }
+
+ function scrollToCoordsRange(cm, from, to, margin) {
+ var sPos = calculateScrollPos(cm, {
+ left: Math.min(from.left, to.left),
+ top: Math.min(from.top, to.top) - margin,
+ right: Math.max(from.right, to.right),
+ bottom: Math.max(from.bottom, to.bottom) + margin
+ });
+ scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);
+ }
+
+ // Sync the scrollable area and scrollbars, ensure the viewport
+ // covers the visible area.
+ function updateScrollTop(cm, val) {
+ if (Math.abs(cm.doc.scrollTop - val) < 2) { return }
+ if (!gecko) { updateDisplaySimple(cm, {top: val}); }
+ setScrollTop(cm, val, true);
+ if (gecko) { updateDisplaySimple(cm); }
+ startWorker(cm, 100);
+ }
+
+ function setScrollTop(cm, val, forceScroll) {
+ val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val);
+ if (cm.display.scroller.scrollTop == val && !forceScroll) { return }
+ cm.doc.scrollTop = val;
+ cm.display.scrollbars.setScrollTop(val);
+ if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }
+ }
+
+ // Sync scroller and scrollbar, ensure the gutter elements are
+ // aligned.
+ function setScrollLeft(cm, val, isScroller, forceScroll) {
+ val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);
+ if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }
+ cm.doc.scrollLeft = val;
+ alignHorizontally(cm);
+ if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }
+ cm.display.scrollbars.setScrollLeft(val);
+ }
+
+ // SCROLLBARS
+
+ // Prepare DOM reads needed to update the scrollbars. Done in one
+ // shot to minimize update/measure roundtrips.
+ function measureForScrollbars(cm) {
+ var d = cm.display, gutterW = d.gutters.offsetWidth;
+ var docH = Math.round(cm.doc.height + paddingVert(cm.display));
+ return {
+ clientHeight: d.scroller.clientHeight,
+ viewHeight: d.wrapper.clientHeight,
+ scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,
+ viewWidth: d.wrapper.clientWidth,
+ barLeft: cm.options.fixedGutter ? gutterW : 0,
+ docHeight: docH,
+ scrollHeight: docH + scrollGap(cm) + d.barHeight,
+ nativeBarWidth: d.nativeBarWidth,
+ gutterWidth: gutterW
+ }
+ }
+
+ var NativeScrollbars = function(place, scroll, cm) {
+ this.cm = cm;
+ var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar");
+ var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar");
+ vert.tabIndex = horiz.tabIndex = -1;
+ place(vert); place(horiz);
+
+ on(vert, "scroll", function () {
+ if (vert.clientHeight) { scroll(vert.scrollTop, "vertical"); }
+ });
+ on(horiz, "scroll", function () {
+ if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal"); }
+ });
+
+ this.checkedZeroWidth = false;
+ // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
+ if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; }
+ };
+
+ NativeScrollbars.prototype.update = function (measure) {
+ var needsH = measure.scrollWidth > measure.clientWidth + 1;
+ var needsV = measure.scrollHeight > measure.clientHeight + 1;
+ var sWidth = measure.nativeBarWidth;
+
+ if (needsV) {
+ this.vert.style.display = "block";
+ this.vert.style.bottom = needsH ? sWidth + "px" : "0";
+ var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);
+ // A bug in IE8 can cause this value to be negative, so guard it.
+ this.vert.firstChild.style.height =
+ Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px";
+ } else {
+ this.vert.style.display = "";
+ this.vert.firstChild.style.height = "0";
+ }
+
+ if (needsH) {
+ this.horiz.style.display = "block";
+ this.horiz.style.right = needsV ? sWidth + "px" : "0";
+ this.horiz.style.left = measure.barLeft + "px";
+ var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);
+ this.horiz.firstChild.style.width =
+ Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px";
+ } else {
+ this.horiz.style.display = "";
+ this.horiz.firstChild.style.width = "0";
+ }
+
+ if (!this.checkedZeroWidth && measure.clientHeight > 0) {
+ if (sWidth == 0) { this.zeroWidthHack(); }
+ this.checkedZeroWidth = true;
+ }
+
+ return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}
+ };
+
+ NativeScrollbars.prototype.setScrollLeft = function (pos) {
+ if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }
+ if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); }
+ };
+
+ NativeScrollbars.prototype.setScrollTop = function (pos) {
+ if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }
+ if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); }
+ };
+
+ NativeScrollbars.prototype.zeroWidthHack = function () {
+ var w = mac && !mac_geMountainLion ? "12px" : "18px";
+ this.horiz.style.height = this.vert.style.width = w;
+ this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none";
+ this.disableHoriz = new Delayed;
+ this.disableVert = new Delayed;
+ };
+
+ NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {
+ bar.style.pointerEvents = "auto";
+ function maybeDisable() {
+ // To find out whether the scrollbar is still visible, we
+ // check whether the element under the pixel in the bottom
+ // right corner of the scrollbar box is the scrollbar box
+ // itself (when the bar is still visible) or its filler child
+ // (when the bar is hidden). If it is still visible, we keep
+ // it enabled, if it's hidden, we disable pointer events.
+ var box = bar.getBoundingClientRect();
+ var elt$$1 = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)
+ : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);
+ if (elt$$1 != bar) { bar.style.pointerEvents = "none"; }
+ else { delay.set(1000, maybeDisable); }
+ }
+ delay.set(1000, maybeDisable);
+ };
+
+ NativeScrollbars.prototype.clear = function () {
+ var parent = this.horiz.parentNode;
+ parent.removeChild(this.horiz);
+ parent.removeChild(this.vert);
+ };
+
+ var NullScrollbars = function () {};
+
+ NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };
+ NullScrollbars.prototype.setScrollLeft = function () {};
+ NullScrollbars.prototype.setScrollTop = function () {};
+ NullScrollbars.prototype.clear = function () {};
+
+ function updateScrollbars(cm, measure) {
+ if (!measure) { measure = measureForScrollbars(cm); }
+ var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;
+ updateScrollbarsInner(cm, measure);
+ for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {
+ if (startWidth != cm.display.barWidth && cm.options.lineWrapping)
+ { updateHeightsInViewport(cm); }
+ updateScrollbarsInner(cm, measureForScrollbars(cm));
+ startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;
+ }
+ }
+
+ // Re-synchronize the fake scrollbars with the actual size of the
+ // content.
+ function updateScrollbarsInner(cm, measure) {
+ var d = cm.display;
+ var sizes = d.scrollbars.update(measure);
+
+ d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px";
+ d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px";
+ d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent";
+
+ if (sizes.right && sizes.bottom) {
+ d.scrollbarFiller.style.display = "block";
+ d.scrollbarFiller.style.height = sizes.bottom + "px";
+ d.scrollbarFiller.style.width = sizes.right + "px";
+ } else { d.scrollbarFiller.style.display = ""; }
+ if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
+ d.gutterFiller.style.display = "block";
+ d.gutterFiller.style.height = sizes.bottom + "px";
+ d.gutterFiller.style.width = measure.gutterWidth + "px";
+ } else { d.gutterFiller.style.display = ""; }
+ }
+
+ var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars};
+
+ function initScrollbars(cm) {
+ if (cm.display.scrollbars) {
+ cm.display.scrollbars.clear();
+ if (cm.display.scrollbars.addClass)
+ { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }
+ }
+
+ cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {
+ cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);
+ // Prevent clicks in the scrollbars from killing focus
+ on(node, "mousedown", function () {
+ if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }
+ });
+ node.setAttribute("cm-not-content", "true");
+ }, function (pos, axis) {
+ if (axis == "horizontal") { setScrollLeft(cm, pos); }
+ else { updateScrollTop(cm, pos); }
+ }, cm);
+ if (cm.display.scrollbars.addClass)
+ { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }
+ }
+
+ // Operations are used to wrap a series of changes to the editor
+ // state in such a way that each change won't have to update the
+ // cursor and display (which would be awkward, slow, and
+ // error-prone). Instead, display updates are batched and then all
+ // combined and executed at once.
+
+ var nextOpId = 0;
+ // Start a new operation.
+ function startOperation(cm) {
+ cm.curOp = {
+ cm: cm,
+ viewChanged: false, // Flag that indicates that lines might need to be redrawn
+ startHeight: cm.doc.height, // Used to detect need to update scrollbar
+ forceUpdate: false, // Used to force a redraw
+ updateInput: 0, // Whether to reset the input textarea
+ typing: false, // Whether this reset should be careful to leave existing text (for compositing)
+ changeObjs: null, // Accumulated changes, for firing change events
+ cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on
+ cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already
+ selectionChanged: false, // Whether the selection needs to be redrawn
+ updateMaxLine: false, // Set when the widest line needs to be determined anew
+ scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet
+ scrollToPos: null, // Used to scroll to a specific position
+ focus: false,
+ id: ++nextOpId // Unique ID
+ };
+ pushOperation(cm.curOp);
+ }
+
+ // Finish an operation, updating the display and signalling delayed events
+ function endOperation(cm) {
+ var op = cm.curOp;
+ if (op) { finishOperation(op, function (group) {
+ for (var i = 0; i < group.ops.length; i++)
+ { group.ops[i].cm.curOp = null; }
+ endOperations(group);
+ }); }
+ }
+
+ // The DOM updates done when an operation finishes are batched so
+ // that the minimum number of relayouts are required.
+ function endOperations(group) {
+ var ops = group.ops;
+ for (var i = 0; i < ops.length; i++) // Read DOM
+ { endOperation_R1(ops[i]); }
+ for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)
+ { endOperation_W1(ops[i$1]); }
+ for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM
+ { endOperation_R2(ops[i$2]); }
+ for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)
+ { endOperation_W2(ops[i$3]); }
+ for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM
+ { endOperation_finish(ops[i$4]); }
+ }
+
+ function endOperation_R1(op) {
+ var cm = op.cm, display = cm.display;
+ maybeClipScrollbars(cm);
+ if (op.updateMaxLine) { findMaxLine(cm); }
+
+ op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||
+ op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||
+ op.scrollToPos.to.line >= display.viewTo) ||
+ display.maxLineChanged && cm.options.lineWrapping;
+ op.update = op.mustUpdate &&
+ new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);
+ }
+
+ function endOperation_W1(op) {
+ op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);
+ }
+
+ function endOperation_R2(op) {
+ var cm = op.cm, display = cm.display;
+ if (op.updatedDisplay) { updateHeightsInViewport(cm); }
+
+ op.barMeasure = measureForScrollbars(cm);
+
+ // If the max line changed since it was last measured, measure it,
+ // and ensure the document's width matches it.
+ // updateDisplay_W2 will use these properties to do the actual resizing
+ if (display.maxLineChanged && !cm.options.lineWrapping) {
+ op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;
+ cm.display.sizerWidth = op.adjustWidthTo;
+ op.barMeasure.scrollWidth =
+ Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);
+ op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));
+ }
+
+ if (op.updatedDisplay || op.selectionChanged)
+ { op.preparedSelection = display.input.prepareSelection(); }
+ }
+
+ function endOperation_W2(op) {
+ var cm = op.cm;
+
+ if (op.adjustWidthTo != null) {
+ cm.display.sizer.style.minWidth = op.adjustWidthTo + "px";
+ if (op.maxScrollLeft < cm.doc.scrollLeft)
+ { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }
+ cm.display.maxLineChanged = false;
+ }
+
+ var takeFocus = op.focus && op.focus == activeElt();
+ if (op.preparedSelection)
+ { cm.display.input.showSelection(op.preparedSelection, takeFocus); }
+ if (op.updatedDisplay || op.startHeight != cm.doc.height)
+ { updateScrollbars(cm, op.barMeasure); }
+ if (op.updatedDisplay)
+ { setDocumentHeight(cm, op.barMeasure); }
+
+ if (op.selectionChanged) { restartBlink(cm); }
+
+ if (cm.state.focused && op.updateInput)
+ { cm.display.input.reset(op.typing); }
+ if (takeFocus) { ensureFocus(op.cm); }
+ }
+
+ function endOperation_finish(op) {
+ var cm = op.cm, display = cm.display, doc = cm.doc;
+
+ if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }
+
+ // Abort mouse wheel delta measurement, when scrolling explicitly
+ if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))
+ { display.wheelStartX = display.wheelStartY = null; }
+
+ // Propagate the scroll position to the actual DOM scroller
+ if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }
+
+ if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }
+ // If we need to scroll a specific position into view, do so.
+ if (op.scrollToPos) {
+ var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),
+ clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);
+ maybeScrollWindow(cm, rect);
+ }
+
+ // Fire events for markers that are hidden/unidden by editing or
+ // undoing
+ var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;
+ if (hidden) { for (var i = 0; i < hidden.length; ++i)
+ { if (!hidden[i].lines.length) { signal(hidden[i], "hide"); } } }
+ if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)
+ { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide"); } } }
+
+ if (display.wrapper.offsetHeight)
+ { doc.scrollTop = cm.display.scroller.scrollTop; }
+
+ // Fire change events, and delayed event handlers
+ if (op.changeObjs)
+ { signal(cm, "changes", cm, op.changeObjs); }
+ if (op.update)
+ { op.update.finish(); }
+ }
+
+ // Run the given function in an operation
+ function runInOp(cm, f) {
+ if (cm.curOp) { return f() }
+ startOperation(cm);
+ try { return f() }
+ finally { endOperation(cm); }
+ }
+ // Wraps a function in an operation. Returns the wrapped function.
+ function operation(cm, f) {
+ return function() {
+ if (cm.curOp) { return f.apply(cm, arguments) }
+ startOperation(cm);
+ try { return f.apply(cm, arguments) }
+ finally { endOperation(cm); }
+ }
+ }
+ // Used to add methods to editor and doc instances, wrapping them in
+ // operations.
+ function methodOp(f) {
+ return function() {
+ if (this.curOp) { return f.apply(this, arguments) }
+ startOperation(this);
+ try { return f.apply(this, arguments) }
+ finally { endOperation(this); }
+ }
+ }
+ function docMethodOp(f) {
+ return function() {
+ var cm = this.cm;
+ if (!cm || cm.curOp) { return f.apply(this, arguments) }
+ startOperation(cm);
+ try { return f.apply(this, arguments) }
+ finally { endOperation(cm); }
+ }
+ }
+
+ // HIGHLIGHT WORKER
+
+ function startWorker(cm, time) {
+ if (cm.doc.highlightFrontier < cm.display.viewTo)
+ { cm.state.highlight.set(time, bind(highlightWorker, cm)); }
+ }
+
+ function highlightWorker(cm) {
+ var doc = cm.doc;
+ if (doc.highlightFrontier >= cm.display.viewTo) { return }
+ var end = +new Date + cm.options.workTime;
+ var context = getContextBefore(cm, doc.highlightFrontier);
+ var changedLines = [];
+
+ doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {
+ if (context.line >= cm.display.viewFrom) { // Visible
+ var oldStyles = line.styles;
+ var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;
+ var highlighted = highlightLine(cm, line, context, true);
+ if (resetState) { context.state = resetState; }
+ line.styles = highlighted.styles;
+ var oldCls = line.styleClasses, newCls = highlighted.classes;
+ if (newCls) { line.styleClasses = newCls; }
+ else if (oldCls) { line.styleClasses = null; }
+ var ischange = !oldStyles || oldStyles.length != line.styles.length ||
+ oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);
+ for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }
+ if (ischange) { changedLines.push(context.line); }
+ line.stateAfter = context.save();
+ context.nextLine();
+ } else {
+ if (line.text.length <= cm.options.maxHighlightLength)
+ { processLine(cm, line.text, context); }
+ line.stateAfter = context.line % 5 == 0 ? context.save() : null;
+ context.nextLine();
+ }
+ if (+new Date > end) {
+ startWorker(cm, cm.options.workDelay);
+ return true
+ }
+ });
+ doc.highlightFrontier = context.line;
+ doc.modeFrontier = Math.max(doc.modeFrontier, context.line);
+ if (changedLines.length) { runInOp(cm, function () {
+ for (var i = 0; i < changedLines.length; i++)
+ { regLineChange(cm, changedLines[i], "text"); }
+ }); }
+ }
+
+ // DISPLAY DRAWING
+
+ var DisplayUpdate = function(cm, viewport, force) {
+ var display = cm.display;
+
+ this.viewport = viewport;
+ // Store some values that we'll need later (but don't want to force a relayout for)
+ this.visible = visibleLines(display, cm.doc, viewport);
+ this.editorIsHidden = !display.wrapper.offsetWidth;
+ this.wrapperHeight = display.wrapper.clientHeight;
+ this.wrapperWidth = display.wrapper.clientWidth;
+ this.oldDisplayWidth = displayWidth(cm);
+ this.force = force;
+ this.dims = getDimensions(cm);
+ this.events = [];
+ };
+
+ DisplayUpdate.prototype.signal = function (emitter, type) {
+ if (hasHandler(emitter, type))
+ { this.events.push(arguments); }
+ };
+ DisplayUpdate.prototype.finish = function () {
+ var this$1 = this;
+
+ for (var i = 0; i < this.events.length; i++)
+ { signal.apply(null, this$1.events[i]); }
+ };
+
+ function maybeClipScrollbars(cm) {
+ var display = cm.display;
+ if (!display.scrollbarsClipped && display.scroller.offsetWidth) {
+ display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;
+ display.heightForcer.style.height = scrollGap(cm) + "px";
+ display.sizer.style.marginBottom = -display.nativeBarWidth + "px";
+ display.sizer.style.borderRightWidth = scrollGap(cm) + "px";
+ display.scrollbarsClipped = true;
+ }
+ }
+
+ function selectionSnapshot(cm) {
+ if (cm.hasFocus()) { return null }
+ var active = activeElt();
+ if (!active || !contains(cm.display.lineDiv, active)) { return null }
+ var result = {activeElt: active};
+ if (window.getSelection) {
+ var sel = window.getSelection();
+ if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {
+ result.anchorNode = sel.anchorNode;
+ result.anchorOffset = sel.anchorOffset;
+ result.focusNode = sel.focusNode;
+ result.focusOffset = sel.focusOffset;
+ }
+ }
+ return result
+ }
+
+ function restoreSelection(snapshot) {
+ if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }
+ snapshot.activeElt.focus();
+ if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {
+ var sel = window.getSelection(), range$$1 = document.createRange();
+ range$$1.setEnd(snapshot.anchorNode, snapshot.anchorOffset);
+ range$$1.collapse(false);
+ sel.removeAllRanges();
+ sel.addRange(range$$1);
+ sel.extend(snapshot.focusNode, snapshot.focusOffset);
+ }
+ }
+
+ // Does the actual updating of the line display. Bails out
+ // (returning false) when there is nothing to be done and forced is
+ // false.
+ function updateDisplayIfNeeded(cm, update) {
+ var display = cm.display, doc = cm.doc;
+
+ if (update.editorIsHidden) {
+ resetView(cm);
+ return false
+ }
+
+ // Bail out if the visible area is already rendered and nothing changed.
+ if (!update.force &&
+ update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&
+ (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&
+ display.renderedView == display.view && countDirtyView(cm) == 0)
+ { return false }
+
+ if (maybeUpdateLineNumberWidth(cm)) {
+ resetView(cm);
+ update.dims = getDimensions(cm);
+ }
+
+ // Compute a suitable new viewport (from & to)
+ var end = doc.first + doc.size;
+ var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);
+ var to = Math.min(end, update.visible.to + cm.options.viewportMargin);
+ if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }
+ if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }
+ if (sawCollapsedSpans) {
+ from = visualLineNo(cm.doc, from);
+ to = visualLineEndNo(cm.doc, to);
+ }
+
+ var different = from != display.viewFrom || to != display.viewTo ||
+ display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;
+ adjustView(cm, from, to);
+
+ display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));
+ // Position the mover div to align with the current scroll position
+ cm.display.mover.style.top = display.viewOffset + "px";
+
+ var toUpdate = countDirtyView(cm);
+ if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&
+ (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))
+ { return false }
+
+ // For big changes, we hide the enclosing element during the
+ // update, since that speeds up the operations on most browsers.
+ var selSnapshot = selectionSnapshot(cm);
+ if (toUpdate > 4) { display.lineDiv.style.display = "none"; }
+ patchDisplay(cm, display.updateLineNumbers, update.dims);
+ if (toUpdate > 4) { display.lineDiv.style.display = ""; }
+ display.renderedView = display.view;
+ // There might have been a widget with a focused element that got
+ // hidden or updated, if so re-focus it.
+ restoreSelection(selSnapshot);
+
+ // Prevent selection and cursors from interfering with the scroll
+ // width and height.
+ removeChildren(display.cursorDiv);
+ removeChildren(display.selectionDiv);
+ display.gutters.style.height = display.sizer.style.minHeight = 0;
+
+ if (different) {
+ display.lastWrapHeight = update.wrapperHeight;
+ display.lastWrapWidth = update.wrapperWidth;
+ startWorker(cm, 400);
+ }
+
+ display.updateLineNumbers = null;
+
+ return true
+ }
+
+ function postUpdateDisplay(cm, update) {
+ var viewport = update.viewport;
+
+ for (var first = true;; first = false) {
+ if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {
+ // Clip forced viewport to actual scrollable area.
+ if (viewport && viewport.top != null)
+ { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }
+ // Updated line heights might result in the drawn area not
+ // actually covering the viewport. Keep looping until it does.
+ update.visible = visibleLines(cm.display, cm.doc, viewport);
+ if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)
+ { break }
+ }
+ if (!updateDisplayIfNeeded(cm, update)) { break }
+ updateHeightsInViewport(cm);
+ var barMeasure = measureForScrollbars(cm);
+ updateSelection(cm);
+ updateScrollbars(cm, barMeasure);
+ setDocumentHeight(cm, barMeasure);
+ update.force = false;
+ }
+
+ update.signal(cm, "update", cm);
+ if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {
+ update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo);
+ cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;
+ }
+ }
+
+ function updateDisplaySimple(cm, viewport) {
+ var update = new DisplayUpdate(cm, viewport);
+ if (updateDisplayIfNeeded(cm, update)) {
+ updateHeightsInViewport(cm);
+ postUpdateDisplay(cm, update);
+ var barMeasure = measureForScrollbars(cm);
+ updateSelection(cm);
+ updateScrollbars(cm, barMeasure);
+ setDocumentHeight(cm, barMeasure);
+ update.finish();
+ }
+ }
+
+ // Sync the actual display DOM structure with display.view, removing
+ // nodes for lines that are no longer in view, and creating the ones
+ // that are not there yet, and updating the ones that are out of
+ // date.
+ function patchDisplay(cm, updateNumbersFrom, dims) {
+ var display = cm.display, lineNumbers = cm.options.lineNumbers;
+ var container = display.lineDiv, cur = container.firstChild;
+
+ function rm(node) {
+ var next = node.nextSibling;
+ // Works around a throw-scroll bug in OS X Webkit
+ if (webkit && mac && cm.display.currentWheelTarget == node)
+ { node.style.display = "none"; }
+ else
+ { node.parentNode.removeChild(node); }
+ return next
+ }
+
+ var view = display.view, lineN = display.viewFrom;
+ // Loop over the elements in the view, syncing cur (the DOM nodes
+ // in display.lineDiv) with the view as we go.
+ for (var i = 0; i < view.length; i++) {
+ var lineView = view[i];
+ if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet
+ var node = buildLineElement(cm, lineView, lineN, dims);
+ container.insertBefore(node, cur);
+ } else { // Already drawn
+ while (cur != lineView.node) { cur = rm(cur); }
+ var updateNumber = lineNumbers && updateNumbersFrom != null &&
+ updateNumbersFrom <= lineN && lineView.lineNumber;
+ if (lineView.changes) {
+ if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false; }
+ updateLineForChanges(cm, lineView, lineN, dims);
+ }
+ if (updateNumber) {
+ removeChildren(lineView.lineNumber);
+ lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));
+ }
+ cur = lineView.node.nextSibling;
+ }
+ lineN += lineView.size;
+ }
+ while (cur) { cur = rm(cur); }
+ }
+
+ function updateGutterSpace(display) {
+ var width = display.gutters.offsetWidth;
+ display.sizer.style.marginLeft = width + "px";
+ }
+
+ function setDocumentHeight(cm, measure) {
+ cm.display.sizer.style.minHeight = measure.docHeight + "px";
+ cm.display.heightForcer.style.top = measure.docHeight + "px";
+ cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px";
+ }
+
+ // Re-align line numbers and gutter marks to compensate for
+ // horizontal scrolling.
+ function alignHorizontally(cm) {
+ var display = cm.display, view = display.view;
+ if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }
+ var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;
+ var gutterW = display.gutters.offsetWidth, left = comp + "px";
+ for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {
+ if (cm.options.fixedGutter) {
+ if (view[i].gutter)
+ { view[i].gutter.style.left = left; }
+ if (view[i].gutterBackground)
+ { view[i].gutterBackground.style.left = left; }
+ }
+ var align = view[i].alignable;
+ if (align) { for (var j = 0; j < align.length; j++)
+ { align[j].style.left = left; } }
+ } }
+ if (cm.options.fixedGutter)
+ { display.gutters.style.left = (comp + gutterW) + "px"; }
+ }
+
+ // Used to ensure that the line number gutter is still the right
+ // size for the current document size. Returns true when an update
+ // is needed.
+ function maybeUpdateLineNumberWidth(cm) {
+ if (!cm.options.lineNumbers) { return false }
+ var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;
+ if (last.length != display.lineNumChars) {
+ var test = display.measure.appendChild(elt("div", [elt("div", last)],
+ "CodeMirror-linenumber CodeMirror-gutter-elt"));
+ var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;
+ display.lineGutter.style.width = "";
+ display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;
+ display.lineNumWidth = display.lineNumInnerWidth + padding;
+ display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;
+ display.lineGutter.style.width = display.lineNumWidth + "px";
+ updateGutterSpace(cm.display);
+ return true
+ }
+ return false
+ }
+
+ function getGutters(gutters, lineNumbers) {
+ var result = [], sawLineNumbers = false;
+ for (var i = 0; i < gutters.length; i++) {
+ var name = gutters[i], style = null;
+ if (typeof name != "string") { style = name.style; name = name.className; }
+ if (name == "CodeMirror-linenumbers") {
+ if (!lineNumbers) { continue }
+ else { sawLineNumbers = true; }
+ }
+ result.push({className: name, style: style});
+ }
+ if (lineNumbers && !sawLineNumbers) { result.push({className: "CodeMirror-linenumbers", style: null}); }
+ return result
+ }
+
+ // Rebuild the gutter elements, ensure the margin to the left of the
+ // code matches their width.
+ function renderGutters(display) {
+ var gutters = display.gutters, specs = display.gutterSpecs;
+ removeChildren(gutters);
+ display.lineGutter = null;
+ for (var i = 0; i < specs.length; ++i) {
+ var ref = specs[i];
+ var className = ref.className;
+ var style = ref.style;
+ var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className));
+ if (style) { gElt.style.cssText = style; }
+ if (className == "CodeMirror-linenumbers") {
+ display.lineGutter = gElt;
+ gElt.style.width = (display.lineNumWidth || 1) + "px";
+ }
+ }
+ gutters.style.display = specs.length ? "" : "none";
+ updateGutterSpace(display);
+ }
+
+ function updateGutters(cm) {
+ renderGutters(cm.display);
+ regChange(cm);
+ alignHorizontally(cm);
+ }
+
+ // The display handles the DOM integration, both for input reading
+ // and content drawing. It holds references to DOM nodes and
+ // display-related state.
+
+ function Display(place, doc, input, options) {
+ var d = this;
+ this.input = input;
+
+ // Covers bottom-right square when both scrollbars are present.
+ d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler");
+ d.scrollbarFiller.setAttribute("cm-not-content", "true");
+ // Covers bottom of gutter when coverGutterNextToScrollbar is on
+ // and h scrollbar is present.
+ d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler");
+ d.gutterFiller.setAttribute("cm-not-content", "true");
+ // Will contain the actual code, positioned to cover the viewport.
+ d.lineDiv = eltP("div", null, "CodeMirror-code");
+ // Elements are added to these to represent selection and cursors.
+ d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1");
+ d.cursorDiv = elt("div", null, "CodeMirror-cursors");
+ // A visibility: hidden element used to find the size of things.
+ d.measure = elt("div", null, "CodeMirror-measure");
+ // When lines outside of the viewport are measured, they are drawn in this.
+ d.lineMeasure = elt("div", null, "CodeMirror-measure");
+ // Wraps everything that needs to exist inside the vertically-padded coordinate system
+ d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],
+ null, "position: relative; outline: none");
+ var lines = eltP("div", [d.lineSpace], "CodeMirror-lines");
+ // Moved around its parent to cover visible view.
+ d.mover = elt("div", [lines], null, "position: relative");
+ // Set to the height of the document, allowing scrolling.
+ d.sizer = elt("div", [d.mover], "CodeMirror-sizer");
+ d.sizerWidth = null;
+ // Behavior of elts with overflow: auto and padding is
+ // inconsistent across browsers. This is used to ensure the
+ // scrollable area is big enough.
+ d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;");
+ // Will contain the gutters, if any.
+ d.gutters = elt("div", null, "CodeMirror-gutters");
+ d.lineGutter = null;
+ // Actual scrollable element.
+ d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll");
+ d.scroller.setAttribute("tabIndex", "-1");
+ // The element in which the editor lives.
+ d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror");
+
+ // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)
+ if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }
+ if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }
+
+ if (place) {
+ if (place.appendChild) { place.appendChild(d.wrapper); }
+ else { place(d.wrapper); }
+ }
+
+ // Current rendered range (may be bigger than the view window).
+ d.viewFrom = d.viewTo = doc.first;
+ d.reportedViewFrom = d.reportedViewTo = doc.first;
+ // Information about the rendered lines.
+ d.view = [];
+ d.renderedView = null;
+ // Holds info about a single rendered line when it was rendered
+ // for measurement, while not in view.
+ d.externalMeasured = null;
+ // Empty space (in pixels) above the view
+ d.viewOffset = 0;
+ d.lastWrapHeight = d.lastWrapWidth = 0;
+ d.updateLineNumbers = null;
+
+ d.nativeBarWidth = d.barHeight = d.barWidth = 0;
+ d.scrollbarsClipped = false;
+
+ // Used to only resize the line number gutter when necessary (when
+ // the amount of lines crosses a boundary that makes its width change)
+ d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;
+ // Set to true when a non-horizontal-scrolling line widget is
+ // added. As an optimization, line widget aligning is skipped when
+ // this is false.
+ d.alignWidgets = false;
+
+ d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
+
+ // Tracks the maximum line length so that the horizontal scrollbar
+ // can be kept static when scrolling.
+ d.maxLine = null;
+ d.maxLineLength = 0;
+ d.maxLineChanged = false;
+
+ // Used for measuring wheel scrolling granularity
+ d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;
+
+ // True when shift is held down.
+ d.shift = false;
+
+ // Used to track whether anything happened since the context menu
+ // was opened.
+ d.selForContextMenu = null;
+
+ d.activeTouch = null;
+
+ d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);
+ renderGutters(d);
+
+ input.init(d);
+ }
+
+ // Since the delta values reported on mouse wheel events are
+ // unstandardized between browsers and even browser versions, and
+ // generally horribly unpredictable, this code starts by measuring
+ // the scroll effect that the first few mouse wheel events have,
+ // and, from that, detects the way it can convert deltas to pixel
+ // offsets afterwards.
+ //
+ // The reason we want to know the amount a wheel event will scroll
+ // is that it gives us a chance to update the display before the
+ // actual scrolling happens, reducing flickering.
+
+ var wheelSamples = 0, wheelPixelsPerUnit = null;
+ // Fill in a browser-detected starting value on browsers where we
+ // know one. These don't have to be accurate -- the result of them
+ // being wrong would just be a slight flicker on the first wheel
+ // scroll (if it is large enough).
+ if (ie) { wheelPixelsPerUnit = -.53; }
+ else if (gecko) { wheelPixelsPerUnit = 15; }
+ else if (chrome) { wheelPixelsPerUnit = -.7; }
+ else if (safari) { wheelPixelsPerUnit = -1/3; }
+
+ function wheelEventDelta(e) {
+ var dx = e.wheelDeltaX, dy = e.wheelDeltaY;
+ if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }
+ if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }
+ else if (dy == null) { dy = e.wheelDelta; }
+ return {x: dx, y: dy}
+ }
+ function wheelEventPixels(e) {
+ var delta = wheelEventDelta(e);
+ delta.x *= wheelPixelsPerUnit;
+ delta.y *= wheelPixelsPerUnit;
+ return delta
+ }
+
+ function onScrollWheel(cm, e) {
+ var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;
+
+ var display = cm.display, scroll = display.scroller;
+ // Quit if there's nothing to scroll here
+ var canScrollX = scroll.scrollWidth > scroll.clientWidth;
+ var canScrollY = scroll.scrollHeight > scroll.clientHeight;
+ if (!(dx && canScrollX || dy && canScrollY)) { return }
+
+ // Webkit browsers on OS X abort momentum scrolls when the target
+ // of the scroll event is removed from the scrollable element.
+ // This hack (see related code in patchDisplay) makes sure the
+ // element is kept around.
+ if (dy && mac && webkit) {
+ outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {
+ for (var i = 0; i < view.length; i++) {
+ if (view[i].node == cur) {
+ cm.display.currentWheelTarget = cur;
+ break outer
+ }
+ }
+ }
+ }
+
+ // On some browsers, horizontal scrolling will cause redraws to
+ // happen before the gutter has been realigned, causing it to
+ // wriggle around in a most unseemly way. When we have an
+ // estimated pixels/delta value, we just handle horizontal
+ // scrolling entirely here. It'll be slightly off from native, but
+ // better than glitching out.
+ if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {
+ if (dy && canScrollY)
+ { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }
+ setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));
+ // Only prevent default scrolling if vertical scrolling is
+ // actually possible. Otherwise, it causes vertical scroll
+ // jitter on OSX trackpads when deltaX is small and deltaY
+ // is large (issue #3579)
+ if (!dy || (dy && canScrollY))
+ { e_preventDefault(e); }
+ display.wheelStartX = null; // Abort measurement, if in progress
+ return
+ }
+
+ // 'Project' the visible viewport to cover the area that is being
+ // scrolled into view (if we know enough to estimate it).
+ if (dy && wheelPixelsPerUnit != null) {
+ var pixels = dy * wheelPixelsPerUnit;
+ var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;
+ if (pixels < 0) { top = Math.max(0, top + pixels - 50); }
+ else { bot = Math.min(cm.doc.height, bot + pixels + 50); }
+ updateDisplaySimple(cm, {top: top, bottom: bot});
+ }
+
+ if (wheelSamples < 20) {
+ if (display.wheelStartX == null) {
+ display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;
+ display.wheelDX = dx; display.wheelDY = dy;
+ setTimeout(function () {
+ if (display.wheelStartX == null) { return }
+ var movedX = scroll.scrollLeft - display.wheelStartX;
+ var movedY = scroll.scrollTop - display.wheelStartY;
+ var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
+ (movedX && display.wheelDX && movedX / display.wheelDX);
+ display.wheelStartX = display.wheelStartY = null;
+ if (!sample) { return }
+ wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);
+ ++wheelSamples;
+ }, 200);
+ } else {
+ display.wheelDX += dx; display.wheelDY += dy;
+ }
+ }
+ }
+
+ // Selection objects are immutable. A new one is created every time
+ // the selection changes. A selection is one or more non-overlapping
+ // (and non-touching) ranges, sorted, and an integer that indicates
+ // which one is the primary selection (the one that's scrolled into
+ // view, that getCursor returns, etc).
+ var Selection = function(ranges, primIndex) {
+ this.ranges = ranges;
+ this.primIndex = primIndex;
+ };
+
+ Selection.prototype.primary = function () { return this.ranges[this.primIndex] };
+
+ Selection.prototype.equals = function (other) {
+ var this$1 = this;
+
+ if (other == this) { return true }
+ if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }
+ for (var i = 0; i < this.ranges.length; i++) {
+ var here = this$1.ranges[i], there = other.ranges[i];
+ if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }
+ }
+ return true
+ };
+
+ Selection.prototype.deepCopy = function () {
+ var this$1 = this;
+
+ var out = [];
+ for (var i = 0; i < this.ranges.length; i++)
+ { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)); }
+ return new Selection(out, this.primIndex)
+ };
+
+ Selection.prototype.somethingSelected = function () {
+ var this$1 = this;
+
+ for (var i = 0; i < this.ranges.length; i++)
+ { if (!this$1.ranges[i].empty()) { return true } }
+ return false
+ };
+
+ Selection.prototype.contains = function (pos, end) {
+ var this$1 = this;
+
+ if (!end) { end = pos; }
+ for (var i = 0; i < this.ranges.length; i++) {
+ var range = this$1.ranges[i];
+ if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)
+ { return i }
+ }
+ return -1
+ };
+
+ var Range = function(anchor, head) {
+ this.anchor = anchor; this.head = head;
+ };
+
+ Range.prototype.from = function () { return minPos(this.anchor, this.head) };
+ Range.prototype.to = function () { return maxPos(this.anchor, this.head) };
+ Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };
+
+ // Take an unsorted, potentially overlapping set of ranges, and
+ // build a selection out of it. 'Consumes' ranges array (modifying
+ // it).
+ function normalizeSelection(cm, ranges, primIndex) {
+ var mayTouch = cm && cm.options.selectionsMayTouch;
+ var prim = ranges[primIndex];
+ ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });
+ primIndex = indexOf(ranges, prim);
+ for (var i = 1; i < ranges.length; i++) {
+ var cur = ranges[i], prev = ranges[i - 1];
+ var diff = cmp(prev.to(), cur.from());
+ if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {
+ var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());
+ var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;
+ if (i <= primIndex) { --primIndex; }
+ ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));
+ }
+ }
+ return new Selection(ranges, primIndex)
+ }
+
+ function simpleSelection(anchor, head) {
+ return new Selection([new Range(anchor, head || anchor)], 0)
+ }
+
+ // Compute the position of the end of a change (its 'to' property
+ // refers to the pre-change end).
+ function changeEnd(change) {
+ if (!change.text) { return change.to }
+ return Pos(change.from.line + change.text.length - 1,
+ lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))
+ }
+
+ // Adjust a position to refer to the post-change position of the
+ // same text, or the end of the change if the change covers it.
+ function adjustForChange(pos, change) {
+ if (cmp(pos, change.from) < 0) { return pos }
+ if (cmp(pos, change.to) <= 0) { return changeEnd(change) }
+
+ var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;
+ if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }
+ return Pos(line, ch)
+ }
+
+ function computeSelAfterChange(doc, change) {
+ var out = [];
+ for (var i = 0; i < doc.sel.ranges.length; i++) {
+ var range = doc.sel.ranges[i];
+ out.push(new Range(adjustForChange(range.anchor, change),
+ adjustForChange(range.head, change)));
+ }
+ return normalizeSelection(doc.cm, out, doc.sel.primIndex)
+ }
+
+ function offsetPos(pos, old, nw) {
+ if (pos.line == old.line)
+ { return Pos(nw.line, pos.ch - old.ch + nw.ch) }
+ else
+ { return Pos(nw.line + (pos.line - old.line), pos.ch) }
+ }
+
+ // Used by replaceSelections to allow moving the selection to the
+ // start or around the replaced test. Hint may be "start" or "around".
+ function computeReplacedSel(doc, changes, hint) {
+ var out = [];
+ var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;
+ for (var i = 0; i < changes.length; i++) {
+ var change = changes[i];
+ var from = offsetPos(change.from, oldPrev, newPrev);
+ var to = offsetPos(changeEnd(change), oldPrev, newPrev);
+ oldPrev = change.to;
+ newPrev = to;
+ if (hint == "around") {
+ var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;
+ out[i] = new Range(inv ? to : from, inv ? from : to);
+ } else {
+ out[i] = new Range(from, from);
+ }
+ }
+ return new Selection(out, doc.sel.primIndex)
+ }
+
+ // Used to get the editor into a consistent state again when options change.
+
+ function loadMode(cm) {
+ cm.doc.mode = getMode(cm.options, cm.doc.modeOption);
+ resetModeState(cm);
+ }
+
+ function resetModeState(cm) {
+ cm.doc.iter(function (line) {
+ if (line.stateAfter) { line.stateAfter = null; }
+ if (line.styles) { line.styles = null; }
+ });
+ cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;
+ startWorker(cm, 100);
+ cm.state.modeGen++;
+ if (cm.curOp) { regChange(cm); }
+ }
+
+ // DOCUMENT DATA STRUCTURE
+
+ // By default, updates that start and end at the beginning of a line
+ // are treated specially, in order to make the association of line
+ // widgets and marker elements with the text behave more intuitive.
+ function isWholeLineUpdate(doc, change) {
+ return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" &&
+ (!doc.cm || doc.cm.options.wholeLineUpdateBefore)
+ }
+
+ // Perform a change on the document data structure.
+ function updateDoc(doc, change, markedSpans, estimateHeight$$1) {
+ function spansFor(n) {return markedSpans ? markedSpans[n] : null}
+ function update(line, text, spans) {
+ updateLine(line, text, spans, estimateHeight$$1);
+ signalLater(line, "change", line, change);
+ }
+ function linesFor(start, end) {
+ var result = [];
+ for (var i = start; i < end; ++i)
+ { result.push(new Line(text[i], spansFor(i), estimateHeight$$1)); }
+ return result
+ }
+
+ var from = change.from, to = change.to, text = change.text;
+ var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);
+ var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;
+
+ // Adjust the line structure
+ if (change.full) {
+ doc.insert(0, linesFor(0, text.length));
+ doc.remove(text.length, doc.size - text.length);
+ } else if (isWholeLineUpdate(doc, change)) {
+ // This is a whole-line replace. Treated specially to make
+ // sure line objects move the way they are supposed to.
+ var added = linesFor(0, text.length - 1);
+ update(lastLine, lastLine.text, lastSpans);
+ if (nlines) { doc.remove(from.line, nlines); }
+ if (added.length) { doc.insert(from.line, added); }
+ } else if (firstLine == lastLine) {
+ if (text.length == 1) {
+ update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);
+ } else {
+ var added$1 = linesFor(1, text.length - 1);
+ added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$$1));
+ update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
+ doc.insert(from.line + 1, added$1);
+ }
+ } else if (text.length == 1) {
+ update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));
+ doc.remove(from.line + 1, nlines);
+ } else {
+ update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
+ update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);
+ var added$2 = linesFor(1, text.length - 1);
+ if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }
+ doc.insert(from.line + 1, added$2);
+ }
+
+ signalLater(doc, "change", doc, change);
+ }
+
+ // Call f for all linked documents.
+ function linkedDocs(doc, f, sharedHistOnly) {
+ function propagate(doc, skip, sharedHist) {
+ if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {
+ var rel = doc.linked[i];
+ if (rel.doc == skip) { continue }
+ var shared = sharedHist && rel.sharedHist;
+ if (sharedHistOnly && !shared) { continue }
+ f(rel.doc, shared);
+ propagate(rel.doc, doc, shared);
+ } }
+ }
+ propagate(doc, null, true);
+ }
+
+ // Attach a document to an editor.
+ function attachDoc(cm, doc) {
+ if (doc.cm) { throw new Error("This document is already in use.") }
+ cm.doc = doc;
+ doc.cm = cm;
+ estimateLineHeights(cm);
+ loadMode(cm);
+ setDirectionClass(cm);
+ if (!cm.options.lineWrapping) { findMaxLine(cm); }
+ cm.options.mode = doc.modeOption;
+ regChange(cm);
+ }
+
+ function setDirectionClass(cm) {
+ (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl");
+ }
+
+ function directionChanged(cm) {
+ runInOp(cm, function () {
+ setDirectionClass(cm);
+ regChange(cm);
+ });
+ }
+
+ function History(startGen) {
+ // Arrays of change events and selections. Doing something adds an
+ // event to done and clears undo. Undoing moves events from done
+ // to undone, redoing moves them in the other direction.
+ this.done = []; this.undone = [];
+ this.undoDepth = Infinity;
+ // Used to track when changes can be merged into a single undo
+ // event
+ this.lastModTime = this.lastSelTime = 0;
+ this.lastOp = this.lastSelOp = null;
+ this.lastOrigin = this.lastSelOrigin = null;
+ // Used by the isClean() method
+ this.generation = this.maxGeneration = startGen || 1;
+ }
+
+ // Create a history change event from an updateDoc-style change
+ // object.
+ function historyChangeFromChange(doc, change) {
+ var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};
+ attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);
+ linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);
+ return histChange
+ }
+
+ // Pop all selection events off the end of a history array. Stop at
+ // a change event.
+ function clearSelectionEvents(array) {
+ while (array.length) {
+ var last = lst(array);
+ if (last.ranges) { array.pop(); }
+ else { break }
+ }
+ }
+
+ // Find the top change event in the history. Pop off selection
+ // events that are in the way.
+ function lastChangeEvent(hist, force) {
+ if (force) {
+ clearSelectionEvents(hist.done);
+ return lst(hist.done)
+ } else if (hist.done.length && !lst(hist.done).ranges) {
+ return lst(hist.done)
+ } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {
+ hist.done.pop();
+ return lst(hist.done)
+ }
+ }
+
+ // Register a change in the history. Merges changes that are within
+ // a single operation, or are close together with an origin that
+ // allows merging (starting with "+") into a single event.
+ function addChangeToHistory(doc, change, selAfter, opId) {
+ var hist = doc.history;
+ hist.undone.length = 0;
+ var time = +new Date, cur;
+ var last;
+
+ if ((hist.lastOp == opId ||
+ hist.lastOrigin == change.origin && change.origin &&
+ ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||
+ change.origin.charAt(0) == "*")) &&
+ (cur = lastChangeEvent(hist, hist.lastOp == opId))) {
+ // Merge this change into the last event
+ last = lst(cur.changes);
+ if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {
+ // Optimized case for simple insertion -- don't want to add
+ // new changesets for every character typed
+ last.to = changeEnd(change);
+ } else {
+ // Add new sub-event
+ cur.changes.push(historyChangeFromChange(doc, change));
+ }
+ } else {
+ // Can not be merged, start a new event.
+ var before = lst(hist.done);
+ if (!before || !before.ranges)
+ { pushSelectionToHistory(doc.sel, hist.done); }
+ cur = {changes: [historyChangeFromChange(doc, change)],
+ generation: hist.generation};
+ hist.done.push(cur);
+ while (hist.done.length > hist.undoDepth) {
+ hist.done.shift();
+ if (!hist.done[0].ranges) { hist.done.shift(); }
+ }
+ }
+ hist.done.push(selAfter);
+ hist.generation = ++hist.maxGeneration;
+ hist.lastModTime = hist.lastSelTime = time;
+ hist.lastOp = hist.lastSelOp = opId;
+ hist.lastOrigin = hist.lastSelOrigin = change.origin;
+
+ if (!last) { signal(doc, "historyAdded"); }
+ }
+
+ function selectionEventCanBeMerged(doc, origin, prev, sel) {
+ var ch = origin.charAt(0);
+ return ch == "*" ||
+ ch == "+" &&
+ prev.ranges.length == sel.ranges.length &&
+ prev.somethingSelected() == sel.somethingSelected() &&
+ new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)
+ }
+
+ // Called whenever the selection changes, sets the new selection as
+ // the pending selection in the history, and pushes the old pending
+ // selection into the 'done' array when it was significantly
+ // different (in number of selected ranges, emptiness, or time).
+ function addSelectionToHistory(doc, sel, opId, options) {
+ var hist = doc.history, origin = options && options.origin;
+
+ // A new event is started when the previous origin does not match
+ // the current, or the origins don't allow matching. Origins
+ // starting with * are always merged, those starting with + are
+ // merged when similar and close together in time.
+ if (opId == hist.lastSelOp ||
+ (origin && hist.lastSelOrigin == origin &&
+ (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||
+ selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))
+ { hist.done[hist.done.length - 1] = sel; }
+ else
+ { pushSelectionToHistory(sel, hist.done); }
+
+ hist.lastSelTime = +new Date;
+ hist.lastSelOrigin = origin;
+ hist.lastSelOp = opId;
+ if (options && options.clearRedo !== false)
+ { clearSelectionEvents(hist.undone); }
+ }
+
+ function pushSelectionToHistory(sel, dest) {
+ var top = lst(dest);
+ if (!(top && top.ranges && top.equals(sel)))
+ { dest.push(sel); }
+ }
+
+ // Used to store marked span information in the history.
+ function attachLocalSpans(doc, change, from, to) {
+ var existing = change["spans_" + doc.id], n = 0;
+ doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {
+ if (line.markedSpans)
+ { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; }
+ ++n;
+ });
+ }
+
+ // When un/re-doing restores text containing marked spans, those
+ // that have been explicitly cleared should not be restored.
+ function removeClearedSpans(spans) {
+ if (!spans) { return null }
+ var out;
+ for (var i = 0; i < spans.length; ++i) {
+ if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }
+ else if (out) { out.push(spans[i]); }
+ }
+ return !out ? spans : out.length ? out : null
+ }
+
+ // Retrieve and filter the old marked spans stored in a change event.
+ function getOldSpans(doc, change) {
+ var found = change["spans_" + doc.id];
+ if (!found) { return null }
+ var nw = [];
+ for (var i = 0; i < change.text.length; ++i)
+ { nw.push(removeClearedSpans(found[i])); }
+ return nw
+ }
+
+ // Used for un/re-doing changes from the history. Combines the
+ // result of computing the existing spans with the set of spans that
+ // existed in the history (so that deleting around a span and then
+ // undoing brings back the span).
+ function mergeOldSpans(doc, change) {
+ var old = getOldSpans(doc, change);
+ var stretched = stretchSpansOverChange(doc, change);
+ if (!old) { return stretched }
+ if (!stretched) { return old }
+
+ for (var i = 0; i < old.length; ++i) {
+ var oldCur = old[i], stretchCur = stretched[i];
+ if (oldCur && stretchCur) {
+ spans: for (var j = 0; j < stretchCur.length; ++j) {
+ var span = stretchCur[j];
+ for (var k = 0; k < oldCur.length; ++k)
+ { if (oldCur[k].marker == span.marker) { continue spans } }
+ oldCur.push(span);
+ }
+ } else if (stretchCur) {
+ old[i] = stretchCur;
+ }
+ }
+ return old
+ }
+
+ // Used both to provide a JSON-safe object in .getHistory, and, when
+ // detaching a document, to split the history in two
+ function copyHistoryArray(events, newGroup, instantiateSel) {
+ var copy = [];
+ for (var i = 0; i < events.length; ++i) {
+ var event = events[i];
+ if (event.ranges) {
+ copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);
+ continue
+ }
+ var changes = event.changes, newChanges = [];
+ copy.push({changes: newChanges});
+ for (var j = 0; j < changes.length; ++j) {
+ var change = changes[j], m = (void 0);
+ newChanges.push({from: change.from, to: change.to, text: change.text});
+ if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) {
+ if (indexOf(newGroup, Number(m[1])) > -1) {
+ lst(newChanges)[prop] = change[prop];
+ delete change[prop];
+ }
+ } } }
+ }
+ }
+ return copy
+ }
+
+ // The 'scroll' parameter given to many of these indicated whether
+ // the new cursor position should be scrolled into view after
+ // modifying the selection.
+
+ // If shift is held or the extend flag is set, extends a range to
+ // include a given position (and optionally a second position).
+ // Otherwise, simply returns the range between the given positions.
+ // Used for cursor motion and such.
+ function extendRange(range, head, other, extend) {
+ if (extend) {
+ var anchor = range.anchor;
+ if (other) {
+ var posBefore = cmp(head, anchor) < 0;
+ if (posBefore != (cmp(other, anchor) < 0)) {
+ anchor = head;
+ head = other;
+ } else if (posBefore != (cmp(head, other) < 0)) {
+ head = other;
+ }
+ }
+ return new Range(anchor, head)
+ } else {
+ return new Range(other || head, head)
+ }
+ }
+
+ // Extend the primary selection range, discard the rest.
+ function extendSelection(doc, head, other, options, extend) {
+ if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }
+ setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);
+ }
+
+ // Extend all selections (pos is an array of selections with length
+ // equal the number of selections)
+ function extendSelections(doc, heads, options) {
+ var out = [];
+ var extend = doc.cm && (doc.cm.display.shift || doc.extend);
+ for (var i = 0; i < doc.sel.ranges.length; i++)
+ { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }
+ var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);
+ setSelection(doc, newSel, options);
+ }
+
+ // Updates a single range in the selection.
+ function replaceOneSelection(doc, i, range, options) {
+ var ranges = doc.sel.ranges.slice(0);
+ ranges[i] = range;
+ setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);
+ }
+
+ // Reset the selection to a single range.
+ function setSimpleSelection(doc, anchor, head, options) {
+ setSelection(doc, simpleSelection(anchor, head), options);
+ }
+
+ // Give beforeSelectionChange handlers a change to influence a
+ // selection update.
+ function filterSelectionChange(doc, sel, options) {
+ var obj = {
+ ranges: sel.ranges,
+ update: function(ranges) {
+ var this$1 = this;
+
+ this.ranges = [];
+ for (var i = 0; i < ranges.length; i++)
+ { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),
+ clipPos(doc, ranges[i].head)); }
+ },
+ origin: options && options.origin
+ };
+ signal(doc, "beforeSelectionChange", doc, obj);
+ if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj); }
+ if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }
+ else { return sel }
+ }
+
+ function setSelectionReplaceHistory(doc, sel, options) {
+ var done = doc.history.done, last = lst(done);
+ if (last && last.ranges) {
+ done[done.length - 1] = sel;
+ setSelectionNoUndo(doc, sel, options);
+ } else {
+ setSelection(doc, sel, options);
+ }
+ }
+
+ // Set a new selection.
+ function setSelection(doc, sel, options) {
+ setSelectionNoUndo(doc, sel, options);
+ addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);
+ }
+
+ function setSelectionNoUndo(doc, sel, options) {
+ if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange"))
+ { sel = filterSelectionChange(doc, sel, options); }
+
+ var bias = options && options.bias ||
+ (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);
+ setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));
+
+ if (!(options && options.scroll === false) && doc.cm)
+ { ensureCursorVisible(doc.cm); }
+ }
+
+ function setSelectionInner(doc, sel) {
+ if (sel.equals(doc.sel)) { return }
+
+ doc.sel = sel;
+
+ if (doc.cm) {
+ doc.cm.curOp.updateInput = 1;
+ doc.cm.curOp.selectionChanged = true;
+ signalCursorActivity(doc.cm);
+ }
+ signalLater(doc, "cursorActivity", doc);
+ }
+
+ // Verify that the selection does not partially select any atomic
+ // marked ranges.
+ function reCheckSelection(doc) {
+ setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));
+ }
+
+ // Return a selection that does not partially select any atomic
+ // ranges.
+ function skipAtomicInSelection(doc, sel, bias, mayClear) {
+ var out;
+ for (var i = 0; i < sel.ranges.length; i++) {
+ var range = sel.ranges[i];
+ var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];
+ var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);
+ var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);
+ if (out || newAnchor != range.anchor || newHead != range.head) {
+ if (!out) { out = sel.ranges.slice(0, i); }
+ out[i] = new Range(newAnchor, newHead);
+ }
+ }
+ return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel
+ }
+
+ function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {
+ var line = getLine(doc, pos.line);
+ if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
+ var sp = line.markedSpans[i], m = sp.marker;
+
+ // Determine if we should prevent the cursor being placed to the left/right of an atomic marker
+ // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it
+ // is with selectLeft/Right
+ var preventCursorLeft = ("selectLeft" in m) ? !m.selectLeft : m.inclusiveLeft;
+ var preventCursorRight = ("selectRight" in m) ? !m.selectRight : m.inclusiveRight;
+
+ if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&
+ (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {
+ if (mayClear) {
+ signal(m, "beforeCursorEnter");
+ if (m.explicitlyCleared) {
+ if (!line.markedSpans) { break }
+ else {--i; continue}
+ }
+ }
+ if (!m.atomic) { continue }
+
+ if (oldPos) {
+ var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);
+ if (dir < 0 ? preventCursorRight : preventCursorLeft)
+ { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }
+ if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))
+ { return skipAtomicInner(doc, near, pos, dir, mayClear) }
+ }
+
+ var far = m.find(dir < 0 ? -1 : 1);
+ if (dir < 0 ? preventCursorLeft : preventCursorRight)
+ { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }
+ return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null
+ }
+ } }
+ return pos
+ }
+
+ // Ensure a given position is not inside an atomic range.
+ function skipAtomic(doc, pos, oldPos, bias, mayClear) {
+ var dir = bias || 1;
+ var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||
+ (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||
+ skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||
+ (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));
+ if (!found) {
+ doc.cantEdit = true;
+ return Pos(doc.first, 0)
+ }
+ return found
+ }
+
+ function movePos(doc, pos, dir, line) {
+ if (dir < 0 && pos.ch == 0) {
+ if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }
+ else { return null }
+ } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {
+ if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }
+ else { return null }
+ } else {
+ return new Pos(pos.line, pos.ch + dir)
+ }
+ }
+
+ function selectAll(cm) {
+ cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);
+ }
+
+ // UPDATING
+
+ // Allow "beforeChange" event handlers to influence a change
+ function filterChange(doc, change, update) {
+ var obj = {
+ canceled: false,
+ from: change.from,
+ to: change.to,
+ text: change.text,
+ origin: change.origin,
+ cancel: function () { return obj.canceled = true; }
+ };
+ if (update) { obj.update = function (from, to, text, origin) {
+ if (from) { obj.from = clipPos(doc, from); }
+ if (to) { obj.to = clipPos(doc, to); }
+ if (text) { obj.text = text; }
+ if (origin !== undefined) { obj.origin = origin; }
+ }; }
+ signal(doc, "beforeChange", doc, obj);
+ if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj); }
+
+ if (obj.canceled) {
+ if (doc.cm) { doc.cm.curOp.updateInput = 2; }
+ return null
+ }
+ return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}
+ }
+
+ // Apply a change to a document, and add it to the document's
+ // history, and propagating it to all linked documents.
+ function makeChange(doc, change, ignoreReadOnly) {
+ if (doc.cm) {
+ if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }
+ if (doc.cm.state.suppressEdits) { return }
+ }
+
+ if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {
+ change = filterChange(doc, change, true);
+ if (!change) { return }
+ }
+
+ // Possibly split or suppress the update based on the presence
+ // of read-only spans in its range.
+ var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);
+ if (split) {
+ for (var i = split.length - 1; i >= 0; --i)
+ { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin}); }
+ } else {
+ makeChangeInner(doc, change);
+ }
+ }
+
+ function makeChangeInner(doc, change) {
+ if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return }
+ var selAfter = computeSelAfterChange(doc, change);
+ addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);
+
+ makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));
+ var rebased = [];
+
+ linkedDocs(doc, function (doc, sharedHist) {
+ if (!sharedHist && indexOf(rebased, doc.history) == -1) {
+ rebaseHist(doc.history, change);
+ rebased.push(doc.history);
+ }
+ makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));
+ });
+ }
+
+ // Revert a change stored in a document's history.
+ function makeChangeFromHistory(doc, type, allowSelectionOnly) {
+ var suppress = doc.cm && doc.cm.state.suppressEdits;
+ if (suppress && !allowSelectionOnly) { return }
+
+ var hist = doc.history, event, selAfter = doc.sel;
+ var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done;
+
+ // Verify that there is a useable event (so that ctrl-z won't
+ // needlessly clear selection events)
+ var i = 0;
+ for (; i < source.length; i++) {
+ event = source[i];
+ if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)
+ { break }
+ }
+ if (i == source.length) { return }
+ hist.lastOrigin = hist.lastSelOrigin = null;
+
+ for (;;) {
+ event = source.pop();
+ if (event.ranges) {
+ pushSelectionToHistory(event, dest);
+ if (allowSelectionOnly && !event.equals(doc.sel)) {
+ setSelection(doc, event, {clearRedo: false});
+ return
+ }
+ selAfter = event;
+ } else if (suppress) {
+ source.push(event);
+ return
+ } else { break }
+ }
+
+ // Build up a reverse change object to add to the opposite history
+ // stack (redo when undoing, and vice versa).
+ var antiChanges = [];
+ pushSelectionToHistory(selAfter, dest);
+ dest.push({changes: antiChanges, generation: hist.generation});
+ hist.generation = event.generation || ++hist.maxGeneration;
+
+ var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange");
+
+ var loop = function ( i ) {
+ var change = event.changes[i];
+ change.origin = type;
+ if (filter && !filterChange(doc, change, false)) {
+ source.length = 0;
+ return {}
+ }
+
+ antiChanges.push(historyChangeFromChange(doc, change));
+
+ var after = i ? computeSelAfterChange(doc, change) : lst(source);
+ makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));
+ if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }
+ var rebased = [];
+
+ // Propagate to the linked documents
+ linkedDocs(doc, function (doc, sharedHist) {
+ if (!sharedHist && indexOf(rebased, doc.history) == -1) {
+ rebaseHist(doc.history, change);
+ rebased.push(doc.history);
+ }
+ makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));
+ });
+ };
+
+ for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {
+ var returned = loop( i$1 );
+
+ if ( returned ) return returned.v;
+ }
+ }
+
+ // Sub-views need their line numbers shifted when text is added
+ // above or below them in the parent document.
+ function shiftDoc(doc, distance) {
+ if (distance == 0) { return }
+ doc.first += distance;
+ doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(
+ Pos(range.anchor.line + distance, range.anchor.ch),
+ Pos(range.head.line + distance, range.head.ch)
+ ); }), doc.sel.primIndex);
+ if (doc.cm) {
+ regChange(doc.cm, doc.first, doc.first - distance, distance);
+ for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)
+ { regLineChange(doc.cm, l, "gutter"); }
+ }
+ }
+
+ // More lower-level change function, handling only a single document
+ // (not linked ones).
+ function makeChangeSingleDoc(doc, change, selAfter, spans) {
+ if (doc.cm && !doc.cm.curOp)
+ { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }
+
+ if (change.to.line < doc.first) {
+ shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));
+ return
+ }
+ if (change.from.line > doc.lastLine()) { return }
+
+ // Clip the change to the size of this doc
+ if (change.from.line < doc.first) {
+ var shift = change.text.length - 1 - (doc.first - change.from.line);
+ shiftDoc(doc, shift);
+ change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),
+ text: [lst(change.text)], origin: change.origin};
+ }
+ var last = doc.lastLine();
+ if (change.to.line > last) {
+ change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),
+ text: [change.text[0]], origin: change.origin};
+ }
+
+ change.removed = getBetween(doc, change.from, change.to);
+
+ if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }
+ if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }
+ else { updateDoc(doc, change, spans); }
+ setSelectionNoUndo(doc, selAfter, sel_dontScroll);
+ }
+
+ // Handle the interaction of a change to a document with the editor
+ // that this document is part of.
+ function makeChangeSingleDocInEditor(cm, change, spans) {
+ var doc = cm.doc, display = cm.display, from = change.from, to = change.to;
+
+ var recomputeMaxLength = false, checkWidthStart = from.line;
+ if (!cm.options.lineWrapping) {
+ checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));
+ doc.iter(checkWidthStart, to.line + 1, function (line) {
+ if (line == display.maxLine) {
+ recomputeMaxLength = true;
+ return true
+ }
+ });
+ }
+
+ if (doc.sel.contains(change.from, change.to) > -1)
+ { signalCursorActivity(cm); }
+
+ updateDoc(doc, change, spans, estimateHeight(cm));
+
+ if (!cm.options.lineWrapping) {
+ doc.iter(checkWidthStart, from.line + change.text.length, function (line) {
+ var len = lineLength(line);
+ if (len > display.maxLineLength) {
+ display.maxLine = line;
+ display.maxLineLength = len;
+ display.maxLineChanged = true;
+ recomputeMaxLength = false;
+ }
+ });
+ if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }
+ }
+
+ retreatFrontier(doc, from.line);
+ startWorker(cm, 400);
+
+ var lendiff = change.text.length - (to.line - from.line) - 1;
+ // Remember that these lines changed, for updating the display
+ if (change.full)
+ { regChange(cm); }
+ else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))
+ { regLineChange(cm, from.line, "text"); }
+ else
+ { regChange(cm, from.line, to.line + 1, lendiff); }
+
+ var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change");
+ if (changeHandler || changesHandler) {
+ var obj = {
+ from: from, to: to,
+ text: change.text,
+ removed: change.removed,
+ origin: change.origin
+ };
+ if (changeHandler) { signalLater(cm, "change", cm, obj); }
+ if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }
+ }
+ cm.display.selForContextMenu = null;
+ }
+
+ function replaceRange(doc, code, from, to, origin) {
+ var assign;
+
+ if (!to) { to = from; }
+ if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }
+ if (typeof code == "string") { code = doc.splitLines(code); }
+ makeChange(doc, {from: from, to: to, text: code, origin: origin});
+ }
+
+ // Rebasing/resetting history to deal with externally-sourced changes
+
+ function rebaseHistSelSingle(pos, from, to, diff) {
+ if (to < pos.line) {
+ pos.line += diff;
+ } else if (from < pos.line) {
+ pos.line = from;
+ pos.ch = 0;
+ }
+ }
+
+ // Tries to rebase an array of history events given a change in the
+ // document. If the change touches the same lines as the event, the
+ // event, and everything 'behind' it, is discarded. If the change is
+ // before the event, the event's positions are updated. Uses a
+ // copy-on-write scheme for the positions, to avoid having to
+ // reallocate them all on every rebase, but also avoid problems with
+ // shared position objects being unsafely updated.
+ function rebaseHistArray(array, from, to, diff) {
+ for (var i = 0; i < array.length; ++i) {
+ var sub = array[i], ok = true;
+ if (sub.ranges) {
+ if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }
+ for (var j = 0; j < sub.ranges.length; j++) {
+ rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);
+ rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);
+ }
+ continue
+ }
+ for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {
+ var cur = sub.changes[j$1];
+ if (to < cur.from.line) {
+ cur.from = Pos(cur.from.line + diff, cur.from.ch);
+ cur.to = Pos(cur.to.line + diff, cur.to.ch);
+ } else if (from <= cur.to.line) {
+ ok = false;
+ break
+ }
+ }
+ if (!ok) {
+ array.splice(0, i + 1);
+ i = 0;
+ }
+ }
+ }
+
+ function rebaseHist(hist, change) {
+ var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;
+ rebaseHistArray(hist.done, from, to, diff);
+ rebaseHistArray(hist.undone, from, to, diff);
+ }
+
+ // Utility for applying a change to a line by handle or number,
+ // returning the number and optionally registering the line as
+ // changed.
+ function changeLine(doc, handle, changeType, op) {
+ var no = handle, line = handle;
+ if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)); }
+ else { no = lineNo(handle); }
+ if (no == null) { return null }
+ if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }
+ return line
+ }
+
+ // The document is represented as a BTree consisting of leaves, with
+ // chunk of lines in them, and branches, with up to ten leaves or
+ // other branch nodes below them. The top node is always a branch
+ // node, and is the document object itself (meaning it has
+ // additional methods and properties).
+ //
+ // All nodes have parent links. The tree is used both to go from
+ // line numbers to line objects, and to go from objects to numbers.
+ // It also indexes by height, and is used to convert between height
+ // and line object, and to find the total height of the document.
+ //
+ // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html
+
+ function LeafChunk(lines) {
+ var this$1 = this;
+
+ this.lines = lines;
+ this.parent = null;
+ var height = 0;
+ for (var i = 0; i < lines.length; ++i) {
+ lines[i].parent = this$1;
+ height += lines[i].height;
+ }
+ this.height = height;
+ }
+
+ LeafChunk.prototype = {
+ chunkSize: function() { return this.lines.length },
+
+ // Remove the n lines at offset 'at'.
+ removeInner: function(at, n) {
+ var this$1 = this;
+
+ for (var i = at, e = at + n; i < e; ++i) {
+ var line = this$1.lines[i];
+ this$1.height -= line.height;
+ cleanUpLine(line);
+ signalLater(line, "delete");
+ }
+ this.lines.splice(at, n);
+ },
+
+ // Helper used to collapse a small branch into a single leaf.
+ collapse: function(lines) {
+ lines.push.apply(lines, this.lines);
+ },
+
+ // Insert the given array of lines at offset 'at', count them as
+ // having the given height.
+ insertInner: function(at, lines, height) {
+ var this$1 = this;
+
+ this.height += height;
+ this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));
+ for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1; }
+ },
+
+ // Used to iterate over a part of the tree.
+ iterN: function(at, n, op) {
+ var this$1 = this;
+
+ for (var e = at + n; at < e; ++at)
+ { if (op(this$1.lines[at])) { return true } }
+ }
+ };
+
+ function BranchChunk(children) {
+ var this$1 = this;
+
+ this.children = children;
+ var size = 0, height = 0;
+ for (var i = 0; i < children.length; ++i) {
+ var ch = children[i];
+ size += ch.chunkSize(); height += ch.height;
+ ch.parent = this$1;
+ }
+ this.size = size;
+ this.height = height;
+ this.parent = null;
+ }
+
+ BranchChunk.prototype = {
+ chunkSize: function() { return this.size },
+
+ removeInner: function(at, n) {
+ var this$1 = this;
+
+ this.size -= n;
+ for (var i = 0; i < this.children.length; ++i) {
+ var child = this$1.children[i], sz = child.chunkSize();
+ if (at < sz) {
+ var rm = Math.min(n, sz - at), oldHeight = child.height;
+ child.removeInner(at, rm);
+ this$1.height -= oldHeight - child.height;
+ if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null; }
+ if ((n -= rm) == 0) { break }
+ at = 0;
+ } else { at -= sz; }
+ }
+ // If the result is smaller than 25 lines, ensure that it is a
+ // single leaf node.
+ if (this.size - n < 25 &&
+ (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {
+ var lines = [];
+ this.collapse(lines);
+ this.children = [new LeafChunk(lines)];
+ this.children[0].parent = this;
+ }
+ },
+
+ collapse: function(lines) {
+ var this$1 = this;
+
+ for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines); }
+ },
+
+ insertInner: function(at, lines, height) {
+ var this$1 = this;
+
+ this.size += lines.length;
+ this.height += height;
+ for (var i = 0; i < this.children.length; ++i) {
+ var child = this$1.children[i], sz = child.chunkSize();
+ if (at <= sz) {
+ child.insertInner(at, lines, height);
+ if (child.lines && child.lines.length > 50) {
+ // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.
+ // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.
+ var remaining = child.lines.length % 25 + 25;
+ for (var pos = remaining; pos < child.lines.length;) {
+ var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));
+ child.height -= leaf.height;
+ this$1.children.splice(++i, 0, leaf);
+ leaf.parent = this$1;
+ }
+ child.lines = child.lines.slice(0, remaining);
+ this$1.maybeSpill();
+ }
+ break
+ }
+ at -= sz;
+ }
+ },
+
+ // When a node has grown, check whether it should be split.
+ maybeSpill: function() {
+ if (this.children.length <= 10) { return }
+ var me = this;
+ do {
+ var spilled = me.children.splice(me.children.length - 5, 5);
+ var sibling = new BranchChunk(spilled);
+ if (!me.parent) { // Become the parent node
+ var copy = new BranchChunk(me.children);
+ copy.parent = me;
+ me.children = [copy, sibling];
+ me = copy;
+ } else {
+ me.size -= sibling.size;
+ me.height -= sibling.height;
+ var myIndex = indexOf(me.parent.children, me);
+ me.parent.children.splice(myIndex + 1, 0, sibling);
+ }
+ sibling.parent = me.parent;
+ } while (me.children.length > 10)
+ me.parent.maybeSpill();
+ },
+
+ iterN: function(at, n, op) {
+ var this$1 = this;
+
+ for (var i = 0; i < this.children.length; ++i) {
+ var child = this$1.children[i], sz = child.chunkSize();
+ if (at < sz) {
+ var used = Math.min(n, sz - at);
+ if (child.iterN(at, used, op)) { return true }
+ if ((n -= used) == 0) { break }
+ at = 0;
+ } else { at -= sz; }
+ }
+ }
+ };
+
+ // Line widgets are block elements displayed above or below a line.
+
+ var LineWidget = function(doc, node, options) {
+ var this$1 = this;
+
+ if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))
+ { this$1[opt] = options[opt]; } } }
+ this.doc = doc;
+ this.node = node;
+ };
+
+ LineWidget.prototype.clear = function () {
+ var this$1 = this;
+
+ var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);
+ if (no == null || !ws) { return }
+ for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1); } }
+ if (!ws.length) { line.widgets = null; }
+ var height = widgetHeight(this);
+ updateLineHeight(line, Math.max(0, line.height - height));
+ if (cm) {
+ runInOp(cm, function () {
+ adjustScrollWhenAboveVisible(cm, line, -height);
+ regLineChange(cm, no, "widget");
+ });
+ signalLater(cm, "lineWidgetCleared", cm, this, no);
+ }
+ };
+
+ LineWidget.prototype.changed = function () {
+ var this$1 = this;
+
+ var oldH = this.height, cm = this.doc.cm, line = this.line;
+ this.height = null;
+ var diff = widgetHeight(this) - oldH;
+ if (!diff) { return }
+ if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }
+ if (cm) {
+ runInOp(cm, function () {
+ cm.curOp.forceUpdate = true;
+ adjustScrollWhenAboveVisible(cm, line, diff);
+ signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line));
+ });
+ }
+ };
+ eventMixin(LineWidget);
+
+ function adjustScrollWhenAboveVisible(cm, line, diff) {
+ if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))
+ { addToScrollTop(cm, diff); }
+ }
+
+ function addLineWidget(doc, handle, node, options) {
+ var widget = new LineWidget(doc, node, options);
+ var cm = doc.cm;
+ if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }
+ changeLine(doc, handle, "widget", function (line) {
+ var widgets = line.widgets || (line.widgets = []);
+ if (widget.insertAt == null) { widgets.push(widget); }
+ else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); }
+ widget.line = line;
+ if (cm && !lineIsHidden(doc, line)) {
+ var aboveVisible = heightAtLine(line) < doc.scrollTop;
+ updateLineHeight(line, line.height + widgetHeight(widget));
+ if (aboveVisible) { addToScrollTop(cm, widget.height); }
+ cm.curOp.forceUpdate = true;
+ }
+ return true
+ });
+ if (cm) { signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); }
+ return widget
+ }
+
+ // TEXTMARKERS
+
+ // Created with markText and setBookmark methods. A TextMarker is a
+ // handle that can be used to clear or find a marked position in the
+ // document. Line objects hold arrays (markedSpans) containing
+ // {from, to, marker} object pointing to such marker objects, and
+ // indicating that such a marker is present on that line. Multiple
+ // lines may point to the same marker when it spans across lines.
+ // The spans will have null for their from/to properties when the
+ // marker continues beyond the start/end of the line. Markers have
+ // links back to the lines they currently touch.
+
+ // Collapsed markers have unique ids, in order to be able to order
+ // them, which is needed for uniquely determining an outer marker
+ // when they overlap (they may nest, but not partially overlap).
+ var nextMarkerId = 0;
+
+ var TextMarker = function(doc, type) {
+ this.lines = [];
+ this.type = type;
+ this.doc = doc;
+ this.id = ++nextMarkerId;
+ };
+
+ // Clear the marker.
+ TextMarker.prototype.clear = function () {
+ var this$1 = this;
+
+ if (this.explicitlyCleared) { return }
+ var cm = this.doc.cm, withOp = cm && !cm.curOp;
+ if (withOp) { startOperation(cm); }
+ if (hasHandler(this, "clear")) {
+ var found = this.find();
+ if (found) { signalLater(this, "clear", found.from, found.to); }
+ }
+ var min = null, max = null;
+ for (var i = 0; i < this.lines.length; ++i) {
+ var line = this$1.lines[i];
+ var span = getMarkedSpanFor(line.markedSpans, this$1);
+ if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), "text"); }
+ else if (cm) {
+ if (span.to != null) { max = lineNo(line); }
+ if (span.from != null) { min = lineNo(line); }
+ }
+ line.markedSpans = removeMarkedSpan(line.markedSpans, span);
+ if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm)
+ { updateLineHeight(line, textHeight(cm.display)); }
+ }
+ if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {
+ var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual);
+ if (len > cm.display.maxLineLength) {
+ cm.display.maxLine = visual;
+ cm.display.maxLineLength = len;
+ cm.display.maxLineChanged = true;
+ }
+ } }
+
+ if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }
+ this.lines.length = 0;
+ this.explicitlyCleared = true;
+ if (this.atomic && this.doc.cantEdit) {
+ this.doc.cantEdit = false;
+ if (cm) { reCheckSelection(cm.doc); }
+ }
+ if (cm) { signalLater(cm, "markerCleared", cm, this, min, max); }
+ if (withOp) { endOperation(cm); }
+ if (this.parent) { this.parent.clear(); }
+ };
+
+ // Find the position of the marker in the document. Returns a {from,
+ // to} object by default. Side can be passed to get a specific side
+ // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the
+ // Pos objects returned contain a line object, rather than a line
+ // number (used to prevent looking up the same line twice).
+ TextMarker.prototype.find = function (side, lineObj) {
+ var this$1 = this;
+
+ if (side == null && this.type == "bookmark") { side = 1; }
+ var from, to;
+ for (var i = 0; i < this.lines.length; ++i) {
+ var line = this$1.lines[i];
+ var span = getMarkedSpanFor(line.markedSpans, this$1);
+ if (span.from != null) {
+ from = Pos(lineObj ? line : lineNo(line), span.from);
+ if (side == -1) { return from }
+ }
+ if (span.to != null) {
+ to = Pos(lineObj ? line : lineNo(line), span.to);
+ if (side == 1) { return to }
+ }
+ }
+ return from && {from: from, to: to}
+ };
+
+ // Signals that the marker's widget changed, and surrounding layout
+ // should be recomputed.
+ TextMarker.prototype.changed = function () {
+ var this$1 = this;
+
+ var pos = this.find(-1, true), widget = this, cm = this.doc.cm;
+ if (!pos || !cm) { return }
+ runInOp(cm, function () {
+ var line = pos.line, lineN = lineNo(pos.line);
+ var view = findViewForLine(cm, lineN);
+ if (view) {
+ clearLineMeasurementCacheFor(view);
+ cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;
+ }
+ cm.curOp.updateMaxLine = true;
+ if (!lineIsHidden(widget.doc, line) && widget.height != null) {
+ var oldHeight = widget.height;
+ widget.height = null;
+ var dHeight = widgetHeight(widget) - oldHeight;
+ if (dHeight)
+ { updateLineHeight(line, line.height + dHeight); }
+ }
+ signalLater(cm, "markerChanged", cm, this$1);
+ });
+ };
+
+ TextMarker.prototype.attachLine = function (line) {
+ if (!this.lines.length && this.doc.cm) {
+ var op = this.doc.cm.curOp;
+ if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)
+ { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }
+ }
+ this.lines.push(line);
+ };
+
+ TextMarker.prototype.detachLine = function (line) {
+ this.lines.splice(indexOf(this.lines, line), 1);
+ if (!this.lines.length && this.doc.cm) {
+ var op = this.doc.cm.curOp
+ ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);
+ }
+ };
+ eventMixin(TextMarker);
+
+ // Create a marker, wire it up to the right lines, and
+ function markText(doc, from, to, options, type) {
+ // Shared markers (across linked documents) are handled separately
+ // (markTextShared will call out to this again, once per
+ // document).
+ if (options && options.shared) { return markTextShared(doc, from, to, options, type) }
+ // Ensure we are in an operation.
+ if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }
+
+ var marker = new TextMarker(doc, type), diff = cmp(from, to);
+ if (options) { copyObj(options, marker, false); }
+ // Don't connect empty markers unless clearWhenEmpty is false
+ if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)
+ { return marker }
+ if (marker.replacedWith) {
+ // Showing up as a widget implies collapsed (widget replaces text)
+ marker.collapsed = true;
+ marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget");
+ if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true"); }
+ if (options.insertLeft) { marker.widgetNode.insertLeft = true; }
+ }
+ if (marker.collapsed) {
+ if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||
+ from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))
+ { throw new Error("Inserting collapsed marker partially overlapping an existing one") }
+ seeCollapsedSpans();
+ }
+
+ if (marker.addToHistory)
+ { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); }
+
+ var curLine = from.line, cm = doc.cm, updateMaxLine;
+ doc.iter(curLine, to.line + 1, function (line) {
+ if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)
+ { updateMaxLine = true; }
+ if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }
+ addMarkedSpan(line, new MarkedSpan(marker,
+ curLine == from.line ? from.ch : null,
+ curLine == to.line ? to.ch : null));
+ ++curLine;
+ });
+ // lineIsHidden depends on the presence of the spans, so needs a second pass
+ if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {
+ if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }
+ }); }
+
+ if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }); }
+
+ if (marker.readOnly) {
+ seeReadOnlySpans();
+ if (doc.history.done.length || doc.history.undone.length)
+ { doc.clearHistory(); }
+ }
+ if (marker.collapsed) {
+ marker.id = ++nextMarkerId;
+ marker.atomic = true;
+ }
+ if (cm) {
+ // Sync editor state
+ if (updateMaxLine) { cm.curOp.updateMaxLine = true; }
+ if (marker.collapsed)
+ { regChange(cm, from.line, to.line + 1); }
+ else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||
+ marker.attributes || marker.title)
+ { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text"); } }
+ if (marker.atomic) { reCheckSelection(cm.doc); }
+ signalLater(cm, "markerAdded", cm, marker);
+ }
+ return marker
+ }
+
+ // SHARED TEXTMARKERS
+
+ // A shared marker spans multiple linked documents. It is
+ // implemented as a meta-marker-object controlling multiple normal
+ // markers.
+ var SharedTextMarker = function(markers, primary) {
+ var this$1 = this;
+
+ this.markers = markers;
+ this.primary = primary;
+ for (var i = 0; i < markers.length; ++i)
+ { markers[i].parent = this$1; }
+ };
+
+ SharedTextMarker.prototype.clear = function () {
+ var this$1 = this;
+
+ if (this.explicitlyCleared) { return }
+ this.explicitlyCleared = true;
+ for (var i = 0; i < this.markers.length; ++i)
+ { this$1.markers[i].clear(); }
+ signalLater(this, "clear");
+ };
+
+ SharedTextMarker.prototype.find = function (side, lineObj) {
+ return this.primary.find(side, lineObj)
+ };
+ eventMixin(SharedTextMarker);
+
+ function markTextShared(doc, from, to, options, type) {
+ options = copyObj(options);
+ options.shared = false;
+ var markers = [markText(doc, from, to, options, type)], primary = markers[0];
+ var widget = options.widgetNode;
+ linkedDocs(doc, function (doc) {
+ if (widget) { options.widgetNode = widget.cloneNode(true); }
+ markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));
+ for (var i = 0; i < doc.linked.length; ++i)
+ { if (doc.linked[i].isParent) { return } }
+ primary = lst(markers);
+ });
+ return new SharedTextMarker(markers, primary)
+ }
+
+ function findSharedMarkers(doc) {
+ return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })
+ }
+
+ function copySharedMarkers(doc, markers) {
+ for (var i = 0; i < markers.length; i++) {
+ var marker = markers[i], pos = marker.find();
+ var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);
+ if (cmp(mFrom, mTo)) {
+ var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);
+ marker.markers.push(subMark);
+ subMark.parent = marker;
+ }
+ }
+ }
+
+ function detachSharedMarkers(markers) {
+ var loop = function ( i ) {
+ var marker = markers[i], linked = [marker.primary.doc];
+ linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });
+ for (var j = 0; j < marker.markers.length; j++) {
+ var subMarker = marker.markers[j];
+ if (indexOf(linked, subMarker.doc) == -1) {
+ subMarker.parent = null;
+ marker.markers.splice(j--, 1);
+ }
+ }
+ };
+
+ for (var i = 0; i < markers.length; i++) loop( i );
+ }
+
+ var nextDocId = 0;
+ var Doc = function(text, mode, firstLine, lineSep, direction) {
+ if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }
+ if (firstLine == null) { firstLine = 0; }
+
+ BranchChunk.call(this, [new LeafChunk([new Line("", null)])]);
+ this.first = firstLine;
+ this.scrollTop = this.scrollLeft = 0;
+ this.cantEdit = false;
+ this.cleanGeneration = 1;
+ this.modeFrontier = this.highlightFrontier = firstLine;
+ var start = Pos(firstLine, 0);
+ this.sel = simpleSelection(start);
+ this.history = new History(null);
+ this.id = ++nextDocId;
+ this.modeOption = mode;
+ this.lineSep = lineSep;
+ this.direction = (direction == "rtl") ? "rtl" : "ltr";
+ this.extend = false;
+
+ if (typeof text == "string") { text = this.splitLines(text); }
+ updateDoc(this, {from: start, to: start, text: text});
+ setSelection(this, simpleSelection(start), sel_dontScroll);
+ };
+
+ Doc.prototype = createObj(BranchChunk.prototype, {
+ constructor: Doc,
+ // Iterate over the document. Supports two forms -- with only one
+ // argument, it calls that for each line in the document. With
+ // three, it iterates over the range given by the first two (with
+ // the second being non-inclusive).
+ iter: function(from, to, op) {
+ if (op) { this.iterN(from - this.first, to - from, op); }
+ else { this.iterN(this.first, this.first + this.size, from); }
+ },
+
+ // Non-public interface for adding and removing lines.
+ insert: function(at, lines) {
+ var height = 0;
+ for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }
+ this.insertInner(at - this.first, lines, height);
+ },
+ remove: function(at, n) { this.removeInner(at - this.first, n); },
+
+ // From here, the methods are part of the public interface. Most
+ // are also available from CodeMirror (editor) instances.
+
+ getValue: function(lineSep) {
+ var lines = getLines(this, this.first, this.first + this.size);
+ if (lineSep === false) { return lines }
+ return lines.join(lineSep || this.lineSeparator())
+ },
+ setValue: docMethodOp(function(code) {
+ var top = Pos(this.first, 0), last = this.first + this.size - 1;
+ makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),
+ text: this.splitLines(code), origin: "setValue", full: true}, true);
+ if (this.cm) { scrollToCoords(this.cm, 0, 0); }
+ setSelection(this, simpleSelection(top), sel_dontScroll);
+ }),
+ replaceRange: function(code, from, to, origin) {
+ from = clipPos(this, from);
+ to = to ? clipPos(this, to) : from;
+ replaceRange(this, code, from, to, origin);
+ },
+ getRange: function(from, to, lineSep) {
+ var lines = getBetween(this, clipPos(this, from), clipPos(this, to));
+ if (lineSep === false) { return lines }
+ return lines.join(lineSep || this.lineSeparator())
+ },
+
+ getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},
+
+ getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},
+ getLineNumber: function(line) {return lineNo(line)},
+
+ getLineHandleVisualStart: function(line) {
+ if (typeof line == "number") { line = getLine(this, line); }
+ return visualLine(line)
+ },
+
+ lineCount: function() {return this.size},
+ firstLine: function() {return this.first},
+ lastLine: function() {return this.first + this.size - 1},
+
+ clipPos: function(pos) {return clipPos(this, pos)},
+
+ getCursor: function(start) {
+ var range$$1 = this.sel.primary(), pos;
+ if (start == null || start == "head") { pos = range$$1.head; }
+ else if (start == "anchor") { pos = range$$1.anchor; }
+ else if (start == "end" || start == "to" || start === false) { pos = range$$1.to(); }
+ else { pos = range$$1.from(); }
+ return pos
+ },
+ listSelections: function() { return this.sel.ranges },
+ somethingSelected: function() {return this.sel.somethingSelected()},
+
+ setCursor: docMethodOp(function(line, ch, options) {
+ setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options);
+ }),
+ setSelection: docMethodOp(function(anchor, head, options) {
+ setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);
+ }),
+ extendSelection: docMethodOp(function(head, other, options) {
+ extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);
+ }),
+ extendSelections: docMethodOp(function(heads, options) {
+ extendSelections(this, clipPosArray(this, heads), options);
+ }),
+ extendSelectionsBy: docMethodOp(function(f, options) {
+ var heads = map(this.sel.ranges, f);
+ extendSelections(this, clipPosArray(this, heads), options);
+ }),
+ setSelections: docMethodOp(function(ranges, primary, options) {
+ var this$1 = this;
+
+ if (!ranges.length) { return }
+ var out = [];
+ for (var i = 0; i < ranges.length; i++)
+ { out[i] = new Range(clipPos(this$1, ranges[i].anchor),
+ clipPos(this$1, ranges[i].head)); }
+ if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }
+ setSelection(this, normalizeSelection(this.cm, out, primary), options);
+ }),
+ addSelection: docMethodOp(function(anchor, head, options) {
+ var ranges = this.sel.ranges.slice(0);
+ ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));
+ setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);
+ }),
+
+ getSelection: function(lineSep) {
+ var this$1 = this;
+
+ var ranges = this.sel.ranges, lines;
+ for (var i = 0; i < ranges.length; i++) {
+ var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());
+ lines = lines ? lines.concat(sel) : sel;
+ }
+ if (lineSep === false) { return lines }
+ else { return lines.join(lineSep || this.lineSeparator()) }
+ },
+ getSelections: function(lineSep) {
+ var this$1 = this;
+
+ var parts = [], ranges = this.sel.ranges;
+ for (var i = 0; i < ranges.length; i++) {
+ var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());
+ if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()); }
+ parts[i] = sel;
+ }
+ return parts
+ },
+ replaceSelection: function(code, collapse, origin) {
+ var dup = [];
+ for (var i = 0; i < this.sel.ranges.length; i++)
+ { dup[i] = code; }
+ this.replaceSelections(dup, collapse, origin || "+input");
+ },
+ replaceSelections: docMethodOp(function(code, collapse, origin) {
+ var this$1 = this;
+
+ var changes = [], sel = this.sel;
+ for (var i = 0; i < sel.ranges.length; i++) {
+ var range$$1 = sel.ranges[i];
+ changes[i] = {from: range$$1.from(), to: range$$1.to(), text: this$1.splitLines(code[i]), origin: origin};
+ }
+ var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse);
+ for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)
+ { makeChange(this$1, changes[i$1]); }
+ if (newSel) { setSelectionReplaceHistory(this, newSel); }
+ else if (this.cm) { ensureCursorVisible(this.cm); }
+ }),
+ undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}),
+ redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}),
+ undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}),
+ redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}),
+
+ setExtending: function(val) {this.extend = val;},
+ getExtending: function() {return this.extend},
+
+ historySize: function() {
+ var hist = this.history, done = 0, undone = 0;
+ for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }
+ for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }
+ return {undo: done, redo: undone}
+ },
+ clearHistory: function() {this.history = new History(this.history.maxGeneration);},
+
+ markClean: function() {
+ this.cleanGeneration = this.changeGeneration(true);
+ },
+ changeGeneration: function(forceSplit) {
+ if (forceSplit)
+ { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }
+ return this.history.generation
+ },
+ isClean: function (gen) {
+ return this.history.generation == (gen || this.cleanGeneration)
+ },
+
+ getHistory: function() {
+ return {done: copyHistoryArray(this.history.done),
+ undone: copyHistoryArray(this.history.undone)}
+ },
+ setHistory: function(histData) {
+ var hist = this.history = new History(this.history.maxGeneration);
+ hist.done = copyHistoryArray(histData.done.slice(0), null, true);
+ hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);
+ },
+
+ setGutterMarker: docMethodOp(function(line, gutterID, value) {
+ return changeLine(this, line, "gutter", function (line) {
+ var markers = line.gutterMarkers || (line.gutterMarkers = {});
+ markers[gutterID] = value;
+ if (!value && isEmpty(markers)) { line.gutterMarkers = null; }
+ return true
+ })
+ }),
+
+ clearGutter: docMethodOp(function(gutterID) {
+ var this$1 = this;
+
+ this.iter(function (line) {
+ if (line.gutterMarkers && line.gutterMarkers[gutterID]) {
+ changeLine(this$1, line, "gutter", function () {
+ line.gutterMarkers[gutterID] = null;
+ if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }
+ return true
+ });
+ }
+ });
+ }),
+
+ lineInfo: function(line) {
+ var n;
+ if (typeof line == "number") {
+ if (!isLine(this, line)) { return null }
+ n = line;
+ line = getLine(this, line);
+ if (!line) { return null }
+ } else {
+ n = lineNo(line);
+ if (n == null) { return null }
+ }
+ return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,
+ textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,
+ widgets: line.widgets}
+ },
+
+ addLineClass: docMethodOp(function(handle, where, cls) {
+ return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
+ var prop = where == "text" ? "textClass"
+ : where == "background" ? "bgClass"
+ : where == "gutter" ? "gutterClass" : "wrapClass";
+ if (!line[prop]) { line[prop] = cls; }
+ else if (classTest(cls).test(line[prop])) { return false }
+ else { line[prop] += " " + cls; }
+ return true
+ })
+ }),
+ removeLineClass: docMethodOp(function(handle, where, cls) {
+ return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
+ var prop = where == "text" ? "textClass"
+ : where == "background" ? "bgClass"
+ : where == "gutter" ? "gutterClass" : "wrapClass";
+ var cur = line[prop];
+ if (!cur) { return false }
+ else if (cls == null) { line[prop] = null; }
+ else {
+ var found = cur.match(classTest(cls));
+ if (!found) { return false }
+ var end = found.index + found[0].length;
+ line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null;
+ }
+ return true
+ })
+ }),
+
+ addLineWidget: docMethodOp(function(handle, node, options) {
+ return addLineWidget(this, handle, node, options)
+ }),
+ removeLineWidget: function(widget) { widget.clear(); },
+
+ markText: function(from, to, options) {
+ return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range")
+ },
+ setBookmark: function(pos, options) {
+ var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),
+ insertLeft: options && options.insertLeft,
+ clearWhenEmpty: false, shared: options && options.shared,
+ handleMouseEvents: options && options.handleMouseEvents};
+ pos = clipPos(this, pos);
+ return markText(this, pos, pos, realOpts, "bookmark")
+ },
+ findMarksAt: function(pos) {
+ pos = clipPos(this, pos);
+ var markers = [], spans = getLine(this, pos.line).markedSpans;
+ if (spans) { for (var i = 0; i < spans.length; ++i) {
+ var span = spans[i];
+ if ((span.from == null || span.from <= pos.ch) &&
+ (span.to == null || span.to >= pos.ch))
+ { markers.push(span.marker.parent || span.marker); }
+ } }
+ return markers
+ },
+ findMarks: function(from, to, filter) {
+ from = clipPos(this, from); to = clipPos(this, to);
+ var found = [], lineNo$$1 = from.line;
+ this.iter(from.line, to.line + 1, function (line) {
+ var spans = line.markedSpans;
+ if (spans) { for (var i = 0; i < spans.length; i++) {
+ var span = spans[i];
+ if (!(span.to != null && lineNo$$1 == from.line && from.ch >= span.to ||
+ span.from == null && lineNo$$1 != from.line ||
+ span.from != null && lineNo$$1 == to.line && span.from >= to.ch) &&
+ (!filter || filter(span.marker)))
+ { found.push(span.marker.parent || span.marker); }
+ } }
+ ++lineNo$$1;
+ });
+ return found
+ },
+ getAllMarks: function() {
+ var markers = [];
+ this.iter(function (line) {
+ var sps = line.markedSpans;
+ if (sps) { for (var i = 0; i < sps.length; ++i)
+ { if (sps[i].from != null) { markers.push(sps[i].marker); } } }
+ });
+ return markers
+ },
+
+ posFromIndex: function(off) {
+ var ch, lineNo$$1 = this.first, sepSize = this.lineSeparator().length;
+ this.iter(function (line) {
+ var sz = line.text.length + sepSize;
+ if (sz > off) { ch = off; return true }
+ off -= sz;
+ ++lineNo$$1;
+ });
+ return clipPos(this, Pos(lineNo$$1, ch))
+ },
+ indexFromPos: function (coords) {
+ coords = clipPos(this, coords);
+ var index = coords.ch;
+ if (coords.line < this.first || coords.ch < 0) { return 0 }
+ var sepSize = this.lineSeparator().length;
+ this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value
+ index += line.text.length + sepSize;
+ });
+ return index
+ },
+
+ copy: function(copyHistory) {
+ var doc = new Doc(getLines(this, this.first, this.first + this.size),
+ this.modeOption, this.first, this.lineSep, this.direction);
+ doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;
+ doc.sel = this.sel;
+ doc.extend = false;
+ if (copyHistory) {
+ doc.history.undoDepth = this.history.undoDepth;
+ doc.setHistory(this.getHistory());
+ }
+ return doc
+ },
+
+ linkedDoc: function(options) {
+ if (!options) { options = {}; }
+ var from = this.first, to = this.first + this.size;
+ if (options.from != null && options.from > from) { from = options.from; }
+ if (options.to != null && options.to < to) { to = options.to; }
+ var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);
+ if (options.sharedHist) { copy.history = this.history
+ ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});
+ copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];
+ copySharedMarkers(copy, findSharedMarkers(this));
+ return copy
+ },
+ unlinkDoc: function(other) {
+ var this$1 = this;
+
+ if (other instanceof CodeMirror) { other = other.doc; }
+ if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {
+ var link = this$1.linked[i];
+ if (link.doc != other) { continue }
+ this$1.linked.splice(i, 1);
+ other.unlinkDoc(this$1);
+ detachSharedMarkers(findSharedMarkers(this$1));
+ break
+ } }
+ // If the histories were shared, split them again
+ if (other.history == this.history) {
+ var splitIds = [other.id];
+ linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);
+ other.history = new History(null);
+ other.history.done = copyHistoryArray(this.history.done, splitIds);
+ other.history.undone = copyHistoryArray(this.history.undone, splitIds);
+ }
+ },
+ iterLinkedDocs: function(f) {linkedDocs(this, f);},
+
+ getMode: function() {return this.mode},
+ getEditor: function() {return this.cm},
+
+ splitLines: function(str) {
+ if (this.lineSep) { return str.split(this.lineSep) }
+ return splitLinesAuto(str)
+ },
+ lineSeparator: function() { return this.lineSep || "\n" },
+
+ setDirection: docMethodOp(function (dir) {
+ if (dir != "rtl") { dir = "ltr"; }
+ if (dir == this.direction) { return }
+ this.direction = dir;
+ this.iter(function (line) { return line.order = null; });
+ if (this.cm) { directionChanged(this.cm); }
+ })
+ });
+
+ // Public alias.
+ Doc.prototype.eachLine = Doc.prototype.iter;
+
+ // Kludge to work around strange IE behavior where it'll sometimes
+ // re-fire a series of drag-related events right after the drop (#1551)
+ var lastDrop = 0;
+
+ function onDrop(e) {
+ var cm = this;
+ clearDragCursor(cm);
+ if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))
+ { return }
+ e_preventDefault(e);
+ if (ie) { lastDrop = +new Date; }
+ var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;
+ if (!pos || cm.isReadOnly()) { return }
+ // Might be a file drop, in which case we simply extract the text
+ // and insert it.
+ if (files && files.length && window.FileReader && window.File) {
+ var n = files.length, text = Array(n), read = 0;
+ var loadFile = function (file, i) {
+ if (cm.options.allowDropFileTypes &&
+ indexOf(cm.options.allowDropFileTypes, file.type) == -1)
+ { return }
+
+ var reader = new FileReader;
+ reader.onload = operation(cm, function () {
+ var content = reader.result;
+ if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { content = ""; }
+ text[i] = content;
+ if (++read == n) {
+ pos = clipPos(cm.doc, pos);
+ var change = {from: pos, to: pos,
+ text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),
+ origin: "paste"};
+ makeChange(cm.doc, change);
+ setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)));
+ }
+ });
+ reader.readAsText(file);
+ };
+ for (var i = 0; i < n; ++i) { loadFile(files[i], i); }
+ } else { // Normal drop
+ // Don't do a replace if the drop happened inside of the selected text.
+ if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {
+ cm.state.draggingText(e);
+ // Ensure the editor is re-focused
+ setTimeout(function () { return cm.display.input.focus(); }, 20);
+ return
+ }
+ try {
+ var text$1 = e.dataTransfer.getData("Text");
+ if (text$1) {
+ var selected;
+ if (cm.state.draggingText && !cm.state.draggingText.copy)
+ { selected = cm.listSelections(); }
+ setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));
+ if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)
+ { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag"); } }
+ cm.replaceSelection(text$1, "around", "paste");
+ cm.display.input.focus();
+ }
+ }
+ catch(e){}
+ }
+ }
+
+ function onDragStart(cm, e) {
+ if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }
+ if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }
+
+ e.dataTransfer.setData("Text", cm.getSelection());
+ e.dataTransfer.effectAllowed = "copyMove";
+
+ // Use dummy image instead of default browsers image.
+ // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.
+ if (e.dataTransfer.setDragImage && !safari) {
+ var img = elt("img", null, null, "position: fixed; left: 0; top: 0;");
+ img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
+ if (presto) {
+ img.width = img.height = 1;
+ cm.display.wrapper.appendChild(img);
+ // Force a relayout, or Opera won't use our image for some obscure reason
+ img._top = img.offsetTop;
+ }
+ e.dataTransfer.setDragImage(img, 0, 0);
+ if (presto) { img.parentNode.removeChild(img); }
+ }
+ }
+
+ function onDragOver(cm, e) {
+ var pos = posFromMouse(cm, e);
+ if (!pos) { return }
+ var frag = document.createDocumentFragment();
+ drawSelectionCursor(cm, pos, frag);
+ if (!cm.display.dragCursor) {
+ cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors");
+ cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);
+ }
+ removeChildrenAndAdd(cm.display.dragCursor, frag);
+ }
+
+ function clearDragCursor(cm) {
+ if (cm.display.dragCursor) {
+ cm.display.lineSpace.removeChild(cm.display.dragCursor);
+ cm.display.dragCursor = null;
+ }
+ }
+
+ // These must be handled carefully, because naively registering a
+ // handler for each editor will cause the editors to never be
+ // garbage collected.
+
+ function forEachCodeMirror(f) {
+ if (!document.getElementsByClassName) { return }
+ var byClass = document.getElementsByClassName("CodeMirror"), editors = [];
+ for (var i = 0; i < byClass.length; i++) {
+ var cm = byClass[i].CodeMirror;
+ if (cm) { editors.push(cm); }
+ }
+ if (editors.length) { editors[0].operation(function () {
+ for (var i = 0; i < editors.length; i++) { f(editors[i]); }
+ }); }
+ }
+
+ var globalsRegistered = false;
+ function ensureGlobalHandlers() {
+ if (globalsRegistered) { return }
+ registerGlobalHandlers();
+ globalsRegistered = true;
+ }
+ function registerGlobalHandlers() {
+ // When the window resizes, we need to refresh active editors.
+ var resizeTimer;
+ on(window, "resize", function () {
+ if (resizeTimer == null) { resizeTimer = setTimeout(function () {
+ resizeTimer = null;
+ forEachCodeMirror(onResize);
+ }, 100); }
+ });
+ // When the window loses focus, we want to show the editor as blurred
+ on(window, "blur", function () { return forEachCodeMirror(onBlur); });
+ }
+ // Called when the window resizes
+ function onResize(cm) {
+ var d = cm.display;
+ // Might be a text scaling operation, clear size caches.
+ d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
+ d.scrollbarsClipped = false;
+ cm.setSize();
+ }
+
+ var keyNames = {
+ 3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt",
+ 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End",
+ 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert",
+ 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod",
+ 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 145: "ScrollLock",
+ 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\",
+ 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete",
+ 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"
+ };
+
+ // Number keys
+ for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }
+ // Alphabetic keys
+ for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }
+ // Function keys
+ for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; }
+
+ var keyMap = {};
+
+ keyMap.basic = {
+ "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown",
+ "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown",
+ "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore",
+ "Tab": "defaultTab", "Shift-Tab": "indentAuto",
+ "Enter": "newlineAndIndent", "Insert": "toggleOverwrite",
+ "Esc": "singleSelection"
+ };
+ // Note that the save and find-related commands aren't defined by
+ // default. User code or addons can define them. Unknown commands
+ // are simply ignored.
+ keyMap.pcDefault = {
+ "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo",
+ "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown",
+ "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd",
+ "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find",
+ "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll",
+ "Ctrl-[": "indentLess", "Ctrl-]": "indentMore",
+ "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection",
+ "fallthrough": "basic"
+ };
+ // Very basic readline/emacs-style bindings, which are standard on Mac.
+ keyMap.emacsy = {
+ "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
+ "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
+ "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore",
+ "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars",
+ "Ctrl-O": "openLine"
+ };
+ keyMap.macDefault = {
+ "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
+ "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft",
+ "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore",
+ "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find",
+ "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll",
+ "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight",
+ "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd",
+ "fallthrough": ["basic", "emacsy"]
+ };
+ keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault;
+
+ // KEYMAP DISPATCH
+
+ function normalizeKeyName(name) {
+ var parts = name.split(/-(?!$)/);
+ name = parts[parts.length - 1];
+ var alt, ctrl, shift, cmd;
+ for (var i = 0; i < parts.length - 1; i++) {
+ var mod = parts[i];
+ if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }
+ else if (/^a(lt)?$/i.test(mod)) { alt = true; }
+ else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }
+ else if (/^s(hift)?$/i.test(mod)) { shift = true; }
+ else { throw new Error("Unrecognized modifier name: " + mod) }
+ }
+ if (alt) { name = "Alt-" + name; }
+ if (ctrl) { name = "Ctrl-" + name; }
+ if (cmd) { name = "Cmd-" + name; }
+ if (shift) { name = "Shift-" + name; }
+ return name
+ }
+
+ // This is a kludge to keep keymaps mostly working as raw objects
+ // (backwards compatibility) while at the same time support features
+ // like normalization and multi-stroke key bindings. It compiles a
+ // new normalized keymap, and then updates the old object to reflect
+ // this.
+ function normalizeKeyMap(keymap) {
+ var copy = {};
+ for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {
+ var value = keymap[keyname];
+ if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }
+ if (value == "...") { delete keymap[keyname]; continue }
+
+ var keys = map(keyname.split(" "), normalizeKeyName);
+ for (var i = 0; i < keys.length; i++) {
+ var val = (void 0), name = (void 0);
+ if (i == keys.length - 1) {
+ name = keys.join(" ");
+ val = value;
+ } else {
+ name = keys.slice(0, i + 1).join(" ");
+ val = "...";
+ }
+ var prev = copy[name];
+ if (!prev) { copy[name] = val; }
+ else if (prev != val) { throw new Error("Inconsistent bindings for " + name) }
+ }
+ delete keymap[keyname];
+ } }
+ for (var prop in copy) { keymap[prop] = copy[prop]; }
+ return keymap
+ }
+
+ function lookupKey(key, map$$1, handle, context) {
+ map$$1 = getKeyMap(map$$1);
+ var found = map$$1.call ? map$$1.call(key, context) : map$$1[key];
+ if (found === false) { return "nothing" }
+ if (found === "...") { return "multi" }
+ if (found != null && handle(found)) { return "handled" }
+
+ if (map$$1.fallthrough) {
+ if (Object.prototype.toString.call(map$$1.fallthrough) != "[object Array]")
+ { return lookupKey(key, map$$1.fallthrough, handle, context) }
+ for (var i = 0; i < map$$1.fallthrough.length; i++) {
+ var result = lookupKey(key, map$$1.fallthrough[i], handle, context);
+ if (result) { return result }
+ }
+ }
+ }
+
+ // Modifier key presses don't count as 'real' key presses for the
+ // purpose of keymap fallthrough.
+ function isModifierKey(value) {
+ var name = typeof value == "string" ? value : keyNames[value.keyCode];
+ return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"
+ }
+
+ function addModifierNames(name, event, noShift) {
+ var base = name;
+ if (event.altKey && base != "Alt") { name = "Alt-" + name; }
+ if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name; }
+ if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") { name = "Cmd-" + name; }
+ if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name; }
+ return name
+ }
+
+ // Look up the name of a key as indicated by an event object.
+ function keyName(event, noShift) {
+ if (presto && event.keyCode == 34 && event["char"]) { return false }
+ var name = keyNames[event.keyCode];
+ if (name == null || event.altGraphKey) { return false }
+ // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,
+ // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)
+ if (event.keyCode == 3 && event.code) { name = event.code; }
+ return addModifierNames(name, event, noShift)
+ }
+
+ function getKeyMap(val) {
+ return typeof val == "string" ? keyMap[val] : val
+ }
+
+ // Helper for deleting text near the selection(s), used to implement
+ // backspace, delete, and similar functionality.
+ function deleteNearSelection(cm, compute) {
+ var ranges = cm.doc.sel.ranges, kill = [];
+ // Build up a set of ranges to kill first, merging overlapping
+ // ranges.
+ for (var i = 0; i < ranges.length; i++) {
+ var toKill = compute(ranges[i]);
+ while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {
+ var replaced = kill.pop();
+ if (cmp(replaced.from, toKill.from) < 0) {
+ toKill.from = replaced.from;
+ break
+ }
+ }
+ kill.push(toKill);
+ }
+ // Next, remove those actual ranges.
+ runInOp(cm, function () {
+ for (var i = kill.length - 1; i >= 0; i--)
+ { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); }
+ ensureCursorVisible(cm);
+ });
+ }
+
+ function moveCharLogically(line, ch, dir) {
+ var target = skipExtendingChars(line.text, ch + dir, dir);
+ return target < 0 || target > line.text.length ? null : target
+ }
+
+ function moveLogically(line, start, dir) {
+ var ch = moveCharLogically(line, start.ch, dir);
+ return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before")
+ }
+
+ function endOfLine(visually, cm, lineObj, lineNo, dir) {
+ if (visually) {
+ var order = getOrder(lineObj, cm.doc.direction);
+ if (order) {
+ var part = dir < 0 ? lst(order) : order[0];
+ var moveInStorageOrder = (dir < 0) == (part.level == 1);
+ var sticky = moveInStorageOrder ? "after" : "before";
+ var ch;
+ // With a wrapped rtl chunk (possibly spanning multiple bidi parts),
+ // it could be that the last bidi part is not on the last visual line,
+ // since visual lines contain content order-consecutive chunks.
+ // Thus, in rtl, we are looking for the first (content-order) character
+ // in the rtl chunk that is on the last line (that is, the same line
+ // as the last (content-order) character).
+ if (part.level > 0 || cm.doc.direction == "rtl") {
+ var prep = prepareMeasureForLine(cm, lineObj);
+ ch = dir < 0 ? lineObj.text.length - 1 : 0;
+ var targetTop = measureCharPrepared(cm, prep, ch).top;
+ ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);
+ if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1); }
+ } else { ch = dir < 0 ? part.to : part.from; }
+ return new Pos(lineNo, ch, sticky)
+ }
+ }
+ return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after")
+ }
+
+ function moveVisually(cm, line, start, dir) {
+ var bidi = getOrder(line, cm.doc.direction);
+ if (!bidi) { return moveLogically(line, start, dir) }
+ if (start.ch >= line.text.length) {
+ start.ch = line.text.length;
+ start.sticky = "before";
+ } else if (start.ch <= 0) {
+ start.ch = 0;
+ start.sticky = "after";
+ }
+ var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];
+ if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {
+ // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,
+ // nothing interesting happens.
+ return moveLogically(line, start, dir)
+ }
+
+ var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };
+ var prep;
+ var getWrappedLineExtent = function (ch) {
+ if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }
+ prep = prep || prepareMeasureForLine(cm, line);
+ return wrappedLineExtentChar(cm, line, prep, ch)
+ };
+ var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch);
+
+ if (cm.doc.direction == "rtl" || part.level == 1) {
+ var moveInStorageOrder = (part.level == 1) == (dir < 0);
+ var ch = mv(start, moveInStorageOrder ? 1 : -1);
+ if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {
+ // Case 2: We move within an rtl part or in an rtl editor on the same visual line
+ var sticky = moveInStorageOrder ? "before" : "after";
+ return new Pos(start.line, ch, sticky)
+ }
+ }
+
+ // Case 3: Could not move within this bidi part in this visual line, so leave
+ // the current bidi part
+
+ var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {
+ var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder
+ ? new Pos(start.line, mv(ch, 1), "before")
+ : new Pos(start.line, ch, "after"); };
+
+ for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {
+ var part = bidi[partPos];
+ var moveInStorageOrder = (dir > 0) == (part.level != 1);
+ var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);
+ if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }
+ ch = moveInStorageOrder ? part.from : mv(part.to, -1);
+ if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }
+ }
+ };
+
+ // Case 3a: Look for other bidi parts on the same visual line
+ var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);
+ if (res) { return res }
+
+ // Case 3b: Look for other bidi parts on the next visual line
+ var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);
+ if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {
+ res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));
+ if (res) { return res }
+ }
+
+ // Case 4: Nowhere to move
+ return null
+ }
+
+ // Commands are parameter-less actions that can be performed on an
+ // editor, mostly used for keybindings.
+ var commands = {
+ selectAll: selectAll,
+ singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); },
+ killLine: function (cm) { return deleteNearSelection(cm, function (range) {
+ if (range.empty()) {
+ var len = getLine(cm.doc, range.head.line).text.length;
+ if (range.head.ch == len && range.head.line < cm.lastLine())
+ { return {from: range.head, to: Pos(range.head.line + 1, 0)} }
+ else
+ { return {from: range.head, to: Pos(range.head.line, len)} }
+ } else {
+ return {from: range.from(), to: range.to()}
+ }
+ }); },
+ deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({
+ from: Pos(range.from().line, 0),
+ to: clipPos(cm.doc, Pos(range.to().line + 1, 0))
+ }); }); },
+ delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({
+ from: Pos(range.from().line, 0), to: range.from()
+ }); }); },
+ delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {
+ var top = cm.charCoords(range.head, "div").top + 5;
+ var leftPos = cm.coordsChar({left: 0, top: top}, "div");
+ return {from: leftPos, to: range.from()}
+ }); },
+ delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {
+ var top = cm.charCoords(range.head, "div").top + 5;
+ var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div");
+ return {from: range.from(), to: rightPos }
+ }); },
+ undo: function (cm) { return cm.undo(); },
+ redo: function (cm) { return cm.redo(); },
+ undoSelection: function (cm) { return cm.undoSelection(); },
+ redoSelection: function (cm) { return cm.redoSelection(); },
+ goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },
+ goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },
+ goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },
+ {origin: "+move", bias: 1}
+ ); },
+ goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },
+ {origin: "+move", bias: 1}
+ ); },
+ goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },
+ {origin: "+move", bias: -1}
+ ); },
+ goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {
+ var top = cm.cursorCoords(range.head, "div").top + 5;
+ return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div")
+ }, sel_move); },
+ goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {
+ var top = cm.cursorCoords(range.head, "div").top + 5;
+ return cm.coordsChar({left: 0, top: top}, "div")
+ }, sel_move); },
+ goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {
+ var top = cm.cursorCoords(range.head, "div").top + 5;
+ var pos = cm.coordsChar({left: 0, top: top}, "div");
+ if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) }
+ return pos
+ }, sel_move); },
+ goLineUp: function (cm) { return cm.moveV(-1, "line"); },
+ goLineDown: function (cm) { return cm.moveV(1, "line"); },
+ goPageUp: function (cm) { return cm.moveV(-1, "page"); },
+ goPageDown: function (cm) { return cm.moveV(1, "page"); },
+ goCharLeft: function (cm) { return cm.moveH(-1, "char"); },
+ goCharRight: function (cm) { return cm.moveH(1, "char"); },
+ goColumnLeft: function (cm) { return cm.moveH(-1, "column"); },
+ goColumnRight: function (cm) { return cm.moveH(1, "column"); },
+ goWordLeft: function (cm) { return cm.moveH(-1, "word"); },
+ goGroupRight: function (cm) { return cm.moveH(1, "group"); },
+ goGroupLeft: function (cm) { return cm.moveH(-1, "group"); },
+ goWordRight: function (cm) { return cm.moveH(1, "word"); },
+ delCharBefore: function (cm) { return cm.deleteH(-1, "char"); },
+ delCharAfter: function (cm) { return cm.deleteH(1, "char"); },
+ delWordBefore: function (cm) { return cm.deleteH(-1, "word"); },
+ delWordAfter: function (cm) { return cm.deleteH(1, "word"); },
+ delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); },
+ delGroupAfter: function (cm) { return cm.deleteH(1, "group"); },
+ indentAuto: function (cm) { return cm.indentSelection("smart"); },
+ indentMore: function (cm) { return cm.indentSelection("add"); },
+ indentLess: function (cm) { return cm.indentSelection("subtract"); },
+ insertTab: function (cm) { return cm.replaceSelection("\t"); },
+ insertSoftTab: function (cm) {
+ var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;
+ for (var i = 0; i < ranges.length; i++) {
+ var pos = ranges[i].from();
+ var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);
+ spaces.push(spaceStr(tabSize - col % tabSize));
+ }
+ cm.replaceSelections(spaces);
+ },
+ defaultTab: function (cm) {
+ if (cm.somethingSelected()) { cm.indentSelection("add"); }
+ else { cm.execCommand("insertTab"); }
+ },
+ // Swap the two chars left and right of each selection's head.
+ // Move cursor behind the two swapped characters afterwards.
+ //
+ // Doesn't consider line feeds a character.
+ // Doesn't scan more than one line above to find a character.
+ // Doesn't do anything on an empty line.
+ // Doesn't do anything with non-empty selections.
+ transposeChars: function (cm) { return runInOp(cm, function () {
+ var ranges = cm.listSelections(), newSel = [];
+ for (var i = 0; i < ranges.length; i++) {
+ if (!ranges[i].empty()) { continue }
+ var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;
+ if (line) {
+ if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }
+ if (cur.ch > 0) {
+ cur = new Pos(cur.line, cur.ch + 1);
+ cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),
+ Pos(cur.line, cur.ch - 2), cur, "+transpose");
+ } else if (cur.line > cm.doc.first) {
+ var prev = getLine(cm.doc, cur.line - 1).text;
+ if (prev) {
+ cur = new Pos(cur.line, 1);
+ cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +
+ prev.charAt(prev.length - 1),
+ Pos(cur.line - 1, prev.length - 1), cur, "+transpose");
+ }
+ }
+ }
+ newSel.push(new Range(cur, cur));
+ }
+ cm.setSelections(newSel);
+ }); },
+ newlineAndIndent: function (cm) { return runInOp(cm, function () {
+ var sels = cm.listSelections();
+ for (var i = sels.length - 1; i >= 0; i--)
+ { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input"); }
+ sels = cm.listSelections();
+ for (var i$1 = 0; i$1 < sels.length; i$1++)
+ { cm.indentLine(sels[i$1].from().line, null, true); }
+ ensureCursorVisible(cm);
+ }); },
+ openLine: function (cm) { return cm.replaceSelection("\n", "start"); },
+ toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }
+ };
+
+
+ function lineStart(cm, lineN) {
+ var line = getLine(cm.doc, lineN);
+ var visual = visualLine(line);
+ if (visual != line) { lineN = lineNo(visual); }
+ return endOfLine(true, cm, visual, lineN, 1)
+ }
+ function lineEnd(cm, lineN) {
+ var line = getLine(cm.doc, lineN);
+ var visual = visualLineEnd(line);
+ if (visual != line) { lineN = lineNo(visual); }
+ return endOfLine(true, cm, line, lineN, -1)
+ }
+ function lineStartSmart(cm, pos) {
+ var start = lineStart(cm, pos.line);
+ var line = getLine(cm.doc, start.line);
+ var order = getOrder(line, cm.doc.direction);
+ if (!order || order[0].level == 0) {
+ var firstNonWS = Math.max(0, line.text.search(/\S/));
+ var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;
+ return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)
+ }
+ return start
+ }
+
+ // Run a handler that was bound to a key.
+ function doHandleBinding(cm, bound, dropShift) {
+ if (typeof bound == "string") {
+ bound = commands[bound];
+ if (!bound) { return false }
+ }
+ // Ensure previous input has been read, so that the handler sees a
+ // consistent view of the document
+ cm.display.input.ensurePolled();
+ var prevShift = cm.display.shift, done = false;
+ try {
+ if (cm.isReadOnly()) { cm.state.suppressEdits = true; }
+ if (dropShift) { cm.display.shift = false; }
+ done = bound(cm) != Pass;
+ } finally {
+ cm.display.shift = prevShift;
+ cm.state.suppressEdits = false;
+ }
+ return done
+ }
+
+ function lookupKeyForEditor(cm, name, handle) {
+ for (var i = 0; i < cm.state.keyMaps.length; i++) {
+ var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);
+ if (result) { return result }
+ }
+ return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))
+ || lookupKey(name, cm.options.keyMap, handle, cm)
+ }
+
+ // Note that, despite the name, this function is also used to check
+ // for bound mouse clicks.
+
+ var stopSeq = new Delayed;
+
+ function dispatchKey(cm, name, e, handle) {
+ var seq = cm.state.keySeq;
+ if (seq) {
+ if (isModifierKey(name)) { return "handled" }
+ if (/\'$/.test(name))
+ { cm.state.keySeq = null; }
+ else
+ { stopSeq.set(50, function () {
+ if (cm.state.keySeq == seq) {
+ cm.state.keySeq = null;
+ cm.display.input.reset();
+ }
+ }); }
+ if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { return true }
+ }
+ return dispatchKeyInner(cm, name, e, handle)
+ }
+
+ function dispatchKeyInner(cm, name, e, handle) {
+ var result = lookupKeyForEditor(cm, name, handle);
+
+ if (result == "multi")
+ { cm.state.keySeq = name; }
+ if (result == "handled")
+ { signalLater(cm, "keyHandled", cm, name, e); }
+
+ if (result == "handled" || result == "multi") {
+ e_preventDefault(e);
+ restartBlink(cm);
+ }
+
+ return !!result
+ }
+
+ // Handle a key from the keydown event.
+ function handleKeyBinding(cm, e) {
+ var name = keyName(e, true);
+ if (!name) { return false }
+
+ if (e.shiftKey && !cm.state.keySeq) {
+ // First try to resolve full name (including 'Shift-'). Failing
+ // that, see if there is a cursor-motion command (starting with
+ // 'go') bound to the keyname without 'Shift-'.
+ return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); })
+ || dispatchKey(cm, name, e, function (b) {
+ if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion)
+ { return doHandleBinding(cm, b) }
+ })
+ } else {
+ return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })
+ }
+ }
+
+ // Handle a key from the keypress event
+ function handleCharBinding(cm, e, ch) {
+ return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); })
+ }
+
+ var lastStoppedKey = null;
+ function onKeyDown(e) {
+ var cm = this;
+ cm.curOp.focus = activeElt();
+ if (signalDOMEvent(cm, e)) { return }
+ // IE does strange things with escape.
+ if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }
+ var code = e.keyCode;
+ cm.display.shift = code == 16 || e.shiftKey;
+ var handled = handleKeyBinding(cm, e);
+ if (presto) {
+ lastStoppedKey = handled ? code : null;
+ // Opera has no cut event... we try to at least catch the key combo
+ if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))
+ { cm.replaceSelection("", null, "cut"); }
+ }
+
+ // Turn mouse into crosshair when Alt is held on Mac.
+ if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className))
+ { showCrossHair(cm); }
+ }
+
+ function showCrossHair(cm) {
+ var lineDiv = cm.display.lineDiv;
+ addClass(lineDiv, "CodeMirror-crosshair");
+
+ function up(e) {
+ if (e.keyCode == 18 || !e.altKey) {
+ rmClass(lineDiv, "CodeMirror-crosshair");
+ off(document, "keyup", up);
+ off(document, "mouseover", up);
+ }
+ }
+ on(document, "keyup", up);
+ on(document, "mouseover", up);
+ }
+
+ function onKeyUp(e) {
+ if (e.keyCode == 16) { this.doc.sel.shift = false; }
+ signalDOMEvent(this, e);
+ }
+
+ function onKeyPress(e) {
+ var cm = this;
+ if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }
+ var keyCode = e.keyCode, charCode = e.charCode;
+ if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}
+ if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }
+ var ch = String.fromCharCode(charCode == null ? keyCode : charCode);
+ // Some browsers fire keypress events for backspace
+ if (ch == "\x08") { return }
+ if (handleCharBinding(cm, e, ch)) { return }
+ cm.display.input.onKeyPress(e);
+ }
+
+ var DOUBLECLICK_DELAY = 400;
+
+ var PastClick = function(time, pos, button) {
+ this.time = time;
+ this.pos = pos;
+ this.button = button;
+ };
+
+ PastClick.prototype.compare = function (time, pos, button) {
+ return this.time + DOUBLECLICK_DELAY > time &&
+ cmp(pos, this.pos) == 0 && button == this.button
+ };
+
+ var lastClick, lastDoubleClick;
+ function clickRepeat(pos, button) {
+ var now = +new Date;
+ if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {
+ lastClick = lastDoubleClick = null;
+ return "triple"
+ } else if (lastClick && lastClick.compare(now, pos, button)) {
+ lastDoubleClick = new PastClick(now, pos, button);
+ lastClick = null;
+ return "double"
+ } else {
+ lastClick = new PastClick(now, pos, button);
+ lastDoubleClick = null;
+ return "single"
+ }
+ }
+
+ // A mouse down can be a single click, double click, triple click,
+ // start of selection drag, start of text drag, new cursor
+ // (ctrl-click), rectangle drag (alt-drag), or xwin
+ // middle-click-paste. Or it might be a click on something we should
+ // not interfere with, such as a scrollbar or widget.
+ function onMouseDown(e) {
+ var cm = this, display = cm.display;
+ if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }
+ display.input.ensurePolled();
+ display.shift = e.shiftKey;
+
+ if (eventInWidget(display, e)) {
+ if (!webkit) {
+ // Briefly turn off draggability, to allow widgets to do
+ // normal dragging things.
+ display.scroller.draggable = false;
+ setTimeout(function () { return display.scroller.draggable = true; }, 100);
+ }
+ return
+ }
+ if (clickInGutter(cm, e)) { return }
+ var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single";
+ window.focus();
+
+ // #3261: make sure, that we're not starting a second selection
+ if (button == 1 && cm.state.selectingText)
+ { cm.state.selectingText(e); }
+
+ if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }
+
+ if (button == 1) {
+ if (pos) { leftButtonDown(cm, pos, repeat, e); }
+ else if (e_target(e) == display.scroller) { e_preventDefault(e); }
+ } else if (button == 2) {
+ if (pos) { extendSelection(cm.doc, pos); }
+ setTimeout(function () { return display.input.focus(); }, 20);
+ } else if (button == 3) {
+ if (captureRightClick) { cm.display.input.onContextMenu(e); }
+ else { delayBlurEvent(cm); }
+ }
+ }
+
+ function handleMappedButton(cm, button, pos, repeat, event) {
+ var name = "Click";
+ if (repeat == "double") { name = "Double" + name; }
+ else if (repeat == "triple") { name = "Triple" + name; }
+ name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name;
+
+ return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {
+ if (typeof bound == "string") { bound = commands[bound]; }
+ if (!bound) { return false }
+ var done = false;
+ try {
+ if (cm.isReadOnly()) { cm.state.suppressEdits = true; }
+ done = bound(cm, pos) != Pass;
+ } finally {
+ cm.state.suppressEdits = false;
+ }
+ return done
+ })
+ }
+
+ function configureMouse(cm, repeat, event) {
+ var option = cm.getOption("configureMouse");
+ var value = option ? option(cm, repeat, event) : {};
+ if (value.unit == null) {
+ var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;
+ value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line";
+ }
+ if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }
+ if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }
+ if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }
+ return value
+ }
+
+ function leftButtonDown(cm, pos, repeat, event) {
+ if (ie) { setTimeout(bind(ensureFocus, cm), 0); }
+ else { cm.curOp.focus = activeElt(); }
+
+ var behavior = configureMouse(cm, repeat, event);
+
+ var sel = cm.doc.sel, contained;
+ if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&
+ repeat == "single" && (contained = sel.contains(pos)) > -1 &&
+ (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&
+ (cmp(contained.to(), pos) > 0 || pos.xRel < 0))
+ { leftButtonStartDrag(cm, event, pos, behavior); }
+ else
+ { leftButtonSelect(cm, event, pos, behavior); }
+ }
+
+ // Start a text drag. When it ends, see if any dragging actually
+ // happen, and treat as a click if it didn't.
+ function leftButtonStartDrag(cm, event, pos, behavior) {
+ var display = cm.display, moved = false;
+ var dragEnd = operation(cm, function (e) {
+ if (webkit) { display.scroller.draggable = false; }
+ cm.state.draggingText = false;
+ off(display.wrapper.ownerDocument, "mouseup", dragEnd);
+ off(display.wrapper.ownerDocument, "mousemove", mouseMove);
+ off(display.scroller, "dragstart", dragStart);
+ off(display.scroller, "drop", dragEnd);
+ if (!moved) {
+ e_preventDefault(e);
+ if (!behavior.addNew)
+ { extendSelection(cm.doc, pos, null, null, behavior.extend); }
+ // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)
+ if (webkit || ie && ie_version == 9)
+ { setTimeout(function () {display.wrapper.ownerDocument.body.focus(); display.input.focus();}, 20); }
+ else
+ { display.input.focus(); }
+ }
+ });
+ var mouseMove = function(e2) {
+ moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;
+ };
+ var dragStart = function () { return moved = true; };
+ // Let the drag handler handle this.
+ if (webkit) { display.scroller.draggable = true; }
+ cm.state.draggingText = dragEnd;
+ dragEnd.copy = !behavior.moveOnDrag;
+ // IE's approach to draggable
+ if (display.scroller.dragDrop) { display.scroller.dragDrop(); }
+ on(display.wrapper.ownerDocument, "mouseup", dragEnd);
+ on(display.wrapper.ownerDocument, "mousemove", mouseMove);
+ on(display.scroller, "dragstart", dragStart);
+ on(display.scroller, "drop", dragEnd);
+
+ delayBlurEvent(cm);
+ setTimeout(function () { return display.input.focus(); }, 20);
+ }
+
+ function rangeForUnit(cm, pos, unit) {
+ if (unit == "char") { return new Range(pos, pos) }
+ if (unit == "word") { return cm.findWordAt(pos) }
+ if (unit == "line") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }
+ var result = unit(cm, pos);
+ return new Range(result.from, result.to)
+ }
+
+ // Normal selection, as opposed to text dragging.
+ function leftButtonSelect(cm, event, start, behavior) {
+ var display = cm.display, doc = cm.doc;
+ e_preventDefault(event);
+
+ var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;
+ if (behavior.addNew && !behavior.extend) {
+ ourIndex = doc.sel.contains(start);
+ if (ourIndex > -1)
+ { ourRange = ranges[ourIndex]; }
+ else
+ { ourRange = new Range(start, start); }
+ } else {
+ ourRange = doc.sel.primary();
+ ourIndex = doc.sel.primIndex;
+ }
+
+ if (behavior.unit == "rectangle") {
+ if (!behavior.addNew) { ourRange = new Range(start, start); }
+ start = posFromMouse(cm, event, true, true);
+ ourIndex = -1;
+ } else {
+ var range$$1 = rangeForUnit(cm, start, behavior.unit);
+ if (behavior.extend)
+ { ourRange = extendRange(ourRange, range$$1.anchor, range$$1.head, behavior.extend); }
+ else
+ { ourRange = range$$1; }
+ }
+
+ if (!behavior.addNew) {
+ ourIndex = 0;
+ setSelection(doc, new Selection([ourRange], 0), sel_mouse);
+ startSel = doc.sel;
+ } else if (ourIndex == -1) {
+ ourIndex = ranges.length;
+ setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),
+ {scroll: false, origin: "*mouse"});
+ } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) {
+ setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),
+ {scroll: false, origin: "*mouse"});
+ startSel = doc.sel;
+ } else {
+ replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);
+ }
+
+ var lastPos = start;
+ function extendTo(pos) {
+ if (cmp(lastPos, pos) == 0) { return }
+ lastPos = pos;
+
+ if (behavior.unit == "rectangle") {
+ var ranges = [], tabSize = cm.options.tabSize;
+ var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);
+ var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);
+ var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);
+ for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));
+ line <= end; line++) {
+ var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);
+ if (left == right)
+ { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }
+ else if (text.length > leftPos)
+ { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }
+ }
+ if (!ranges.length) { ranges.push(new Range(start, start)); }
+ setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),
+ {origin: "*mouse", scroll: false});
+ cm.scrollIntoView(pos);
+ } else {
+ var oldRange = ourRange;
+ var range$$1 = rangeForUnit(cm, pos, behavior.unit);
+ var anchor = oldRange.anchor, head;
+ if (cmp(range$$1.anchor, anchor) > 0) {
+ head = range$$1.head;
+ anchor = minPos(oldRange.from(), range$$1.anchor);
+ } else {
+ head = range$$1.anchor;
+ anchor = maxPos(oldRange.to(), range$$1.head);
+ }
+ var ranges$1 = startSel.ranges.slice(0);
+ ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));
+ setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);
+ }
+ }
+
+ var editorSize = display.wrapper.getBoundingClientRect();
+ // Used to ensure timeout re-tries don't fire when another extend
+ // happened in the meantime (clearTimeout isn't reliable -- at
+ // least on Chrome, the timeouts still happen even when cleared,
+ // if the clear happens after their scheduled firing time).
+ var counter = 0;
+
+ function extend(e) {
+ var curCount = ++counter;
+ var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle");
+ if (!cur) { return }
+ if (cmp(cur, lastPos) != 0) {
+ cm.curOp.focus = activeElt();
+ extendTo(cur);
+ var visible = visibleLines(display, doc);
+ if (cur.line >= visible.to || cur.line < visible.from)
+ { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }
+ } else {
+ var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;
+ if (outside) { setTimeout(operation(cm, function () {
+ if (counter != curCount) { return }
+ display.scroller.scrollTop += outside;
+ extend(e);
+ }), 50); }
+ }
+ }
+
+ function done(e) {
+ cm.state.selectingText = false;
+ counter = Infinity;
+ // If e is null or undefined we interpret this as someone trying
+ // to explicitly cancel the selection rather than the user
+ // letting go of the mouse button.
+ if (e) {
+ e_preventDefault(e);
+ display.input.focus();
+ }
+ off(display.wrapper.ownerDocument, "mousemove", move);
+ off(display.wrapper.ownerDocument, "mouseup", up);
+ doc.history.lastSelOrigin = null;
+ }
+
+ var move = operation(cm, function (e) {
+ if (e.buttons === 0 || !e_button(e)) { done(e); }
+ else { extend(e); }
+ });
+ var up = operation(cm, done);
+ cm.state.selectingText = up;
+ on(display.wrapper.ownerDocument, "mousemove", move);
+ on(display.wrapper.ownerDocument, "mouseup", up);
+ }
+
+ // Used when mouse-selecting to adjust the anchor to the proper side
+ // of a bidi jump depending on the visual position of the head.
+ function bidiSimplify(cm, range$$1) {
+ var anchor = range$$1.anchor;
+ var head = range$$1.head;
+ var anchorLine = getLine(cm.doc, anchor.line);
+ if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range$$1 }
+ var order = getOrder(anchorLine);
+ if (!order) { return range$$1 }
+ var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];
+ if (part.from != anchor.ch && part.to != anchor.ch) { return range$$1 }
+ var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);
+ if (boundary == 0 || boundary == order.length) { return range$$1 }
+
+ // Compute the relative visual position of the head compared to the
+ // anchor (<0 is to the left, >0 to the right)
+ var leftSide;
+ if (head.line != anchor.line) {
+ leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0;
+ } else {
+ var headIndex = getBidiPartAt(order, head.ch, head.sticky);
+ var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);
+ if (headIndex == boundary - 1 || headIndex == boundary)
+ { leftSide = dir < 0; }
+ else
+ { leftSide = dir > 0; }
+ }
+
+ var usePart = order[boundary + (leftSide ? -1 : 0)];
+ var from = leftSide == (usePart.level == 1);
+ var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before";
+ return anchor.ch == ch && anchor.sticky == sticky ? range$$1 : new Range(new Pos(anchor.line, ch, sticky), head)
+ }
+
+
+ // Determines whether an event happened in the gutter, and fires the
+ // handlers for the corresponding event.
+ function gutterEvent(cm, e, type, prevent) {
+ var mX, mY;
+ if (e.touches) {
+ mX = e.touches[0].clientX;
+ mY = e.touches[0].clientY;
+ } else {
+ try { mX = e.clientX; mY = e.clientY; }
+ catch(e) { return false }
+ }
+ if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }
+ if (prevent) { e_preventDefault(e); }
+
+ var display = cm.display;
+ var lineBox = display.lineDiv.getBoundingClientRect();
+
+ if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }
+ mY -= lineBox.top - display.viewOffset;
+
+ for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {
+ var g = display.gutters.childNodes[i];
+ if (g && g.getBoundingClientRect().right >= mX) {
+ var line = lineAtHeight(cm.doc, mY);
+ var gutter = cm.display.gutterSpecs[i];
+ signal(cm, type, cm, line, gutter.className, e);
+ return e_defaultPrevented(e)
+ }
+ }
+ }
+
+ function clickInGutter(cm, e) {
+ return gutterEvent(cm, e, "gutterClick", true)
+ }
+
+ // CONTEXT MENU HANDLING
+
+ // To make the context menu work, we need to briefly unhide the
+ // textarea (making it as unobtrusive as possible) to let the
+ // right-click take effect on it.
+ function onContextMenu(cm, e) {
+ if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }
+ if (signalDOMEvent(cm, e, "contextmenu")) { return }
+ if (!captureRightClick) { cm.display.input.onContextMenu(e); }
+ }
+
+ function contextMenuInGutter(cm, e) {
+ if (!hasHandler(cm, "gutterContextMenu")) { return false }
+ return gutterEvent(cm, e, "gutterContextMenu", false)
+ }
+
+ function themeChanged(cm) {
+ cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
+ cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-");
+ clearCaches(cm);
+ }
+
+ var Init = {toString: function(){return "CodeMirror.Init"}};
+
+ var defaults = {};
+ var optionHandlers = {};
+
+ function defineOptions(CodeMirror) {
+ var optionHandlers = CodeMirror.optionHandlers;
+
+ function option(name, deflt, handle, notOnInit) {
+ CodeMirror.defaults[name] = deflt;
+ if (handle) { optionHandlers[name] =
+ notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }
+ }
+
+ CodeMirror.defineOption = option;
+
+ // Passed to option handlers when there is no old value.
+ CodeMirror.Init = Init;
+
+ // These two are, on init, called from the constructor because they
+ // have to be initialized before the editor can start at all.
+ option("value", "", function (cm, val) { return cm.setValue(val); }, true);
+ option("mode", null, function (cm, val) {
+ cm.doc.modeOption = val;
+ loadMode(cm);
+ }, true);
+
+ option("indentUnit", 2, loadMode, true);
+ option("indentWithTabs", false);
+ option("smartIndent", true);
+ option("tabSize", 4, function (cm) {
+ resetModeState(cm);
+ clearCaches(cm);
+ regChange(cm);
+ }, true);
+
+ option("lineSeparator", null, function (cm, val) {
+ cm.doc.lineSep = val;
+ if (!val) { return }
+ var newBreaks = [], lineNo = cm.doc.first;
+ cm.doc.iter(function (line) {
+ for (var pos = 0;;) {
+ var found = line.text.indexOf(val, pos);
+ if (found == -1) { break }
+ pos = found + val.length;
+ newBreaks.push(Pos(lineNo, found));
+ }
+ lineNo++;
+ });
+ for (var i = newBreaks.length - 1; i >= 0; i--)
+ { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }
+ });
+ option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (cm, val, old) {
+ cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g");
+ if (old != Init) { cm.refresh(); }
+ });
+ option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);
+ option("electricChars", true);
+ option("inputStyle", mobile ? "contenteditable" : "textarea", function () {
+ throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME
+ }, true);
+ option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);
+ option("autocorrect", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);
+ option("autocapitalize", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);
+ option("rtlMoveVisually", !windows);
+ option("wholeLineUpdateBefore", true);
+
+ option("theme", "default", function (cm) {
+ themeChanged(cm);
+ updateGutters(cm);
+ }, true);
+ option("keyMap", "default", function (cm, val, old) {
+ var next = getKeyMap(val);
+ var prev = old != Init && getKeyMap(old);
+ if (prev && prev.detach) { prev.detach(cm, next); }
+ if (next.attach) { next.attach(cm, prev || null); }
+ });
+ option("extraKeys", null);
+ option("configureMouse", null);
+
+ option("lineWrapping", false, wrappingChanged, true);
+ option("gutters", [], function (cm, val) {
+ cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);
+ updateGutters(cm);
+ }, true);
+ option("fixedGutter", true, function (cm, val) {
+ cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0";
+ cm.refresh();
+ }, true);
+ option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true);
+ option("scrollbarStyle", "native", function (cm) {
+ initScrollbars(cm);
+ updateScrollbars(cm);
+ cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);
+ cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);
+ }, true);
+ option("lineNumbers", false, function (cm, val) {
+ cm.display.gutterSpecs = getGutters(cm.options.gutters, val);
+ updateGutters(cm);
+ }, true);
+ option("firstLineNumber", 1, updateGutters, true);
+ option("lineNumberFormatter", function (integer) { return integer; }, updateGutters, true);
+ option("showCursorWhenSelecting", false, updateSelection, true);
+
+ option("resetSelectionOnContextMenu", true);
+ option("lineWiseCopyCut", true);
+ option("pasteLinesPerSelection", true);
+ option("selectionsMayTouch", false);
+
+ option("readOnly", false, function (cm, val) {
+ if (val == "nocursor") {
+ onBlur(cm);
+ cm.display.input.blur();
+ }
+ cm.display.input.readOnlyChanged(val);
+ });
+ option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);
+ option("dragDrop", true, dragDropChanged);
+ option("allowDropFileTypes", null);
+
+ option("cursorBlinkRate", 530);
+ option("cursorScrollMargin", 0);
+ option("cursorHeight", 1, updateSelection, true);
+ option("singleCursorHeightPerLine", true, updateSelection, true);
+ option("workTime", 100);
+ option("workDelay", 100);
+ option("flattenSpans", true, resetModeState, true);
+ option("addModeClass", false, resetModeState, true);
+ option("pollInterval", 100);
+ option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });
+ option("historyEventDelay", 1250);
+ option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true);
+ option("maxHighlightLength", 10000, resetModeState, true);
+ option("moveInputWithCursor", true, function (cm, val) {
+ if (!val) { cm.display.input.resetPosition(); }
+ });
+
+ option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; });
+ option("autofocus", null);
+ option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true);
+ option("phrases", null);
+ }
+
+ function dragDropChanged(cm, value, old) {
+ var wasOn = old && old != Init;
+ if (!value != !wasOn) {
+ var funcs = cm.display.dragFunctions;
+ var toggle = value ? on : off;
+ toggle(cm.display.scroller, "dragstart", funcs.start);
+ toggle(cm.display.scroller, "dragenter", funcs.enter);
+ toggle(cm.display.scroller, "dragover", funcs.over);
+ toggle(cm.display.scroller, "dragleave", funcs.leave);
+ toggle(cm.display.scroller, "drop", funcs.drop);
+ }
+ }
+
+ function wrappingChanged(cm) {
+ if (cm.options.lineWrapping) {
+ addClass(cm.display.wrapper, "CodeMirror-wrap");
+ cm.display.sizer.style.minWidth = "";
+ cm.display.sizerWidth = null;
+ } else {
+ rmClass(cm.display.wrapper, "CodeMirror-wrap");
+ findMaxLine(cm);
+ }
+ estimateLineHeights(cm);
+ regChange(cm);
+ clearCaches(cm);
+ setTimeout(function () { return updateScrollbars(cm); }, 100);
+ }
+
+ // A CodeMirror instance represents an editor. This is the object
+ // that user code is usually dealing with.
+
+ function CodeMirror(place, options) {
+ var this$1 = this;
+
+ if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }
+
+ this.options = options = options ? copyObj(options) : {};
+ // Determine effective options based on given values and defaults.
+ copyObj(defaults, options, false);
+
+ var doc = options.value;
+ if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }
+ else if (options.mode) { doc.modeOption = options.mode; }
+ this.doc = doc;
+
+ var input = new CodeMirror.inputStyles[options.inputStyle](this);
+ var display = this.display = new Display(place, doc, input, options);
+ display.wrapper.CodeMirror = this;
+ themeChanged(this);
+ if (options.lineWrapping)
+ { this.display.wrapper.className += " CodeMirror-wrap"; }
+ initScrollbars(this);
+
+ this.state = {
+ keyMaps: [], // stores maps added by addKeyMap
+ overlays: [], // highlighting overlays, as added by addOverlay
+ modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info
+ overwrite: false,
+ delayingBlurEvent: false,
+ focused: false,
+ suppressEdits: false, // used to disable editing during key handlers when in readOnly mode
+ pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll
+ selectingText: false,
+ draggingText: false,
+ highlight: new Delayed(), // stores highlight worker timeout
+ keySeq: null, // Unfinished key sequence
+ specialChars: null
+ };
+
+ if (options.autofocus && !mobile) { display.input.focus(); }
+
+ // Override magic textarea content restore that IE sometimes does
+ // on our hidden textarea on reload
+ if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }
+
+ registerEventHandlers(this);
+ ensureGlobalHandlers();
+
+ startOperation(this);
+ this.curOp.forceUpdate = true;
+ attachDoc(this, doc);
+
+ if ((options.autofocus && !mobile) || this.hasFocus())
+ { setTimeout(bind(onFocus, this), 20); }
+ else
+ { onBlur(this); }
+
+ for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))
+ { optionHandlers[opt](this$1, options[opt], Init); } }
+ maybeUpdateLineNumberWidth(this);
+ if (options.finishInit) { options.finishInit(this); }
+ for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1); }
+ endOperation(this);
+ // Suppress optimizelegibility in Webkit, since it breaks text
+ // measuring on line wrapping boundaries.
+ if (webkit && options.lineWrapping &&
+ getComputedStyle(display.lineDiv).textRendering == "optimizelegibility")
+ { display.lineDiv.style.textRendering = "auto"; }
+ }
+
+ // The default configuration options.
+ CodeMirror.defaults = defaults;
+ // Functions to run when options are changed.
+ CodeMirror.optionHandlers = optionHandlers;
+
+ // Attach the necessary event handlers when initializing the editor
+ function registerEventHandlers(cm) {
+ var d = cm.display;
+ on(d.scroller, "mousedown", operation(cm, onMouseDown));
+ // Older IE's will not fire a second mousedown for a double click
+ if (ie && ie_version < 11)
+ { on(d.scroller, "dblclick", operation(cm, function (e) {
+ if (signalDOMEvent(cm, e)) { return }
+ var pos = posFromMouse(cm, e);
+ if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }
+ e_preventDefault(e);
+ var word = cm.findWordAt(pos);
+ extendSelection(cm.doc, word.anchor, word.head);
+ })); }
+ else
+ { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }
+ // Some browsers fire contextmenu *after* opening the menu, at
+ // which point we can't mess with it anymore. Context menu is
+ // handled in onMouseDown for these browsers.
+ on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); });
+
+ // Used to suppress mouse event handling when a touch happens
+ var touchFinished, prevTouch = {end: 0};
+ function finishTouch() {
+ if (d.activeTouch) {
+ touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);
+ prevTouch = d.activeTouch;
+ prevTouch.end = +new Date;
+ }
+ }
+ function isMouseLikeTouchEvent(e) {
+ if (e.touches.length != 1) { return false }
+ var touch = e.touches[0];
+ return touch.radiusX <= 1 && touch.radiusY <= 1
+ }
+ function farAway(touch, other) {
+ if (other.left == null) { return true }
+ var dx = other.left - touch.left, dy = other.top - touch.top;
+ return dx * dx + dy * dy > 20 * 20
+ }
+ on(d.scroller, "touchstart", function (e) {
+ if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {
+ d.input.ensurePolled();
+ clearTimeout(touchFinished);
+ var now = +new Date;
+ d.activeTouch = {start: now, moved: false,
+ prev: now - prevTouch.end <= 300 ? prevTouch : null};
+ if (e.touches.length == 1) {
+ d.activeTouch.left = e.touches[0].pageX;
+ d.activeTouch.top = e.touches[0].pageY;
+ }
+ }
+ });
+ on(d.scroller, "touchmove", function () {
+ if (d.activeTouch) { d.activeTouch.moved = true; }
+ });
+ on(d.scroller, "touchend", function (e) {
+ var touch = d.activeTouch;
+ if (touch && !eventInWidget(d, e) && touch.left != null &&
+ !touch.moved && new Date - touch.start < 300) {
+ var pos = cm.coordsChar(d.activeTouch, "page"), range;
+ if (!touch.prev || farAway(touch, touch.prev)) // Single tap
+ { range = new Range(pos, pos); }
+ else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap
+ { range = cm.findWordAt(pos); }
+ else // Triple tap
+ { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }
+ cm.setSelection(range.anchor, range.head);
+ cm.focus();
+ e_preventDefault(e);
+ }
+ finishTouch();
+ });
+ on(d.scroller, "touchcancel", finishTouch);
+
+ // Sync scrolling between fake scrollbars and real scrollable
+ // area, ensure viewport is updated when scrolling.
+ on(d.scroller, "scroll", function () {
+ if (d.scroller.clientHeight) {
+ updateScrollTop(cm, d.scroller.scrollTop);
+ setScrollLeft(cm, d.scroller.scrollLeft, true);
+ signal(cm, "scroll", cm);
+ }
+ });
+
+ // Listen to wheel events in order to try and update the viewport on time.
+ on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); });
+ on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); });
+
+ // Prevent wrapper from ever scrolling
+ on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });
+
+ d.dragFunctions = {
+ enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},
+ over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},
+ start: function (e) { return onDragStart(cm, e); },
+ drop: operation(cm, onDrop),
+ leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}
+ };
+
+ var inp = d.input.getField();
+ on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); });
+ on(inp, "keydown", operation(cm, onKeyDown));
+ on(inp, "keypress", operation(cm, onKeyPress));
+ on(inp, "focus", function (e) { return onFocus(cm, e); });
+ on(inp, "blur", function (e) { return onBlur(cm, e); });
+ }
+
+ var initHooks = [];
+ CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };
+
+ // Indent the given line. The how parameter can be "smart",
+ // "add"/null, "subtract", or "prev". When aggressive is false
+ // (typically set to true for forced single-line indents), empty
+ // lines are not indented, and places where the mode returns Pass
+ // are left alone.
+ function indentLine(cm, n, how, aggressive) {
+ var doc = cm.doc, state;
+ if (how == null) { how = "add"; }
+ if (how == "smart") {
+ // Fall back to "prev" when the mode doesn't have an indentation
+ // method.
+ if (!doc.mode.indent) { how = "prev"; }
+ else { state = getContextBefore(cm, n).state; }
+ }
+
+ var tabSize = cm.options.tabSize;
+ var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);
+ if (line.stateAfter) { line.stateAfter = null; }
+ var curSpaceString = line.text.match(/^\s*/)[0], indentation;
+ if (!aggressive && !/\S/.test(line.text)) {
+ indentation = 0;
+ how = "not";
+ } else if (how == "smart") {
+ indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);
+ if (indentation == Pass || indentation > 150) {
+ if (!aggressive) { return }
+ how = "prev";
+ }
+ }
+ if (how == "prev") {
+ if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }
+ else { indentation = 0; }
+ } else if (how == "add") {
+ indentation = curSpace + cm.options.indentUnit;
+ } else if (how == "subtract") {
+ indentation = curSpace - cm.options.indentUnit;
+ } else if (typeof how == "number") {
+ indentation = curSpace + how;
+ }
+ indentation = Math.max(0, indentation);
+
+ var indentString = "", pos = 0;
+ if (cm.options.indentWithTabs)
+ { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} }
+ if (pos < indentation) { indentString += spaceStr(indentation - pos); }
+
+ if (indentString != curSpaceString) {
+ replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input");
+ line.stateAfter = null;
+ return true
+ } else {
+ // Ensure that, if the cursor was in the whitespace at the start
+ // of the line, it is moved to the end of that space.
+ for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {
+ var range = doc.sel.ranges[i$1];
+ if (range.head.line == n && range.head.ch < curSpaceString.length) {
+ var pos$1 = Pos(n, curSpaceString.length);
+ replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));
+ break
+ }
+ }
+ }
+ }
+
+ // This will be set to a {lineWise: bool, text: [string]} object, so
+ // that, when pasting, we know what kind of selections the copied
+ // text was made out of.
+ var lastCopied = null;
+
+ function setLastCopied(newLastCopied) {
+ lastCopied = newLastCopied;
+ }
+
+ function applyTextInput(cm, inserted, deleted, sel, origin) {
+ var doc = cm.doc;
+ cm.display.shift = false;
+ if (!sel) { sel = doc.sel; }
+
+ var recent = +new Date - 200;
+ var paste = origin == "paste" || cm.state.pasteIncoming > recent;
+ var textLines = splitLinesAuto(inserted), multiPaste = null;
+ // When pasting N lines into N selections, insert one line per selection
+ if (paste && sel.ranges.length > 1) {
+ if (lastCopied && lastCopied.text.join("\n") == inserted) {
+ if (sel.ranges.length % lastCopied.text.length == 0) {
+ multiPaste = [];
+ for (var i = 0; i < lastCopied.text.length; i++)
+ { multiPaste.push(doc.splitLines(lastCopied.text[i])); }
+ }
+ } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {
+ multiPaste = map(textLines, function (l) { return [l]; });
+ }
+ }
+
+ var updateInput = cm.curOp.updateInput;
+ // Normal behavior is to insert the new text into every selection
+ for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {
+ var range$$1 = sel.ranges[i$1];
+ var from = range$$1.from(), to = range$$1.to();
+ if (range$$1.empty()) {
+ if (deleted && deleted > 0) // Handle deletion
+ { from = Pos(from.line, from.ch - deleted); }
+ else if (cm.state.overwrite && !paste) // Handle overwrite
+ { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }
+ else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted)
+ { from = to = Pos(from.line, 0); }
+ }
+ var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,
+ origin: origin || (paste ? "paste" : cm.state.cutIncoming > recent ? "cut" : "+input")};
+ makeChange(cm.doc, changeEvent);
+ signalLater(cm, "inputRead", cm, changeEvent);
+ }
+ if (inserted && !paste)
+ { triggerElectric(cm, inserted); }
+
+ ensureCursorVisible(cm);
+ if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }
+ cm.curOp.typing = true;
+ cm.state.pasteIncoming = cm.state.cutIncoming = -1;
+ }
+
+ function handlePaste(e, cm) {
+ var pasted = e.clipboardData && e.clipboardData.getData("Text");
+ if (pasted) {
+ e.preventDefault();
+ if (!cm.isReadOnly() && !cm.options.disableInput)
+ { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }); }
+ return true
+ }
+ }
+
+ function triggerElectric(cm, inserted) {
+ // When an 'electric' character is inserted, immediately trigger a reindent
+ if (!cm.options.electricChars || !cm.options.smartIndent) { return }
+ var sel = cm.doc.sel;
+
+ for (var i = sel.ranges.length - 1; i >= 0; i--) {
+ var range$$1 = sel.ranges[i];
+ if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue }
+ var mode = cm.getModeAt(range$$1.head);
+ var indented = false;
+ if (mode.electricChars) {
+ for (var j = 0; j < mode.electricChars.length; j++)
+ { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {
+ indented = indentLine(cm, range$$1.head.line, "smart");
+ break
+ } }
+ } else if (mode.electricInput) {
+ if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch)))
+ { indented = indentLine(cm, range$$1.head.line, "smart"); }
+ }
+ if (indented) { signalLater(cm, "electricInput", cm, range$$1.head.line); }
+ }
+ }
+
+ function copyableRanges(cm) {
+ var text = [], ranges = [];
+ for (var i = 0; i < cm.doc.sel.ranges.length; i++) {
+ var line = cm.doc.sel.ranges[i].head.line;
+ var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};
+ ranges.push(lineRange);
+ text.push(cm.getRange(lineRange.anchor, lineRange.head));
+ }
+ return {text: text, ranges: ranges}
+ }
+
+ function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {
+ field.setAttribute("autocorrect", autocorrect ? "" : "off");
+ field.setAttribute("autocapitalize", autocapitalize ? "" : "off");
+ field.setAttribute("spellcheck", !!spellcheck);
+ }
+
+ function hiddenTextarea() {
+ var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none");
+ var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
+ // The textarea is kept positioned near the cursor to prevent the
+ // fact that it'll be scrolled into view on input from scrolling
+ // our fake cursor out of view. On webkit, when wrap=off, paste is
+ // very slow. So make the area wide instead.
+ if (webkit) { te.style.width = "1000px"; }
+ else { te.setAttribute("wrap", "off"); }
+ // If border: 0; -- iOS fails to open keyboard (issue #1287)
+ if (ios) { te.style.border = "1px solid black"; }
+ disableBrowserMagic(te);
+ return div
+ }
+
+ // The publicly visible API. Note that methodOp(f) means
+ // 'wrap f in an operation, performed on its `this` parameter'.
+
+ // This is not the complete set of editor methods. Most of the
+ // methods defined on the Doc type are also injected into
+ // CodeMirror.prototype, for backwards compatibility and
+ // convenience.
+
+ function addEditorMethods(CodeMirror) {
+ var optionHandlers = CodeMirror.optionHandlers;
+
+ var helpers = CodeMirror.helpers = {};
+
+ CodeMirror.prototype = {
+ constructor: CodeMirror,
+ focus: function(){window.focus(); this.display.input.focus();},
+
+ setOption: function(option, value) {
+ var options = this.options, old = options[option];
+ if (options[option] == value && option != "mode") { return }
+ options[option] = value;
+ if (optionHandlers.hasOwnProperty(option))
+ { operation(this, optionHandlers[option])(this, value, old); }
+ signal(this, "optionChange", this, option);
+ },
+
+ getOption: function(option) {return this.options[option]},
+ getDoc: function() {return this.doc},
+
+ addKeyMap: function(map$$1, bottom) {
+ this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map$$1));
+ },
+ removeKeyMap: function(map$$1) {
+ var maps = this.state.keyMaps;
+ for (var i = 0; i < maps.length; ++i)
+ { if (maps[i] == map$$1 || maps[i].name == map$$1) {
+ maps.splice(i, 1);
+ return true
+ } }
+ },
+
+ addOverlay: methodOp(function(spec, options) {
+ var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);
+ if (mode.startState) { throw new Error("Overlays may not be stateful.") }
+ insertSorted(this.state.overlays,
+ {mode: mode, modeSpec: spec, opaque: options && options.opaque,
+ priority: (options && options.priority) || 0},
+ function (overlay) { return overlay.priority; });
+ this.state.modeGen++;
+ regChange(this);
+ }),
+ removeOverlay: methodOp(function(spec) {
+ var this$1 = this;
+
+ var overlays = this.state.overlays;
+ for (var i = 0; i < overlays.length; ++i) {
+ var cur = overlays[i].modeSpec;
+ if (cur == spec || typeof spec == "string" && cur.name == spec) {
+ overlays.splice(i, 1);
+ this$1.state.modeGen++;
+ regChange(this$1);
+ return
+ }
+ }
+ }),
+
+ indentLine: methodOp(function(n, dir, aggressive) {
+ if (typeof dir != "string" && typeof dir != "number") {
+ if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev"; }
+ else { dir = dir ? "add" : "subtract"; }
+ }
+ if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }
+ }),
+ indentSelection: methodOp(function(how) {
+ var this$1 = this;
+
+ var ranges = this.doc.sel.ranges, end = -1;
+ for (var i = 0; i < ranges.length; i++) {
+ var range$$1 = ranges[i];
+ if (!range$$1.empty()) {
+ var from = range$$1.from(), to = range$$1.to();
+ var start = Math.max(end, from.line);
+ end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;
+ for (var j = start; j < end; ++j)
+ { indentLine(this$1, j, how); }
+ var newRanges = this$1.doc.sel.ranges;
+ if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)
+ { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }
+ } else if (range$$1.head.line > end) {
+ indentLine(this$1, range$$1.head.line, how, true);
+ end = range$$1.head.line;
+ if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1); }
+ }
+ }
+ }),
+
+ // Fetch the parser token for a given character. Useful for hacks
+ // that want to inspect the mode state (say, for completion).
+ getTokenAt: function(pos, precise) {
+ return takeToken(this, pos, precise)
+ },
+
+ getLineTokens: function(line, precise) {
+ return takeToken(this, Pos(line), precise, true)
+ },
+
+ getTokenTypeAt: function(pos) {
+ pos = clipPos(this.doc, pos);
+ var styles = getLineStyles(this, getLine(this.doc, pos.line));
+ var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;
+ var type;
+ if (ch == 0) { type = styles[2]; }
+ else { for (;;) {
+ var mid = (before + after) >> 1;
+ if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }
+ else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }
+ else { type = styles[mid * 2 + 2]; break }
+ } }
+ var cut = type ? type.indexOf("overlay ") : -1;
+ return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)
+ },
+
+ getModeAt: function(pos) {
+ var mode = this.doc.mode;
+ if (!mode.innerMode) { return mode }
+ return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode
+ },
+
+ getHelper: function(pos, type) {
+ return this.getHelpers(pos, type)[0]
+ },
+
+ getHelpers: function(pos, type) {
+ var this$1 = this;
+
+ var found = [];
+ if (!helpers.hasOwnProperty(type)) { return found }
+ var help = helpers[type], mode = this.getModeAt(pos);
+ if (typeof mode[type] == "string") {
+ if (help[mode[type]]) { found.push(help[mode[type]]); }
+ } else if (mode[type]) {
+ for (var i = 0; i < mode[type].length; i++) {
+ var val = help[mode[type][i]];
+ if (val) { found.push(val); }
+ }
+ } else if (mode.helperType && help[mode.helperType]) {
+ found.push(help[mode.helperType]);
+ } else if (help[mode.name]) {
+ found.push(help[mode.name]);
+ }
+ for (var i$1 = 0; i$1 < help._global.length; i$1++) {
+ var cur = help._global[i$1];
+ if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1)
+ { found.push(cur.val); }
+ }
+ return found
+ },
+
+ getStateAfter: function(line, precise) {
+ var doc = this.doc;
+ line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);
+ return getContextBefore(this, line + 1, precise).state
+ },
+
+ cursorCoords: function(start, mode) {
+ var pos, range$$1 = this.doc.sel.primary();
+ if (start == null) { pos = range$$1.head; }
+ else if (typeof start == "object") { pos = clipPos(this.doc, start); }
+ else { pos = start ? range$$1.from() : range$$1.to(); }
+ return cursorCoords(this, pos, mode || "page")
+ },
+
+ charCoords: function(pos, mode) {
+ return charCoords(this, clipPos(this.doc, pos), mode || "page")
+ },
+
+ coordsChar: function(coords, mode) {
+ coords = fromCoordSystem(this, coords, mode || "page");
+ return coordsChar(this, coords.left, coords.top)
+ },
+
+ lineAtHeight: function(height, mode) {
+ height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top;
+ return lineAtHeight(this.doc, height + this.display.viewOffset)
+ },
+ heightAtLine: function(line, mode, includeWidgets) {
+ var end = false, lineObj;
+ if (typeof line == "number") {
+ var last = this.doc.first + this.doc.size - 1;
+ if (line < this.doc.first) { line = this.doc.first; }
+ else if (line > last) { line = last; end = true; }
+ lineObj = getLine(this.doc, line);
+ } else {
+ lineObj = line;
+ }
+ return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top +
+ (end ? this.doc.height - heightAtLine(lineObj) : 0)
+ },
+
+ defaultTextHeight: function() { return textHeight(this.display) },
+ defaultCharWidth: function() { return charWidth(this.display) },
+
+ getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},
+
+ addWidget: function(pos, node, scroll, vert, horiz) {
+ var display = this.display;
+ pos = cursorCoords(this, clipPos(this.doc, pos));
+ var top = pos.bottom, left = pos.left;
+ node.style.position = "absolute";
+ node.setAttribute("cm-ignore-events", "true");
+ this.display.input.setUneditable(node);
+ display.sizer.appendChild(node);
+ if (vert == "over") {
+ top = pos.top;
+ } else if (vert == "above" || vert == "near") {
+ var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),
+ hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);
+ // Default to positioning above (if specified and possible); otherwise default to positioning below
+ if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)
+ { top = pos.top - node.offsetHeight; }
+ else if (pos.bottom + node.offsetHeight <= vspace)
+ { top = pos.bottom; }
+ if (left + node.offsetWidth > hspace)
+ { left = hspace - node.offsetWidth; }
+ }
+ node.style.top = top + "px";
+ node.style.left = node.style.right = "";
+ if (horiz == "right") {
+ left = display.sizer.clientWidth - node.offsetWidth;
+ node.style.right = "0px";
+ } else {
+ if (horiz == "left") { left = 0; }
+ else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }
+ node.style.left = left + "px";
+ }
+ if (scroll)
+ { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }
+ },
+
+ triggerOnKeyDown: methodOp(onKeyDown),
+ triggerOnKeyPress: methodOp(onKeyPress),
+ triggerOnKeyUp: onKeyUp,
+ triggerOnMouseDown: methodOp(onMouseDown),
+
+ execCommand: function(cmd) {
+ if (commands.hasOwnProperty(cmd))
+ { return commands[cmd].call(null, this) }
+ },
+
+ triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),
+
+ findPosH: function(from, amount, unit, visually) {
+ var this$1 = this;
+
+ var dir = 1;
+ if (amount < 0) { dir = -1; amount = -amount; }
+ var cur = clipPos(this.doc, from);
+ for (var i = 0; i < amount; ++i) {
+ cur = findPosH(this$1.doc, cur, dir, unit, visually);
+ if (cur.hitSide) { break }
+ }
+ return cur
+ },
+
+ moveH: methodOp(function(dir, unit) {
+ var this$1 = this;
+
+ this.extendSelectionsBy(function (range$$1) {
+ if (this$1.display.shift || this$1.doc.extend || range$$1.empty())
+ { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) }
+ else
+ { return dir < 0 ? range$$1.from() : range$$1.to() }
+ }, sel_move);
+ }),
+
+ deleteH: methodOp(function(dir, unit) {
+ var sel = this.doc.sel, doc = this.doc;
+ if (sel.somethingSelected())
+ { doc.replaceSelection("", null, "+delete"); }
+ else
+ { deleteNearSelection(this, function (range$$1) {
+ var other = findPosH(doc, range$$1.head, dir, unit, false);
+ return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.head, to: other}
+ }); }
+ }),
+
+ findPosV: function(from, amount, unit, goalColumn) {
+ var this$1 = this;
+
+ var dir = 1, x = goalColumn;
+ if (amount < 0) { dir = -1; amount = -amount; }
+ var cur = clipPos(this.doc, from);
+ for (var i = 0; i < amount; ++i) {
+ var coords = cursorCoords(this$1, cur, "div");
+ if (x == null) { x = coords.left; }
+ else { coords.left = x; }
+ cur = findPosV(this$1, coords, dir, unit);
+ if (cur.hitSide) { break }
+ }
+ return cur
+ },
+
+ moveV: methodOp(function(dir, unit) {
+ var this$1 = this;
+
+ var doc = this.doc, goals = [];
+ var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();
+ doc.extendSelectionsBy(function (range$$1) {
+ if (collapse)
+ { return dir < 0 ? range$$1.from() : range$$1.to() }
+ var headPos = cursorCoords(this$1, range$$1.head, "div");
+ if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn; }
+ goals.push(headPos.left);
+ var pos = findPosV(this$1, headPos, dir, unit);
+ if (unit == "page" && range$$1 == doc.sel.primary())
+ { addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); }
+ return pos
+ }, sel_move);
+ if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)
+ { doc.sel.ranges[i].goalColumn = goals[i]; } }
+ }),
+
+ // Find the word at the given position (as returned by coordsChar).
+ findWordAt: function(pos) {
+ var doc = this.doc, line = getLine(doc, pos.line).text;
+ var start = pos.ch, end = pos.ch;
+ if (line) {
+ var helper = this.getHelper(pos, "wordChars");
+ if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end; }
+ var startChar = line.charAt(start);
+ var check = isWordChar(startChar, helper)
+ ? function (ch) { return isWordChar(ch, helper); }
+ : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); }
+ : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); };
+ while (start > 0 && check(line.charAt(start - 1))) { --start; }
+ while (end < line.length && check(line.charAt(end))) { ++end; }
+ }
+ return new Range(Pos(pos.line, start), Pos(pos.line, end))
+ },
+
+ toggleOverwrite: function(value) {
+ if (value != null && value == this.state.overwrite) { return }
+ if (this.state.overwrite = !this.state.overwrite)
+ { addClass(this.display.cursorDiv, "CodeMirror-overwrite"); }
+ else
+ { rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); }
+
+ signal(this, "overwriteToggle", this, this.state.overwrite);
+ },
+ hasFocus: function() { return this.display.input.getField() == activeElt() },
+ isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },
+
+ scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),
+ getScrollInfo: function() {
+ var scroller = this.display.scroller;
+ return {left: scroller.scrollLeft, top: scroller.scrollTop,
+ height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,
+ width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,
+ clientHeight: displayHeight(this), clientWidth: displayWidth(this)}
+ },
+
+ scrollIntoView: methodOp(function(range$$1, margin) {
+ if (range$$1 == null) {
+ range$$1 = {from: this.doc.sel.primary().head, to: null};
+ if (margin == null) { margin = this.options.cursorScrollMargin; }
+ } else if (typeof range$$1 == "number") {
+ range$$1 = {from: Pos(range$$1, 0), to: null};
+ } else if (range$$1.from == null) {
+ range$$1 = {from: range$$1, to: null};
+ }
+ if (!range$$1.to) { range$$1.to = range$$1.from; }
+ range$$1.margin = margin || 0;
+
+ if (range$$1.from.line != null) {
+ scrollToRange(this, range$$1);
+ } else {
+ scrollToCoordsRange(this, range$$1.from, range$$1.to, range$$1.margin);
+ }
+ }),
+
+ setSize: methodOp(function(width, height) {
+ var this$1 = this;
+
+ var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; };
+ if (width != null) { this.display.wrapper.style.width = interpret(width); }
+ if (height != null) { this.display.wrapper.style.height = interpret(height); }
+ if (this.options.lineWrapping) { clearLineMeasurementCache(this); }
+ var lineNo$$1 = this.display.viewFrom;
+ this.doc.iter(lineNo$$1, this.display.viewTo, function (line) {
+ if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)
+ { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo$$1, "widget"); break } } }
+ ++lineNo$$1;
+ });
+ this.curOp.forceUpdate = true;
+ signal(this, "refresh", this);
+ }),
+
+ operation: function(f){return runInOp(this, f)},
+ startOperation: function(){return startOperation(this)},
+ endOperation: function(){return endOperation(this)},
+
+ refresh: methodOp(function() {
+ var oldHeight = this.display.cachedTextHeight;
+ regChange(this);
+ this.curOp.forceUpdate = true;
+ clearCaches(this);
+ scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);
+ updateGutterSpace(this.display);
+ if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)
+ { estimateLineHeights(this); }
+ signal(this, "refresh", this);
+ }),
+
+ swapDoc: methodOp(function(doc) {
+ var old = this.doc;
+ old.cm = null;
+ // Cancel the current text selection if any (#5821)
+ if (this.state.selectingText) { this.state.selectingText(); }
+ attachDoc(this, doc);
+ clearCaches(this);
+ this.display.input.reset();
+ scrollToCoords(this, doc.scrollLeft, doc.scrollTop);
+ this.curOp.forceScroll = true;
+ signalLater(this, "swapDoc", this, old);
+ return old
+ }),
+
+ phrase: function(phraseText) {
+ var phrases = this.options.phrases;
+ return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText
+ },
+
+ getInputField: function(){return this.display.input.getField()},
+ getWrapperElement: function(){return this.display.wrapper},
+ getScrollerElement: function(){return this.display.scroller},
+ getGutterElement: function(){return this.display.gutters}
+ };
+ eventMixin(CodeMirror);
+
+ CodeMirror.registerHelper = function(type, name, value) {
+ if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }
+ helpers[type][name] = value;
+ };
+ CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {
+ CodeMirror.registerHelper(type, name, value);
+ helpers[type]._global.push({pred: predicate, val: value});
+ };
+ }
+
+ // Used for horizontal relative motion. Dir is -1 or 1 (left or
+ // right), unit can be "char", "column" (like char, but doesn't
+ // cross line boundaries), "word" (across next word), or "group" (to
+ // the start of next group of word or non-word-non-whitespace
+ // chars). The visually param controls whether, in right-to-left
+ // text, direction 1 means to move towards the next index in the
+ // string, or towards the character to the right of the current
+ // position. The resulting position will have a hitSide=true
+ // property if it reached the end of the document.
+ function findPosH(doc, pos, dir, unit, visually) {
+ var oldPos = pos;
+ var origDir = dir;
+ var lineObj = getLine(doc, pos.line);
+ function findNextLine() {
+ var l = pos.line + dir;
+ if (l < doc.first || l >= doc.first + doc.size) { return false }
+ pos = new Pos(l, pos.ch, pos.sticky);
+ return lineObj = getLine(doc, l)
+ }
+ function moveOnce(boundToLine) {
+ var next;
+ if (visually) {
+ next = moveVisually(doc.cm, lineObj, pos, dir);
+ } else {
+ next = moveLogically(lineObj, pos, dir);
+ }
+ if (next == null) {
+ if (!boundToLine && findNextLine())
+ { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir); }
+ else
+ { return false }
+ } else {
+ pos = next;
+ }
+ return true
+ }
+
+ if (unit == "char") {
+ moveOnce();
+ } else if (unit == "column") {
+ moveOnce(true);
+ } else if (unit == "word" || unit == "group") {
+ var sawType = null, group = unit == "group";
+ var helper = doc.cm && doc.cm.getHelper(pos, "wordChars");
+ for (var first = true;; first = false) {
+ if (dir < 0 && !moveOnce(!first)) { break }
+ var cur = lineObj.text.charAt(pos.ch) || "\n";
+ var type = isWordChar(cur, helper) ? "w"
+ : group && cur == "\n" ? "n"
+ : !group || /\s/.test(cur) ? null
+ : "p";
+ if (group && !first && !type) { type = "s"; }
+ if (sawType && sawType != type) {
+ if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after";}
+ break
+ }
+
+ if (type) { sawType = type; }
+ if (dir > 0 && !moveOnce(!first)) { break }
+ }
+ }
+ var result = skipAtomic(doc, pos, oldPos, origDir, true);
+ if (equalCursorPos(oldPos, result)) { result.hitSide = true; }
+ return result
+ }
+
+ // For relative vertical movement. Dir may be -1 or 1. Unit can be
+ // "page" or "line". The resulting position will have a hitSide=true
+ // property if it reached the end of the document.
+ function findPosV(cm, pos, dir, unit) {
+ var doc = cm.doc, x = pos.left, y;
+ if (unit == "page") {
+ var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);
+ var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);
+ y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;
+
+ } else if (unit == "line") {
+ y = dir > 0 ? pos.bottom + 3 : pos.top - 3;
+ }
+ var target;
+ for (;;) {
+ target = coordsChar(cm, x, y);
+ if (!target.outside) { break }
+ if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }
+ y += dir * 5;
+ }
+ return target
+ }
+
+ // CONTENTEDITABLE INPUT STYLE
+
+ var ContentEditableInput = function(cm) {
+ this.cm = cm;
+ this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;
+ this.polling = new Delayed();
+ this.composing = null;
+ this.gracePeriod = false;
+ this.readDOMTimeout = null;
+ };
+
+ ContentEditableInput.prototype.init = function (display) {
+ var this$1 = this;
+
+ var input = this, cm = input.cm;
+ var div = input.div = display.lineDiv;
+ disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);
+
+ on(div, "paste", function (e) {
+ if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
+ // IE doesn't fire input events, so we schedule a read for the pasted content in this way
+ if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }
+ });
+
+ on(div, "compositionstart", function (e) {
+ this$1.composing = {data: e.data, done: false};
+ });
+ on(div, "compositionupdate", function (e) {
+ if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }
+ });
+ on(div, "compositionend", function (e) {
+ if (this$1.composing) {
+ if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }
+ this$1.composing.done = true;
+ }
+ });
+
+ on(div, "touchstart", function () { return input.forceCompositionEnd(); });
+
+ on(div, "input", function () {
+ if (!this$1.composing) { this$1.readFromDOMSoon(); }
+ });
+
+ function onCopyCut(e) {
+ if (signalDOMEvent(cm, e)) { return }
+ if (cm.somethingSelected()) {
+ setLastCopied({lineWise: false, text: cm.getSelections()});
+ if (e.type == "cut") { cm.replaceSelection("", null, "cut"); }
+ } else if (!cm.options.lineWiseCopyCut) {
+ return
+ } else {
+ var ranges = copyableRanges(cm);
+ setLastCopied({lineWise: true, text: ranges.text});
+ if (e.type == "cut") {
+ cm.operation(function () {
+ cm.setSelections(ranges.ranges, 0, sel_dontScroll);
+ cm.replaceSelection("", null, "cut");
+ });
+ }
+ }
+ if (e.clipboardData) {
+ e.clipboardData.clearData();
+ var content = lastCopied.text.join("\n");
+ // iOS exposes the clipboard API, but seems to discard content inserted into it
+ e.clipboardData.setData("Text", content);
+ if (e.clipboardData.getData("Text") == content) {
+ e.preventDefault();
+ return
+ }
+ }
+ // Old-fashioned briefly-focus-a-textarea hack
+ var kludge = hiddenTextarea(), te = kludge.firstChild;
+ cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);
+ te.value = lastCopied.text.join("\n");
+ var hadFocus = document.activeElement;
+ selectInput(te);
+ setTimeout(function () {
+ cm.display.lineSpace.removeChild(kludge);
+ hadFocus.focus();
+ if (hadFocus == div) { input.showPrimarySelection(); }
+ }, 50);
+ }
+ on(div, "copy", onCopyCut);
+ on(div, "cut", onCopyCut);
+ };
+
+ ContentEditableInput.prototype.prepareSelection = function () {
+ var result = prepareSelection(this.cm, false);
+ result.focus = this.cm.state.focused;
+ return result
+ };
+
+ ContentEditableInput.prototype.showSelection = function (info, takeFocus) {
+ if (!info || !this.cm.display.view.length) { return }
+ if (info.focus || takeFocus) { this.showPrimarySelection(); }
+ this.showMultipleSelections(info);
+ };
+
+ ContentEditableInput.prototype.getSelection = function () {
+ return this.cm.display.wrapper.ownerDocument.getSelection()
+ };
+
+ ContentEditableInput.prototype.showPrimarySelection = function () {
+ var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();
+ var from = prim.from(), to = prim.to();
+
+ if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {
+ sel.removeAllRanges();
+ return
+ }
+
+ var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);
+ var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);
+ if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&
+ cmp(minPos(curAnchor, curFocus), from) == 0 &&
+ cmp(maxPos(curAnchor, curFocus), to) == 0)
+ { return }
+
+ var view = cm.display.view;
+ var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||
+ {node: view[0].measure.map[2], offset: 0};
+ var end = to.line < cm.display.viewTo && posToDOM(cm, to);
+ if (!end) {
+ var measure = view[view.length - 1].measure;
+ var map$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;
+ end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.length - 3]};
+ }
+
+ if (!start || !end) {
+ sel.removeAllRanges();
+ return
+ }
+
+ var old = sel.rangeCount && sel.getRangeAt(0), rng;
+ try { rng = range(start.node, start.offset, end.offset, end.node); }
+ catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible
+ if (rng) {
+ if (!gecko && cm.state.focused) {
+ sel.collapse(start.node, start.offset);
+ if (!rng.collapsed) {
+ sel.removeAllRanges();
+ sel.addRange(rng);
+ }
+ } else {
+ sel.removeAllRanges();
+ sel.addRange(rng);
+ }
+ if (old && sel.anchorNode == null) { sel.addRange(old); }
+ else if (gecko) { this.startGracePeriod(); }
+ }
+ this.rememberSelection();
+ };
+
+ ContentEditableInput.prototype.startGracePeriod = function () {
+ var this$1 = this;
+
+ clearTimeout(this.gracePeriod);
+ this.gracePeriod = setTimeout(function () {
+ this$1.gracePeriod = false;
+ if (this$1.selectionChanged())
+ { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }
+ }, 20);
+ };
+
+ ContentEditableInput.prototype.showMultipleSelections = function (info) {
+ removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);
+ removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);
+ };
+
+ ContentEditableInput.prototype.rememberSelection = function () {
+ var sel = this.getSelection();
+ this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;
+ this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;
+ };
+
+ ContentEditableInput.prototype.selectionInEditor = function () {
+ var sel = this.getSelection();
+ if (!sel.rangeCount) { return false }
+ var node = sel.getRangeAt(0).commonAncestorContainer;
+ return contains(this.div, node)
+ };
+
+ ContentEditableInput.prototype.focus = function () {
+ if (this.cm.options.readOnly != "nocursor") {
+ if (!this.selectionInEditor())
+ { this.showSelection(this.prepareSelection(), true); }
+ this.div.focus();
+ }
+ };
+ ContentEditableInput.prototype.blur = function () { this.div.blur(); };
+ ContentEditableInput.prototype.getField = function () { return this.div };
+
+ ContentEditableInput.prototype.supportsTouch = function () { return true };
+
+ ContentEditableInput.prototype.receivedFocus = function () {
+ var input = this;
+ if (this.selectionInEditor())
+ { this.pollSelection(); }
+ else
+ { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }
+
+ function poll() {
+ if (input.cm.state.focused) {
+ input.pollSelection();
+ input.polling.set(input.cm.options.pollInterval, poll);
+ }
+ }
+ this.polling.set(this.cm.options.pollInterval, poll);
+ };
+
+ ContentEditableInput.prototype.selectionChanged = function () {
+ var sel = this.getSelection();
+ return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||
+ sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset
+ };
+
+ ContentEditableInput.prototype.pollSelection = function () {
+ if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }
+ var sel = this.getSelection(), cm = this.cm;
+ // On Android Chrome (version 56, at least), backspacing into an
+ // uneditable block element will put the cursor in that element,
+ // and then, because it's not editable, hide the virtual keyboard.
+ // Because Android doesn't allow us to actually detect backspace
+ // presses in a sane way, this code checks for when that happens
+ // and simulates a backspace press in this case.
+ if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {
+ this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs});
+ this.blur();
+ this.focus();
+ return
+ }
+ if (this.composing) { return }
+ this.rememberSelection();
+ var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);
+ var head = domToPos(cm, sel.focusNode, sel.focusOffset);
+ if (anchor && head) { runInOp(cm, function () {
+ setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);
+ if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }
+ }); }
+ };
+
+ ContentEditableInput.prototype.pollContent = function () {
+ if (this.readDOMTimeout != null) {
+ clearTimeout(this.readDOMTimeout);
+ this.readDOMTimeout = null;
+ }
+
+ var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();
+ var from = sel.from(), to = sel.to();
+ if (from.ch == 0 && from.line > cm.firstLine())
+ { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }
+ if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())
+ { to = Pos(to.line + 1, 0); }
+ if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }
+
+ var fromIndex, fromLine, fromNode;
+ if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {
+ fromLine = lineNo(display.view[0].line);
+ fromNode = display.view[0].node;
+ } else {
+ fromLine = lineNo(display.view[fromIndex].line);
+ fromNode = display.view[fromIndex - 1].node.nextSibling;
+ }
+ var toIndex = findViewIndex(cm, to.line);
+ var toLine, toNode;
+ if (toIndex == display.view.length - 1) {
+ toLine = display.viewTo - 1;
+ toNode = display.lineDiv.lastChild;
+ } else {
+ toLine = lineNo(display.view[toIndex + 1].line) - 1;
+ toNode = display.view[toIndex + 1].node.previousSibling;
+ }
+
+ if (!fromNode) { return false }
+ var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));
+ var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));
+ while (newText.length > 1 && oldText.length > 1) {
+ if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }
+ else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }
+ else { break }
+ }
+
+ var cutFront = 0, cutEnd = 0;
+ var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);
+ while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))
+ { ++cutFront; }
+ var newBot = lst(newText), oldBot = lst(oldText);
+ var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),
+ oldBot.length - (oldText.length == 1 ? cutFront : 0));
+ while (cutEnd < maxCutEnd &&
+ newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))
+ { ++cutEnd; }
+ // Try to move start of change to start of selection if ambiguous
+ if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {
+ while (cutFront && cutFront > from.ch &&
+ newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {
+ cutFront--;
+ cutEnd++;
+ }
+ }
+
+ newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, "");
+ newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, "");
+
+ var chFrom = Pos(fromLine, cutFront);
+ var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);
+ if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {
+ replaceRange(cm.doc, newText, chFrom, chTo, "+input");
+ return true
+ }
+ };
+
+ ContentEditableInput.prototype.ensurePolled = function () {
+ this.forceCompositionEnd();
+ };
+ ContentEditableInput.prototype.reset = function () {
+ this.forceCompositionEnd();
+ };
+ ContentEditableInput.prototype.forceCompositionEnd = function () {
+ if (!this.composing) { return }
+ clearTimeout(this.readDOMTimeout);
+ this.composing = null;
+ this.updateFromDOM();
+ this.div.blur();
+ this.div.focus();
+ };
+ ContentEditableInput.prototype.readFromDOMSoon = function () {
+ var this$1 = this;
+
+ if (this.readDOMTimeout != null) { return }
+ this.readDOMTimeout = setTimeout(function () {
+ this$1.readDOMTimeout = null;
+ if (this$1.composing) {
+ if (this$1.composing.done) { this$1.composing = null; }
+ else { return }
+ }
+ this$1.updateFromDOM();
+ }, 80);
+ };
+
+ ContentEditableInput.prototype.updateFromDOM = function () {
+ var this$1 = this;
+
+ if (this.cm.isReadOnly() || !this.pollContent())
+ { runInOp(this.cm, function () { return regChange(this$1.cm); }); }
+ };
+
+ ContentEditableInput.prototype.setUneditable = function (node) {
+ node.contentEditable = "false";
+ };
+
+ ContentEditableInput.prototype.onKeyPress = function (e) {
+ if (e.charCode == 0 || this.composing) { return }
+ e.preventDefault();
+ if (!this.cm.isReadOnly())
+ { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }
+ };
+
+ ContentEditableInput.prototype.readOnlyChanged = function (val) {
+ this.div.contentEditable = String(val != "nocursor");
+ };
+
+ ContentEditableInput.prototype.onContextMenu = function () {};
+ ContentEditableInput.prototype.resetPosition = function () {};
+
+ ContentEditableInput.prototype.needsContentAttribute = true;
+
+ function posToDOM(cm, pos) {
+ var view = findViewForLine(cm, pos.line);
+ if (!view || view.hidden) { return null }
+ var line = getLine(cm.doc, pos.line);
+ var info = mapFromLineView(view, line, pos.line);
+
+ var order = getOrder(line, cm.doc.direction), side = "left";
+ if (order) {
+ var partPos = getBidiPartAt(order, pos.ch);
+ side = partPos % 2 ? "right" : "left";
+ }
+ var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);
+ result.offset = result.collapse == "right" ? result.end : result.start;
+ return result
+ }
+
+ function isInGutter(node) {
+ for (var scan = node; scan; scan = scan.parentNode)
+ { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }
+ return false
+ }
+
+ function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }
+
+ function domTextBetween(cm, from, to, fromLine, toLine) {
+ var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;
+ function recognizeMarker(id) { return function (marker) { return marker.id == id; } }
+ function close() {
+ if (closing) {
+ text += lineSep;
+ if (extraLinebreak) { text += lineSep; }
+ closing = extraLinebreak = false;
+ }
+ }
+ function addText(str) {
+ if (str) {
+ close();
+ text += str;
+ }
+ }
+ function walk(node) {
+ if (node.nodeType == 1) {
+ var cmText = node.getAttribute("cm-text");
+ if (cmText) {
+ addText(cmText);
+ return
+ }
+ var markerID = node.getAttribute("cm-marker"), range$$1;
+ if (markerID) {
+ var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));
+ if (found.length && (range$$1 = found[0].find(0)))
+ { addText(getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep)); }
+ return
+ }
+ if (node.getAttribute("contenteditable") == "false") { return }
+ var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);
+ if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }
+
+ if (isBlock) { close(); }
+ for (var i = 0; i < node.childNodes.length; i++)
+ { walk(node.childNodes[i]); }
+
+ if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }
+ if (isBlock) { closing = true; }
+ } else if (node.nodeType == 3) {
+ addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " "));
+ }
+ }
+ for (;;) {
+ walk(from);
+ if (from == to) { break }
+ from = from.nextSibling;
+ extraLinebreak = false;
+ }
+ return text
+ }
+
+ function domToPos(cm, node, offset) {
+ var lineNode;
+ if (node == cm.display.lineDiv) {
+ lineNode = cm.display.lineDiv.childNodes[offset];
+ if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }
+ node = null; offset = 0;
+ } else {
+ for (lineNode = node;; lineNode = lineNode.parentNode) {
+ if (!lineNode || lineNode == cm.display.lineDiv) { return null }
+ if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }
+ }
+ }
+ for (var i = 0; i < cm.display.view.length; i++) {
+ var lineView = cm.display.view[i];
+ if (lineView.node == lineNode)
+ { return locateNodeInLineView(lineView, node, offset) }
+ }
+ }
+
+ function locateNodeInLineView(lineView, node, offset) {
+ var wrapper = lineView.text.firstChild, bad = false;
+ if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }
+ if (node == wrapper) {
+ bad = true;
+ node = wrapper.childNodes[offset];
+ offset = 0;
+ if (!node) {
+ var line = lineView.rest ? lst(lineView.rest) : lineView.line;
+ return badPos(Pos(lineNo(line), line.text.length), bad)
+ }
+ }
+
+ var textNode = node.nodeType == 3 ? node : null, topNode = node;
+ if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {
+ textNode = node.firstChild;
+ if (offset) { offset = textNode.nodeValue.length; }
+ }
+ while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }
+ var measure = lineView.measure, maps = measure.maps;
+
+ function find(textNode, topNode, offset) {
+ for (var i = -1; i < (maps ? maps.length : 0); i++) {
+ var map$$1 = i < 0 ? measure.map : maps[i];
+ for (var j = 0; j < map$$1.length; j += 3) {
+ var curNode = map$$1[j + 2];
+ if (curNode == textNode || curNode == topNode) {
+ var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);
+ var ch = map$$1[j] + offset;
+ if (offset < 0 || curNode != textNode) { ch = map$$1[j + (offset ? 1 : 0)]; }
+ return Pos(line, ch)
+ }
+ }
+ }
+ }
+ var found = find(textNode, topNode, offset);
+ if (found) { return badPos(found, bad) }
+
+ // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems
+ for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {
+ found = find(after, after.firstChild, 0);
+ if (found)
+ { return badPos(Pos(found.line, found.ch - dist), bad) }
+ else
+ { dist += after.textContent.length; }
+ }
+ for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {
+ found = find(before, before.firstChild, -1);
+ if (found)
+ { return badPos(Pos(found.line, found.ch + dist$1), bad) }
+ else
+ { dist$1 += before.textContent.length; }
+ }
+ }
+
+ // TEXTAREA INPUT STYLE
+
+ var TextareaInput = function(cm) {
+ this.cm = cm;
+ // See input.poll and input.reset
+ this.prevInput = "";
+
+ // Flag that indicates whether we expect input to appear real soon
+ // now (after some event like 'keypress' or 'input') and are
+ // polling intensively.
+ this.pollingFast = false;
+ // Self-resetting timeout for the poller
+ this.polling = new Delayed();
+ // Used to work around IE issue with selection being forgotten when focus moves away from textarea
+ this.hasSelection = false;
+ this.composing = null;
+ };
+
+ TextareaInput.prototype.init = function (display) {
+ var this$1 = this;
+
+ var input = this, cm = this.cm;
+ this.createField(display);
+ var te = this.textarea;
+
+ display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);
+
+ // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)
+ if (ios) { te.style.width = "0px"; }
+
+ on(te, "input", function () {
+ if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }
+ input.poll();
+ });
+
+ on(te, "paste", function (e) {
+ if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
+
+ cm.state.pasteIncoming = +new Date;
+ input.fastPoll();
+ });
+
+ function prepareCopyCut(e) {
+ if (signalDOMEvent(cm, e)) { return }
+ if (cm.somethingSelected()) {
+ setLastCopied({lineWise: false, text: cm.getSelections()});
+ } else if (!cm.options.lineWiseCopyCut) {
+ return
+ } else {
+ var ranges = copyableRanges(cm);
+ setLastCopied({lineWise: true, text: ranges.text});
+ if (e.type == "cut") {
+ cm.setSelections(ranges.ranges, null, sel_dontScroll);
+ } else {
+ input.prevInput = "";
+ te.value = ranges.text.join("\n");
+ selectInput(te);
+ }
+ }
+ if (e.type == "cut") { cm.state.cutIncoming = +new Date; }
+ }
+ on(te, "cut", prepareCopyCut);
+ on(te, "copy", prepareCopyCut);
+
+ on(display.scroller, "paste", function (e) {
+ if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }
+ if (!te.dispatchEvent) {
+ cm.state.pasteIncoming = +new Date;
+ input.focus();
+ return
+ }
+
+ // Pass the `paste` event to the textarea so it's handled by its event listener.
+ var event = new Event("paste");
+ event.clipboardData = e.clipboardData;
+ te.dispatchEvent(event);
+ });
+
+ // Prevent normal selection in the editor (we handle our own)
+ on(display.lineSpace, "selectstart", function (e) {
+ if (!eventInWidget(display, e)) { e_preventDefault(e); }
+ });
+
+ on(te, "compositionstart", function () {
+ var start = cm.getCursor("from");
+ if (input.composing) { input.composing.range.clear(); }
+ input.composing = {
+ start: start,
+ range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"})
+ };
+ });
+ on(te, "compositionend", function () {
+ if (input.composing) {
+ input.poll();
+ input.composing.range.clear();
+ input.composing = null;
+ }
+ });
+ };
+
+ TextareaInput.prototype.createField = function (_display) {
+ // Wraps and hides input textarea
+ this.wrapper = hiddenTextarea();
+ // The semihidden textarea that is focused when the editor is
+ // focused, and receives input.
+ this.textarea = this.wrapper.firstChild;
+ };
+
+ TextareaInput.prototype.prepareSelection = function () {
+ // Redraw the selection and/or cursor
+ var cm = this.cm, display = cm.display, doc = cm.doc;
+ var result = prepareSelection(cm);
+
+ // Move the hidden textarea near the cursor to prevent scrolling artifacts
+ if (cm.options.moveInputWithCursor) {
+ var headPos = cursorCoords(cm, doc.sel.primary().head, "div");
+ var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();
+ result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,
+ headPos.top + lineOff.top - wrapOff.top));
+ result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,
+ headPos.left + lineOff.left - wrapOff.left));
+ }
+
+ return result
+ };
+
+ TextareaInput.prototype.showSelection = function (drawn) {
+ var cm = this.cm, display = cm.display;
+ removeChildrenAndAdd(display.cursorDiv, drawn.cursors);
+ removeChildrenAndAdd(display.selectionDiv, drawn.selection);
+ if (drawn.teTop != null) {
+ this.wrapper.style.top = drawn.teTop + "px";
+ this.wrapper.style.left = drawn.teLeft + "px";
+ }
+ };
+
+ // Reset the input to correspond to the selection (or to be empty,
+ // when not typing and nothing is selected)
+ TextareaInput.prototype.reset = function (typing) {
+ if (this.contextMenuPending || this.composing) { return }
+ var cm = this.cm;
+ if (cm.somethingSelected()) {
+ this.prevInput = "";
+ var content = cm.getSelection();
+ this.textarea.value = content;
+ if (cm.state.focused) { selectInput(this.textarea); }
+ if (ie && ie_version >= 9) { this.hasSelection = content; }
+ } else if (!typing) {
+ this.prevInput = this.textarea.value = "";
+ if (ie && ie_version >= 9) { this.hasSelection = null; }
+ }
+ };
+
+ TextareaInput.prototype.getField = function () { return this.textarea };
+
+ TextareaInput.prototype.supportsTouch = function () { return false };
+
+ TextareaInput.prototype.focus = function () {
+ if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) {
+ try { this.textarea.focus(); }
+ catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM
+ }
+ };
+
+ TextareaInput.prototype.blur = function () { this.textarea.blur(); };
+
+ TextareaInput.prototype.resetPosition = function () {
+ this.wrapper.style.top = this.wrapper.style.left = 0;
+ };
+
+ TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };
+
+ // Poll for input changes, using the normal rate of polling. This
+ // runs as long as the editor is focused.
+ TextareaInput.prototype.slowPoll = function () {
+ var this$1 = this;
+
+ if (this.pollingFast) { return }
+ this.polling.set(this.cm.options.pollInterval, function () {
+ this$1.poll();
+ if (this$1.cm.state.focused) { this$1.slowPoll(); }
+ });
+ };
+
+ // When an event has just come in that is likely to add or change
+ // something in the input textarea, we poll faster, to ensure that
+ // the change appears on the screen quickly.
+ TextareaInput.prototype.fastPoll = function () {
+ var missed = false, input = this;
+ input.pollingFast = true;
+ function p() {
+ var changed = input.poll();
+ if (!changed && !missed) {missed = true; input.polling.set(60, p);}
+ else {input.pollingFast = false; input.slowPoll();}
+ }
+ input.polling.set(20, p);
+ };
+
+ // Read input from the textarea, and update the document to match.
+ // When something is selected, it is present in the textarea, and
+ // selected (unless it is huge, in which case a placeholder is
+ // used). When nothing is selected, the cursor sits after previously
+ // seen text (can be empty), which is stored in prevInput (we must
+ // not reset the textarea when typing, because that breaks IME).
+ TextareaInput.prototype.poll = function () {
+ var this$1 = this;
+
+ var cm = this.cm, input = this.textarea, prevInput = this.prevInput;
+ // Since this is called a *lot*, try to bail out as cheaply as
+ // possible when it is clear that nothing happened. hasSelection
+ // will be the case when there is a lot of text in the textarea,
+ // in which case reading its value would be expensive.
+ if (this.contextMenuPending || !cm.state.focused ||
+ (hasSelection(input) && !prevInput && !this.composing) ||
+ cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)
+ { return false }
+
+ var text = input.value;
+ // If nothing changed, bail.
+ if (text == prevInput && !cm.somethingSelected()) { return false }
+ // Work around nonsensical selection resetting in IE9/10, and
+ // inexplicable appearance of private area unicode characters on
+ // some key combos in Mac (#2689).
+ if (ie && ie_version >= 9 && this.hasSelection === text ||
+ mac && /[\uf700-\uf7ff]/.test(text)) {
+ cm.display.input.reset();
+ return false
+ }
+
+ if (cm.doc.sel == cm.display.selForContextMenu) {
+ var first = text.charCodeAt(0);
+ if (first == 0x200b && !prevInput) { prevInput = "\u200b"; }
+ if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") }
+ }
+ // Find the part of the input that is actually new
+ var same = 0, l = Math.min(prevInput.length, text.length);
+ while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }
+
+ runInOp(cm, function () {
+ applyTextInput(cm, text.slice(same), prevInput.length - same,
+ null, this$1.composing ? "*compose" : null);
+
+ // Don't leave long text in the textarea, since it makes further polling slow
+ if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = ""; }
+ else { this$1.prevInput = text; }
+
+ if (this$1.composing) {
+ this$1.composing.range.clear();
+ this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"),
+ {className: "CodeMirror-composing"});
+ }
+ });
+ return true
+ };
+
+ TextareaInput.prototype.ensurePolled = function () {
+ if (this.pollingFast && this.poll()) { this.pollingFast = false; }
+ };
+
+ TextareaInput.prototype.onKeyPress = function () {
+ if (ie && ie_version >= 9) { this.hasSelection = null; }
+ this.fastPoll();
+ };
+
+ TextareaInput.prototype.onContextMenu = function (e) {
+ var input = this, cm = input.cm, display = cm.display, te = input.textarea;
+ if (input.contextMenuPending) { input.contextMenuPending(); }
+ var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;
+ if (!pos || presto) { return } // Opera is difficult.
+
+ // Reset the current text selection only if the click is done outside of the selection
+ // and 'resetSelectionOnContextMenu' option is true.
+ var reset = cm.options.resetSelectionOnContextMenu;
+ if (reset && cm.doc.sel.contains(pos) == -1)
+ { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }
+
+ var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;
+ var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();
+ input.wrapper.style.cssText = "position: static";
+ te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";
+ var oldScrollY;
+ if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)
+ display.input.focus();
+ if (webkit) { window.scrollTo(null, oldScrollY); }
+ display.input.reset();
+ // Adds "Select all" to context menu in FF
+ if (!cm.somethingSelected()) { te.value = input.prevInput = " "; }
+ input.contextMenuPending = rehide;
+ display.selForContextMenu = cm.doc.sel;
+ clearTimeout(display.detectingSelectAll);
+
+ // Select-all will be greyed out if there's nothing to select, so
+ // this adds a zero-width space so that we can later check whether
+ // it got selected.
+ function prepareSelectAllHack() {
+ if (te.selectionStart != null) {
+ var selected = cm.somethingSelected();
+ var extval = "\u200b" + (selected ? te.value : "");
+ te.value = "\u21da"; // Used to catch context-menu undo
+ te.value = extval;
+ input.prevInput = selected ? "" : "\u200b";
+ te.selectionStart = 1; te.selectionEnd = extval.length;
+ // Re-set this, in case some other handler touched the
+ // selection in the meantime.
+ display.selForContextMenu = cm.doc.sel;
+ }
+ }
+ function rehide() {
+ if (input.contextMenuPending != rehide) { return }
+ input.contextMenuPending = false;
+ input.wrapper.style.cssText = oldWrapperCSS;
+ te.style.cssText = oldCSS;
+ if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }
+
+ // Try to detect the user choosing select-all
+ if (te.selectionStart != null) {
+ if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }
+ var i = 0, poll = function () {
+ if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&
+ te.selectionEnd > 0 && input.prevInput == "\u200b") {
+ operation(cm, selectAll)(cm);
+ } else if (i++ < 10) {
+ display.detectingSelectAll = setTimeout(poll, 500);
+ } else {
+ display.selForContextMenu = null;
+ display.input.reset();
+ }
+ };
+ display.detectingSelectAll = setTimeout(poll, 200);
+ }
+ }
+
+ if (ie && ie_version >= 9) { prepareSelectAllHack(); }
+ if (captureRightClick) {
+ e_stop(e);
+ var mouseup = function () {
+ off(window, "mouseup", mouseup);
+ setTimeout(rehide, 20);
+ };
+ on(window, "mouseup", mouseup);
+ } else {
+ setTimeout(rehide, 50);
+ }
+ };
+
+ TextareaInput.prototype.readOnlyChanged = function (val) {
+ if (!val) { this.reset(); }
+ this.textarea.disabled = val == "nocursor";
+ };
+
+ TextareaInput.prototype.setUneditable = function () {};
+
+ TextareaInput.prototype.needsContentAttribute = false;
+
+ function fromTextArea(textarea, options) {
+ options = options ? copyObj(options) : {};
+ options.value = textarea.value;
+ if (!options.tabindex && textarea.tabIndex)
+ { options.tabindex = textarea.tabIndex; }
+ if (!options.placeholder && textarea.placeholder)
+ { options.placeholder = textarea.placeholder; }
+ // Set autofocus to true if this textarea is focused, or if it has
+ // autofocus and no other element is focused.
+ if (options.autofocus == null) {
+ var hasFocus = activeElt();
+ options.autofocus = hasFocus == textarea ||
+ textarea.getAttribute("autofocus") != null && hasFocus == document.body;
+ }
+
+ function save() {textarea.value = cm.getValue();}
+
+ var realSubmit;
+ if (textarea.form) {
+ on(textarea.form, "submit", save);
+ // Deplorable hack to make the submit method do the right thing.
+ if (!options.leaveSubmitMethodAlone) {
+ var form = textarea.form;
+ realSubmit = form.submit;
+ try {
+ var wrappedSubmit = form.submit = function () {
+ save();
+ form.submit = realSubmit;
+ form.submit();
+ form.submit = wrappedSubmit;
+ };
+ } catch(e) {}
+ }
+ }
+
+ options.finishInit = function (cm) {
+ cm.save = save;
+ cm.getTextArea = function () { return textarea; };
+ cm.toTextArea = function () {
+ cm.toTextArea = isNaN; // Prevent this from being ran twice
+ save();
+ textarea.parentNode.removeChild(cm.getWrapperElement());
+ textarea.style.display = "";
+ if (textarea.form) {
+ off(textarea.form, "submit", save);
+ if (typeof textarea.form.submit == "function")
+ { textarea.form.submit = realSubmit; }
+ }
+ };
+ };
+
+ textarea.style.display = "none";
+ var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },
+ options);
+ return cm
+ }
+
+ function addLegacyProps(CodeMirror) {
+ CodeMirror.off = off;
+ CodeMirror.on = on;
+ CodeMirror.wheelEventPixels = wheelEventPixels;
+ CodeMirror.Doc = Doc;
+ CodeMirror.splitLines = splitLinesAuto;
+ CodeMirror.countColumn = countColumn;
+ CodeMirror.findColumn = findColumn;
+ CodeMirror.isWordChar = isWordCharBasic;
+ CodeMirror.Pass = Pass;
+ CodeMirror.signal = signal;
+ CodeMirror.Line = Line;
+ CodeMirror.changeEnd = changeEnd;
+ CodeMirror.scrollbarModel = scrollbarModel;
+ CodeMirror.Pos = Pos;
+ CodeMirror.cmpPos = cmp;
+ CodeMirror.modes = modes;
+ CodeMirror.mimeModes = mimeModes;
+ CodeMirror.resolveMode = resolveMode;
+ CodeMirror.getMode = getMode;
+ CodeMirror.modeExtensions = modeExtensions;
+ CodeMirror.extendMode = extendMode;
+ CodeMirror.copyState = copyState;
+ CodeMirror.startState = startState;
+ CodeMirror.innerMode = innerMode;
+ CodeMirror.commands = commands;
+ CodeMirror.keyMap = keyMap;
+ CodeMirror.keyName = keyName;
+ CodeMirror.isModifierKey = isModifierKey;
+ CodeMirror.lookupKey = lookupKey;
+ CodeMirror.normalizeKeyMap = normalizeKeyMap;
+ CodeMirror.StringStream = StringStream;
+ CodeMirror.SharedTextMarker = SharedTextMarker;
+ CodeMirror.TextMarker = TextMarker;
+ CodeMirror.LineWidget = LineWidget;
+ CodeMirror.e_preventDefault = e_preventDefault;
+ CodeMirror.e_stopPropagation = e_stopPropagation;
+ CodeMirror.e_stop = e_stop;
+ CodeMirror.addClass = addClass;
+ CodeMirror.contains = contains;
+ CodeMirror.rmClass = rmClass;
+ CodeMirror.keyNames = keyNames;
+ }
+
+ // EDITOR CONSTRUCTOR
+
+ defineOptions(CodeMirror);
+
+ addEditorMethods(CodeMirror);
+
+ // Set up methods on CodeMirror's prototype to redirect to the editor's document.
+ var dontDelegate = "iter insert remove copy getEditor constructor".split(" ");
+ for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)
+ { CodeMirror.prototype[prop] = (function(method) {
+ return function() {return method.apply(this.doc, arguments)}
+ })(Doc.prototype[prop]); } }
+
+ eventMixin(Doc);
+ CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput};
+
+ // Extra arguments are stored as the mode's dependencies, which is
+ // used by (legacy) mechanisms like loadmode.js to automatically
+ // load a mode. (Preferred mechanism is the require/define calls.)
+ CodeMirror.defineMode = function(name/*, mode, …*/) {
+ if (!CodeMirror.defaults.mode && name != "null") { CodeMirror.defaults.mode = name; }
+ defineMode.apply(this, arguments);
+ };
+
+ CodeMirror.defineMIME = defineMIME;
+
+ // Minimal default mode.
+ CodeMirror.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });
+ CodeMirror.defineMIME("text/plain", "null");
+
+ // EXTENSIONS
+
+ CodeMirror.defineExtension = function (name, func) {
+ CodeMirror.prototype[name] = func;
+ };
+ CodeMirror.defineDocExtension = function (name, func) {
+ Doc.prototype[name] = func;
+ };
+
+ CodeMirror.fromTextArea = fromTextArea;
+
+ addLegacyProps(CodeMirror);
+
+ CodeMirror.version = "5.48.2";
+
+ return CodeMirror;
+
+})));
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/mode/gfm/gfm.js":
+/*!*************************************************!*\
+ !*** ./node_modules/codemirror/mode/gfm/gfm.js ***!
+ \*************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"), __webpack_require__(/*! ../markdown/markdown */ "./node_modules/codemirror/mode/markdown/markdown.js"), __webpack_require__(/*! ../../addon/mode/overlay */ "./node_modules/codemirror/addon/mode/overlay.js"));
+ else {}
+})(function(CodeMirror) {
+"use strict";
+
+var urlRE = /^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\.beep|\.lwz|\.xpc|\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\.beeps?|xmpp|xri|ymsgr|z39\.50[rs]?):(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i
+
+CodeMirror.defineMode("gfm", function(config, modeConfig) {
+ var codeDepth = 0;
+ function blankLine(state) {
+ state.code = false;
+ return null;
+ }
+ var gfmOverlay = {
+ startState: function() {
+ return {
+ code: false,
+ codeBlock: false,
+ ateSpace: false
+ };
+ },
+ copyState: function(s) {
+ return {
+ code: s.code,
+ codeBlock: s.codeBlock,
+ ateSpace: s.ateSpace
+ };
+ },
+ token: function(stream, state) {
+ state.combineTokens = null;
+
+ // Hack to prevent formatting override inside code blocks (block and inline)
+ if (state.codeBlock) {
+ if (stream.match(/^```+/)) {
+ state.codeBlock = false;
+ return null;
+ }
+ stream.skipToEnd();
+ return null;
+ }
+ if (stream.sol()) {
+ state.code = false;
+ }
+ if (stream.sol() && stream.match(/^```+/)) {
+ stream.skipToEnd();
+ state.codeBlock = true;
+ return null;
+ }
+ // If this block is changed, it may need to be updated in Markdown mode
+ if (stream.peek() === '`') {
+ stream.next();
+ var before = stream.pos;
+ stream.eatWhile('`');
+ var difference = 1 + stream.pos - before;
+ if (!state.code) {
+ codeDepth = difference;
+ state.code = true;
+ } else {
+ if (difference === codeDepth) { // Must be exact
+ state.code = false;
+ }
+ }
+ return null;
+ } else if (state.code) {
+ stream.next();
+ return null;
+ }
+ // Check if space. If so, links can be formatted later on
+ if (stream.eatSpace()) {
+ state.ateSpace = true;
+ return null;
+ }
+ if (stream.sol() || state.ateSpace) {
+ state.ateSpace = false;
+ if (modeConfig.gitHubSpice !== false) {
+ if(stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?=.{0,6}\d)(?:[a-f0-9]{7,40}\b)/)) {
+ // User/Project@SHA
+ // User@SHA
+ // SHA
+ state.combineTokens = true;
+ return "link";
+ } else if (stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/)) {
+ // User/Project#Num
+ // User#Num
+ // #Num
+ state.combineTokens = true;
+ return "link";
+ }
+ }
+ }
+ if (stream.match(urlRE) &&
+ stream.string.slice(stream.start - 2, stream.start) != "](" &&
+ (stream.start == 0 || /\W/.test(stream.string.charAt(stream.start - 1)))) {
+ // URLs
+ // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls
+ // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine
+ // And then limited url schemes to the CommonMark list, so foo:bar isn't matched as a URL
+ state.combineTokens = true;
+ return "link";
+ }
+ stream.next();
+ return null;
+ },
+ blankLine: blankLine
+ };
+
+ var markdownConfig = {
+ taskLists: true,
+ strikethrough: true,
+ emoji: true
+ };
+ for (var attr in modeConfig) {
+ markdownConfig[attr] = modeConfig[attr];
+ }
+ markdownConfig.name = "markdown";
+ return CodeMirror.overlayMode(CodeMirror.getMode(config, markdownConfig), gfmOverlay);
+
+}, "markdown");
+
+ CodeMirror.defineMIME("text/x-gfm", "gfm");
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/mode/markdown/markdown.js":
+/*!***********************************************************!*\
+ !*** ./node_modules/codemirror/mode/markdown/markdown.js ***!
+ \***********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"), __webpack_require__(/*! ../xml/xml */ "./node_modules/codemirror/mode/xml/xml.js"), __webpack_require__(/*! ../meta */ "./node_modules/codemirror/mode/meta.js"));
+ else {}
+})(function(CodeMirror) {
+"use strict";
+
+CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
+
+ var htmlMode = CodeMirror.getMode(cmCfg, "text/html");
+ var htmlModeMissing = htmlMode.name == "null"
+
+ function getMode(name) {
+ if (CodeMirror.findModeByName) {
+ var found = CodeMirror.findModeByName(name);
+ if (found) name = found.mime || found.mimes[0];
+ }
+ var mode = CodeMirror.getMode(cmCfg, name);
+ return mode.name == "null" ? null : mode;
+ }
+
+ // Should characters that affect highlighting be highlighted separate?
+ // Does not include characters that will be output (such as `1.` and `-` for lists)
+ if (modeCfg.highlightFormatting === undefined)
+ modeCfg.highlightFormatting = false;
+
+ // Maximum number of nested blockquotes. Set to 0 for infinite nesting.
+ // Excess `>` will emit `error` token.
+ if (modeCfg.maxBlockquoteDepth === undefined)
+ modeCfg.maxBlockquoteDepth = 0;
+
+ // Turn on task lists? ("- [ ] " and "- [x] ")
+ if (modeCfg.taskLists === undefined) modeCfg.taskLists = false;
+
+ // Turn on strikethrough syntax
+ if (modeCfg.strikethrough === undefined)
+ modeCfg.strikethrough = false;
+
+ if (modeCfg.emoji === undefined)
+ modeCfg.emoji = false;
+
+ if (modeCfg.fencedCodeBlockHighlighting === undefined)
+ modeCfg.fencedCodeBlockHighlighting = true;
+
+ if (modeCfg.xml === undefined)
+ modeCfg.xml = true;
+
+ // Allow token types to be overridden by user-provided token types.
+ if (modeCfg.tokenTypeOverrides === undefined)
+ modeCfg.tokenTypeOverrides = {};
+
+ var tokenTypes = {
+ header: "header",
+ code: "comment",
+ quote: "quote",
+ list1: "variable-2",
+ list2: "variable-3",
+ list3: "keyword",
+ hr: "hr",
+ image: "image",
+ imageAltText: "image-alt-text",
+ imageMarker: "image-marker",
+ formatting: "formatting",
+ linkInline: "link",
+ linkEmail: "link",
+ linkText: "link",
+ linkHref: "string",
+ em: "em",
+ strong: "strong",
+ strikethrough: "strikethrough",
+ emoji: "builtin"
+ };
+
+ for (var tokenType in tokenTypes) {
+ if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) {
+ tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType];
+ }
+ }
+
+ var hrRE = /^([*\-_])(?:\s*\1){2,}\s*$/
+ , listRE = /^(?:[*\-+]|^[0-9]+([.)]))\s+/
+ , taskListRE = /^\[(x| )\](?=\s)/i // Must follow listRE
+ , atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/
+ , setextHeaderRE = /^ *(?:\={1,}|-{1,})\s*$/
+ , textRE = /^[^#!\[\]*_\\<>` "'(~:]+/
+ , fencedCodeRE = /^(~~~+|```+)[ \t]*([\w+#-]*)[^\n`]*$/
+ , linkDefRE = /^\s*\[[^\]]+?\]:.*$/ // naive link-definition
+ , punctuation = /[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/
+ , expandedTab = " " // CommonMark specifies tab as 4 spaces
+
+ function switchInline(stream, state, f) {
+ state.f = state.inline = f;
+ return f(stream, state);
+ }
+
+ function switchBlock(stream, state, f) {
+ state.f = state.block = f;
+ return f(stream, state);
+ }
+
+ function lineIsEmpty(line) {
+ return !line || !/\S/.test(line.string)
+ }
+
+ // Blocks
+
+ function blankLine(state) {
+ // Reset linkTitle state
+ state.linkTitle = false;
+ state.linkHref = false;
+ state.linkText = false;
+ // Reset EM state
+ state.em = false;
+ // Reset STRONG state
+ state.strong = false;
+ // Reset strikethrough state
+ state.strikethrough = false;
+ // Reset state.quote
+ state.quote = 0;
+ // Reset state.indentedCode
+ state.indentedCode = false;
+ if (state.f == htmlBlock) {
+ var exit = htmlModeMissing
+ if (!exit) {
+ var inner = CodeMirror.innerMode(htmlMode, state.htmlState)
+ exit = inner.mode.name == "xml" && inner.state.tagStart === null &&
+ (!inner.state.context && inner.state.tokenize.isInText)
+ }
+ if (exit) {
+ state.f = inlineNormal;
+ state.block = blockNormal;
+ state.htmlState = null;
+ }
+ }
+ // Reset state.trailingSpace
+ state.trailingSpace = 0;
+ state.trailingSpaceNewLine = false;
+ // Mark this line as blank
+ state.prevLine = state.thisLine
+ state.thisLine = {stream: null}
+ return null;
+ }
+
+ function blockNormal(stream, state) {
+ var firstTokenOnLine = stream.column() === state.indentation;
+ var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream);
+ var prevLineIsIndentedCode = state.indentedCode;
+ var prevLineIsHr = state.prevLine.hr;
+ var prevLineIsList = state.list !== false;
+ var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3;
+
+ state.indentedCode = false;
+
+ var lineIndentation = state.indentation;
+ // compute once per line (on first token)
+ if (state.indentationDiff === null) {
+ state.indentationDiff = state.indentation;
+ if (prevLineIsList) {
+ // Reset inline styles which shouldn't propagate aross list items
+ state.em = false;
+ state.strong = false;
+ state.code = false;
+ state.strikethrough = false;
+
+ state.list = null;
+ // While this list item's marker's indentation is less than the deepest
+ // list item's content's indentation,pop the deepest list item
+ // indentation off the stack, and update block indentation state
+ while (lineIndentation < state.listStack[state.listStack.length - 1]) {
+ state.listStack.pop();
+ if (state.listStack.length) {
+ state.indentation = state.listStack[state.listStack.length - 1];
+ // less than the first list's indent -> the line is no longer a list
+ } else {
+ state.list = false;
+ }
+ }
+ if (state.list !== false) {
+ state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1]
+ }
+ }
+ }
+
+ // not comprehensive (currently only for setext detection purposes)
+ var allowsInlineContinuation = (
+ !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header &&
+ (!prevLineIsList || !prevLineIsIndentedCode) &&
+ !state.prevLine.fencedCodeEnd
+ );
+
+ var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) &&
+ state.indentation <= maxNonCodeIndentation && stream.match(hrRE);
+
+ var match = null;
+ if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd ||
+ state.prevLine.header || prevLineLineIsEmpty)) {
+ stream.skipToEnd();
+ state.indentedCode = true;
+ return tokenTypes.code;
+ } else if (stream.eatSpace()) {
+ return null;
+ } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) {
+ state.quote = 0;
+ state.header = match[1].length;
+ state.thisLine.header = true;
+ if (modeCfg.highlightFormatting) state.formatting = "header";
+ state.f = state.inline;
+ return getType(state);
+ } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) {
+ state.quote = firstTokenOnLine ? 1 : state.quote + 1;
+ if (modeCfg.highlightFormatting) state.formatting = "quote";
+ stream.eatSpace();
+ return getType(state);
+ } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) {
+ var listType = match[1] ? "ol" : "ul";
+
+ state.indentation = lineIndentation + stream.current().length;
+ state.list = true;
+ state.quote = 0;
+
+ // Add this list item's content's indentation to the stack
+ state.listStack.push(state.indentation);
+
+ if (modeCfg.taskLists && stream.match(taskListRE, false)) {
+ state.taskList = true;
+ }
+ state.f = state.inline;
+ if (modeCfg.highlightFormatting) state.formatting = ["list", "list-" + listType];
+ return getType(state);
+ } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) {
+ state.quote = 0;
+ state.fencedEndRE = new RegExp(match[1] + "+ *$");
+ // try switching mode
+ state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2]);
+ if (state.localMode) state.localState = CodeMirror.startState(state.localMode);
+ state.f = state.block = local;
+ if (modeCfg.highlightFormatting) state.formatting = "code-block";
+ state.code = -1
+ return getType(state);
+ // SETEXT has lowest block-scope precedence after HR, so check it after
+ // the others (code, blockquote, list...)
+ } else if (
+ // if setext set, indicates line after ---/===
+ state.setext || (
+ // line before ---/===
+ (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false &&
+ !state.code && !isHr && !linkDefRE.test(stream.string) &&
+ (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE))
+ )
+ ) {
+ if ( !state.setext ) {
+ state.header = match[0].charAt(0) == '=' ? 1 : 2;
+ state.setext = state.header;
+ } else {
+ state.header = state.setext;
+ // has no effect on type so we can reset it now
+ state.setext = 0;
+ stream.skipToEnd();
+ if (modeCfg.highlightFormatting) state.formatting = "header";
+ }
+ state.thisLine.header = true;
+ state.f = state.inline;
+ return getType(state);
+ } else if (isHr) {
+ stream.skipToEnd();
+ state.hr = true;
+ state.thisLine.hr = true;
+ return tokenTypes.hr;
+ } else if (stream.peek() === '[') {
+ return switchInline(stream, state, footnoteLink);
+ }
+
+ return switchInline(stream, state, state.inline);
+ }
+
+ function htmlBlock(stream, state) {
+ var style = htmlMode.token(stream, state.htmlState);
+ if (!htmlModeMissing) {
+ var inner = CodeMirror.innerMode(htmlMode, state.htmlState)
+ if ((inner.mode.name == "xml" && inner.state.tagStart === null &&
+ (!inner.state.context && inner.state.tokenize.isInText)) ||
+ (state.md_inside && stream.current().indexOf(">") > -1)) {
+ state.f = inlineNormal;
+ state.block = blockNormal;
+ state.htmlState = null;
+ }
+ }
+ return style;
+ }
+
+ function local(stream, state) {
+ var currListInd = state.listStack[state.listStack.length - 1] || 0;
+ var hasExitedList = state.indentation < currListInd;
+ var maxFencedEndInd = currListInd + 3;
+ if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) {
+ if (modeCfg.highlightFormatting) state.formatting = "code-block";
+ var returnType;
+ if (!hasExitedList) returnType = getType(state)
+ state.localMode = state.localState = null;
+ state.block = blockNormal;
+ state.f = inlineNormal;
+ state.fencedEndRE = null;
+ state.code = 0
+ state.thisLine.fencedCodeEnd = true;
+ if (hasExitedList) return switchBlock(stream, state, state.block);
+ return returnType;
+ } else if (state.localMode) {
+ return state.localMode.token(stream, state.localState);
+ } else {
+ stream.skipToEnd();
+ return tokenTypes.code;
+ }
+ }
+
+ // Inline
+ function getType(state) {
+ var styles = [];
+
+ if (state.formatting) {
+ styles.push(tokenTypes.formatting);
+
+ if (typeof state.formatting === "string") state.formatting = [state.formatting];
+
+ for (var i = 0; i < state.formatting.length; i++) {
+ styles.push(tokenTypes.formatting + "-" + state.formatting[i]);
+
+ if (state.formatting[i] === "header") {
+ styles.push(tokenTypes.formatting + "-" + state.formatting[i] + "-" + state.header);
+ }
+
+ // Add `formatting-quote` and `formatting-quote-#` for blockquotes
+ // Add `error` instead if the maximum blockquote nesting depth is passed
+ if (state.formatting[i] === "quote") {
+ if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {
+ styles.push(tokenTypes.formatting + "-" + state.formatting[i] + "-" + state.quote);
+ } else {
+ styles.push("error");
+ }
+ }
+ }
+ }
+
+ if (state.taskOpen) {
+ styles.push("meta");
+ return styles.length ? styles.join(' ') : null;
+ }
+ if (state.taskClosed) {
+ styles.push("property");
+ return styles.length ? styles.join(' ') : null;
+ }
+
+ if (state.linkHref) {
+ styles.push(tokenTypes.linkHref, "url");
+ } else { // Only apply inline styles to non-url text
+ if (state.strong) { styles.push(tokenTypes.strong); }
+ if (state.em) { styles.push(tokenTypes.em); }
+ if (state.strikethrough) { styles.push(tokenTypes.strikethrough); }
+ if (state.emoji) { styles.push(tokenTypes.emoji); }
+ if (state.linkText) { styles.push(tokenTypes.linkText); }
+ if (state.code) { styles.push(tokenTypes.code); }
+ if (state.image) { styles.push(tokenTypes.image); }
+ if (state.imageAltText) { styles.push(tokenTypes.imageAltText, "link"); }
+ if (state.imageMarker) { styles.push(tokenTypes.imageMarker); }
+ }
+
+ if (state.header) { styles.push(tokenTypes.header, tokenTypes.header + "-" + state.header); }
+
+ if (state.quote) {
+ styles.push(tokenTypes.quote);
+
+ // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth
+ if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {
+ styles.push(tokenTypes.quote + "-" + state.quote);
+ } else {
+ styles.push(tokenTypes.quote + "-" + modeCfg.maxBlockquoteDepth);
+ }
+ }
+
+ if (state.list !== false) {
+ var listMod = (state.listStack.length - 1) % 3;
+ if (!listMod) {
+ styles.push(tokenTypes.list1);
+ } else if (listMod === 1) {
+ styles.push(tokenTypes.list2);
+ } else {
+ styles.push(tokenTypes.list3);
+ }
+ }
+
+ if (state.trailingSpaceNewLine) {
+ styles.push("trailing-space-new-line");
+ } else if (state.trailingSpace) {
+ styles.push("trailing-space-" + (state.trailingSpace % 2 ? "a" : "b"));
+ }
+
+ return styles.length ? styles.join(' ') : null;
+ }
+
+ function handleText(stream, state) {
+ if (stream.match(textRE, true)) {
+ return getType(state);
+ }
+ return undefined;
+ }
+
+ function inlineNormal(stream, state) {
+ var style = state.text(stream, state);
+ if (typeof style !== 'undefined')
+ return style;
+
+ if (state.list) { // List marker (*, +, -, 1., etc)
+ state.list = null;
+ return getType(state);
+ }
+
+ if (state.taskList) {
+ var taskOpen = stream.match(taskListRE, true)[1] === " ";
+ if (taskOpen) state.taskOpen = true;
+ else state.taskClosed = true;
+ if (modeCfg.highlightFormatting) state.formatting = "task";
+ state.taskList = false;
+ return getType(state);
+ }
+
+ state.taskOpen = false;
+ state.taskClosed = false;
+
+ if (state.header && stream.match(/^#+$/, true)) {
+ if (modeCfg.highlightFormatting) state.formatting = "header";
+ return getType(state);
+ }
+
+ var ch = stream.next();
+
+ // Matches link titles present on next line
+ if (state.linkTitle) {
+ state.linkTitle = false;
+ var matchCh = ch;
+ if (ch === '(') {
+ matchCh = ')';
+ }
+ matchCh = (matchCh+'').replace(/([.?*+^\[\]\\(){}|-])/g, "\\$1");
+ var regex = '^\\s*(?:[^' + matchCh + '\\\\]+|\\\\\\\\|\\\\.)' + matchCh;
+ if (stream.match(new RegExp(regex), true)) {
+ return tokenTypes.linkHref;
+ }
+ }
+
+ // If this block is changed, it may need to be updated in GFM mode
+ if (ch === '`') {
+ var previousFormatting = state.formatting;
+ if (modeCfg.highlightFormatting) state.formatting = "code";
+ stream.eatWhile('`');
+ var count = stream.current().length
+ if (state.code == 0 && (!state.quote || count == 1)) {
+ state.code = count
+ return getType(state)
+ } else if (count == state.code) { // Must be exact
+ var t = getType(state)
+ state.code = 0
+ return t
+ } else {
+ state.formatting = previousFormatting
+ return getType(state)
+ }
+ } else if (state.code) {
+ return getType(state);
+ }
+
+ if (ch === '\\') {
+ stream.next();
+ if (modeCfg.highlightFormatting) {
+ var type = getType(state);
+ var formattingEscape = tokenTypes.formatting + "-escape";
+ return type ? type + " " + formattingEscape : formattingEscape;
+ }
+ }
+
+ if (ch === '!' && stream.match(/\[[^\]]*\] ?(?:\(|\[)/, false)) {
+ state.imageMarker = true;
+ state.image = true;
+ if (modeCfg.highlightFormatting) state.formatting = "image";
+ return getType(state);
+ }
+
+ if (ch === '[' && state.imageMarker && stream.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/, false)) {
+ state.imageMarker = false;
+ state.imageAltText = true
+ if (modeCfg.highlightFormatting) state.formatting = "image";
+ return getType(state);
+ }
+
+ if (ch === ']' && state.imageAltText) {
+ if (modeCfg.highlightFormatting) state.formatting = "image";
+ var type = getType(state);
+ state.imageAltText = false;
+ state.image = false;
+ state.inline = state.f = linkHref;
+ return type;
+ }
+
+ if (ch === '[' && !state.image) {
+ if (state.linkText && stream.match(/^.*?\]/)) return getType(state)
+ state.linkText = true;
+ if (modeCfg.highlightFormatting) state.formatting = "link";
+ return getType(state);
+ }
+
+ if (ch === ']' && state.linkText) {
+ if (modeCfg.highlightFormatting) state.formatting = "link";
+ var type = getType(state);
+ state.linkText = false;
+ state.inline = state.f = stream.match(/\(.*?\)| ?\[.*?\]/, false) ? linkHref : inlineNormal
+ return type;
+ }
+
+ if (ch === '<' && stream.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/, false)) {
+ state.f = state.inline = linkInline;
+ if (modeCfg.highlightFormatting) state.formatting = "link";
+ var type = getType(state);
+ if (type){
+ type += " ";
+ } else {
+ type = "";
+ }
+ return type + tokenTypes.linkInline;
+ }
+
+ if (ch === '<' && stream.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/, false)) {
+ state.f = state.inline = linkInline;
+ if (modeCfg.highlightFormatting) state.formatting = "link";
+ var type = getType(state);
+ if (type){
+ type += " ";
+ } else {
+ type = "";
+ }
+ return type + tokenTypes.linkEmail;
+ }
+
+ if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i, false)) {
+ var end = stream.string.indexOf(">", stream.pos);
+ if (end != -1) {
+ var atts = stream.string.substring(stream.start, end);
+ if (/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(atts)) state.md_inside = true;
+ }
+ stream.backUp(1);
+ state.htmlState = CodeMirror.startState(htmlMode);
+ return switchBlock(stream, state, htmlBlock);
+ }
+
+ if (modeCfg.xml && ch === '<' && stream.match(/^\/\w*?>/)) {
+ state.md_inside = false;
+ return "tag";
+ } else if (ch === "*" || ch === "_") {
+ var len = 1, before = stream.pos == 1 ? " " : stream.string.charAt(stream.pos - 2)
+ while (len < 3 && stream.eat(ch)) len++
+ var after = stream.peek() || " "
+ // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis
+ var leftFlanking = !/\s/.test(after) && (!punctuation.test(after) || /\s/.test(before) || punctuation.test(before))
+ var rightFlanking = !/\s/.test(before) && (!punctuation.test(before) || /\s/.test(after) || punctuation.test(after))
+ var setEm = null, setStrong = null
+ if (len % 2) { // Em
+ if (!state.em && leftFlanking && (ch === "*" || !rightFlanking || punctuation.test(before)))
+ setEm = true
+ else if (state.em == ch && rightFlanking && (ch === "*" || !leftFlanking || punctuation.test(after)))
+ setEm = false
+ }
+ if (len > 1) { // Strong
+ if (!state.strong && leftFlanking && (ch === "*" || !rightFlanking || punctuation.test(before)))
+ setStrong = true
+ else if (state.strong == ch && rightFlanking && (ch === "*" || !leftFlanking || punctuation.test(after)))
+ setStrong = false
+ }
+ if (setStrong != null || setEm != null) {
+ if (modeCfg.highlightFormatting) state.formatting = setEm == null ? "strong" : setStrong == null ? "em" : "strong em"
+ if (setEm === true) state.em = ch
+ if (setStrong === true) state.strong = ch
+ var t = getType(state)
+ if (setEm === false) state.em = false
+ if (setStrong === false) state.strong = false
+ return t
+ }
+ } else if (ch === ' ') {
+ if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces
+ if (stream.peek() === ' ') { // Surrounded by spaces, ignore
+ return getType(state);
+ } else { // Not surrounded by spaces, back up pointer
+ stream.backUp(1);
+ }
+ }
+ }
+
+ if (modeCfg.strikethrough) {
+ if (ch === '~' && stream.eatWhile(ch)) {
+ if (state.strikethrough) {// Remove strikethrough
+ if (modeCfg.highlightFormatting) state.formatting = "strikethrough";
+ var t = getType(state);
+ state.strikethrough = false;
+ return t;
+ } else if (stream.match(/^[^\s]/, false)) {// Add strikethrough
+ state.strikethrough = true;
+ if (modeCfg.highlightFormatting) state.formatting = "strikethrough";
+ return getType(state);
+ }
+ } else if (ch === ' ') {
+ if (stream.match(/^~~/, true)) { // Probably surrounded by space
+ if (stream.peek() === ' ') { // Surrounded by spaces, ignore
+ return getType(state);
+ } else { // Not surrounded by spaces, back up pointer
+ stream.backUp(2);
+ }
+ }
+ }
+ }
+
+ if (modeCfg.emoji && ch === ":" && stream.match(/^(?:[a-z_\d+][a-z_\d+-]*|\-[a-z_\d+][a-z_\d+-]*):/)) {
+ state.emoji = true;
+ if (modeCfg.highlightFormatting) state.formatting = "emoji";
+ var retType = getType(state);
+ state.emoji = false;
+ return retType;
+ }
+
+ if (ch === ' ') {
+ if (stream.match(/^ +$/, false)) {
+ state.trailingSpace++;
+ } else if (state.trailingSpace) {
+ state.trailingSpaceNewLine = true;
+ }
+ }
+
+ return getType(state);
+ }
+
+ function linkInline(stream, state) {
+ var ch = stream.next();
+
+ if (ch === ">") {
+ state.f = state.inline = inlineNormal;
+ if (modeCfg.highlightFormatting) state.formatting = "link";
+ var type = getType(state);
+ if (type){
+ type += " ";
+ } else {
+ type = "";
+ }
+ return type + tokenTypes.linkInline;
+ }
+
+ stream.match(/^[^>]+/, true);
+
+ return tokenTypes.linkInline;
+ }
+
+ function linkHref(stream, state) {
+ // Check if space, and return NULL if so (to avoid marking the space)
+ if(stream.eatSpace()){
+ return null;
+ }
+ var ch = stream.next();
+ if (ch === '(' || ch === '[') {
+ state.f = state.inline = getLinkHrefInside(ch === "(" ? ")" : "]");
+ if (modeCfg.highlightFormatting) state.formatting = "link-string";
+ state.linkHref = true;
+ return getType(state);
+ }
+ return 'error';
+ }
+
+ var linkRE = {
+ ")": /^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/,
+ "]": /^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/
+ }
+
+ function getLinkHrefInside(endChar) {
+ return function(stream, state) {
+ var ch = stream.next();
+
+ if (ch === endChar) {
+ state.f = state.inline = inlineNormal;
+ if (modeCfg.highlightFormatting) state.formatting = "link-string";
+ var returnState = getType(state);
+ state.linkHref = false;
+ return returnState;
+ }
+
+ stream.match(linkRE[endChar])
+ state.linkHref = true;
+ return getType(state);
+ };
+ }
+
+ function footnoteLink(stream, state) {
+ if (stream.match(/^([^\]\\]|\\.)*\]:/, false)) {
+ state.f = footnoteLinkInside;
+ stream.next(); // Consume [
+ if (modeCfg.highlightFormatting) state.formatting = "link";
+ state.linkText = true;
+ return getType(state);
+ }
+ return switchInline(stream, state, inlineNormal);
+ }
+
+ function footnoteLinkInside(stream, state) {
+ if (stream.match(/^\]:/, true)) {
+ state.f = state.inline = footnoteUrl;
+ if (modeCfg.highlightFormatting) state.formatting = "link";
+ var returnType = getType(state);
+ state.linkText = false;
+ return returnType;
+ }
+
+ stream.match(/^([^\]\\]|\\.)+/, true);
+
+ return tokenTypes.linkText;
+ }
+
+ function footnoteUrl(stream, state) {
+ // Check if space, and return NULL if so (to avoid marking the space)
+ if(stream.eatSpace()){
+ return null;
+ }
+ // Match URL
+ stream.match(/^[^\s]+/, true);
+ // Check for link title
+ if (stream.peek() === undefined) { // End of line, set flag to check next line
+ state.linkTitle = true;
+ } else { // More content on line, check if link title
+ stream.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/, true);
+ }
+ state.f = state.inline = inlineNormal;
+ return tokenTypes.linkHref + " url";
+ }
+
+ var mode = {
+ startState: function() {
+ return {
+ f: blockNormal,
+
+ prevLine: {stream: null},
+ thisLine: {stream: null},
+
+ block: blockNormal,
+ htmlState: null,
+ indentation: 0,
+
+ inline: inlineNormal,
+ text: handleText,
+
+ formatting: false,
+ linkText: false,
+ linkHref: false,
+ linkTitle: false,
+ code: 0,
+ em: false,
+ strong: false,
+ header: 0,
+ setext: 0,
+ hr: false,
+ taskList: false,
+ list: false,
+ listStack: [],
+ quote: 0,
+ trailingSpace: 0,
+ trailingSpaceNewLine: false,
+ strikethrough: false,
+ emoji: false,
+ fencedEndRE: null
+ };
+ },
+
+ copyState: function(s) {
+ return {
+ f: s.f,
+
+ prevLine: s.prevLine,
+ thisLine: s.thisLine,
+
+ block: s.block,
+ htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState),
+ indentation: s.indentation,
+
+ localMode: s.localMode,
+ localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null,
+
+ inline: s.inline,
+ text: s.text,
+ formatting: false,
+ linkText: s.linkText,
+ linkTitle: s.linkTitle,
+ linkHref: s.linkHref,
+ code: s.code,
+ em: s.em,
+ strong: s.strong,
+ strikethrough: s.strikethrough,
+ emoji: s.emoji,
+ header: s.header,
+ setext: s.setext,
+ hr: s.hr,
+ taskList: s.taskList,
+ list: s.list,
+ listStack: s.listStack.slice(0),
+ quote: s.quote,
+ indentedCode: s.indentedCode,
+ trailingSpace: s.trailingSpace,
+ trailingSpaceNewLine: s.trailingSpaceNewLine,
+ md_inside: s.md_inside,
+ fencedEndRE: s.fencedEndRE
+ };
+ },
+
+ token: function(stream, state) {
+
+ // Reset state.formatting
+ state.formatting = false;
+
+ if (stream != state.thisLine.stream) {
+ state.header = 0;
+ state.hr = false;
+
+ if (stream.match(/^\s*$/, true)) {
+ blankLine(state);
+ return null;
+ }
+
+ state.prevLine = state.thisLine
+ state.thisLine = {stream: stream}
+
+ // Reset state.taskList
+ state.taskList = false;
+
+ // Reset state.trailingSpace
+ state.trailingSpace = 0;
+ state.trailingSpaceNewLine = false;
+
+ if (!state.localState) {
+ state.f = state.block;
+ if (state.f != htmlBlock) {
+ var indentation = stream.match(/^\s*/, true)[0].replace(/\t/g, expandedTab).length;
+ state.indentation = indentation;
+ state.indentationDiff = null;
+ if (indentation > 0) return null;
+ }
+ }
+ }
+ return state.f(stream, state);
+ },
+
+ innerMode: function(state) {
+ if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode};
+ if (state.localState) return {state: state.localState, mode: state.localMode};
+ return {state: state, mode: mode};
+ },
+
+ indent: function(state, textAfter, line) {
+ if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line)
+ if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line)
+ return CodeMirror.Pass
+ },
+
+ blankLine: blankLine,
+
+ getType: getType,
+
+ blockCommentStart: "",
+ closeBrackets: "()[]{}''\"\"``",
+ fold: "markdown"
+ };
+ return mode;
+}, "xml");
+
+CodeMirror.defineMIME("text/markdown", "markdown");
+
+CodeMirror.defineMIME("text/x-markdown", "markdown");
+
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/mode/meta.js":
+/*!**********************************************!*\
+ !*** ./node_modules/codemirror/mode/meta.js ***!
+ \**********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"));
+ else {}
+})(function(CodeMirror) {
+ "use strict";
+
+ CodeMirror.modeInfo = [
+ {name: "APL", mime: "text/apl", mode: "apl", ext: ["dyalog", "apl"]},
+ {name: "PGP", mimes: ["application/pgp", "application/pgp-encrypted", "application/pgp-keys", "application/pgp-signature"], mode: "asciiarmor", ext: ["asc", "pgp", "sig"]},
+ {name: "ASN.1", mime: "text/x-ttcn-asn", mode: "asn.1", ext: ["asn", "asn1"]},
+ {name: "Asterisk", mime: "text/x-asterisk", mode: "asterisk", file: /^extensions\.conf$/i},
+ {name: "Brainfuck", mime: "text/x-brainfuck", mode: "brainfuck", ext: ["b", "bf"]},
+ {name: "C", mime: "text/x-csrc", mode: "clike", ext: ["c", "h", "ino"]},
+ {name: "C++", mime: "text/x-c++src", mode: "clike", ext: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"], alias: ["cpp"]},
+ {name: "Cobol", mime: "text/x-cobol", mode: "cobol", ext: ["cob", "cpy"]},
+ {name: "C#", mime: "text/x-csharp", mode: "clike", ext: ["cs"], alias: ["csharp", "cs"]},
+ {name: "Clojure", mime: "text/x-clojure", mode: "clojure", ext: ["clj", "cljc", "cljx"]},
+ {name: "ClojureScript", mime: "text/x-clojurescript", mode: "clojure", ext: ["cljs"]},
+ {name: "Closure Stylesheets (GSS)", mime: "text/x-gss", mode: "css", ext: ["gss"]},
+ {name: "CMake", mime: "text/x-cmake", mode: "cmake", ext: ["cmake", "cmake.in"], file: /^CMakeLists.txt$/},
+ {name: "CoffeeScript", mimes: ["application/vnd.coffeescript", "text/coffeescript", "text/x-coffeescript"], mode: "coffeescript", ext: ["coffee"], alias: ["coffee", "coffee-script"]},
+ {name: "Common Lisp", mime: "text/x-common-lisp", mode: "commonlisp", ext: ["cl", "lisp", "el"], alias: ["lisp"]},
+ {name: "Cypher", mime: "application/x-cypher-query", mode: "cypher", ext: ["cyp", "cypher"]},
+ {name: "Cython", mime: "text/x-cython", mode: "python", ext: ["pyx", "pxd", "pxi"]},
+ {name: "Crystal", mime: "text/x-crystal", mode: "crystal", ext: ["cr"]},
+ {name: "CSS", mime: "text/css", mode: "css", ext: ["css"]},
+ {name: "CQL", mime: "text/x-cassandra", mode: "sql", ext: ["cql"]},
+ {name: "D", mime: "text/x-d", mode: "d", ext: ["d"]},
+ {name: "Dart", mimes: ["application/dart", "text/x-dart"], mode: "dart", ext: ["dart"]},
+ {name: "diff", mime: "text/x-diff", mode: "diff", ext: ["diff", "patch"]},
+ {name: "Django", mime: "text/x-django", mode: "django"},
+ {name: "Dockerfile", mime: "text/x-dockerfile", mode: "dockerfile", file: /^Dockerfile$/},
+ {name: "DTD", mime: "application/xml-dtd", mode: "dtd", ext: ["dtd"]},
+ {name: "Dylan", mime: "text/x-dylan", mode: "dylan", ext: ["dylan", "dyl", "intr"]},
+ {name: "EBNF", mime: "text/x-ebnf", mode: "ebnf"},
+ {name: "ECL", mime: "text/x-ecl", mode: "ecl", ext: ["ecl"]},
+ {name: "edn", mime: "application/edn", mode: "clojure", ext: ["edn"]},
+ {name: "Eiffel", mime: "text/x-eiffel", mode: "eiffel", ext: ["e"]},
+ {name: "Elm", mime: "text/x-elm", mode: "elm", ext: ["elm"]},
+ {name: "Embedded Javascript", mime: "application/x-ejs", mode: "htmlembedded", ext: ["ejs"]},
+ {name: "Embedded Ruby", mime: "application/x-erb", mode: "htmlembedded", ext: ["erb"]},
+ {name: "Erlang", mime: "text/x-erlang", mode: "erlang", ext: ["erl"]},
+ {name: "Esper", mime: "text/x-esper", mode: "sql"},
+ {name: "Factor", mime: "text/x-factor", mode: "factor", ext: ["factor"]},
+ {name: "FCL", mime: "text/x-fcl", mode: "fcl"},
+ {name: "Forth", mime: "text/x-forth", mode: "forth", ext: ["forth", "fth", "4th"]},
+ {name: "Fortran", mime: "text/x-fortran", mode: "fortran", ext: ["f", "for", "f77", "f90", "f95"]},
+ {name: "F#", mime: "text/x-fsharp", mode: "mllike", ext: ["fs"], alias: ["fsharp"]},
+ {name: "Gas", mime: "text/x-gas", mode: "gas", ext: ["s"]},
+ {name: "Gherkin", mime: "text/x-feature", mode: "gherkin", ext: ["feature"]},
+ {name: "GitHub Flavored Markdown", mime: "text/x-gfm", mode: "gfm", file: /^(readme|contributing|history).md$/i},
+ {name: "Go", mime: "text/x-go", mode: "go", ext: ["go"]},
+ {name: "Groovy", mime: "text/x-groovy", mode: "groovy", ext: ["groovy", "gradle"], file: /^Jenkinsfile$/},
+ {name: "HAML", mime: "text/x-haml", mode: "haml", ext: ["haml"]},
+ {name: "Haskell", mime: "text/x-haskell", mode: "haskell", ext: ["hs"]},
+ {name: "Haskell (Literate)", mime: "text/x-literate-haskell", mode: "haskell-literate", ext: ["lhs"]},
+ {name: "Haxe", mime: "text/x-haxe", mode: "haxe", ext: ["hx"]},
+ {name: "HXML", mime: "text/x-hxml", mode: "haxe", ext: ["hxml"]},
+ {name: "ASP.NET", mime: "application/x-aspx", mode: "htmlembedded", ext: ["aspx"], alias: ["asp", "aspx"]},
+ {name: "HTML", mime: "text/html", mode: "htmlmixed", ext: ["html", "htm", "handlebars", "hbs"], alias: ["xhtml"]},
+ {name: "HTTP", mime: "message/http", mode: "http"},
+ {name: "IDL", mime: "text/x-idl", mode: "idl", ext: ["pro"]},
+ {name: "Pug", mime: "text/x-pug", mode: "pug", ext: ["jade", "pug"], alias: ["jade"]},
+ {name: "Java", mime: "text/x-java", mode: "clike", ext: ["java"]},
+ {name: "Java Server Pages", mime: "application/x-jsp", mode: "htmlembedded", ext: ["jsp"], alias: ["jsp"]},
+ {name: "JavaScript", mimes: ["text/javascript", "text/ecmascript", "application/javascript", "application/x-javascript", "application/ecmascript"],
+ mode: "javascript", ext: ["js"], alias: ["ecmascript", "js", "node"]},
+ {name: "JSON", mimes: ["application/json", "application/x-json"], mode: "javascript", ext: ["json", "map"], alias: ["json5"]},
+ {name: "JSON-LD", mime: "application/ld+json", mode: "javascript", ext: ["jsonld"], alias: ["jsonld"]},
+ {name: "JSX", mime: "text/jsx", mode: "jsx", ext: ["jsx"]},
+ {name: "Jinja2", mime: "text/jinja2", mode: "jinja2", ext: ["j2", "jinja", "jinja2"]},
+ {name: "Julia", mime: "text/x-julia", mode: "julia", ext: ["jl"]},
+ {name: "Kotlin", mime: "text/x-kotlin", mode: "clike", ext: ["kt"]},
+ {name: "LESS", mime: "text/x-less", mode: "css", ext: ["less"]},
+ {name: "LiveScript", mime: "text/x-livescript", mode: "livescript", ext: ["ls"], alias: ["ls"]},
+ {name: "Lua", mime: "text/x-lua", mode: "lua", ext: ["lua"]},
+ {name: "Markdown", mime: "text/x-markdown", mode: "markdown", ext: ["markdown", "md", "mkd"]},
+ {name: "mIRC", mime: "text/mirc", mode: "mirc"},
+ {name: "MariaDB SQL", mime: "text/x-mariadb", mode: "sql"},
+ {name: "Mathematica", mime: "text/x-mathematica", mode: "mathematica", ext: ["m", "nb"]},
+ {name: "Modelica", mime: "text/x-modelica", mode: "modelica", ext: ["mo"]},
+ {name: "MUMPS", mime: "text/x-mumps", mode: "mumps", ext: ["mps"]},
+ {name: "MS SQL", mime: "text/x-mssql", mode: "sql"},
+ {name: "mbox", mime: "application/mbox", mode: "mbox", ext: ["mbox"]},
+ {name: "MySQL", mime: "text/x-mysql", mode: "sql"},
+ {name: "Nginx", mime: "text/x-nginx-conf", mode: "nginx", file: /nginx.*\.conf$/i},
+ {name: "NSIS", mime: "text/x-nsis", mode: "nsis", ext: ["nsh", "nsi"]},
+ {name: "NTriples", mimes: ["application/n-triples", "application/n-quads", "text/n-triples"],
+ mode: "ntriples", ext: ["nt", "nq"]},
+ {name: "Objective-C", mime: "text/x-objectivec", mode: "clike", ext: ["m", "mm"], alias: ["objective-c", "objc"]},
+ {name: "OCaml", mime: "text/x-ocaml", mode: "mllike", ext: ["ml", "mli", "mll", "mly"]},
+ {name: "Octave", mime: "text/x-octave", mode: "octave", ext: ["m"]},
+ {name: "Oz", mime: "text/x-oz", mode: "oz", ext: ["oz"]},
+ {name: "Pascal", mime: "text/x-pascal", mode: "pascal", ext: ["p", "pas"]},
+ {name: "PEG.js", mime: "null", mode: "pegjs", ext: ["jsonld"]},
+ {name: "Perl", mime: "text/x-perl", mode: "perl", ext: ["pl", "pm"]},
+ {name: "PHP", mimes: ["text/x-php", "application/x-httpd-php", "application/x-httpd-php-open"], mode: "php", ext: ["php", "php3", "php4", "php5", "php7", "phtml"]},
+ {name: "Pig", mime: "text/x-pig", mode: "pig", ext: ["pig"]},
+ {name: "Plain Text", mime: "text/plain", mode: "null", ext: ["txt", "text", "conf", "def", "list", "log"]},
+ {name: "PLSQL", mime: "text/x-plsql", mode: "sql", ext: ["pls"]},
+ {name: "PostgreSQL", mime: "text/x-pgsql", mode: "sql"},
+ {name: "PowerShell", mime: "application/x-powershell", mode: "powershell", ext: ["ps1", "psd1", "psm1"]},
+ {name: "Properties files", mime: "text/x-properties", mode: "properties", ext: ["properties", "ini", "in"], alias: ["ini", "properties"]},
+ {name: "ProtoBuf", mime: "text/x-protobuf", mode: "protobuf", ext: ["proto"]},
+ {name: "Python", mime: "text/x-python", mode: "python", ext: ["BUILD", "bzl", "py", "pyw"], file: /^(BUCK|BUILD)$/},
+ {name: "Puppet", mime: "text/x-puppet", mode: "puppet", ext: ["pp"]},
+ {name: "Q", mime: "text/x-q", mode: "q", ext: ["q"]},
+ {name: "R", mime: "text/x-rsrc", mode: "r", ext: ["r", "R"], alias: ["rscript"]},
+ {name: "reStructuredText", mime: "text/x-rst", mode: "rst", ext: ["rst"], alias: ["rst"]},
+ {name: "RPM Changes", mime: "text/x-rpm-changes", mode: "rpm"},
+ {name: "RPM Spec", mime: "text/x-rpm-spec", mode: "rpm", ext: ["spec"]},
+ {name: "Ruby", mime: "text/x-ruby", mode: "ruby", ext: ["rb"], alias: ["jruby", "macruby", "rake", "rb", "rbx"]},
+ {name: "Rust", mime: "text/x-rustsrc", mode: "rust", ext: ["rs"]},
+ {name: "SAS", mime: "text/x-sas", mode: "sas", ext: ["sas"]},
+ {name: "Sass", mime: "text/x-sass", mode: "sass", ext: ["sass"]},
+ {name: "Scala", mime: "text/x-scala", mode: "clike", ext: ["scala"]},
+ {name: "Scheme", mime: "text/x-scheme", mode: "scheme", ext: ["scm", "ss"]},
+ {name: "SCSS", mime: "text/x-scss", mode: "css", ext: ["scss"]},
+ {name: "Shell", mimes: ["text/x-sh", "application/x-sh"], mode: "shell", ext: ["sh", "ksh", "bash"], alias: ["bash", "sh", "zsh"], file: /^PKGBUILD$/},
+ {name: "Sieve", mime: "application/sieve", mode: "sieve", ext: ["siv", "sieve"]},
+ {name: "Slim", mimes: ["text/x-slim", "application/x-slim"], mode: "slim", ext: ["slim"]},
+ {name: "Smalltalk", mime: "text/x-stsrc", mode: "smalltalk", ext: ["st"]},
+ {name: "Smarty", mime: "text/x-smarty", mode: "smarty", ext: ["tpl"]},
+ {name: "Solr", mime: "text/x-solr", mode: "solr"},
+ {name: "SML", mime: "text/x-sml", mode: "mllike", ext: ["sml", "sig", "fun", "smackspec"]},
+ {name: "Soy", mime: "text/x-soy", mode: "soy", ext: ["soy"], alias: ["closure template"]},
+ {name: "SPARQL", mime: "application/sparql-query", mode: "sparql", ext: ["rq", "sparql"], alias: ["sparul"]},
+ {name: "Spreadsheet", mime: "text/x-spreadsheet", mode: "spreadsheet", alias: ["excel", "formula"]},
+ {name: "SQL", mime: "text/x-sql", mode: "sql", ext: ["sql"]},
+ {name: "SQLite", mime: "text/x-sqlite", mode: "sql"},
+ {name: "Squirrel", mime: "text/x-squirrel", mode: "clike", ext: ["nut"]},
+ {name: "Stylus", mime: "text/x-styl", mode: "stylus", ext: ["styl"]},
+ {name: "Swift", mime: "text/x-swift", mode: "swift", ext: ["swift"]},
+ {name: "sTeX", mime: "text/x-stex", mode: "stex"},
+ {name: "LaTeX", mime: "text/x-latex", mode: "stex", ext: ["text", "ltx", "tex"], alias: ["tex"]},
+ {name: "SystemVerilog", mime: "text/x-systemverilog", mode: "verilog", ext: ["v", "sv", "svh"]},
+ {name: "Tcl", mime: "text/x-tcl", mode: "tcl", ext: ["tcl"]},
+ {name: "Textile", mime: "text/x-textile", mode: "textile", ext: ["textile"]},
+ {name: "TiddlyWiki ", mime: "text/x-tiddlywiki", mode: "tiddlywiki"},
+ {name: "Tiki wiki", mime: "text/tiki", mode: "tiki"},
+ {name: "TOML", mime: "text/x-toml", mode: "toml", ext: ["toml"]},
+ {name: "Tornado", mime: "text/x-tornado", mode: "tornado"},
+ {name: "troff", mime: "text/troff", mode: "troff", ext: ["1", "2", "3", "4", "5", "6", "7", "8", "9"]},
+ {name: "TTCN", mime: "text/x-ttcn", mode: "ttcn", ext: ["ttcn", "ttcn3", "ttcnpp"]},
+ {name: "TTCN_CFG", mime: "text/x-ttcn-cfg", mode: "ttcn-cfg", ext: ["cfg"]},
+ {name: "Turtle", mime: "text/turtle", mode: "turtle", ext: ["ttl"]},
+ {name: "TypeScript", mime: "application/typescript", mode: "javascript", ext: ["ts"], alias: ["ts"]},
+ {name: "TypeScript-JSX", mime: "text/typescript-jsx", mode: "jsx", ext: ["tsx"], alias: ["tsx"]},
+ {name: "Twig", mime: "text/x-twig", mode: "twig"},
+ {name: "Web IDL", mime: "text/x-webidl", mode: "webidl", ext: ["webidl"]},
+ {name: "VB.NET", mime: "text/x-vb", mode: "vb", ext: ["vb"]},
+ {name: "VBScript", mime: "text/vbscript", mode: "vbscript", ext: ["vbs"]},
+ {name: "Velocity", mime: "text/velocity", mode: "velocity", ext: ["vtl"]},
+ {name: "Verilog", mime: "text/x-verilog", mode: "verilog", ext: ["v"]},
+ {name: "VHDL", mime: "text/x-vhdl", mode: "vhdl", ext: ["vhd", "vhdl"]},
+ {name: "Vue.js Component", mimes: ["script/x-vue", "text/x-vue"], mode: "vue", ext: ["vue"]},
+ {name: "XML", mimes: ["application/xml", "text/xml"], mode: "xml", ext: ["xml", "xsl", "xsd", "svg"], alias: ["rss", "wsdl", "xsd"]},
+ {name: "XQuery", mime: "application/xquery", mode: "xquery", ext: ["xy", "xquery"]},
+ {name: "Yacas", mime: "text/x-yacas", mode: "yacas", ext: ["ys"]},
+ {name: "YAML", mimes: ["text/x-yaml", "text/yaml"], mode: "yaml", ext: ["yaml", "yml"], alias: ["yml"]},
+ {name: "Z80", mime: "text/x-z80", mode: "z80", ext: ["z80"]},
+ {name: "mscgen", mime: "text/x-mscgen", mode: "mscgen", ext: ["mscgen", "mscin", "msc"]},
+ {name: "xu", mime: "text/x-xu", mode: "mscgen", ext: ["xu"]},
+ {name: "msgenny", mime: "text/x-msgenny", mode: "mscgen", ext: ["msgenny"]}
+ ];
+ // Ensure all modes have a mime property for backwards compatibility
+ for (var i = 0; i < CodeMirror.modeInfo.length; i++) {
+ var info = CodeMirror.modeInfo[i];
+ if (info.mimes) info.mime = info.mimes[0];
+ }
+
+ CodeMirror.findModeByMIME = function(mime) {
+ mime = mime.toLowerCase();
+ for (var i = 0; i < CodeMirror.modeInfo.length; i++) {
+ var info = CodeMirror.modeInfo[i];
+ if (info.mime == mime) return info;
+ if (info.mimes) for (var j = 0; j < info.mimes.length; j++)
+ if (info.mimes[j] == mime) return info;
+ }
+ if (/\+xml$/.test(mime)) return CodeMirror.findModeByMIME("application/xml")
+ if (/\+json$/.test(mime)) return CodeMirror.findModeByMIME("application/json")
+ };
+
+ CodeMirror.findModeByExtension = function(ext) {
+ for (var i = 0; i < CodeMirror.modeInfo.length; i++) {
+ var info = CodeMirror.modeInfo[i];
+ if (info.ext) for (var j = 0; j < info.ext.length; j++)
+ if (info.ext[j] == ext) return info;
+ }
+ };
+
+ CodeMirror.findModeByFileName = function(filename) {
+ for (var i = 0; i < CodeMirror.modeInfo.length; i++) {
+ var info = CodeMirror.modeInfo[i];
+ if (info.file && info.file.test(filename)) return info;
+ }
+ var dot = filename.lastIndexOf(".");
+ var ext = dot > -1 && filename.substring(dot + 1, filename.length);
+ if (ext) return CodeMirror.findModeByExtension(ext);
+ };
+
+ CodeMirror.findModeByName = function(name) {
+ name = name.toLowerCase();
+ for (var i = 0; i < CodeMirror.modeInfo.length; i++) {
+ var info = CodeMirror.modeInfo[i];
+ if (info.name.toLowerCase() == name) return info;
+ if (info.alias) for (var j = 0; j < info.alias.length; j++)
+ if (info.alias[j].toLowerCase() == name) return info;
+ }
+ };
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/codemirror/mode/xml/xml.js":
+/*!*************************************************!*\
+ !*** ./node_modules/codemirror/mode/xml/xml.js ***!
+ \*************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (true) // CommonJS
+ mod(__webpack_require__(/*! ../../lib/codemirror */ "./node_modules/codemirror/lib/codemirror.js"));
+ else {}
+})(function(CodeMirror) {
+"use strict";
+
+var htmlConfig = {
+ autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,
+ 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,
+ 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,
+ 'track': true, 'wbr': true, 'menuitem': true},
+ implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,
+ 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,
+ 'th': true, 'tr': true},
+ contextGrabbers: {
+ 'dd': {'dd': true, 'dt': true},
+ 'dt': {'dd': true, 'dt': true},
+ 'li': {'li': true},
+ 'option': {'option': true, 'optgroup': true},
+ 'optgroup': {'optgroup': true},
+ 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,
+ 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,
+ 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,
+ 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,
+ 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},
+ 'rp': {'rp': true, 'rt': true},
+ 'rt': {'rp': true, 'rt': true},
+ 'tbody': {'tbody': true, 'tfoot': true},
+ 'td': {'td': true, 'th': true},
+ 'tfoot': {'tbody': true},
+ 'th': {'td': true, 'th': true},
+ 'thead': {'tbody': true, 'tfoot': true},
+ 'tr': {'tr': true}
+ },
+ doNotIndent: {"pre": true},
+ allowUnquoted: true,
+ allowMissing: true,
+ caseFold: true
+}
+
+var xmlConfig = {
+ autoSelfClosers: {},
+ implicitlyClosed: {},
+ contextGrabbers: {},
+ doNotIndent: {},
+ allowUnquoted: false,
+ allowMissing: false,
+ allowMissingTagName: false,
+ caseFold: false
+}
+
+CodeMirror.defineMode("xml", function(editorConf, config_) {
+ var indentUnit = editorConf.indentUnit
+ var config = {}
+ var defaults = config_.htmlMode ? htmlConfig : xmlConfig
+ for (var prop in defaults) config[prop] = defaults[prop]
+ for (var prop in config_) config[prop] = config_[prop]
+
+ // Return variables for tokenizers
+ var type, setStyle;
+
+ function inText(stream, state) {
+ function chain(parser) {
+ state.tokenize = parser;
+ return parser(stream, state);
+ }
+
+ var ch = stream.next();
+ if (ch == "<") {
+ if (stream.eat("!")) {
+ if (stream.eat("[")) {
+ if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>"));
+ else return null;
+ } else if (stream.match("--")) {
+ return chain(inBlock("comment", "-->"));
+ } else if (stream.match("DOCTYPE", true, true)) {
+ stream.eatWhile(/[\w\._\-]/);
+ return chain(doctype(1));
+ } else {
+ return null;
+ }
+ } else if (stream.eat("?")) {
+ stream.eatWhile(/[\w\._\-]/);
+ state.tokenize = inBlock("meta", "?>");
+ return "meta";
+ } else {
+ type = stream.eat("/") ? "closeTag" : "openTag";
+ state.tokenize = inTag;
+ return "tag bracket";
+ }
+ } else if (ch == "&") {
+ var ok;
+ if (stream.eat("#")) {
+ if (stream.eat("x")) {
+ ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";");
+ } else {
+ ok = stream.eatWhile(/[\d]/) && stream.eat(";");
+ }
+ } else {
+ ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";");
+ }
+ return ok ? "atom" : "error";
+ } else {
+ stream.eatWhile(/[^&<]/);
+ return null;
+ }
+ }
+ inText.isInText = true;
+
+ function inTag(stream, state) {
+ var ch = stream.next();
+ if (ch == ">" || (ch == "/" && stream.eat(">"))) {
+ state.tokenize = inText;
+ type = ch == ">" ? "endTag" : "selfcloseTag";
+ return "tag bracket";
+ } else if (ch == "=") {
+ type = "equals";
+ return null;
+ } else if (ch == "<") {
+ state.tokenize = inText;
+ state.state = baseState;
+ state.tagName = state.tagStart = null;
+ var next = state.tokenize(stream, state);
+ return next ? next + " tag error" : "tag error";
+ } else if (/[\'\"]/.test(ch)) {
+ state.tokenize = inAttribute(ch);
+ state.stringStartCol = stream.column();
+ return state.tokenize(stream, state);
+ } else {
+ stream.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/);
+ return "word";
+ }
+ }
+
+ function inAttribute(quote) {
+ var closure = function(stream, state) {
+ while (!stream.eol()) {
+ if (stream.next() == quote) {
+ state.tokenize = inTag;
+ break;
+ }
+ }
+ return "string";
+ };
+ closure.isInAttribute = true;
+ return closure;
+ }
+
+ function inBlock(style, terminator) {
+ return function(stream, state) {
+ while (!stream.eol()) {
+ if (stream.match(terminator)) {
+ state.tokenize = inText;
+ break;
+ }
+ stream.next();
+ }
+ return style;
+ }
+ }
+
+ function doctype(depth) {
+ return function(stream, state) {
+ var ch;
+ while ((ch = stream.next()) != null) {
+ if (ch == "<") {
+ state.tokenize = doctype(depth + 1);
+ return state.tokenize(stream, state);
+ } else if (ch == ">") {
+ if (depth == 1) {
+ state.tokenize = inText;
+ break;
+ } else {
+ state.tokenize = doctype(depth - 1);
+ return state.tokenize(stream, state);
+ }
+ }
+ }
+ return "meta";
+ };
+ }
+
+ function Context(state, tagName, startOfLine) {
+ this.prev = state.context;
+ this.tagName = tagName;
+ this.indent = state.indented;
+ this.startOfLine = startOfLine;
+ if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))
+ this.noIndent = true;
+ }
+ function popContext(state) {
+ if (state.context) state.context = state.context.prev;
+ }
+ function maybePopContext(state, nextTagName) {
+ var parentTagName;
+ while (true) {
+ if (!state.context) {
+ return;
+ }
+ parentTagName = state.context.tagName;
+ if (!config.contextGrabbers.hasOwnProperty(parentTagName) ||
+ !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {
+ return;
+ }
+ popContext(state);
+ }
+ }
+
+ function baseState(type, stream, state) {
+ if (type == "openTag") {
+ state.tagStart = stream.column();
+ return tagNameState;
+ } else if (type == "closeTag") {
+ return closeTagNameState;
+ } else {
+ return baseState;
+ }
+ }
+ function tagNameState(type, stream, state) {
+ if (type == "word") {
+ state.tagName = stream.current();
+ setStyle = "tag";
+ return attrState;
+ } else if (config.allowMissingTagName && type == "endTag") {
+ setStyle = "tag bracket";
+ return attrState(type, stream, state);
+ } else {
+ setStyle = "error";
+ return tagNameState;
+ }
+ }
+ function closeTagNameState(type, stream, state) {
+ if (type == "word") {
+ var tagName = stream.current();
+ if (state.context && state.context.tagName != tagName &&
+ config.implicitlyClosed.hasOwnProperty(state.context.tagName))
+ popContext(state);
+ if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {
+ setStyle = "tag";
+ return closeState;
+ } else {
+ setStyle = "tag error";
+ return closeStateErr;
+ }
+ } else if (config.allowMissingTagName && type == "endTag") {
+ setStyle = "tag bracket";
+ return closeState(type, stream, state);
+ } else {
+ setStyle = "error";
+ return closeStateErr;
+ }
+ }
+
+ function closeState(type, _stream, state) {
+ if (type != "endTag") {
+ setStyle = "error";
+ return closeState;
+ }
+ popContext(state);
+ return baseState;
+ }
+ function closeStateErr(type, stream, state) {
+ setStyle = "error";
+ return closeState(type, stream, state);
+ }
+
+ function attrState(type, _stream, state) {
+ if (type == "word") {
+ setStyle = "attribute";
+ return attrEqState;
+ } else if (type == "endTag" || type == "selfcloseTag") {
+ var tagName = state.tagName, tagStart = state.tagStart;
+ state.tagName = state.tagStart = null;
+ if (type == "selfcloseTag" ||
+ config.autoSelfClosers.hasOwnProperty(tagName)) {
+ maybePopContext(state, tagName);
+ } else {
+ maybePopContext(state, tagName);
+ state.context = new Context(state, tagName, tagStart == state.indented);
+ }
+ return baseState;
+ }
+ setStyle = "error";
+ return attrState;
+ }
+ function attrEqState(type, stream, state) {
+ if (type == "equals") return attrValueState;
+ if (!config.allowMissing) setStyle = "error";
+ return attrState(type, stream, state);
+ }
+ function attrValueState(type, stream, state) {
+ if (type == "string") return attrContinuedState;
+ if (type == "word" && config.allowUnquoted) {setStyle = "string"; return attrState;}
+ setStyle = "error";
+ return attrState(type, stream, state);
+ }
+ function attrContinuedState(type, stream, state) {
+ if (type == "string") return attrContinuedState;
+ return attrState(type, stream, state);
+ }
+
+ return {
+ startState: function(baseIndent) {
+ var state = {tokenize: inText,
+ state: baseState,
+ indented: baseIndent || 0,
+ tagName: null, tagStart: null,
+ context: null}
+ if (baseIndent != null) state.baseIndent = baseIndent
+ return state
+ },
+
+ token: function(stream, state) {
+ if (!state.tagName && stream.sol())
+ state.indented = stream.indentation();
+
+ if (stream.eatSpace()) return null;
+ type = null;
+ var style = state.tokenize(stream, state);
+ if ((style || type) && style != "comment") {
+ setStyle = null;
+ state.state = state.state(type || style, stream, state);
+ if (setStyle)
+ style = setStyle == "error" ? style + " error" : setStyle;
+ }
+ return style;
+ },
+
+ indent: function(state, textAfter, fullLine) {
+ var context = state.context;
+ // Indent multi-line strings (e.g. css).
+ if (state.tokenize.isInAttribute) {
+ if (state.tagStart == state.indented)
+ return state.stringStartCol + 1;
+ else
+ return state.indented + indentUnit;
+ }
+ if (context && context.noIndent) return CodeMirror.Pass;
+ if (state.tokenize != inTag && state.tokenize != inText)
+ return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0;
+ // Indent the starts of attribute names.
+ if (state.tagName) {
+ if (config.multilineTagIndentPastTag !== false)
+ return state.tagStart + state.tagName.length + 2;
+ else
+ return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);
+ }
+ if (config.alignCDATA && /$/,
+ blockCommentStart: "",
+
+ configuration: config.htmlMode ? "html" : "xml",
+ helperType: config.htmlMode ? "html" : "xml",
+
+ skipAttribute: function(state) {
+ if (state.state == attrValueState)
+ state.state = attrState
+ }
+ };
+});
+
+CodeMirror.defineMIME("text/xml", "xml");
+CodeMirror.defineMIME("application/xml", "xml");
+if (!CodeMirror.mimeModes.hasOwnProperty("text/html"))
+ CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true});
+
+});
+
+
+/***/ }),
+
+/***/ "./node_modules/prismjs/components/prism-css.js":
+/*!******************************************************!*\
+ !*** ./node_modules/prismjs/components/prism-css.js ***!
+ \******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+(function (Prism) {
+
+ var string = /("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;
+
+ Prism.languages.css = {
+ 'comment': /\/\*[\s\S]*?\*\//,
+ 'atrule': {
+ pattern: /@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/,
+ inside: {
+ 'rule': /@[\w-]+/
+ // See rest below
+ }
+ },
+ 'url': {
+ pattern: RegExp('url\\((?:' + string.source + '|[^\n\r()]*)\\)', 'i'),
+ inside: {
+ 'function': /^url/i,
+ 'punctuation': /^\(|\)$/
+ }
+ },
+ 'selector': RegExp('[^{}\\s](?:[^{};"\']|' + string.source + ')*?(?=\\s*\\{)'),
+ 'string': {
+ pattern: string,
+ greedy: true
+ },
+ 'property': /[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,
+ 'important': /!important\b/i,
+ 'function': /[-a-z0-9]+(?=\()/i,
+ 'punctuation': /[(){};:,]/
+ };
+
+ Prism.languages.css['atrule'].inside.rest = Prism.languages.css;
+
+ var markup = Prism.languages.markup;
+ if (markup) {
+ markup.tag.addInlined('style', 'css');
+
+ Prism.languages.insertBefore('inside', 'attr-value', {
+ 'style-attr': {
+ pattern: /\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,
+ inside: {
+ 'attr-name': {
+ pattern: /^\s*style/i,
+ inside: markup.tag.inside
+ },
+ 'punctuation': /^\s*=\s*['"]|['"]\s*$/,
+ 'attr-value': {
+ pattern: /.+/i,
+ inside: Prism.languages.css
+ }
+ },
+ alias: 'language-css'
+ }
+ }, markup.tag);
+ }
+
+}(Prism));
+
+
+/***/ }),
+
+/***/ "./node_modules/prismjs/components/prism-javascript.js":
+/*!*************************************************************!*\
+ !*** ./node_modules/prismjs/components/prism-javascript.js ***!
+ \*************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+Prism.languages.javascript = Prism.languages.extend('clike', {
+ 'class-name': [
+ Prism.languages.clike['class-name'],
+ {
+ pattern: /(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,
+ lookbehind: true
+ }
+ ],
+ 'keyword': [
+ {
+ pattern: /((?:^|})\s*)(?:catch|finally)\b/,
+ lookbehind: true
+ },
+ {
+ pattern: /(^|[^.])\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,
+ lookbehind: true
+ },
+ ],
+ 'number': /\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,
+ // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)
+ 'function': /#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
+ 'operator': /-[-=]?|\+[+=]?|!=?=?|<=?|>>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/
+});
+
+Prism.languages.javascript['class-name'][0].pattern = /(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/;
+
+Prism.languages.insertBefore('javascript', 'keyword', {
+ 'regex': {
+ pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=\s*($|[\r\n,.;})\]]))/,
+ lookbehind: true,
+ greedy: true
+ },
+ // This must be declared before keyword because we use "function" inside the look-forward
+ 'function-variable': {
+ pattern: /#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,
+ alias: 'function'
+ },
+ 'parameter': [
+ {
+ pattern: /(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,
+ lookbehind: true,
+ inside: Prism.languages.javascript
+ },
+ {
+ pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,
+ inside: Prism.languages.javascript
+ },
+ {
+ pattern: /(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,
+ lookbehind: true,
+ inside: Prism.languages.javascript
+ },
+ {
+ pattern: /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,
+ lookbehind: true,
+ inside: Prism.languages.javascript
+ }
+ ],
+ 'constant': /\b[A-Z](?:[A-Z_]|\dx?)*\b/
+});
+
+Prism.languages.insertBefore('javascript', 'string', {
+ 'template-string': {
+ pattern: /`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,
+ greedy: true,
+ inside: {
+ 'template-punctuation': {
+ pattern: /^`|`$/,
+ alias: 'string'
+ },
+ 'interpolation': {
+ pattern: /((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,
+ lookbehind: true,
+ inside: {
+ 'interpolation-punctuation': {
+ pattern: /^\${|}$/,
+ alias: 'punctuation'
+ },
+ rest: Prism.languages.javascript
+ }
+ },
+ 'string': /[\s\S]+/
+ }
+ }
+});
+
+if (Prism.languages.markup) {
+ Prism.languages.markup.tag.addInlined('script', 'javascript');
+}
+
+Prism.languages.js = Prism.languages.javascript;
+
+
+/***/ }),
+
+/***/ "./node_modules/prismjs/components/prism-json.js":
+/*!*******************************************************!*\
+ !*** ./node_modules/prismjs/components/prism-json.js ***!
+ \*******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+Prism.languages.json = {
+ 'property': {
+ pattern: /"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,
+ greedy: true
+ },
+ 'string': {
+ pattern: /"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,
+ greedy: true
+ },
+ 'comment': /\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,
+ 'number': /-?\d+\.?\d*(e[+-]?\d+)?/i,
+ 'punctuation': /[{}[\],]/,
+ 'operator': /:/,
+ 'boolean': /\b(?:true|false)\b/,
+ 'null': {
+ pattern: /\bnull\b/,
+ alias: 'keyword'
+ }
+};
+
+
+/***/ }),
+
+/***/ "./node_modules/prismjs/components/prism-markup-templating.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/prismjs/components/prism-markup-templating.js ***!
+ \********************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+(function (Prism) {
+
+ /**
+ * Returns the placeholder for the given language id and index.
+ *
+ * @param {string} language
+ * @param {string|number} index
+ * @returns {string}
+ */
+ function getPlaceholder(language, index) {
+ return '___' + language.toUpperCase() + index + '___';
+ }
+
+ Object.defineProperties(Prism.languages['markup-templating'] = {}, {
+ buildPlaceholders: {
+ /**
+ * Tokenize all inline templating expressions matching `placeholderPattern`.
+ *
+ * If `replaceFilter` is provided, only matches of `placeholderPattern` for which `replaceFilter` returns
+ * `true` will be replaced.
+ *
+ * @param {object} env The environment of the `before-tokenize` hook.
+ * @param {string} language The language id.
+ * @param {RegExp} placeholderPattern The matches of this pattern will be replaced by placeholders.
+ * @param {(match: string) => boolean} [replaceFilter]
+ */
+ value: function (env, language, placeholderPattern, replaceFilter) {
+ if (env.language !== language) {
+ return;
+ }
+
+ var tokenStack = env.tokenStack = [];
+
+ env.code = env.code.replace(placeholderPattern, function (match) {
+ if (typeof replaceFilter === 'function' && !replaceFilter(match)) {
+ return match;
+ }
+ var i = tokenStack.length;
+ var placeholder;
+
+ // Check for existing strings
+ while (env.code.indexOf(placeholder = getPlaceholder(language, i)) !== -1)
+ ++i;
+
+ // Create a sparse array
+ tokenStack[i] = match;
+
+ return placeholder;
+ });
+
+ // Switch the grammar to markup
+ env.grammar = Prism.languages.markup;
+ }
+ },
+ tokenizePlaceholders: {
+ /**
+ * Replace placeholders with proper tokens after tokenizing.
+ *
+ * @param {object} env The environment of the `after-tokenize` hook.
+ * @param {string} language The language id.
+ */
+ value: function (env, language) {
+ if (env.language !== language || !env.tokenStack) {
+ return;
+ }
+
+ // Switch the grammar back
+ env.grammar = Prism.languages[language];
+
+ var j = 0;
+ var keys = Object.keys(env.tokenStack);
+
+ function walkTokens(tokens) {
+ for (var i = 0; i < tokens.length; i++) {
+ // all placeholders are replaced already
+ if (j >= keys.length) {
+ break;
+ }
+
+ var token = tokens[i];
+ if (typeof token === 'string' || (token.content && typeof token.content === 'string')) {
+ var k = keys[j];
+ var t = env.tokenStack[k];
+ var s = typeof token === 'string' ? token : token.content;
+ var placeholder = getPlaceholder(language, k);
+
+ var index = s.indexOf(placeholder);
+ if (index > -1) {
+ ++j;
+
+ var before = s.substring(0, index);
+ var middle = new Prism.Token(language, Prism.tokenize(t, env.grammar), 'language-' + language, t);
+ var after = s.substring(index + placeholder.length);
+
+ var replacement = [];
+ if (before) {
+ replacement.push.apply(replacement, walkTokens([before]));
+ }
+ replacement.push(middle);
+ if (after) {
+ replacement.push.apply(replacement, walkTokens([after]));
+ }
+
+ if (typeof token === 'string') {
+ tokens.splice.apply(tokens, [i, 1].concat(replacement));
+ } else {
+ token.content = replacement;
+ }
+ }
+ } else if (token.content /* && typeof token.content !== 'string' */) {
+ walkTokens(token.content);
+ }
+ }
+
+ return tokens;
+ }
+
+ walkTokens(env.tokens);
+ }
+ }
+ });
+
+}(Prism));
+
+
+/***/ }),
+
+/***/ "./node_modules/prismjs/components/prism-markup.js":
+/*!*********************************************************!*\
+ !*** ./node_modules/prismjs/components/prism-markup.js ***!
+ \*********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+Prism.languages.markup = {
+ 'comment': //,
+ 'prolog': /<\?[\s\S]+?\?>/,
+ 'doctype': //i,
+ 'cdata': //i,
+ 'tag': {
+ pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,
+ greedy: true,
+ inside: {
+ 'tag': {
+ pattern: /^<\/?[^\s>\/]+/i,
+ inside: {
+ 'punctuation': /^<\/?/,
+ 'namespace': /^[^\s>\/:]+:/
+ }
+ },
+ 'attr-value': {
+ pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,
+ inside: {
+ 'punctuation': [
+ /^=/,
+ {
+ pattern: /^(\s*)["']|["']$/,
+ lookbehind: true
+ }
+ ]
+ }
+ },
+ 'punctuation': /\/?>/,
+ 'attr-name': {
+ pattern: /[^\s>\/]+/,
+ inside: {
+ 'namespace': /^[^\s>\/:]+:/
+ }
+ }
+
+ }
+ },
+ 'entity': /?[\da-z]{1,8};/i
+};
+
+Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] =
+ Prism.languages.markup['entity'];
+
+// Plugin to make entity title show the real entity, idea by Roman Komarov
+Prism.hooks.add('wrap', function(env) {
+
+ if (env.type === 'entity') {
+ env.attributes['title'] = env.content.replace(/&/, '&');
+ }
+});
+
+Object.defineProperty(Prism.languages.markup.tag, 'addInlined', {
+ /**
+ * Adds an inlined language to markup.
+ *
+ * An example of an inlined language is CSS with `