diff --git a/BackEnd/api/userData.ashx b/BackEnd/api/userData.ashx
index cdec04b..26dfc55 100644
--- a/BackEnd/api/userData.ashx
+++ b/BackEnd/api/userData.ashx
@@ -84,6 +84,17 @@ public class userData : IHttpHandler, IReadOnlySessionState {
userObj.user_type = type;
+ string user_sql = string.Format("select * from users where user_email = '{0}' and user_uid <> '{1}' and user_onjob = 'Y'", sys_email, user_uid);
+ autoBindDataTable objUserSQL = new autoBindDataTable(user_sql);
+
+ if (objUserSQL.dataRows.Count > 0) {
+ objRet.ret = "no";
+ objRet.err_code = "0011";
+ objRet.message = "此Email已經有人使用! ";
+ json.WriteObject(context.Response.OutputStream, objRet);
+ return;
+ }
+
if (sys_pwd != "") {
userObj.user_pwd = sys_pwd;
}
@@ -129,6 +140,17 @@ public class userData : IHttpHandler, IReadOnlySessionState {
}
if (method == "add") {
+ string user_sql = string.Format("select * from users where user_email = '{0}' and user_onjob = 'Y'", sys_email);
+ autoBindDataTable objUserSQL = new autoBindDataTable(user_sql);
+
+ if (objUserSQL.dataRows.Count > 0) {
+ objRet.ret = "no";
+ objRet.err_code = "0011";
+ objRet.message = "此Email已經有人使用! ";
+ json.WriteObject(context.Response.OutputStream, objRet);
+ return;
+ }
+
if (type == "N")
{
userSQL = new autoBindDataTable(string.Format("select * from users where user_id = '{0}'", elab_select));
diff --git a/BackEnd/api/validGoogleLogin.ashx b/BackEnd/api/validGoogleLogin.ashx
new file mode 100644
index 0000000..ddeb404
--- /dev/null
+++ b/BackEnd/api/validGoogleLogin.ashx
@@ -0,0 +1,153 @@
+<%@ WebHandler Language="C#" Class="validGoogleLogin" %>
+
+using System;
+using System.Web;
+using Google.Apis.Auth;
+using System.Runtime.Serialization.Json;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System.Web.Services.Protocols;
+using System.Security.Cryptography;
+using System.Text;
+using System.Web.SessionState;
+using System.Data;
+using System.Threading.Tasks;
+using System.Threading;
+using System.Collections.Generic;
+
+public class validGoogleLogin : System.Web.HttpTaskAsyncHandler {
+
+ public override async System.Threading.Tasks.Task ProcessRequestAsync(HttpContext context) {
+ result objRet = new result();
+ DataContractJsonSerializer json = new DataContractJsonSerializer(objRet.GetType());
+ context.Response.ContentType = "application/json;charset=utf-8";
+
+ string jwt = (context.Request["jwt"] == null) ? "" : context.Request["jwt"].ToString();//回傳憑證
+ string remember = (context.Request["rem"] == null) ? "N" : context.Request["rem"].ToString();
+
+ if (jwt == "") {
+
+ objRet.ret = "no";
+ objRet.err_code = "0001";
+ objRet.message = "無JWT資料可以登入!";
+ json.WriteObject(context.Response.OutputStream, objRet);
+ return;
+ }
+
+ //validate it using Google.Apis.Auth (null if invalid)
+ //var validPayload = await GoogleJsonWebSignature.ValidateAsync(jwt);
+ GoogleJsonWebSignature.Payload payload = await ValidateGoogleTokenAsync(jwt);
+
+ if (payload == null) {
+ objRet.ret = "no";
+ objRet.err_code = "0002";
+ objRet.message = "JWT驗證失敗!";
+ json.WriteObject(context.Response.OutputStream, objRet);
+ return;
+ }
+ string googleID = System.Web.Configuration.WebConfigurationManager.AppSettings["googleOAuthID"].ToString();
+ string audience = payload.Audience.ToString();
+
+ if (audience != googleID) {
+ objRet.ret = "no";
+ objRet.err_code = "0003";
+ objRet.message = "JWT驗證失敗!";
+ json.WriteObject(context.Response.OutputStream, objRet);
+ return;
+ }
+
+ string userId = payload.Subject;
+ string email = payload.Email;
+ string name = payload.Name;
+
+ string user_sql = string.Format("select * from users where user_email = '{0}' and user_onjob = 'Y'", email);
+ autoBindDataTable objUser = new autoBindDataTable(user_sql);
+
+ if (objUser.dataRows.Count == 0) {
+ objRet.ret = "no";
+ objRet.err_code = "0004";
+ objRet.message = "無此Email帳號於PRM系統中,請直屬主管加入!";
+ json.WriteObject(context.Response.OutputStream, objRet);
+ return;
+ }
+
+ string token_key = CreateRandomCode(36);
+ string user_uid = objUser.dataRows[0]["user_uid"].ToString();
+ string id = objUser.dataRows[0]["user_id"].ToString();
+
+ autoBindDataTable dataToken = new autoBindDataTable("select * from token where token_sn = -1");
+ DataRow rowToken = dataToken.newRow;
+ dataToken.dataRows.Add(rowToken);
+ rowToken["token_key"] = token_key;
+ rowToken["user_uid"] = user_uid;
+ rowToken["token_isremember"] = remember;
+ rowToken["token_expireddate"] = DateTime.Now.AddMinutes(60);
+
+
+ HttpCookie tokenCookie = new HttpCookie("token");
+ HttpCookie idCookie = new HttpCookie("id");
+ tokenCookie["token"] = token_key;
+ tokenCookie["uid"] = user_uid;
+ idCookie["id"] = id;
+
+ idCookie.Expires = DateTime.Now.AddDays(31);
+
+ if (remember == "Y") {
+ tokenCookie.Expires = DateTime.Now.AddDays(10);
+ rowToken["token_expireddate"] = DateTime.Now.AddDays(10);
+ }
+
+ dataToken.updateDataTable();
+ context.Response.Cookies.Add(tokenCookie);
+ context.Response.Cookies.Add(idCookie);
+
+ objRet.ret = "yes";
+ json.WriteObject(context.Response.OutputStream, objRet);
+ }
+
+ private static async Task
ValidateGoogleTokenAsync(string idToken)
+ {
+ try
+ {
+ var payload = await GoogleJsonWebSignature.ValidateAsync(idToken);
+
+ if (payload == null || string.IsNullOrEmpty(payload.Email))
+ throw new UnauthorizedAccessException("Invalid Google Token");
+
+ return payload;
+ }
+ catch (Exception ex){
+ string exM = ex.Message;
+ throw new UnauthorizedAccessException("Invalid Google Token");
+ return null;
+ }
+ }
+
+ public string CreateRandomCode(int Number)
+ {
+ string allChar = "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";
+ string[] allCharArray = allChar.Split(',');
+ string randomCode = "";
+
+ Random rand = new Random(Guid.NewGuid().GetHashCode());
+ for (int i = 0; i <= Number - 1; i++)
+ {
+ int t = rand.Next(allCharArray.Length);
+ randomCode += allCharArray[t];
+ }
+ return randomCode;
+ }
+
+ public class result {
+ public string ret = "no";
+ public string err_code = "0000";
+ public string message = "";
+ }
+
+ public bool IsReusable {
+ get {
+ return false;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/BackEnd/assets/vendor/busy-load/app.css b/BackEnd/assets/vendor/busy-load/app.css
new file mode 100644
index 0000000..981bd4e
--- /dev/null
+++ b/BackEnd/assets/vendor/busy-load/app.css
@@ -0,0 +1,285 @@
+/**
+* Spinners
+*
+* @see http://tobiasahlin.com/spinkit/
+*/
+.spinner-cube-grid {
+ width: 40px;
+ height: 40px; }
+.spinner-cube-grid .sk-cube {
+ width: 33%;
+ height: 33%;
+ background-color: #333;
+ float: left;
+ -webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out;
+ animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; }
+.spinner-cube-grid .sk-cube1 {
+ -webkit-animation-delay: 0.2s;
+ animation-delay: 0.2s; }
+.spinner-cube-grid .sk-cube2 {
+ -webkit-animation-delay: 0.3s;
+ animation-delay: 0.3s; }
+.spinner-cube-grid .sk-cube3 {
+ -webkit-animation-delay: 0.4s;
+ animation-delay: 0.4s; }
+.spinner-cube-grid .sk-cube4 {
+ -webkit-animation-delay: 0.1s;
+ animation-delay: 0.1s; }
+.spinner-cube-grid .sk-cube5 {
+ -webkit-animation-delay: 0.2s;
+ animation-delay: 0.2s; }
+.spinner-cube-grid .sk-cube6 {
+ -webkit-animation-delay: 0.3s;
+ animation-delay: 0.3s; }
+.spinner-cube-grid .sk-cube7 {
+ -webkit-animation-delay: 0s;
+ animation-delay: 0s; }
+.spinner-cube-grid .sk-cube8 {
+ -webkit-animation-delay: 0.1s;
+ animation-delay: 0.1s; }
+.spinner-cube-grid .sk-cube9 {
+ -webkit-animation-delay: 0.2s;
+ animation-delay: 0.2s; }
+@-webkit-keyframes sk-cubeGridScaleDelay {
+ 0%, 70%, 100% {
+ -webkit-transform: scale3D(1, 1, 1);
+ transform: scale3D(1, 1, 1); }
+ 35% {
+ -webkit-transform: scale3D(0, 0, 1);
+ transform: scale3D(0, 0, 1); } }
+@keyframes sk-cubeGridScaleDelay {
+ 0%, 70%, 100% {
+ -webkit-transform: scale3D(1, 1, 1);
+ transform: scale3D(1, 1, 1); }
+ 35% {
+ -webkit-transform: scale3D(0, 0, 1);
+ transform: scale3D(0, 0, 1); } }
+.spinner-circle-line {
+ margin: 10px auto 0;
+ width: 70px;
+ text-align: center; }
+.spinner-circle-line > div {
+ width: 18px;
+ height: 18px;
+ background-color: #333;
+ border-radius: 100%;
+ display: inline-block;
+ -webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;
+ animation: sk-bouncedelay 1.4s infinite ease-in-out both; }
+.spinner-circle-line .bounce1 {
+ -webkit-animation-delay: -0.32s;
+ animation-delay: -0.32s; }
+.spinner-circle-line .bounce2 {
+ -webkit-animation-delay: -0.16s;
+ animation-delay: -0.16s; }
+@-webkit-keyframes sk-bouncedelay {
+ 0%, 80%, 100% {
+ -webkit-transform: scale(0); }
+ 40% {
+ -webkit-transform: scale(1); } }
+@keyframes sk-bouncedelay {
+ 0%, 80%, 100% {
+ -webkit-transform: scale(0);
+ transform: scale(0); }
+ 40% {
+ -webkit-transform: scale(1);
+ transform: scale(1); } }
+.spinner-circles {
+ width: 40px;
+ height: 40px;
+ position: relative;
+ text-align: center;
+ -webkit-animation: sk-rotate 2.0s infinite linear;
+ animation: sk-rotate 2.0s infinite linear; }
+.dot1, .dot2 {
+ width: 60%;
+ height: 60%;
+ display: inline-block;
+ position: absolute;
+ top: 0;
+ background-color: #333;
+ border-radius: 100%;
+ -webkit-animation: sk-bounce 2.0s infinite ease-in-out;
+ animation: sk-bounce 2.0s infinite ease-in-out; }
+.dot2 {
+ top: auto;
+ bottom: 0;
+ -webkit-animation-delay: -1.0s;
+ animation-delay: -1.0s; }
+@-webkit-keyframes sk-rotate {
+ 100% {
+ -webkit-transform: rotate(360deg); } }
+@keyframes sk-rotate {
+ 100% {
+ transform: rotate(360deg);
+ -webkit-transform: rotate(360deg); } }
+@-webkit-keyframes sk-bounce {
+ 0%, 100% {
+ -webkit-transform: scale(0); }
+ 50% {
+ -webkit-transform: scale(1); } }
+@keyframes sk-bounce {
+ 0%, 100% {
+ transform: scale(0);
+ -webkit-transform: scale(0); }
+ 50% {
+ transform: scale(1);
+ -webkit-transform: scale(1); } }
+/* Cube */
+.spinner-cube {
+ width: 40px;
+ height: 40px;
+ background-color: #333;
+ margin: 100px auto;
+ -webkit-animation: sk-rotateplane 1.2s infinite ease-in-out;
+ animation: sk-rotateplane 1.2s infinite ease-in-out; }
+@-webkit-keyframes sk-rotateplane {
+ 0% {
+ -webkit-transform: perspective(120px); }
+ 50% {
+ -webkit-transform: perspective(120px) rotateY(180deg); }
+ 100% {
+ -webkit-transform: perspective(120px) rotateY(180deg) rotateX(180deg); } }
+@keyframes sk-rotateplane {
+ 0% {
+ transform: perspective(120px) rotateX(0deg) rotateY(0deg);
+ -webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg); }
+ 50% {
+ transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
+ -webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); }
+ 100% {
+ transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
+ -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); } }
+.spinner-cubes {
+ width: 40px;
+ height: 40px;
+ position: relative; }
+.cube1, .cube2 {
+ background-color: #333;
+ width: 15px;
+ height: 15px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ -webkit-animation: sk-cubemove 1.8s infinite ease-in-out;
+ animation: sk-cubemove 1.8s infinite ease-in-out; }
+.cube2 {
+ -webkit-animation-delay: -0.9s;
+ animation-delay: -0.9s; }
+@-webkit-keyframes sk-cubemove {
+ 25% {
+ -webkit-transform: translateX(42px) rotate(-90deg) scale(0.5); }
+ 50% {
+ -webkit-transform: translateX(42px) translateY(42px) rotate(-180deg); }
+ 75% {
+ -webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5); }
+ 100% {
+ -webkit-transform: rotate(-360deg); } }
+@keyframes sk-cubemove {
+ 25% {
+ transform: translateX(42px) rotate(-90deg) scale(0.5);
+ -webkit-transform: translateX(42px) rotate(-90deg) scale(0.5); }
+ 50% {
+ transform: translateX(42px) translateY(42px) rotate(-179deg);
+ -webkit-transform: translateX(42px) translateY(42px) rotate(-179deg); }
+ 50.1% {
+ transform: translateX(42px) translateY(42px) rotate(-180deg);
+ -webkit-transform: translateX(42px) translateY(42px) rotate(-180deg); }
+ 75% {
+ transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
+ -webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5); }
+ 100% {
+ transform: rotate(-360deg);
+ -webkit-transform: rotate(-360deg); } }
+.spinner-pump {
+ width: 40px;
+ height: 40px;
+ position: relative; }
+.double-bounce1, .double-bounce2 {
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ background-color: #333;
+ opacity: 0.6;
+ position: absolute;
+ top: 0;
+ left: 0;
+ -webkit-animation: sk-bounce 2.0s infinite ease-in-out;
+ animation: sk-bounce 2.0s infinite ease-in-out; }
+.double-bounce2 {
+ -webkit-animation-delay: -1.0s;
+ animation-delay: -1.0s; }
+@-webkit-keyframes sk-bounce {
+ 0%, 100% {
+ -webkit-transform: scale(0); }
+ 50% {
+ -webkit-transform: scale(1); } }
+@keyframes sk-bounce {
+ 0%, 100% {
+ transform: scale(0);
+ -webkit-transform: scale(0); }
+ 50% {
+ transform: scale(1);
+ -webkit-transform: scale(1); } }
+/* Pulsar */
+.spinner-pulsar {
+ width: 40px;
+ height: 40px;
+ background-color: #333;
+ border-radius: 100%;
+ -webkit-animation: sk-scaleout 1.0s infinite ease-in-out;
+ animation: sk-scaleout 1.0s infinite ease-in-out; }
+@-webkit-keyframes sk-scaleout {
+ 0% {
+ -webkit-transform: scale(0); }
+ 100% {
+ -webkit-transform: scale(1);
+ opacity: 0; } }
+@keyframes sk-scaleout {
+ 0% {
+ -webkit-transform: scale(0);
+ transform: scale(0); }
+ 100% {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ opacity: 0; } }
+/* Accordion */
+.spinner-accordion {
+ margin: 100px auto;
+ width: 50px;
+ height: 40px;
+ text-align: center;
+ font-size: 10px; }
+.spinner-accordion > div {
+ background-color: #333;
+ height: 100%;
+ width: 6px;
+ display: inline-block;
+ -webkit-animation: sk-stretchdelay 1.2s infinite ease-in-out;
+ animation: sk-stretchdelay 1.2s infinite ease-in-out; }
+.spinner-accordion.rect2 {
+ -webkit-animation-delay: -1.1s;
+ animation-delay: -1.1s; }
+.spinner-accordion .rect3 {
+ -webkit-animation-delay: -1.0s;
+ animation-delay: -1.0s; }
+.spinner-accordion .rect4 {
+ -webkit-animation-delay: -0.9s;
+ animation-delay: -0.9s; }
+.spinner-accordion.rect5 {
+ -webkit-animation-delay: -0.8s;
+ animation-delay: -0.8s; }
+@-webkit-keyframes sk-stretchdelay {
+ 0%, 40%, 100% {
+ -webkit-transform: scaleY(0.4); }
+ 20% {
+ -webkit-transform: scaleY(1); } }
+@keyframes sk-stretchdelay {
+ 0%, 40%, 100% {
+ transform: scaleY(0.4);
+ -webkit-transform: scaleY(0.4); }
+ 20% {
+ transform: scaleY(1);
+ -webkit-transform: scaleY(1); } }
+.no-scroll {
+ overflow: hidden; }
diff --git a/BackEnd/assets/vendor/busy-load/app.js b/BackEnd/assets/vendor/busy-load/app.js
new file mode 100644
index 0000000..70a123c
--- /dev/null
+++ b/BackEnd/assets/vendor/busy-load/app.js
@@ -0,0 +1,2506 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory(require("jQuery"));
+ else if(typeof define === 'function' && define.amd)
+ define(["jQuery"], factory);
+ else if(typeof exports === 'object')
+ exports["busyLoad"] = factory(require("jQuery"));
+ else
+ root["busyLoad"] = factory(root["jQuery"]);
+})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_64__) {
+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, {
+/******/ configurable: false,
+/******/ enumerable: true,
+/******/ get: getter
+/******/ });
+/******/ }
+/******/ };
+/******/
+/******/ // 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 = 13);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseGet = __webpack_require__(18);
+
+/**
+ * Gets the value at `path` of `object`. If the resolved value is
+ * `undefined`, the `defaultValue` is returned in its place.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.7.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @param {*} [defaultValue] The value returned for `undefined` resolved values.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.get(object, 'a[0].b.c');
+ * // => 3
+ *
+ * _.get(object, ['a', '0', 'b', 'c']);
+ * // => 3
+ *
+ * _.get(object, 'a.b.c', 'default');
+ * // => 'default'
+ */
+function get(object, path, defaultValue) {
+ var result = object == null ? undefined : baseGet(object, path);
+ return result === undefined ? defaultValue : result;
+}
+
+module.exports = get;
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+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; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Component = exports.Component = function () {
+ function Component(tag, options, busyLoadOptions) {
+ _classCallCheck(this, Component);
+
+ this._options = options;
+ this._busyLoadOptions = busyLoadOptions;
+
+ this.setTag(tag);
+ // this.debugOptions();
+ }
+
+ /**
+ * OPTIONS
+ */
+
+ _createClass(Component, [{
+ key: "debugOptions",
+ value: function debugOptions() {
+ console.log(this._options);
+ }
+ }, {
+ key: "extendOptions",
+ value: function extendOptions(options) {
+ $.extend(this._options, options);
+ }
+
+ /**
+ * TAG
+ */
+
+ }, {
+ key: "setTag",
+ value: function setTag(tag) {
+ if (tag instanceof jQuery) {
+ this._$tag = tag;
+ } else if (typeof tag === 'string' || tag instanceof String) {
+ this._$tag = $("<" + tag + "/>", this._options);
+ } else {
+ throw "wrong type for creating a tag";
+ }
+ }
+ }, {
+ key: "options",
+ get: function get() {
+ return this._options;
+ },
+ set: function set(newOptions) {
+ this._options = newOptions;
+ }
+ }, {
+ key: "tag",
+ get: function get() {
+ return this._$tag;
+ },
+ set: function set($tag) {
+ this._$tag = $tag;
+ }
+ }]);
+
+ return Component;
+}();
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var getNative = __webpack_require__(10);
+
+/* Built-in method references that are verified to be native. */
+var nativeCreate = getNative(Object, 'create');
+
+module.exports = nativeCreate;
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var eq = __webpack_require__(46);
+
+/**
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+}
+
+module.exports = assocIndexOf;
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isKeyable = __webpack_require__(52);
+
+/**
+ * Gets the data for `map`.
+ *
+ * @private
+ * @param {Object} map The map to query.
+ * @param {string} key The reference key.
+ * @returns {*} Returns the map data.
+ */
+function getMapData(map, key) {
+ var data = map.__data__;
+ return isKeyable(key)
+ ? data[typeof key == 'string' ? 'string' : 'hash']
+ : data.map;
+}
+
+module.exports = getMapData;
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports) {
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+var isArray = Array.isArray;
+
+module.exports = isArray;
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseGetTag = __webpack_require__(9),
+ isObjectLike = __webpack_require__(25);
+
+/** `Object#toString` result references. */
+var symbolTag = '[object Symbol]';
+
+/**
+ * Checks if `value` is classified as a `Symbol` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
+ * @example
+ *
+ * _.isSymbol(Symbol.iterator);
+ * // => true
+ *
+ * _.isSymbol('abc');
+ * // => false
+ */
+function isSymbol(value) {
+ return typeof value == 'symbol' ||
+ (isObjectLike(value) && baseGetTag(value) == symbolTag);
+}
+
+module.exports = isSymbol;
+
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var root = __webpack_require__(8);
+
+/** Built-in value references. */
+var Symbol = root.Symbol;
+
+module.exports = Symbol;
+
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var freeGlobal = __webpack_require__(21);
+
+/** Detect free variable `self`. */
+var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+/** Used as a reference to the global object. */
+var root = freeGlobal || freeSelf || Function('return this')();
+
+module.exports = root;
+
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Symbol = __webpack_require__(7),
+ getRawTag = __webpack_require__(23),
+ objectToString = __webpack_require__(24);
+
+/** `Object#toString` result references. */
+var nullTag = '[object Null]',
+ undefinedTag = '[object Undefined]';
+
+/** Built-in value references. */
+var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
+
+/**
+ * The base implementation of `getTag` without fallbacks for buggy environments.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+function baseGetTag(value) {
+ if (value == null) {
+ return value === undefined ? undefinedTag : nullTag;
+ }
+ return (symToStringTag && symToStringTag in Object(value))
+ ? getRawTag(value)
+ : objectToString(value);
+}
+
+module.exports = baseGetTag;
+
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseIsNative = __webpack_require__(33),
+ getValue = __webpack_require__(38);
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = getValue(object, key);
+ return baseIsNative(value) ? value : undefined;
+}
+
+module.exports = getNative;
+
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports) {
+
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ var type = typeof value;
+ return value != null && (type == 'object' || type == 'function');
+}
+
+module.exports = isObject;
+
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = {
+ spinner: "pump", // pump, accordion, pulsar, cube, cubes, circle-line, circles, cube-grid
+ image: false,
+ fontawesome: false, // "fa fa-refresh fa-spin fa-2x fa-fw"
+ custom: false, // jQuery Object
+ color: "#fff",
+ background: "rgba(0, 0, 0, 0.21)",
+ maxSize: "50px", // Integer/String only for spinners & images, not fontawesome & custom
+ minSize: "20px", // Integer/String only for spinners & images, not fontawesome & custom
+ text: false,
+ textColor: false, // default is color
+ textMargin: ".5rem",
+ textPosition: "right", // left, right, top, bottom
+ fontSize: "1rem",
+ fullScreen: false,
+ animation: false, // fade, slide
+ animationDuration: "fast", // String, Integer
+ containerClass: "busy-load-container",
+ containerItemClass: "busy-load-container-item",
+ spinnerClass: "busy-load-spinner",
+ textClass: "busy-load-text"
+};
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+__webpack_require__(14);
+
+var _busyLoad = __webpack_require__(15);
+
+var _defaults = __webpack_require__(12);
+
+var _defaults2 = _interopRequireDefault(_defaults);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var jQuery = __webpack_require__(64);
+
+(function ($) {
+ $.fn.busyLoad = _busyLoad.busyLoad;
+ $.busyLoadSetup = _busyLoad.busyLoadSetup;
+ $.busyLoadFull = _busyLoad.busyLoadFull;
+ $.fn.busyLoad.defaults = _defaults2.default;
+})(jQuery);
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports) {
+
+// removed by extract-text-webpack-plugin
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.busyLoadSetup = busyLoadSetup;
+exports.busyLoad = busyLoad;
+exports.busyLoadFull = busyLoadFull;
+
+var _classBusyLoad = __webpack_require__(16);
+
+var _defaults = __webpack_require__(12);
+
+var _defaults2 = _interopRequireDefault(_defaults);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function busyLoadSetup(settings) {
+ $.extend(true, _defaults2.default, settings);
+}
+
+function busyLoad(action, options) {
+
+ return this.each(function () {
+ var bl = new _classBusyLoad.BusyLoad($(this), JSON.parse(JSON.stringify(_defaults2.default)), options);
+
+ switch (action) {
+ case "show":
+ bl.show();
+ break;
+ case "hide":
+ bl.hide();
+ break;
+ default:
+ throw 'don\'t know action \'' + action + '\'';
+ }
+ });
+}
+
+function busyLoadFull(action, options) {
+
+ var $body = $('body');
+ var bl = new _classBusyLoad.BusyLoad($body, JSON.parse(JSON.stringify(_defaults2.default)), options);
+
+ switch (action.toLowerCase()) {
+ case "show":
+ $body.addClass("no-scroll");
+ bl.caller = $body;
+ bl.extendSettings({
+ fullScreen: true
+ });
+ bl.show();
+
+ break;
+
+ case "hide":
+ bl.hide();
+ $body.removeClass("no-scroll");
+ break;
+ }
+
+ return $body;
+}
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.BusyLoad = undefined;
+
+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 _classContainer = __webpack_require__(17);
+
+var _classContainerItem = __webpack_require__(60);
+
+var _classText = __webpack_require__(61);
+
+var _classSpinner = __webpack_require__(62);
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var get = __webpack_require__(0);
+
+var BusyLoad = exports.BusyLoad = function () {
+ function BusyLoad(caller, defaults, options) {
+ _classCallCheck(this, BusyLoad);
+
+ this._settings = defaults;
+ this._caller = caller;
+
+ this.extendSettings(options);
+ // this.debugSettings();
+ }
+
+ _createClass(BusyLoad, [{
+ key: 'debugSettings',
+ value: function debugSettings() {
+ console.log(this._settings.fullScreen);
+ }
+ }, {
+ key: 'extendSettings',
+ value: function extendSettings(options) {
+ $.extend(this._settings, options);
+ }
+ }, {
+ key: 'animateShow',
+ value: function animateShow($tag) {
+ var _this = this;
+
+ var callback = function callback() {
+ return $tag.trigger("bl.shown", [$tag, $(_this.caller)]);
+ };
+
+ this.caller.append($tag); // already hidden
+ $tag.trigger("bl.show", [$tag, $(this.caller)]);
+
+ if (get(this.settings, "animation", false)) {
+
+ switch (get(this.settings, "animation").toLowerCase()) {
+ case "fade":
+ $tag = $tag.fadeIn(get(this.settings, "animationDuration", "fast"), callback);
+ break;
+ case "slide":
+ $tag = $tag.slideDown(get(this.settings, "animationDuration", "fast"), callback);
+ break;
+ default:
+ throw "don't know animation: " + get(this.settings, "animation");
+ }
+ } else {
+ $tag.show(0, callback);
+ }
+
+ return $tag;
+ }
+ }, {
+ key: 'animateHide',
+ value: function animateHide($tag) {
+ var _this2 = this;
+
+ var callback = function callback() {
+ $tag.trigger("bl.hidden", [$tag, $(_this2.caller)]);
+ $tag.remove();
+ };
+
+ $tag.trigger("bl.hide", [$tag, $(this.caller)]);
+
+ if (get(this.settings, "animation", false)) {
+ switch (get(this.settings, "animation").toLowerCase()) {
+ case "fade":
+ $tag = $tag.fadeOut(get(this.settings, "animationDuration", "fast"), callback);
+ break;
+ case "slide":
+ $tag = $tag.slideUp(get(this.settings, "animationDuration", "fast"), callback);
+ break;
+ default:
+ throw "don't know animation: " + get(this.settings, "animation");
+ }
+ } else {
+ $tag.hide(0, callback);
+ }
+ }
+ }, {
+ key: 'getOverlay',
+ value: function getOverlay() {
+ // already existent?
+ if (this._caller.data("busy-load-container")) {
+ return $("#" + this._caller.data("busy-load-container"));
+ }
+ // no ... create one
+ else {
+ // container & elements
+ this._container = new _classContainer.Container(this._settings);
+ this._containerItem = new _classContainerItem.ContainerItem(this._settings);
+
+ // append text
+ if (get(this.settings, "text", false)) {
+ this._loadingText = new _classText.Text(this._settings);
+ this._containerItem.tag.append(this._loadingText.tag);
+ }
+ // append spinner
+ if (get(this.settings, "spinner", "pump") !== false) {
+ this._spinner = new _classSpinner.Spinner(this._settings);
+ this._containerItem.tag.append(this._spinner.tag);
+ }
+
+ // container
+ this._container.tag.append(this._containerItem.tag).hide();
+ }
+
+ return this._container.tag;
+ }
+ }, {
+ key: 'createRandomString',
+ value: function createRandomString() {
+ return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
+ }
+ }, {
+ key: 'toggle',
+ value: function toggle($tag, action) {
+ // show
+ if (action == 'show') {
+ var randomString = this.createRandomString();
+
+ // position static?
+ if (this.caller.css('position') === 'static') {
+ this.caller.css('position', 'relative');
+ }
+
+ this._caller.addClass('busy-load-active');
+ $tag.attr('id', randomString);
+ $tag = this.animateShow($tag);
+
+ this._caller.data("busy-load-container", randomString);
+ }
+ // hide
+ else {
+ this.animateHide($tag);
+ this._caller.removeData("busy-load-container");
+ this._caller.removeClass('busy-load-active');
+ }
+ }
+ }, {
+ key: 'show',
+ value: function show() {
+ this.toggle(this.getOverlay(), "show");
+ }
+ }, {
+ key: 'hide',
+ value: function hide() {
+ var containerId = this._caller.data('busy-load-container');
+ this.toggle($("#" + containerId), "hide");
+ }
+ }, {
+ key: 'settings',
+ get: function get() {
+ return this._settings;
+ },
+ set: function set(newOptions) {
+ this._settings = newOptions;
+ }
+ }, {
+ key: 'caller',
+ get: function get() {
+ return this._caller;
+ },
+ set: function set(newOptions) {
+ this._caller = newOptions;
+ }
+ }]);
+
+ return BusyLoad;
+}();
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Container = undefined;
+
+var _classComponent = __webpack_require__(1);
+
+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; }
+
+var get = __webpack_require__(0);
+
+var Container = exports.Container = function (_Component) {
+ _inherits(Container, _Component);
+
+ function Container(busyLoadOptions) {
+ _classCallCheck(this, Container);
+
+ return _possibleConstructorReturn(this, (Container.__proto__ || Object.getPrototypeOf(Container)).call(this, 'div', {
+ "class": get(busyLoadOptions, "containerClass"),
+ "css": {
+ "position": get(busyLoadOptions, "fullScreen", false) ? "fixed" : "absolute",
+ "top": 0,
+ "left": 0,
+ "background": get(busyLoadOptions, "background", "#fff"),
+ "color": get(busyLoadOptions, "color", "#0000001a"),
+ "display": "flex",
+ "align-items": "center",
+ "justify-content": "center",
+ "width": "100%",
+ "height": "100%",
+ "z-index": 9999
+ }
+ }, busyLoadOptions));
+ }
+
+ return Container;
+}(_classComponent.Component);
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var castPath = __webpack_require__(19),
+ toKey = __webpack_require__(59);
+
+/**
+ * The base implementation of `_.get` without support for default values.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @returns {*} Returns the resolved value.
+ */
+function baseGet(object, path) {
+ path = castPath(path, object);
+
+ var index = 0,
+ length = path.length;
+
+ while (object != null && index < length) {
+ object = object[toKey(path[index++])];
+ }
+ return (index && index == length) ? object : undefined;
+}
+
+module.exports = baseGet;
+
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isArray = __webpack_require__(5),
+ isKey = __webpack_require__(20),
+ stringToPath = __webpack_require__(26),
+ toString = __webpack_require__(56);
+
+/**
+ * Casts `value` to a path array if it's not one.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @param {Object} [object] The object to query keys on.
+ * @returns {Array} Returns the cast property path array.
+ */
+function castPath(value, object) {
+ if (isArray(value)) {
+ return value;
+ }
+ return isKey(value, object) ? [value] : stringToPath(toString(value));
+}
+
+module.exports = castPath;
+
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isArray = __webpack_require__(5),
+ isSymbol = __webpack_require__(6);
+
+/** Used to match property names within property paths. */
+var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
+ reIsPlainProp = /^\w*$/;
+
+/**
+ * Checks if `value` is a property name and not a property path.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {Object} [object] The object to query keys on.
+ * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
+ */
+function isKey(value, object) {
+ if (isArray(value)) {
+ return false;
+ }
+ var type = typeof value;
+ if (type == 'number' || type == 'symbol' || type == 'boolean' ||
+ value == null || isSymbol(value)) {
+ return true;
+ }
+ return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
+ (object != null && value in Object(object));
+}
+
+module.exports = isKey;
+
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports, __webpack_require__) {
+
+/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */
+var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
+
+module.exports = freeGlobal;
+
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(22)))
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports) {
+
+var g;
+
+// This works in non-strict mode
+g = (function() {
+ return this;
+})();
+
+try {
+ // This works if eval is allowed (see CSP)
+ g = g || Function("return this")() || (1,eval)("this");
+} catch(e) {
+ // This works if the window reference is available
+ if(typeof window === "object")
+ g = window;
+}
+
+// g can still be undefined, but nothing to do about it...
+// We return undefined, instead of nothing here, so it's
+// easier to handle this case. if(!global) { ...}
+
+module.exports = g;
+
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Symbol = __webpack_require__(7);
+
+/** Used for built-in method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var nativeObjectToString = objectProto.toString;
+
+/** Built-in value references. */
+var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
+
+/**
+ * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the raw `toStringTag`.
+ */
+function getRawTag(value) {
+ var isOwn = hasOwnProperty.call(value, symToStringTag),
+ tag = value[symToStringTag];
+
+ try {
+ value[symToStringTag] = undefined;
+ var unmasked = true;
+ } catch (e) {}
+
+ var result = nativeObjectToString.call(value);
+ if (unmasked) {
+ if (isOwn) {
+ value[symToStringTag] = tag;
+ } else {
+ delete value[symToStringTag];
+ }
+ }
+ return result;
+}
+
+module.exports = getRawTag;
+
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports) {
+
+/** Used for built-in method references. */
+var objectProto = Object.prototype;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var nativeObjectToString = objectProto.toString;
+
+/**
+ * Converts `value` to a string using `Object.prototype.toString`.
+ *
+ * @private
+ * @param {*} value The value to convert.
+ * @returns {string} Returns the converted string.
+ */
+function objectToString(value) {
+ return nativeObjectToString.call(value);
+}
+
+module.exports = objectToString;
+
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports) {
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return value != null && typeof value == 'object';
+}
+
+module.exports = isObjectLike;
+
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var memoizeCapped = __webpack_require__(27);
+
+/** Used to match property names within property paths. */
+var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
+
+/** Used to match backslashes in property paths. */
+var reEscapeChar = /\\(\\)?/g;
+
+/**
+ * Converts `string` to a property path array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the property path array.
+ */
+var stringToPath = memoizeCapped(function(string) {
+ var result = [];
+ if (string.charCodeAt(0) === 46 /* . */) {
+ result.push('');
+ }
+ string.replace(rePropName, function(match, number, quote, subString) {
+ result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
+ });
+ return result;
+});
+
+module.exports = stringToPath;
+
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var memoize = __webpack_require__(28);
+
+/** Used as the maximum memoize cache size. */
+var MAX_MEMOIZE_SIZE = 500;
+
+/**
+ * A specialized version of `_.memoize` which clears the memoized function's
+ * cache when it exceeds `MAX_MEMOIZE_SIZE`.
+ *
+ * @private
+ * @param {Function} func The function to have its output memoized.
+ * @returns {Function} Returns the new memoized function.
+ */
+function memoizeCapped(func) {
+ var result = memoize(func, function(key) {
+ if (cache.size === MAX_MEMOIZE_SIZE) {
+ cache.clear();
+ }
+ return key;
+ });
+
+ var cache = result.cache;
+ return result;
+}
+
+module.exports = memoizeCapped;
+
+
+/***/ }),
+/* 28 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var MapCache = __webpack_require__(29);
+
+/** Error message constants. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/**
+ * Creates a function that memoizes the result of `func`. If `resolver` is
+ * provided, it determines the cache key for storing the result based on the
+ * arguments provided to the memoized function. By default, the first argument
+ * provided to the memoized function is used as the map cache key. The `func`
+ * is invoked with the `this` binding of the memoized function.
+ *
+ * **Note:** The cache is exposed as the `cache` property on the memoized
+ * function. Its creation may be customized by replacing the `_.memoize.Cache`
+ * constructor with one whose instances implement the
+ * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
+ * method interface of `clear`, `delete`, `get`, `has`, and `set`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to have its output memoized.
+ * @param {Function} [resolver] The function to resolve the cache key.
+ * @returns {Function} Returns the new memoized function.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2 };
+ * var other = { 'c': 3, 'd': 4 };
+ *
+ * var values = _.memoize(_.values);
+ * values(object);
+ * // => [1, 2]
+ *
+ * values(other);
+ * // => [3, 4]
+ *
+ * object.a = 2;
+ * values(object);
+ * // => [1, 2]
+ *
+ * // Modify the result cache.
+ * values.cache.set(object, ['a', 'b']);
+ * values(object);
+ * // => ['a', 'b']
+ *
+ * // Replace `_.memoize.Cache`.
+ * _.memoize.Cache = WeakMap;
+ */
+function memoize(func, resolver) {
+ if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ var memoized = function() {
+ var args = arguments,
+ key = resolver ? resolver.apply(this, args) : args[0],
+ cache = memoized.cache;
+
+ if (cache.has(key)) {
+ return cache.get(key);
+ }
+ var result = func.apply(this, args);
+ memoized.cache = cache.set(key, result) || cache;
+ return result;
+ };
+ memoized.cache = new (memoize.Cache || MapCache);
+ return memoized;
+}
+
+// Expose `MapCache`.
+memoize.Cache = MapCache;
+
+module.exports = memoize;
+
+
+/***/ }),
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var mapCacheClear = __webpack_require__(30),
+ mapCacheDelete = __webpack_require__(51),
+ mapCacheGet = __webpack_require__(53),
+ mapCacheHas = __webpack_require__(54),
+ mapCacheSet = __webpack_require__(55);
+
+/**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function MapCache(entries) {
+ var index = -1,
+ length = entries == null ? 0 : entries.length;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+// Add methods to `MapCache`.
+MapCache.prototype.clear = mapCacheClear;
+MapCache.prototype['delete'] = mapCacheDelete;
+MapCache.prototype.get = mapCacheGet;
+MapCache.prototype.has = mapCacheHas;
+MapCache.prototype.set = mapCacheSet;
+
+module.exports = MapCache;
+
+
+/***/ }),
+/* 30 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Hash = __webpack_require__(31),
+ ListCache = __webpack_require__(43),
+ Map = __webpack_require__(50);
+
+/**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+function mapCacheClear() {
+ this.size = 0;
+ this.__data__ = {
+ 'hash': new Hash,
+ 'map': new (Map || ListCache),
+ 'string': new Hash
+ };
+}
+
+module.exports = mapCacheClear;
+
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var hashClear = __webpack_require__(32),
+ hashDelete = __webpack_require__(39),
+ hashGet = __webpack_require__(40),
+ hashHas = __webpack_require__(41),
+ hashSet = __webpack_require__(42);
+
+/**
+ * Creates a hash object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function Hash(entries) {
+ var index = -1,
+ length = entries == null ? 0 : entries.length;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+// Add methods to `Hash`.
+Hash.prototype.clear = hashClear;
+Hash.prototype['delete'] = hashDelete;
+Hash.prototype.get = hashGet;
+Hash.prototype.has = hashHas;
+Hash.prototype.set = hashSet;
+
+module.exports = Hash;
+
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var nativeCreate = __webpack_require__(2);
+
+/**
+ * Removes all key-value entries from the hash.
+ *
+ * @private
+ * @name clear
+ * @memberOf Hash
+ */
+function hashClear() {
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
+ this.size = 0;
+}
+
+module.exports = hashClear;
+
+
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isFunction = __webpack_require__(34),
+ isMasked = __webpack_require__(35),
+ isObject = __webpack_require__(11),
+ toSource = __webpack_require__(37);
+
+/**
+ * Used to match `RegExp`
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
+ */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to detect host constructors (Safari). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/** Used for built-in method references. */
+var funcProto = Function.prototype,
+ objectProto = Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = funcProto.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/**
+ * The base implementation of `_.isNative` without bad shim checks.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ * else `false`.
+ */
+function baseIsNative(value) {
+ if (!isObject(value) || isMasked(value)) {
+ return false;
+ }
+ var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
+ return pattern.test(toSource(value));
+}
+
+module.exports = baseIsNative;
+
+
+/***/ }),
+/* 34 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseGetTag = __webpack_require__(9),
+ isObject = __webpack_require__(11);
+
+/** `Object#toString` result references. */
+var asyncTag = '[object AsyncFunction]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]',
+ proxyTag = '[object Proxy]';
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ if (!isObject(value)) {
+ return false;
+ }
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 9 which returns 'object' for typed arrays and other constructors.
+ var tag = baseGetTag(value);
+ return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
+}
+
+module.exports = isFunction;
+
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var coreJsData = __webpack_require__(36);
+
+/** Used to detect methods masquerading as native. */
+var maskSrcKey = (function() {
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
+ return uid ? ('Symbol(src)_1.' + uid) : '';
+}());
+
+/**
+ * Checks if `func` has its source masked.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
+ */
+function isMasked(func) {
+ return !!maskSrcKey && (maskSrcKey in func);
+}
+
+module.exports = isMasked;
+
+
+/***/ }),
+/* 36 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var root = __webpack_require__(8);
+
+/** Used to detect overreaching core-js shims. */
+var coreJsData = root['__core-js_shared__'];
+
+module.exports = coreJsData;
+
+
+/***/ }),
+/* 37 */
+/***/ (function(module, exports) {
+
+/** Used for built-in method references. */
+var funcProto = Function.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = funcProto.toString;
+
+/**
+ * Converts `func` to its source code.
+ *
+ * @private
+ * @param {Function} func The function to convert.
+ * @returns {string} Returns the source code.
+ */
+function toSource(func) {
+ if (func != null) {
+ try {
+ return funcToString.call(func);
+ } catch (e) {}
+ try {
+ return (func + '');
+ } catch (e) {}
+ }
+ return '';
+}
+
+module.exports = toSource;
+
+
+/***/ }),
+/* 38 */
+/***/ (function(module, exports) {
+
+/**
+ * Gets the value at `key` of `object`.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+function getValue(object, key) {
+ return object == null ? undefined : object[key];
+}
+
+module.exports = getValue;
+
+
+/***/ }),
+/* 39 */
+/***/ (function(module, exports) {
+
+/**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @name delete
+ * @memberOf Hash
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function hashDelete(key) {
+ var result = this.has(key) && delete this.__data__[key];
+ this.size -= result ? 1 : 0;
+ return result;
+}
+
+module.exports = hashDelete;
+
+
+/***/ }),
+/* 40 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var nativeCreate = __webpack_require__(2);
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/** Used for built-in method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Hash
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function hashGet(key) {
+ var data = this.__data__;
+ if (nativeCreate) {
+ var result = data[key];
+ return result === HASH_UNDEFINED ? undefined : result;
+ }
+ return hasOwnProperty.call(data, key) ? data[key] : undefined;
+}
+
+module.exports = hashGet;
+
+
+/***/ }),
+/* 41 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var nativeCreate = __webpack_require__(2);
+
+/** Used for built-in method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Hash
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function hashHas(key) {
+ var data = this.__data__;
+ return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
+}
+
+module.exports = hashHas;
+
+
+/***/ }),
+/* 42 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var nativeCreate = __webpack_require__(2);
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Hash
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the hash instance.
+ */
+function hashSet(key, value) {
+ var data = this.__data__;
+ this.size += this.has(key) ? 0 : 1;
+ data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+ return this;
+}
+
+module.exports = hashSet;
+
+
+/***/ }),
+/* 43 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var listCacheClear = __webpack_require__(44),
+ listCacheDelete = __webpack_require__(45),
+ listCacheGet = __webpack_require__(47),
+ listCacheHas = __webpack_require__(48),
+ listCacheSet = __webpack_require__(49);
+
+/**
+ * Creates an list cache object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function ListCache(entries) {
+ var index = -1,
+ length = entries == null ? 0 : entries.length;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+// Add methods to `ListCache`.
+ListCache.prototype.clear = listCacheClear;
+ListCache.prototype['delete'] = listCacheDelete;
+ListCache.prototype.get = listCacheGet;
+ListCache.prototype.has = listCacheHas;
+ListCache.prototype.set = listCacheSet;
+
+module.exports = ListCache;
+
+
+/***/ }),
+/* 44 */
+/***/ (function(module, exports) {
+
+/**
+ * Removes all key-value entries from the list cache.
+ *
+ * @private
+ * @name clear
+ * @memberOf ListCache
+ */
+function listCacheClear() {
+ this.__data__ = [];
+ this.size = 0;
+}
+
+module.exports = listCacheClear;
+
+
+/***/ }),
+/* 45 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var assocIndexOf = __webpack_require__(3);
+
+/** Used for built-in method references. */
+var arrayProto = Array.prototype;
+
+/** Built-in value references. */
+var splice = arrayProto.splice;
+
+/**
+ * Removes `key` and its value from the list cache.
+ *
+ * @private
+ * @name delete
+ * @memberOf ListCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function listCacheDelete(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = data.length - 1;
+ if (index == lastIndex) {
+ data.pop();
+ } else {
+ splice.call(data, index, 1);
+ }
+ --this.size;
+ return true;
+}
+
+module.exports = listCacheDelete;
+
+
+/***/ }),
+/* 46 */
+/***/ (function(module, exports) {
+
+/**
+ * Performs a
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+function eq(value, other) {
+ return value === other || (value !== value && other !== other);
+}
+
+module.exports = eq;
+
+
+/***/ }),
+/* 47 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var assocIndexOf = __webpack_require__(3);
+
+/**
+ * Gets the list cache value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf ListCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function listCacheGet(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ return index < 0 ? undefined : data[index][1];
+}
+
+module.exports = listCacheGet;
+
+
+/***/ }),
+/* 48 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var assocIndexOf = __webpack_require__(3);
+
+/**
+ * Checks if a list cache value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf ListCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function listCacheHas(key) {
+ return assocIndexOf(this.__data__, key) > -1;
+}
+
+module.exports = listCacheHas;
+
+
+/***/ }),
+/* 49 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var assocIndexOf = __webpack_require__(3);
+
+/**
+ * Sets the list cache `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf ListCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the list cache instance.
+ */
+function listCacheSet(key, value) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ ++this.size;
+ data.push([key, value]);
+ } else {
+ data[index][1] = value;
+ }
+ return this;
+}
+
+module.exports = listCacheSet;
+
+
+/***/ }),
+/* 50 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var getNative = __webpack_require__(10),
+ root = __webpack_require__(8);
+
+/* Built-in method references that are verified to be native. */
+var Map = getNative(root, 'Map');
+
+module.exports = Map;
+
+
+/***/ }),
+/* 51 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var getMapData = __webpack_require__(4);
+
+/**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function mapCacheDelete(key) {
+ var result = getMapData(this, key)['delete'](key);
+ this.size -= result ? 1 : 0;
+ return result;
+}
+
+module.exports = mapCacheDelete;
+
+
+/***/ }),
+/* 52 */
+/***/ (function(module, exports) {
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
+ ? (value !== '__proto__')
+ : (value === null);
+}
+
+module.exports = isKeyable;
+
+
+/***/ }),
+/* 53 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var getMapData = __webpack_require__(4);
+
+/**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function mapCacheGet(key) {
+ return getMapData(this, key).get(key);
+}
+
+module.exports = mapCacheGet;
+
+
+/***/ }),
+/* 54 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var getMapData = __webpack_require__(4);
+
+/**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function mapCacheHas(key) {
+ return getMapData(this, key).has(key);
+}
+
+module.exports = mapCacheHas;
+
+
+/***/ }),
+/* 55 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var getMapData = __webpack_require__(4);
+
+/**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache instance.
+ */
+function mapCacheSet(key, value) {
+ var data = getMapData(this, key),
+ size = data.size;
+
+ data.set(key, value);
+ this.size += data.size == size ? 0 : 1;
+ return this;
+}
+
+module.exports = mapCacheSet;
+
+
+/***/ }),
+/* 56 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseToString = __webpack_require__(57);
+
+/**
+ * Converts `value` to a string. An empty string is returned for `null`
+ * and `undefined` values. The sign of `-0` is preserved.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {string} Returns the converted string.
+ * @example
+ *
+ * _.toString(null);
+ * // => ''
+ *
+ * _.toString(-0);
+ * // => '-0'
+ *
+ * _.toString([1, 2, 3]);
+ * // => '1,2,3'
+ */
+function toString(value) {
+ return value == null ? '' : baseToString(value);
+}
+
+module.exports = toString;
+
+
+/***/ }),
+/* 57 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Symbol = __webpack_require__(7),
+ arrayMap = __webpack_require__(58),
+ isArray = __webpack_require__(5),
+ isSymbol = __webpack_require__(6);
+
+/** Used as references for various `Number` constants. */
+var INFINITY = 1 / 0;
+
+/** Used to convert symbols to primitives and strings. */
+var symbolProto = Symbol ? Symbol.prototype : undefined,
+ symbolToString = symbolProto ? symbolProto.toString : undefined;
+
+/**
+ * The base implementation of `_.toString` which doesn't convert nullish
+ * values to empty strings.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ */
+function baseToString(value) {
+ // Exit early for strings to avoid a performance hit in some environments.
+ if (typeof value == 'string') {
+ return value;
+ }
+ if (isArray(value)) {
+ // Recursively convert values (susceptible to call stack limits).
+ return arrayMap(value, baseToString) + '';
+ }
+ if (isSymbol(value)) {
+ return symbolToString ? symbolToString.call(value) : '';
+ }
+ var result = (value + '');
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+}
+
+module.exports = baseToString;
+
+
+/***/ }),
+/* 58 */
+/***/ (function(module, exports) {
+
+/**
+ * A specialized version of `_.map` for arrays without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+function arrayMap(array, iteratee) {
+ var index = -1,
+ length = array == null ? 0 : array.length,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = iteratee(array[index], index, array);
+ }
+ return result;
+}
+
+module.exports = arrayMap;
+
+
+/***/ }),
+/* 59 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isSymbol = __webpack_require__(6);
+
+/** Used as references for various `Number` constants. */
+var INFINITY = 1 / 0;
+
+/**
+ * Converts `value` to a string key if it's not a string or symbol.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {string|symbol} Returns the key.
+ */
+function toKey(value) {
+ if (typeof value == 'string' || isSymbol(value)) {
+ return value;
+ }
+ var result = (value + '');
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+}
+
+module.exports = toKey;
+
+
+/***/ }),
+/* 60 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.ContainerItem = undefined;
+
+var _classComponent = __webpack_require__(1);
+
+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; }
+
+var get = __webpack_require__(0);
+
+var ContainerItem = exports.ContainerItem = function (_Component) {
+ _inherits(ContainerItem, _Component);
+
+ function ContainerItem(busyLoadOptions) {
+ _classCallCheck(this, ContainerItem);
+
+ var flexDirection = get(busyLoadOptions, "textPosition", "right");
+
+ switch (flexDirection) {
+ case "top":
+ flexDirection = "column";
+ break;
+ case "bottom":
+ flexDirection = "column-reverse";
+ break;
+ case "right":
+ flexDirection = "row-reverse";
+ break;
+ case "left":
+ flexDirection = "row";
+ break;
+ default:
+ throw "don't know textPosition: " + flexDirection;
+ }
+
+ return _possibleConstructorReturn(this, (ContainerItem.__proto__ || Object.getPrototypeOf(ContainerItem)).call(this, 'div', {
+ "class": get(busyLoadOptions, "containerItemClass"),
+ "css": {
+ "background": "none",
+ "display": "flex",
+ "justify-content": "center",
+ "align-items": "center",
+ "flex-direction": flexDirection
+ }
+ }, busyLoadOptions));
+ }
+
+ return ContainerItem;
+}(_classComponent.Component);
+
+/***/ }),
+/* 61 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Text = undefined;
+
+var _classComponent = __webpack_require__(1);
+
+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; }
+
+var get = __webpack_require__(0);
+
+var Text = exports.Text = function (_Component) {
+ _inherits(Text, _Component);
+
+ function Text(busyLoadOptions) {
+ _classCallCheck(this, Text);
+
+ // set margin
+ var _this = _possibleConstructorReturn(this, (Text.__proto__ || Object.getPrototypeOf(Text)).call(this, 'span', {
+ "class": get(busyLoadOptions, "textClass"),
+ "css": {
+ "color": get(busyLoadOptions, 'textColor', get(busyLoadOptions, 'color', "#fff")),
+ "font-size": get(busyLoadOptions, 'fontSize', "1rem")
+ },
+ "text": get(busyLoadOptions, "text", "Loading ...")
+ }, busyLoadOptions));
+
+ var flexDirection = get(busyLoadOptions, "textPosition", "right");
+ var marginDirection = "margin-left";
+
+ switch (flexDirection) {
+ case "top":
+ marginDirection = "margin-bottom";
+ break;
+ case "bottom":
+ marginDirection = "margin-top";
+ break;
+ case "left":
+ marginDirection = "margin-right";
+ break;
+ }
+
+ _this.tag.css(marginDirection, get(busyLoadOptions, 'textMargin', ".5rem"));
+ return _this;
+ }
+
+ return Text;
+}(_classComponent.Component);
+
+/***/ }),
+/* 62 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Spinner = undefined;
+
+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 _classComponent = __webpack_require__(1);
+
+var _classSpinnerLib = __webpack_require__(63);
+
+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; }
+
+var get = __webpack_require__(0);
+
+var Spinner = exports.Spinner = function (_Component) {
+ _inherits(Spinner, _Component);
+
+ function Spinner(busyLoadOptions) {
+ _classCallCheck(this, Spinner);
+
+ var _this = _possibleConstructorReturn(this, (Spinner.__proto__ || Object.getPrototypeOf(Spinner)).call(this, "span", {}, busyLoadOptions));
+
+ if (get(_this._busyLoadOptions, 'fontawesome')) {
+ _this.createFontAwesomeTag();
+ } else if (get(_this._busyLoadOptions, 'custom')) {
+ _this.createCustomTag();
+ } else if (get(_this._busyLoadOptions, 'image')) {
+ _this.createImageTag();
+ } else if (get(_this._busyLoadOptions, 'spinner')) {
+ _this.createCssTag(get(_this._busyLoadOptions, 'spinner'));
+ } else {
+ _this.createCssTag("pump");
+ }
+
+ _this.tag.addClass(get(_this._busyLoadOptions, "spinnerClass"));
+ return _this;
+ }
+
+ _createClass(Spinner, [{
+ key: 'createCssTag',
+ value: function createCssTag(spinnerType) {
+ var spinnerLib = new _classSpinnerLib.SpinnerLib(spinnerType, this._busyLoadOptions);
+ this.setTag(spinnerLib.spinner);
+ this.tag.addClass("busy-load-spinner-css");
+ this.setMaxMinSize();
+ }
+ }, {
+ key: 'createImageTag',
+ value: function createImageTag() {
+ this.options = {
+ "class": "loader-image",
+ "src": this._busyLoadOptions.image
+ };
+
+ this.setTag('img');
+ this.setMaxMinSize();
+ this.tag.addClass("busy-load-spinner-image");
+ }
+ }, {
+ key: 'createFontAwesomeTag',
+ value: function createFontAwesomeTag() {
+ this.options = {
+ "class": get(this._busyLoadOptions, 'fontawesome', "fa fa-refresh fa-spin fa-2x fa-fw"),
+ "css": {
+ "color": get(this._busyLoadOptions, 'color', "#fff")
+ }
+ };
+
+ this.setTag('span');
+ this.tag.addClass("busy-load-spinner-fontawesome");
+
+ this._$tag.append($("", {
+ "class": "sr-only",
+ "text": "Loading ..."
+ }));
+ }
+ }, {
+ key: 'createCustomTag',
+ value: function createCustomTag() {
+ var custom = get(this._busyLoadOptions, 'custom');
+ var isJqueryObject = custom instanceof jQuery;
+
+ if (!isJqueryObject) {
+ throw "wrong type for creating a tag";
+ }
+
+ this.setTag(custom);
+ this.tag.addClass("busy-load-spinner-custom");
+ }
+ }, {
+ key: 'setMaxMinSize',
+ value: function setMaxMinSize() {
+ this.tag.css({
+ "max-height": get(this._busyLoadOptions, 'maxSize'),
+ "max-width": get(this._busyLoadOptions, 'maxSize'),
+ "min-height": get(this._busyLoadOptions, 'minSize'),
+ "min-width": get(this._busyLoadOptions, 'minSize')
+ });
+ }
+
+ // https://projects.lukehaas.me/css-loaders/
+
+ }]);
+
+ return Spinner;
+}(_classComponent.Component);
+
+/***/ }),
+/* 63 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+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; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var get = __webpack_require__(0);
+
+var SpinnerLib = exports.SpinnerLib = function () {
+ function SpinnerLib(spinner) {
+ var busyLoadOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ _classCallCheck(this, SpinnerLib);
+
+ this._busyLoadOptions = busyLoadOptions;
+
+ switch (spinner.toLowerCase()) {
+ case "pump":
+ this.createPump();
+ break;
+ case "pulsar":
+ this.createPulsar();
+ break;
+ case "accordion":
+ this.createAccordion();
+ break;
+ case "cube":
+ this.createCube();
+ break;
+ case "cubes":
+ this.createCubes();
+ break;
+ case "circles":
+ this.createCircles();
+ break;
+ case "circle-line":
+ this.createCircleLine();
+ break;
+ case "cube-grid":
+ this.createCubeGrid();
+ break;
+ default:
+ throw "don't know spinner: " + spinner;
+ }
+ }
+
+ _createClass(SpinnerLib, [{
+ key: "createCubeGrid",
+ value: function createCubeGrid() {
+ this._spinner = $(" \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
");
+ this._spinner.find(".sk-cube").css({
+ "background-color": get(this._busyLoadOptions, "color", "#333")
+ });
+ }
+ }, {
+ key: "createCircleLine",
+ value: function createCircleLine() {
+ this._spinner = $("");
+ this._spinner.find(".bounce1, .bounce2, .bounce3").css({
+ "background-color": get(this._busyLoadOptions, "color", "#333")
+ });
+ }
+ }, {
+ key: "createCircles",
+ value: function createCircles() {
+ this._spinner = $("");
+ this._spinner.css({
+ "margin-right": "0.4rem"
+ }).find(".dot1, .dot2").css({
+ "background-color": get(this._busyLoadOptions, "color", "#333")
+ });
+ }
+ }, {
+ key: "createPump",
+ value: function createPump() {
+ this._spinner = $("");
+
+ this._spinner.find(".double-bounce1, .double-bounce2").css({
+ "background-color": get(this._busyLoadOptions, "color", "#333"),
+ "margin-right": "0.9rem"
+ });
+ }
+ }, {
+ key: "createPulsar",
+ value: function createPulsar() {
+ this._spinner = $("");
+ this._spinner.css({
+ "background-color": get(this._busyLoadOptions, "color", "#333")
+ });
+ }
+ }, {
+ key: "createAccordion",
+ value: function createAccordion() {
+ this._spinner = $("\n \t\t
\n \t\t
\n \t\t
\n \t\t
\n \t\t
\n \t\t
");
+ this._spinner.find("div").css({
+ "background-color": get(this._busyLoadOptions, "color", "#333")
+ });
+ }
+ }, {
+ key: "createCube",
+ value: function createCube() {
+ this._spinner = $("");
+ this._spinner.css({
+ "background-color": get(this._busyLoadOptions, "color", "#333")
+ });
+ }
+ }, {
+ key: "createCubes",
+ value: function createCubes() {
+ this._spinner = $("");
+
+ this._spinner.css({
+ "margin-right": "0.9rem"
+ }).find(".cube1, .cube2").css({
+ "background-color": get(this._busyLoadOptions, "color", "#333")
+ });
+ }
+ }, {
+ key: "spinner",
+ get: function get() {
+ return this._spinner;
+ },
+ set: function set(spinner) {
+ this._spinner = spinner;
+ }
+ }]);
+
+ return SpinnerLib;
+}();
+
+/***/ }),
+/* 64 */
+/***/ (function(module, exports) {
+
+module.exports = __WEBPACK_EXTERNAL_MODULE_64__;
+
+/***/ })
+/******/ ]);
+});
\ No newline at end of file
diff --git a/BackEnd/assets/vendor/busy-load/app.min.css b/BackEnd/assets/vendor/busy-load/app.min.css
new file mode 100644
index 0000000..2e84161
--- /dev/null
+++ b/BackEnd/assets/vendor/busy-load/app.min.css
@@ -0,0 +1 @@
+.spinner-cube-grid{width:40px;height:40px}.spinner-cube-grid .sk-cube{width:33%;height:33%;background-color:#333;float:left;-webkit-animation:sk-cubeGridScaleDelay 1.3s infinite ease-in-out;animation:sk-cubeGridScaleDelay 1.3s infinite ease-in-out}.spinner-cube-grid .sk-cube1{-webkit-animation-delay:.2s;animation-delay:.2s}.spinner-cube-grid .sk-cube2{-webkit-animation-delay:.3s;animation-delay:.3s}.spinner-cube-grid .sk-cube3{-webkit-animation-delay:.4s;animation-delay:.4s}.spinner-cube-grid .sk-cube4{-webkit-animation-delay:.1s;animation-delay:.1s}.spinner-cube-grid .sk-cube5{-webkit-animation-delay:.2s;animation-delay:.2s}.spinner-cube-grid .sk-cube6{-webkit-animation-delay:.3s;animation-delay:.3s}.spinner-cube-grid .sk-cube7{-webkit-animation-delay:0s;animation-delay:0s}.spinner-cube-grid .sk-cube8{-webkit-animation-delay:.1s;animation-delay:.1s}.spinner-cube-grid .sk-cube9{-webkit-animation-delay:.2s;animation-delay:.2s}@-webkit-keyframes sk-cubeGridScaleDelay{0%,70%,to{-webkit-transform:scale3D(1,1,1);transform:scale3D(1,1,1)}35%{-webkit-transform:scale3D(0,0,1);transform:scale3D(0,0,1)}}@keyframes sk-cubeGridScaleDelay{0%,70%,to{-webkit-transform:scale3D(1,1,1);transform:scale3D(1,1,1)}35%{-webkit-transform:scale3D(0,0,1);transform:scale3D(0,0,1)}}.spinner-circle-line{margin:10px auto 0;width:70px;text-align:center}.spinner-circle-line>div{width:18px;height:18px;background-color:#333;border-radius:100%;display:inline-block;-webkit-animation:sk-bouncedelay 1.4s infinite ease-in-out both;animation:sk-bouncedelay 1.4s infinite ease-in-out both}.spinner-circle-line .bounce1{-webkit-animation-delay:-.32s;animation-delay:-.32s}.spinner-circle-line .bounce2{-webkit-animation-delay:-.16s;animation-delay:-.16s}@-webkit-keyframes sk-bouncedelay{0%,80%,to{-webkit-transform:scale(0)}40%{-webkit-transform:scale(1)}}@keyframes sk-bouncedelay{0%,80%,to{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.spinner-circles{width:40px;height:40px;position:relative;text-align:center;-webkit-animation:sk-rotate 2s infinite linear;animation:sk-rotate 2s infinite linear}.dot1,.dot2{width:60%;height:60%;display:inline-block;position:absolute;top:0;background-color:#333;border-radius:100%;-webkit-animation:sk-bounce 2s infinite ease-in-out;animation:sk-bounce 2s infinite ease-in-out}.dot2{top:auto;bottom:0;-webkit-animation-delay:-1s;animation-delay:-1s}@-webkit-keyframes sk-rotate{to{-webkit-transform:rotate(1turn)}}@keyframes sk-rotate{to{transform:rotate(1turn);-webkit-transform:rotate(1turn)}}.spinner-cube{width:40px;height:40px;background-color:#333;margin:100px auto;-webkit-animation:sk-rotateplane 1.2s infinite ease-in-out;animation:sk-rotateplane 1.2s infinite ease-in-out}@-webkit-keyframes sk-rotateplane{0%{-webkit-transform:perspective(120px)}50%{-webkit-transform:perspective(120px) rotateY(180deg)}to{-webkit-transform:perspective(120px) rotateY(180deg) rotateX(180deg)}}@keyframes sk-rotateplane{0%{transform:perspective(120px) rotateX(0deg) rotateY(0deg);-webkit-transform:perspective(120px) rotateX(0deg) rotateY(0deg)}50%{transform:perspective(120px) rotateX(-180.1deg) rotateY(0deg);-webkit-transform:perspective(120px) rotateX(-180.1deg) rotateY(0deg)}to{transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg);-webkit-transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}.spinner-cubes{width:40px;height:40px;position:relative}.cube1,.cube2{background-color:#333;width:15px;height:15px;position:absolute;top:0;left:0;-webkit-animation:sk-cubemove 1.8s infinite ease-in-out;animation:sk-cubemove 1.8s infinite ease-in-out}.cube2{-webkit-animation-delay:-.9s;animation-delay:-.9s}@-webkit-keyframes sk-cubemove{25%{-webkit-transform:translateX(42px) rotate(-90deg) scale(.5)}50%{-webkit-transform:translateX(42px) translateY(42px) rotate(-180deg)}75%{-webkit-transform:translateX(0) translateY(42px) rotate(-270deg) scale(.5)}to{-webkit-transform:rotate(-1turn)}}@keyframes sk-cubemove{25%{transform:translateX(42px) rotate(-90deg) scale(.5);-webkit-transform:translateX(42px) rotate(-90deg) scale(.5)}50%{transform:translateX(42px) translateY(42px) rotate(-179deg);-webkit-transform:translateX(42px) translateY(42px) rotate(-179deg)}50.1%{transform:translateX(42px) translateY(42px) rotate(-180deg);-webkit-transform:translateX(42px) translateY(42px) rotate(-180deg)}75%{transform:translateX(0) translateY(42px) rotate(-270deg) scale(.5);-webkit-transform:translateX(0) translateY(42px) rotate(-270deg) scale(.5)}to{transform:rotate(-1turn);-webkit-transform:rotate(-1turn)}}.spinner-pump{width:40px;height:40px;position:relative}.double-bounce1,.double-bounce2{width:100%;height:100%;border-radius:50%;background-color:#333;opacity:.6;position:absolute;top:0;left:0;-webkit-animation:sk-bounce 2s infinite ease-in-out;animation:sk-bounce 2s infinite ease-in-out}.double-bounce2{-webkit-animation-delay:-1s;animation-delay:-1s}@-webkit-keyframes sk-bounce{0%,to{-webkit-transform:scale(0)}50%{-webkit-transform:scale(1)}}@keyframes sk-bounce{0%,to{transform:scale(0);-webkit-transform:scale(0)}50%{transform:scale(1);-webkit-transform:scale(1)}}.spinner-pulsar{width:40px;height:40px;background-color:#333;border-radius:100%;-webkit-animation:sk-scaleout 1s infinite ease-in-out;animation:sk-scaleout 1s infinite ease-in-out}@-webkit-keyframes sk-scaleout{0%{-webkit-transform:scale(0)}to{-webkit-transform:scale(1);opacity:0}}@keyframes sk-scaleout{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1);opacity:0}}.spinner-accordion{margin:100px auto;width:50px;height:40px;text-align:center;font-size:10px}.spinner-accordion>div{background-color:#333;height:100%;width:6px;display:inline-block;-webkit-animation:sk-stretchdelay 1.2s infinite ease-in-out;animation:sk-stretchdelay 1.2s infinite ease-in-out}.spinner-accordion.rect2{-webkit-animation-delay:-1.1s;animation-delay:-1.1s}.spinner-accordion .rect3{-webkit-animation-delay:-1s;animation-delay:-1s}.spinner-accordion .rect4{-webkit-animation-delay:-.9s;animation-delay:-.9s}.spinner-accordion.rect5{-webkit-animation-delay:-.8s;animation-delay:-.8s}@-webkit-keyframes sk-stretchdelay{0%,40%,to{-webkit-transform:scaleY(.4)}20%{-webkit-transform:scaleY(1)}}@keyframes sk-stretchdelay{0%,40%,to{transform:scaleY(.4);-webkit-transform:scaleY(.4)}20%{transform:scaleY(1);-webkit-transform:scaleY(1)}}.no-scroll{overflow:hidden}
\ No newline at end of file
diff --git a/BackEnd/assets/vendor/busy-load/app.min.js b/BackEnd/assets/vendor/busy-load/app.min.js
new file mode 100644
index 0000000..82e889b
--- /dev/null
+++ b/BackEnd/assets/vendor/busy-load/app.min.js
@@ -0,0 +1 @@
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("jQuery")):"function"==typeof define&&define.amd?define(["jQuery"],e):"object"==typeof exports?exports.busyLoad=e(require("jQuery")):t.busyLoad=e(t.jQuery)}("undefined"!=typeof self?self:this,function(t){return function(t){function e(o){if(n[o])return n[o].exports;var i=n[o]={i:o,l:!1,exports:{}};return t[o].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,o){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:o})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=13)}([function(t,e,n){function o(t,e,n){var o=null==t?void 0:i(t,e);return void 0===o?n:o}var i=n(18);t.exports=o},function(t,e,n){"use strict";function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n",this._options)}}},{key:"options",get:function(){return this._options},set:function(t){this._options=t}},{key:"tag",get:function(){return this._$tag},set:function(t){this._$tag=t}}]),t}()},function(t,e,n){var o=n(10),i=o(Object,"create");t.exports=i},function(t,e,n){function o(t,e){for(var n=t.length;n--;)if(i(t[n][0],e))return n;return-1}var i=n(46);t.exports=o},function(t,e,n){function o(t,e){var n=t.__data__;return i(e)?n["string"==typeof e?"string":"hash"]:n.map}var i=n(52);t.exports=o},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){function o(t){return"symbol"==typeof t||r(t)&&i(t)==s}var i=n(9),r=n(25),s="[object Symbol]";t.exports=o},function(t,e,n){var o=n(8),i=o.Symbol;t.exports=i},function(t,e,n){var o=n(21),i="object"==typeof self&&self&&self.Object===Object&&self,r=o||i||Function("return this")();t.exports=r},function(t,e,n){function o(t){return null==t?void 0===t?c:a:u&&u in Object(t)?r(t):s(t)}var i=n(7),r=n(23),s=n(24),a="[object Null]",c="[object Undefined]",u=i?i.toStringTag:void 0;t.exports=o},function(t,e,n){function o(t,e){var n=r(t,e);return i(n)?n:void 0}var i=n(33),r=n(38);t.exports=o},function(t,e){function n(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}t.exports=n},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={spinner:"pump",image:!1,fontawesome:!1,custom:!1,color:"#fff",background:"rgba(0, 0, 0, 0.21)",maxSize:"50px",minSize:"20px",text:!1,textColor:!1,textMargin:".5rem",textPosition:"right",fontSize:"1rem",fullScreen:!1,animation:!1,animationDuration:"fast",containerClass:"busy-load-container",containerItemClass:"busy-load-container-item",spinnerClass:"busy-load-spinner",textClass:"busy-load-text"}},function(t,e,n){"use strict";n(14);var o=n(15),i=n(12),r=function(t){return t&&t.__esModule?t:{default:t}}(i),s=n(64);!function(t){t.fn.busyLoad=o.busyLoad,t.busyLoadSetup=o.busyLoadSetup,t.busyLoadFull=o.busyLoadFull,t.fn.busyLoad.defaults=r.default}(s)},function(t,e){},function(t,e,n){"use strict";function o(t){$.extend(!0,c.default,t)}function i(t,e){return this.each(function(){var n=new s.BusyLoad($(this),JSON.parse(JSON.stringify(c.default)),e);switch(t){case"show":n.show();break;case"hide":n.hide();break;default:throw"don't know action '"+t+"'"}})}function r(t,e){var n=$("body"),o=new s.BusyLoad(n,JSON.parse(JSON.stringify(c.default)),e);switch(t.toLowerCase()){case"show":n.addClass("no-scroll"),o.caller=n,o.extendSettings({fullScreen:!0}),o.show();break;case"hide":o.hide(),n.removeClass("no-scroll")}return n}Object.defineProperty(e,"__esModule",{value:!0}),e.busyLoadSetup=o,e.busyLoad=i,e.busyLoadFull=r;var s=n(16),a=n(12),c=function(t){return t&&t.__esModule?t:{default:t}}(a)},function(t,e,n){"use strict";function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.BusyLoad=void 0;var i=function(){function t(t,e){for(var n=0;n-1}var i=n(3);t.exports=o},function(t,e,n){function o(t,e){var n=this.__data__,o=i(n,t);return o<0?(++this.size,n.push([t,e])):n[o][1]=e,this}var i=n(3);t.exports=o},function(t,e,n){var o=n(10),i=n(8),r=o(i,"Map");t.exports=r},function(t,e,n){function o(t){var e=i(this,t).delete(t);return this.size-=e?1:0,e}var i=n(4);t.exports=o},function(t,e){function n(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}t.exports=n},function(t,e,n){function o(t){return i(this,t).get(t)}var i=n(4);t.exports=o},function(t,e,n){function o(t){return i(this,t).has(t)}var i=n(4);t.exports=o},function(t,e,n){function o(t,e){var n=i(this,t),o=n.size;return n.set(t,e),this.size+=n.size==o?0:1,this}var i=n(4);t.exports=o},function(t,e,n){function o(t){return null==t?"":i(t)}var i=n(57);t.exports=o},function(t,e,n){function o(t){if("string"==typeof t)return t;if(s(t))return r(t,o)+"";if(a(t))return l?l.call(t):"";var e=t+"";return"0"==e&&1/t==-c?"-0":e}var i=n(7),r=n(58),s=n(5),a=n(6),c=1/0,u=i?i.prototype:void 0,l=u?u.toString:void 0;t.exports=o},function(t,e){function n(t,e){for(var n=-1,o=null==t?0:t.length,i=Array(o);++n",{class:"sr-only",text:"Loading ..."}))}},{key:"createCustomTag",value:function(){var t=u(this._busyLoadOptions,"custom");if(!(t instanceof jQuery))throw"wrong type for creating a tag";this.setTag(t),this.tag.addClass("busy-load-spinner-custom")}},{key:"setMaxMinSize",value:function(){this.tag.css({"max-height":u(this._busyLoadOptions,"maxSize"),"max-width":u(this._busyLoadOptions,"maxSize"),"min-height":u(this._busyLoadOptions,"minSize"),"min-width":u(this._busyLoadOptions,"minSize")})}}]),e}(a.Component)},function(t,e,n){"use strict";function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};switch(o(this,t),this._busyLoadOptions=n,e.toLowerCase()){case"pump":this.createPump();break;case"pulsar":this.createPulsar();break;case"accordion":this.createAccordion();break;case"cube":this.createCube();break;case"cubes":this.createCubes();break;case"circles":this.createCircles();break;case"circle-line":this.createCircleLine();break;case"cube-grid":this.createCubeGrid();break;default:throw"don't know spinner: "+e}}return i(t,[{key:"createCubeGrid",value:function(){this._spinner=$(' \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
'),this._spinner.find(".sk-cube").css({"background-color":r(this._busyLoadOptions,"color","#333")})}},{key:"createCircleLine",value:function(){this._spinner=$(''),this._spinner.find(".bounce1, .bounce2, .bounce3").css({"background-color":r(this._busyLoadOptions,"color","#333")})}},{key:"createCircles",value:function(){this._spinner=$(''),this._spinner.css({"margin-right":"0.4rem"}).find(".dot1, .dot2").css({"background-color":r(this._busyLoadOptions,"color","#333")})}},{key:"createPump",value:function(){this._spinner=$(''),this._spinner.find(".double-bounce1, .double-bounce2").css({"background-color":r(this._busyLoadOptions,"color","#333"),"margin-right":"0.9rem"})}},{key:"createPulsar",value:function(){this._spinner=$(''),this._spinner.css({"background-color":r(this._busyLoadOptions,"color","#333")})}},{key:"createAccordion",value:function(){this._spinner=$('\n \t\t
\n \t\t
\n \t\t
\n \t\t
\n \t\t
\n \t\t
'),this._spinner.find("div").css({"background-color":r(this._busyLoadOptions,"color","#333")})}},{key:"createCube",value:function(){this._spinner=$(''),this._spinner.css({"background-color":r(this._busyLoadOptions,"color","#333")})}},{key:"createCubes",value:function(){this._spinner=$(''),this._spinner.css({"margin-right":"0.9rem"}).find(".cube1, .cube2").css({"background-color":r(this._busyLoadOptions,"color","#333")})}},{key:"spinner",get:function(){return this._spinner},set:function(t){this._spinner=t}}]),t}()},function(e,n){e.exports=t}])});
\ No newline at end of file
diff --git a/Web.config b/Web.config
index 6ad6e6e..d485bda 100644
--- a/Web.config
+++ b/Web.config
@@ -4,6 +4,10 @@
https://go.microsoft.com/fwlink/?LinkId=169433
-->
+
+
+
+