| @ -0,0 +1,32 @@ | ||||
| 3245 | ||||
| 23452 | ||||
| 523 | ||||
| 62 | ||||
| 62 | ||||
| 23 | ||||
| 42234 | ||||
| 2 | ||||
| 3424 | ||||
| 253262 | ||||
| 5 | ||||
| 6 | ||||
| 24 | ||||
| 524 | ||||
| 6252 | ||||
| 3 | ||||
| 2 | ||||
| 5252 | ||||
| 5 | ||||
| 32 | ||||
| 525 | ||||
| 2 | ||||
| 52 | ||||
| 52 | ||||
| 5 | ||||
| 25 | ||||
| 2 | ||||
| 523414 | ||||
| 14 | ||||
| 1 | ||||
| 4131 | ||||
| 3 | ||||
| After Width: | Height: | Size: 1.2 MiB | 
| After Width: | Height: | Size: 77 KiB | 
| After Width: | Height: | Size: 506 B | 
| After Width: | Height: | Size: 539 B | 
| After Width: | Height: | Size: 472 B | 
| After Width: | Height: | Size: 427 B | 
| After Width: | Height: | Size: 471 B | 
| After Width: | Height: | Size: 290 B | 
| @ -0,0 +1,815 @@ | ||||
| /*! | ||||
|  * Bootstrap v3.0.3 (http://getbootstrap.com)
 | ||||
|  * Copyright 2013 Twitter, Inc. | ||||
|  * Licensed under http://www.apache.org/licenses/LICENSE-2.0
 | ||||
|  */ | ||||
| 
 | ||||
| if ("undefined" == typeof jQuery) throw new Error("Bootstrap requires jQuery"); + function(a) { | ||||
| 	"use strict"; | ||||
| 
 | ||||
| 	function b() { | ||||
| 		var a = document.createElement("bootstrap"), | ||||
| 			b = { | ||||
| 				WebkitTransition: "webkitTransitionEnd", | ||||
| 				MozTransition: "transitionend", | ||||
| 				OTransition: "oTransitionEnd otransitionend", | ||||
| 				transition: "transitionend" | ||||
| 			}; | ||||
| 		for (var c in b) | ||||
| 			if (void 0 !== a.style[c]) return { | ||||
| 				end: b[c] | ||||
| 			} | ||||
| 	} | ||||
| 	a.fn.emulateTransitionEnd = function(b) { | ||||
| 		var c = !1, | ||||
| 			d = this; | ||||
| 		a(this).one(a.support.transition.end, function() { | ||||
| 			c = !0 | ||||
| 		}); | ||||
| 		var e = function() { | ||||
| 			c || a(d).trigger(a.support.transition.end) | ||||
| 		}; | ||||
| 		return setTimeout(e, b), this | ||||
| 	}, a(function() { | ||||
| 		a.support.transition = b() | ||||
| 	}) | ||||
| }(jQuery), + function(a) { | ||||
| 	"use strict"; | ||||
| 	var b = '[data-dismiss="alert"]', | ||||
| 		c = function(c) { | ||||
| 			a(c).on("click", b, this.close) | ||||
| 		}; | ||||
| 	c.prototype.close = function(b) { | ||||
| 		function c() { | ||||
| 			f.trigger("closed.bs.alert").remove() | ||||
| 		} | ||||
| 		var d = a(this), | ||||
| 			e = d.attr("data-target"); | ||||
| 		e || (e = d.attr("href"), e = e && e.replace(/.*(?=#[^\s]*$)/, "")); | ||||
| 		var f = a(e); | ||||
| 		b && b.preventDefault(), f.length || (f = d.hasClass("alert") ? d : d.parent()), f.trigger(b = a.Event( | ||||
| 			"close.bs.alert")), b.isDefaultPrevented() || (f.removeClass("in"), a.support.transition && f | ||||
| 			.hasClass("fade") ? f.one(a.support.transition.end, c).emulateTransitionEnd(150) : c()) | ||||
| 	}; | ||||
| 	var d = a.fn.alert; | ||||
| 	a.fn.alert = function(b) { | ||||
| 		return this.each(function() { | ||||
| 			var d = a(this), | ||||
| 				e = d.data("bs.alert"); | ||||
| 			e || d.data("bs.alert", e = new c(this)), "string" == typeof b && e[b].call(d) | ||||
| 		}) | ||||
| 	}, a.fn.alert.Constructor = c, a.fn.alert.noConflict = function() { | ||||
| 		return a.fn.alert = d, this | ||||
| 	}, a(document).on("click.bs.alert.data-api", b, c.prototype.close) | ||||
| }(jQuery), + function(a) { | ||||
| 	"use strict"; | ||||
| 	var b = function(c, d) { | ||||
| 		this.$element = a(c), this.options = a.extend({}, b.DEFAULTS, d) | ||||
| 	}; | ||||
| 	b.DEFAULTS = { | ||||
| 		loadingText: "loading..." | ||||
| 	}, b.prototype.setState = function(a) { | ||||
| 		var b = "disabled", | ||||
| 			c = this.$element, | ||||
| 			d = c.is("input") ? "val" : "html", | ||||
| 			e = c.data(); | ||||
| 		a += "Text", e.resetText || c.data("resetText", c[d]()), c[d](e[a] || this.options[a]), setTimeout( | ||||
| 		function() { | ||||
| 			"loadingText" == a ? c.addClass(b).attr(b, b) : c.removeClass(b).removeAttr(b) | ||||
| 		}, 0) | ||||
| 	}, b.prototype.toggle = function() { | ||||
| 		var a = this.$element.closest('[data-toggle="buttons"]'), | ||||
| 			b = !0; | ||||
| 		if (a.length) { | ||||
| 			var c = this.$element.find("input"); | ||||
| 			"radio" === c.prop("type") && (c.prop("checked") && this.$element.hasClass("active") ? b = !1 : a.find( | ||||
| 					".active").removeClass("active")), b && c.prop("checked", !this.$element.hasClass("active")) | ||||
| 				.trigger("change") | ||||
| 		} | ||||
| 		b && this.$element.toggleClass("active") | ||||
| 	}; | ||||
| 	var c = a.fn.button; | ||||
| 	a.fn.button = function(c) { | ||||
| 		return this.each(function() { | ||||
| 			var d = a(this), | ||||
| 				e = d.data("bs.button"), | ||||
| 				f = "object" == typeof c && c; | ||||
| 			e || d.data("bs.button", e = new b(this, f)), "toggle" == c ? e.toggle() : c && e.setState(c) | ||||
| 		}) | ||||
| 	}, a.fn.button.Constructor = b, a.fn.button.noConflict = function() { | ||||
| 		return a.fn.button = c, this | ||||
| 	}, a(document).on("click.bs.button.data-api", "[data-toggle^=button]", function(b) { | ||||
| 		var c = a(b.target); | ||||
| 		c.hasClass("btn") || (c = c.closest(".btn")), c.button("toggle"), b.preventDefault() | ||||
| 	}) | ||||
| }(jQuery), + function(a) { | ||||
| 	"use strict"; | ||||
| 	var b = function(b, c) { | ||||
| 		this.$element = a(b), this.$indicators = this.$element.find(".carousel-indicators"), this.options = c, this | ||||
| 			.paused = this.sliding = this.interval = this.$active = this.$items = null, "hover" == this.options | ||||
| 			.pause && this.$element.on("mouseenter", a.proxy(this.pause, this)).on("mouseleave", a.proxy(this.cycle, | ||||
| 				this)) | ||||
| 	}; | ||||
| 	b.DEFAULTS = { | ||||
| 		interval: 5e3, | ||||
| 		pause: "hover", | ||||
| 		wrap: !0 | ||||
| 	}, b.prototype.cycle = function(b) { | ||||
| 		return b || (this.paused = !1), this.interval && clearInterval(this.interval), this.options.interval && ! | ||||
| 			this.paused && (this.interval = setInterval(a.proxy(this.next, this), this.options.interval)), this | ||||
| 	}, b.prototype.getActiveIndex = function() { | ||||
| 		return this.$active = this.$element.find(".item.active"), this.$items = this.$active.parent().children(), | ||||
| 			this.$items.index(this.$active) | ||||
| 	}, b.prototype.to = function(b) { | ||||
| 		var c = this, | ||||
| 			d = this.getActiveIndex(); | ||||
| 		return b > this.$items.length - 1 || 0 > b ? void 0 : this.sliding ? this.$element.one("slid.bs.carousel", | ||||
| 			function() { | ||||
| 				c.to(b) | ||||
| 			}) : d == b ? this.pause().cycle() : this.slide(b > d ? "next" : "prev", a(this.$items[b])) | ||||
| 	}, b.prototype.pause = function(b) { | ||||
| 		return b || (this.paused = !0), this.$element.find(".next, .prev").length && a.support.transition.end && ( | ||||
| 			this.$element.trigger(a.support.transition.end), this.cycle(!0)), this.interval = clearInterval(this | ||||
| 			.interval), this | ||||
| 	}, b.prototype.next = function() { | ||||
| 		return this.sliding ? void 0 : this.slide("next") | ||||
| 	}, b.prototype.prev = function() { | ||||
| 		return this.sliding ? void 0 : this.slide("prev") | ||||
| 	}, b.prototype.slide = function(b, c) { | ||||
| 		var d = this.$element.find(".item.active"), | ||||
| 			e = c || d[b](), | ||||
| 			f = this.interval, | ||||
| 			g = "next" == b ? "left" : "right", | ||||
| 			h = "next" == b ? "first" : "last", | ||||
| 			i = this; | ||||
| 		if (!e.length) { | ||||
| 			if (!this.options.wrap) return; | ||||
| 			e = this.$element.find(".item")[h]() | ||||
| 		} | ||||
| 		this.sliding = !0, f && this.pause(); | ||||
| 		var j = a.Event("slide.bs.carousel", { | ||||
| 			relatedTarget: e[0], | ||||
| 			direction: g | ||||
| 		}); | ||||
| 		if (!e.hasClass("active")) { | ||||
| 			if (this.$indicators.length && (this.$indicators.find(".active").removeClass("active"), this.$element | ||||
| 					.one("slid.bs.carousel", function() { | ||||
| 						var b = a(i.$indicators.children()[i.getActiveIndex()]); | ||||
| 						b && b.addClass("active") | ||||
| 					})), a.support.transition && this.$element.hasClass("slide")) { | ||||
| 				if (this.$element.trigger(j), j.isDefaultPrevented()) return; | ||||
| 				e.addClass(b), e[0].offsetWidth, d.addClass(g), e.addClass(g), d.one(a.support.transition.end, | ||||
| 					function() { | ||||
| 						e.removeClass([b, g].join(" ")).addClass("active"), d.removeClass(["active", g].join( | ||||
| 							" ")), i.sliding = !1, setTimeout(function() { | ||||
| 							i.$element.trigger("slid.bs.carousel") | ||||
| 						}, 0) | ||||
| 					}).emulateTransitionEnd(600) | ||||
| 			} else { | ||||
| 				if (this.$element.trigger(j), j.isDefaultPrevented()) return; | ||||
| 				d.removeClass("active"), e.addClass("active"), this.sliding = !1, this.$element.trigger( | ||||
| 					"slid.bs.carousel") | ||||
| 			} | ||||
| 			return f && this.cycle(), this | ||||
| 		} | ||||
| 	}; | ||||
| 	var c = a.fn.carousel; | ||||
| 	a.fn.carousel = function(c) { | ||||
| 		return this.each(function() { | ||||
| 			var d = a(this), | ||||
| 				e = d.data("bs.carousel"), | ||||
| 				f = a.extend({}, b.DEFAULTS, d.data(), "object" == typeof c && c), | ||||
| 				g = "string" == typeof c ? c : f.slide; | ||||
| 			e || d.data("bs.carousel", e = new b(this, f)), "number" == typeof c ? e.to(c) : g ? e[g]() : f | ||||
| 				.interval && e.pause().cycle() | ||||
| 		}) | ||||
| 	}, a.fn.carousel.Constructor = b, a.fn.carousel.noConflict = function() { | ||||
| 		return a.fn.carousel = c, this | ||||
| 	}, a(document).on("click.bs.carousel.data-api", "[data-slide], [data-slide-to]", function(b) { | ||||
| 		var c, d = a(this), | ||||
| 			e = a(d.attr("data-target") || (c = d.attr("href")) && c.replace(/.*(?=#[^\s]+$)/, "")), | ||||
| 			f = a.extend({}, e.data(), d.data()), | ||||
| 			g = d.attr("data-slide-to"); | ||||
| 		g && (f.interval = !1), e.carousel(f), (g = d.attr("data-slide-to")) && e.data("bs.carousel").to(g), b | ||||
| 			.preventDefault() | ||||
| 	}), a(window).on("load", function() { | ||||
| 		a('[data-ride="carousel"]').each(function() { | ||||
| 			var b = a(this); | ||||
| 			b.carousel(b.data()) | ||||
| 		}) | ||||
| 	}) | ||||
| }(jQuery), + function(a) { | ||||
| 	"use strict"; | ||||
| 	var b = function(c, d) { | ||||
| 		this.$element = a(c), this.options = a.extend({}, b.DEFAULTS, d), this.transitioning = null, this.options | ||||
| 			.parent && (this.$parent = a(this.options.parent)), this.options.toggle && this.toggle() | ||||
| 	}; | ||||
| 	b.DEFAULTS = { | ||||
| 		toggle: !0 | ||||
| 	}, b.prototype.dimension = function() { | ||||
| 		var a = this.$element.hasClass("width"); | ||||
| 		return a ? "width" : "height" | ||||
| 	}, b.prototype.show = function() { | ||||
| 		if (!this.transitioning && !this.$element.hasClass("in")) { | ||||
| 			var b = a.Event("show.bs.collapse"); | ||||
| 			if (this.$element.trigger(b), !b.isDefaultPrevented()) { | ||||
| 				var c = this.$parent && this.$parent.find("> .panel > .in"); | ||||
| 				if (c && c.length) { | ||||
| 					var d = c.data("bs.collapse"); | ||||
| 					if (d && d.transitioning) return; | ||||
| 					c.collapse("hide"), d || c.data("bs.collapse", null) | ||||
| 				} | ||||
| 				var e = this.dimension(); | ||||
| 				this.$element.removeClass("collapse").addClass("collapsing")[e](0), this.transitioning = 1; | ||||
| 				var f = function() { | ||||
| 					this.$element.removeClass("collapsing").addClass("in")[e]("auto"), this.transitioning = 0, | ||||
| 						this.$element.trigger("shown.bs.collapse") | ||||
| 				}; | ||||
| 				if (!a.support.transition) return f.call(this); | ||||
| 				var g = a.camelCase(["scroll", e].join("-")); | ||||
| 				this.$element.one(a.support.transition.end, a.proxy(f, this)).emulateTransitionEnd(350)[e](this | ||||
| 					.$element[0][g]) | ||||
| 			} | ||||
| 		} | ||||
| 	}, b.prototype.hide = function() { | ||||
| 		if (!this.transitioning && this.$element.hasClass("in")) { | ||||
| 			var b = a.Event("hide.bs.collapse"); | ||||
| 			if (this.$element.trigger(b), !b.isDefaultPrevented()) { | ||||
| 				var c = this.dimension(); | ||||
| 				this.$element[c](this.$element[c]())[0].offsetHeight, this.$element.addClass("collapsing") | ||||
| 					.removeClass("collapse").removeClass("in"), this.transitioning = 1; | ||||
| 				var d = function() { | ||||
| 					this.transitioning = 0, this.$element.trigger("hidden.bs.collapse").removeClass( | ||||
| 						"collapsing").addClass("collapse") | ||||
| 				}; | ||||
| 				return a.support.transition ? (this.$element[c](0).one(a.support.transition.end, a.proxy(d, this)) | ||||
| 					.emulateTransitionEnd(350), void 0) : d.call(this) | ||||
| 			} | ||||
| 		} | ||||
| 	}, b.prototype.toggle = function() { | ||||
| 		this[this.$element.hasClass("in") ? "hide" : "show"]() | ||||
| 	}; | ||||
| 	var c = a.fn.collapse; | ||||
| 	a.fn.collapse = function(c) { | ||||
| 		return this.each(function() { | ||||
| 			var d = a(this), | ||||
| 				e = d.data("bs.collapse"), | ||||
| 				f = a.extend({}, b.DEFAULTS, d.data(), "object" == typeof c && c); | ||||
| 			e || d.data("bs.collapse", e = new b(this, f)), "string" == typeof c && e[c]() | ||||
| 		}) | ||||
| 	}, a.fn.collapse.Constructor = b, a.fn.collapse.noConflict = function() { | ||||
| 		return a.fn.collapse = c, this | ||||
| 	}, a(document).on("click.bs.collapse.data-api", "[data-toggle=collapse]", function(b) { | ||||
| 		var c, d = a(this), | ||||
| 			e = d.attr("data-target") || b.preventDefault() || (c = d.attr("href")) && c.replace( | ||||
| 				/.*(?=#[^\s]+$)/, ""), | ||||
| 			f = a(e), | ||||
| 			g = f.data("bs.collapse"), | ||||
| 			h = g ? "toggle" : d.data(), | ||||
| 			i = d.attr("data-parent"), | ||||
| 			j = i && a(i); | ||||
| 		g && g.transitioning || (j && j.find('[data-toggle=collapse][data-parent="' + i + '"]').not(d).addClass( | ||||
| 			"collapsed"), d[f.hasClass("in") ? "addClass" : "removeClass"]("collapsed")), f.collapse(h) | ||||
| 	}) | ||||
| }(jQuery), + function(a) { | ||||
| 	"use strict"; | ||||
| 
 | ||||
| 	function b() { | ||||
| 		a(d).remove(), a(e).each(function(b) { | ||||
| 			var d = c(a(this)); | ||||
| 			d.hasClass("open") && (d.trigger(b = a.Event("hide.bs.dropdown")), b.isDefaultPrevented() || d | ||||
| 				.removeClass("open").trigger("hidden.bs.dropdown")) | ||||
| 		}) | ||||
| 	} | ||||
| 
 | ||||
| 	function c(b) { | ||||
| 		var c = b.attr("data-target"); | ||||
| 		c || (c = b.attr("href"), c = c && /#/.test(c) && c.replace(/.*(?=#[^\s]*$)/, "")); | ||||
| 		var d = c && a(c); | ||||
| 		return d && d.length ? d : b.parent() | ||||
| 	} | ||||
| 	var d = ".dropdown-backdrop", | ||||
| 		e = "[data-toggle=dropdown]", | ||||
| 		f = function(b) { | ||||
| 			a(b).on("click.bs.dropdown", this.toggle) | ||||
| 		}; | ||||
| 	f.prototype.toggle = function(d) { | ||||
| 		var e = a(this); | ||||
| 		if (!e.is(".disabled, :disabled")) { | ||||
| 			var f = c(e), | ||||
| 				g = f.hasClass("open"); | ||||
| 			if (b(), !g) { | ||||
| 				if ("ontouchstart" in document.documentElement && !f.closest(".navbar-nav").length && a( | ||||
| 						'<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click", b), f.trigger(d = a | ||||
| 						.Event("show.bs.dropdown")), d.isDefaultPrevented()) return; | ||||
| 				f.toggleClass("open").trigger("shown.bs.dropdown"), e.focus() | ||||
| 			} | ||||
| 			return !1 | ||||
| 		} | ||||
| 	}, f.prototype.keydown = function(b) { | ||||
| 		if (/(38|40|27)/.test(b.keyCode)) { | ||||
| 			var d = a(this); | ||||
| 			if (b.preventDefault(), b.stopPropagation(), !d.is(".disabled, :disabled")) { | ||||
| 				var f = c(d), | ||||
| 					g = f.hasClass("open"); | ||||
| 				if (!g || g && 27 == b.keyCode) return 27 == b.which && f.find(e).focus(), d.click(); | ||||
| 				var h = a("[role=menu] li:not(.divider):visible a", f); | ||||
| 				if (h.length) { | ||||
| 					var i = h.index(h.filter(":focus")); | ||||
| 					38 == b.keyCode && i > 0 && i--, 40 == b.keyCode && i < h.length - 1 && i++, ~i || (i = 0), h | ||||
| 						.eq(i).focus() | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}; | ||||
| 	var g = a.fn.dropdown; | ||||
| 	a.fn.dropdown = function(b) { | ||||
| 		return this.each(function() { | ||||
| 			var c = a(this), | ||||
| 				d = c.data("bs.dropdown"); | ||||
| 			d || c.data("bs.dropdown", d = new f(this)), "string" == typeof b && d[b].call(c) | ||||
| 		}) | ||||
| 	}, a.fn.dropdown.Constructor = f, a.fn.dropdown.noConflict = function() { | ||||
| 		return a.fn.dropdown = g, this | ||||
| 	}, a(document).on("click.bs.dropdown.data-api", b).on("click.bs.dropdown.data-api", ".dropdown form", function( | ||||
| 		a) { | ||||
| 		a.stopPropagation() | ||||
| 	}).on("click.bs.dropdown.data-api", e, f.prototype.toggle).on("keydown.bs.dropdown.data-api", e + | ||||
| 		", [role=menu]", f.prototype.keydown) | ||||
| }(jQuery), + function(a) { | ||||
| 	"use strict"; | ||||
| 	var b = function(b, c) { | ||||
| 		this.options = c, this.$element = a(b), this.$backdrop = this.isShown = null, this.options.remote && this | ||||
| 			.$element.load(this.options.remote) | ||||
| 	}; | ||||
| 	b.DEFAULTS = { | ||||
| 		backdrop: !0, | ||||
| 		keyboard: !0, | ||||
| 		show: !0 | ||||
| 	}, b.prototype.toggle = function(a) { | ||||
| 		return this[this.isShown ? "hide" : "show"](a) | ||||
| 	}, b.prototype.show = function(b) { | ||||
| 		var c = this, | ||||
| 			d = a.Event("show.bs.modal", { | ||||
| 				relatedTarget: b | ||||
| 			}); | ||||
| 		this.$element.trigger(d), this.isShown || d.isDefaultPrevented() || (this.isShown = !0, this.escape(), this | ||||
| 			.$element.on("click.dismiss.modal", '[data-dismiss="modal"]', a.proxy(this.hide, this)), this | ||||
| 			.backdrop(function() { | ||||
| 				var d = a.support.transition && c.$element.hasClass("fade"); | ||||
| 				c.$element.parent().length || c.$element.appendTo(document.body), c.$element.show(), d && c | ||||
| 					.$element[0].offsetWidth, c.$element.addClass("in").attr("aria-hidden", !1), c | ||||
| 					.enforceFocus(); | ||||
| 				var e = a.Event("shown.bs.modal", { | ||||
| 					relatedTarget: b | ||||
| 				}); | ||||
| 				d ? c.$element.find(".modal-dialog").one(a.support.transition.end, function() { | ||||
| 					c.$element.focus().trigger(e) | ||||
| 				}).emulateTransitionEnd(300) : c.$element.focus().trigger(e) | ||||
| 			})) | ||||
| 	}, b.prototype.hide = function(b) { | ||||
| 		b && b.preventDefault(), b = a.Event("hide.bs.modal"), this.$element.trigger(b), this.isShown && !b | ||||
| 			.isDefaultPrevented() && (this.isShown = !1, this.escape(), a(document).off("focusin.bs.modal"), this | ||||
| 				.$element.removeClass("in").attr("aria-hidden", !0).off("click.dismiss.modal"), a.support | ||||
| 				.transition && this.$element.hasClass("fade") ? this.$element.one(a.support.transition.end, a.proxy( | ||||
| 					this.hideModal, this)).emulateTransitionEnd(300) : this.hideModal()) | ||||
| 	}, b.prototype.enforceFocus = function() { | ||||
| 		a(document).off("focusin.bs.modal").on("focusin.bs.modal", a.proxy(function(a) { | ||||
| 			this.$element[0] === a.target || this.$element.has(a.target).length || this.$element.focus() | ||||
| 		}, this)) | ||||
| 	}, b.prototype.escape = function() { | ||||
| 		this.isShown && this.options.keyboard ? this.$element.on("keyup.dismiss.bs.modal", a.proxy(function(a) { | ||||
| 			27 == a.which && this.hide() | ||||
| 		}, this)) : this.isShown || this.$element.off("keyup.dismiss.bs.modal") | ||||
| 	}, b.prototype.hideModal = function() { | ||||
| 		var a = this; | ||||
| 		this.$element.hide(), this.backdrop(function() { | ||||
| 			a.removeBackdrop(), a.$element.trigger("hidden.bs.modal") | ||||
| 		}) | ||||
| 	}, b.prototype.removeBackdrop = function() { | ||||
| 		this.$backdrop && this.$backdrop.remove(), this.$backdrop = null | ||||
| 	}, b.prototype.backdrop = function(b) { | ||||
| 		var c = this.$element.hasClass("fade") ? "fade" : ""; | ||||
| 		if (this.isShown && this.options.backdrop) { | ||||
| 			var d = a.support.transition && c; | ||||
| 			if (this.$backdrop = a('<div class="modal-backdrop ' + c + '" />').appendTo(document.body), this | ||||
| 				.$element.on("click.dismiss.modal", a.proxy(function(a) { | ||||
| 					a.target === a.currentTarget && ("static" == this.options.backdrop ? this.$element[0] | ||||
| 						.focus.call(this.$element[0]) : this.hide.call(this)) | ||||
| 				}, this)), d && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !b) return; | ||||
| 			d ? this.$backdrop.one(a.support.transition.end, b).emulateTransitionEnd(150) : b() | ||||
| 		} else !this.isShown && this.$backdrop ? (this.$backdrop.removeClass("in"), a.support.transition && this | ||||
| 			.$element.hasClass("fade") ? this.$backdrop.one(a.support.transition.end, b).emulateTransitionEnd( | ||||
| 				150) : b()) : b && b() | ||||
| 	}; | ||||
| 	var c = a.fn.modal; | ||||
| 	a.fn.modal = function(c, d) { | ||||
| 		return this.each(function() { | ||||
| 			var e = a(this), | ||||
| 				f = e.data("bs.modal"), | ||||
| 				g = a.extend({}, b.DEFAULTS, e.data(), "object" == typeof c && c); | ||||
| 			f || e.data("bs.modal", f = new b(this, g)), "string" == typeof c ? f[c](d) : g.show && f.show( | ||||
| 				d) | ||||
| 		}) | ||||
| 	}, a.fn.modal.Constructor = b, a.fn.modal.noConflict = function() { | ||||
| 		return a.fn.modal = c, this | ||||
| 	}, a(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function(b) { | ||||
| 		var c = a(this), | ||||
| 			d = c.attr("href"), | ||||
| 			e = a(c.attr("data-target") || d && d.replace(/.*(?=#[^\s]+$)/, "")), | ||||
| 			f = e.data("modal") ? "toggle" : a.extend({ | ||||
| 				remote: !/#/.test(d) && d | ||||
| 			}, e.data(), c.data()); | ||||
| 		b.preventDefault(), e.modal(f, this).one("hide", function() { | ||||
| 			c.is(":visible") && c.focus() | ||||
| 		}) | ||||
| 	}), a(document).on("show.bs.modal", ".modal", function() { | ||||
| 		a(document.body).addClass("modal-open") | ||||
| 	}).on("hidden.bs.modal", ".modal", function() { | ||||
| 		a(document.body).removeClass("modal-open") | ||||
| 	}) | ||||
| }(jQuery), + function(a) { | ||||
| 	"use strict"; | ||||
| 	var b = function(a, b) { | ||||
| 		this.type = this.options = this.enabled = this.timeout = this.hoverState = this.$element = null, this.init( | ||||
| 			"tooltip", a, b) | ||||
| 	}; | ||||
| 	b.DEFAULTS = { | ||||
| 		animation: !0, | ||||
| 		placement: "top", | ||||
| 		selector: !1, | ||||
| 		template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', | ||||
| 		trigger: "hover focus", | ||||
| 		title: "", | ||||
| 		delay: 0, | ||||
| 		html: !1, | ||||
| 		container: !1 | ||||
| 	}, b.prototype.init = function(b, c, d) { | ||||
| 		this.enabled = !0, this.type = b, this.$element = a(c), this.options = this.getOptions(d); | ||||
| 		for (var e = this.options.trigger.split(" "), f = e.length; f--;) { | ||||
| 			var g = e[f]; | ||||
| 			if ("click" == g) this.$element.on("click." + this.type, this.options.selector, a.proxy(this.toggle, | ||||
| 				this)); | ||||
| 			else if ("manual" != g) { | ||||
| 				var h = "hover" == g ? "mouseenter" : "focus", | ||||
| 					i = "hover" == g ? "mouseleave" : "blur"; | ||||
| 				this.$element.on(h + "." + this.type, this.options.selector, a.proxy(this.enter, this)), this | ||||
| 					.$element.on(i + "." + this.type, this.options.selector, a.proxy(this.leave, this)) | ||||
| 			} | ||||
| 		} | ||||
| 		this.options.selector ? this._options = a.extend({}, this.options, { | ||||
| 			trigger: "manual", | ||||
| 			selector: "" | ||||
| 		}) : this.fixTitle() | ||||
| 	}, b.prototype.getDefaults = function() { | ||||
| 		return b.DEFAULTS | ||||
| 	}, b.prototype.getOptions = function(b) { | ||||
| 		return b = a.extend({}, this.getDefaults(), this.$element.data(), b), b.delay && "number" == typeof b | ||||
| 			.delay && (b.delay = { | ||||
| 				show: b.delay, | ||||
| 				hide: b.delay | ||||
| 			}), b | ||||
| 	}, b.prototype.getDelegateOptions = function() { | ||||
| 		var b = {}, | ||||
| 			c = this.getDefaults(); | ||||
| 		return this._options && a.each(this._options, function(a, d) { | ||||
| 			c[a] != d && (b[a] = d) | ||||
| 		}), b | ||||
| 	}, b.prototype.enter = function(b) { | ||||
| 		var c = b instanceof this.constructor ? b : a(b.currentTarget)[this.type](this.getDelegateOptions()).data( | ||||
| 			"bs." + this.type); | ||||
| 		return clearTimeout(c.timeout), c.hoverState = "in", c.options.delay && c.options.delay.show ? (c.timeout = | ||||
| 			setTimeout(function() { | ||||
| 				"in" == c.hoverState && c.show() | ||||
| 			}, c.options.delay.show), void 0) : c.show() | ||||
| 	}, b.prototype.leave = function(b) { | ||||
| 		var c = b instanceof this.constructor ? b : a(b.currentTarget)[this.type](this.getDelegateOptions()).data( | ||||
| 			"bs." + this.type); | ||||
| 		return clearTimeout(c.timeout), c.hoverState = "out", c.options.delay && c.options.delay.hide ? (c.timeout = | ||||
| 			setTimeout(function() { | ||||
| 				"out" == c.hoverState && c.hide() | ||||
| 			}, c.options.delay.hide), void 0) : c.hide() | ||||
| 	}, b.prototype.show = function() { | ||||
| 		var b = a.Event("show.bs." + this.type); | ||||
| 		if (this.hasContent() && this.enabled) { | ||||
| 			if (this.$element.trigger(b), b.isDefaultPrevented()) return; | ||||
| 			var c = this.tip(); | ||||
| 			this.setContent(), this.options.animation && c.addClass("fade"); | ||||
| 			var d = "function" == typeof this.options.placement ? this.options.placement.call(this, c[0], this | ||||
| 					.$element[0]) : this.options.placement, | ||||
| 				e = /\s?auto?\s?/i, | ||||
| 				f = e.test(d); | ||||
| 			f && (d = d.replace(e, "") || "top"), c.detach().css({ | ||||
| 				top: 0, | ||||
| 				left: 0, | ||||
| 				display: "block" | ||||
| 			}).addClass(d), this.options.container ? c.appendTo(this.options.container) : c.insertAfter(this | ||||
| 				.$element); | ||||
| 			var g = this.getPosition(), | ||||
| 				h = c[0].offsetWidth, | ||||
| 				i = c[0].offsetHeight; | ||||
| 			if (f) { | ||||
| 				var j = this.$element.parent(), | ||||
| 					k = d, | ||||
| 					l = document.documentElement.scrollTop || document.body.scrollTop, | ||||
| 					m = "body" == this.options.container ? window.innerWidth : j.outerWidth(), | ||||
| 					n = "body" == this.options.container ? window.innerHeight : j.outerHeight(), | ||||
| 					o = "body" == this.options.container ? 0 : j.offset().left; | ||||
| 				d = "bottom" == d && g.top + g.height + i - l > n ? "top" : "top" == d && g.top - l - i < 0 ? | ||||
| 					"bottom" : "right" == d && g.right + h > m ? "left" : "left" == d && g.left - h < o ? "right" : | ||||
| 					d, c.removeClass(k).addClass(d) | ||||
| 			} | ||||
| 			var p = this.getCalculatedOffset(d, g, h, i); | ||||
| 			this.applyPlacement(p, d), this.$element.trigger("shown.bs." + this.type) | ||||
| 		} | ||||
| 	}, b.prototype.applyPlacement = function(a, b) { | ||||
| 		var c, d = this.tip(), | ||||
| 			e = d[0].offsetWidth, | ||||
| 			f = d[0].offsetHeight, | ||||
| 			g = parseInt(d.css("margin-top"), 10), | ||||
| 			h = parseInt(d.css("margin-left"), 10); | ||||
| 		isNaN(g) && (g = 0), isNaN(h) && (h = 0), a.top = a.top + g, a.left = a.left + h, d.offset(a).addClass( | ||||
| 		"in"); | ||||
| 		var i = d[0].offsetWidth, | ||||
| 			j = d[0].offsetHeight; | ||||
| 		if ("top" == b && j != f && (c = !0, a.top = a.top + f - j), /bottom|top/.test(b)) { | ||||
| 			var k = 0; | ||||
| 			a.left < 0 && (k = -2 * a.left, a.left = 0, d.offset(a), i = d[0].offsetWidth, j = d[0].offsetHeight), | ||||
| 				this.replaceArrow(k - e + i, i, "left") | ||||
| 		} else this.replaceArrow(j - f, j, "top"); | ||||
| 		c && d.offset(a) | ||||
| 	}, b.prototype.replaceArrow = function(a, b, c) { | ||||
| 		this.arrow().css(c, a ? 50 * (1 - a / b) + "%" : "") | ||||
| 	}, b.prototype.setContent = function() { | ||||
| 		var a = this.tip(), | ||||
| 			b = this.getTitle(); | ||||
| 		a.find(".tooltip-inner")[this.options.html ? "html" : "text"](b), a.removeClass( | ||||
| 			"fade in top bottom left right") | ||||
| 	}, b.prototype.hide = function() { | ||||
| 		function b() { | ||||
| 			"in" != c.hoverState && d.detach() | ||||
| 		} | ||||
| 		var c = this, | ||||
| 			d = this.tip(), | ||||
| 			e = a.Event("hide.bs." + this.type); | ||||
| 		return this.$element.trigger(e), e.isDefaultPrevented() ? void 0 : (d.removeClass("in"), a.support | ||||
| 			.transition && this.$tip.hasClass("fade") ? d.one(a.support.transition.end, b).emulateTransitionEnd( | ||||
| 				150) : b(), this.$element.trigger("hidden.bs." + this.type), this) | ||||
| 	}, b.prototype.fixTitle = function() { | ||||
| 		var a = this.$element; | ||||
| 		(a.attr("title") || "string" != typeof a.attr("data-original-title")) && a.attr("data-original-title", a | ||||
| 			.attr("title") || "").attr("title", "") | ||||
| 	}, b.prototype.hasContent = function() { | ||||
| 		return this.getTitle() | ||||
| 	}, b.prototype.getPosition = function() { | ||||
| 		var b = this.$element[0]; | ||||
| 		return a.extend({}, "function" == typeof b.getBoundingClientRect ? b.getBoundingClientRect() : { | ||||
| 			width: b.offsetWidth, | ||||
| 			height: b.offsetHeight | ||||
| 		}, this.$element.offset()) | ||||
| 	}, b.prototype.getCalculatedOffset = function(a, b, c, d) { | ||||
| 		return "bottom" == a ? { | ||||
| 			top: b.top + b.height, | ||||
| 			left: b.left + b.width / 2 - c / 2 | ||||
| 		} : "top" == a ? { | ||||
| 			top: b.top - d, | ||||
| 			left: b.left + b.width / 2 - c / 2 | ||||
| 		} : "left" == a ? { | ||||
| 			top: b.top + b.height / 2 - d / 2, | ||||
| 			left: b.left - c | ||||
| 		} : { | ||||
| 			top: b.top + b.height / 2 - d / 2, | ||||
| 			left: b.left + b.width | ||||
| 		} | ||||
| 	}, b.prototype.getTitle = function() { | ||||
| 		var a, b = this.$element, | ||||
| 			c = this.options; | ||||
| 		return a = b.attr("data-original-title") || ("function" == typeof c.title ? c.title.call(b[0]) : c.title) | ||||
| 	}, b.prototype.tip = function() { | ||||
| 		return this.$tip = this.$tip || a(this.options.template) | ||||
| 	}, b.prototype.arrow = function() { | ||||
| 		return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") | ||||
| 	}, b.prototype.validate = function() { | ||||
| 		this.$element[0].parentNode || (this.hide(), this.$element = null, this.options = null) | ||||
| 	}, b.prototype.enable = function() { | ||||
| 		this.enabled = !0 | ||||
| 	}, b.prototype.disable = function() { | ||||
| 		this.enabled = !1 | ||||
| 	}, b.prototype.toggleEnabled = function() { | ||||
| 		this.enabled = !this.enabled | ||||
| 	}, b.prototype.toggle = function(b) { | ||||
| 		var c = b ? a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type) : this; | ||||
| 		c.tip().hasClass("in") ? c.leave(c) : c.enter(c) | ||||
| 	}, b.prototype.destroy = function() { | ||||
| 		this.hide().$element.off("." + this.type).removeData("bs." + this.type) | ||||
| 	}; | ||||
| 	var c = a.fn.tooltip; | ||||
| 	a.fn.tooltip = function(c) { | ||||
| 		return this.each(function() { | ||||
| 			var d = a(this), | ||||
| 				e = d.data("bs.tooltip"), | ||||
| 				f = "object" == typeof c && c; | ||||
| 			e || d.data("bs.tooltip", e = new b(this, f)), "string" == typeof c && e[c]() | ||||
| 		}) | ||||
| 	}, a.fn.tooltip.Constructor = b, a.fn.tooltip.noConflict = function() { | ||||
| 		return a.fn.tooltip = c, this | ||||
| 	} | ||||
| }(jQuery), + function(a) { | ||||
| 	"use strict"; | ||||
| 	var b = function(a, b) { | ||||
| 		this.init("popover", a, b) | ||||
| 	}; | ||||
| 	if (!a.fn.tooltip) throw new Error("Popover requires tooltip.js"); | ||||
| 	b.DEFAULTS = a.extend({}, a.fn.tooltip.Constructor.DEFAULTS, { | ||||
| 			placement: "right", | ||||
| 			trigger: "click", | ||||
| 			content: "", | ||||
| 			template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' | ||||
| 		}), b.prototype = a.extend({}, a.fn.tooltip.Constructor.prototype), b.prototype.constructor = b, b.prototype | ||||
| 		.getDefaults = function() { | ||||
| 			return b.DEFAULTS | ||||
| 		}, b.prototype.setContent = function() { | ||||
| 			var a = this.tip(), | ||||
| 				b = this.getTitle(), | ||||
| 				c = this.getContent(); | ||||
| 			a.find(".popover-title")[this.options.html ? "html" : "text"](b), a.find(".popover-content")[this.options | ||||
| 				.html ? "html" : "text"](c), a.removeClass("fade top bottom left right in"), a.find( | ||||
| 				".popover-title").html() || a.find(".popover-title").hide() | ||||
| 		}, b.prototype.hasContent = function() { | ||||
| 			return this.getTitle() || this.getContent() | ||||
| 		}, b.prototype.getContent = function() { | ||||
| 			var a = this.$element, | ||||
| 				b = this.options; | ||||
| 			return a.attr("data-content") || ("function" == typeof b.content ? b.content.call(a[0]) : b.content) | ||||
| 		}, b.prototype.arrow = function() { | ||||
| 			return this.$arrow = this.$arrow || this.tip().find(".arrow") | ||||
| 		}, b.prototype.tip = function() { | ||||
| 			return this.$tip || (this.$tip = a(this.options.template)), this.$tip | ||||
| 		}; | ||||
| 	var c = a.fn.popover; | ||||
| 	a.fn.popover = function(c) { | ||||
| 		return this.each(function() { | ||||
| 			var d = a(this), | ||||
| 				e = d.data("bs.popover"), | ||||
| 				f = "object" == typeof c && c; | ||||
| 			e || d.data("bs.popover", e = new b(this, f)), "string" == typeof c && e[c]() | ||||
| 		}) | ||||
| 	}, a.fn.popover.Constructor = b, a.fn.popover.noConflict = function() { | ||||
| 		return a.fn.popover = c, this | ||||
| 	} | ||||
| }(jQuery), + function(a) { | ||||
| 	"use strict"; | ||||
| 
 | ||||
| 	function b(c, d) { | ||||
| 		var e, f = a.proxy(this.process, this); | ||||
| 		this.$element = a(c).is("body") ? a(window) : a(c), this.$body = a("body"), this.$scrollElement = this.$element | ||||
| 			.on("scroll.bs.scroll-spy.data-api", f), this.options = a.extend({}, b.DEFAULTS, d), this.selector = (this | ||||
| 				.options.target || (e = a(c).attr("href")) && e.replace(/.*(?=#[^\s]+$)/, "") || "") + " .nav li > a", | ||||
| 			this.offsets = a([]), this.targets = a([]), this.activeTarget = null, this.refresh(), this.process() | ||||
| 	} | ||||
| 	b.DEFAULTS = { | ||||
| 		offset: 10 | ||||
| 	}, b.prototype.refresh = function() { | ||||
| 		var b = this.$element[0] == window ? "offset" : "position"; | ||||
| 		this.offsets = a([]), this.targets = a([]); | ||||
| 		var c = this; | ||||
| 		this.$body.find(this.selector).map(function() { | ||||
| 			var d = a(this), | ||||
| 				e = d.data("target") || d.attr("href"), | ||||
| 				f = /^#\w/.test(e) && a(e); | ||||
| 			return f && f.length && [ | ||||
| 				[f[b]().top + (!a.isWindow(c.$scrollElement.get(0)) && c.$scrollElement.scrollTop()), e] | ||||
| 			] || null | ||||
| 		}).sort(function(a, b) { | ||||
| 			return a[0] - b[0] | ||||
| 		}).each(function() { | ||||
| 			c.offsets.push(this[0]), c.targets.push(this[1]) | ||||
| 		}) | ||||
| 	}, b.prototype.process = function() { | ||||
| 		var a, b = this.$scrollElement.scrollTop() + this.options.offset, | ||||
| 			c = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight, | ||||
| 			d = c - this.$scrollElement.height(), | ||||
| 			e = this.offsets, | ||||
| 			f = this.targets, | ||||
| 			g = this.activeTarget; | ||||
| 		if (b >= d) return g != (a = f.last()[0]) && this.activate(a); | ||||
| 		for (a = e.length; a--;) g != f[a] && b >= e[a] && (!e[a + 1] || b <= e[a + 1]) && this.activate(f[a]) | ||||
| 	}, b.prototype.activate = function(b) { | ||||
| 		this.activeTarget = b, a(this.selector).parents(".active").removeClass("active"); | ||||
| 		var c = this.selector + '[data-target="' + b + '"],' + this.selector + '[href="' + b + '"]', | ||||
| 			d = a(c).parents("li").addClass("active"); | ||||
| 		d.parent(".dropdown-menu").length && (d = d.closest("li.dropdown").addClass("active")), d.trigger( | ||||
| 			"activate.bs.scrollspy") | ||||
| 	}; | ||||
| 	var c = a.fn.scrollspy; | ||||
| 	a.fn.scrollspy = function(c) { | ||||
| 		return this.each(function() { | ||||
| 			var d = a(this), | ||||
| 				e = d.data("bs.scrollspy"), | ||||
| 				f = "object" == typeof c && c; | ||||
| 			e || d.data("bs.scrollspy", e = new b(this, f)), "string" == typeof c && e[c]() | ||||
| 		}) | ||||
| 	}, a.fn.scrollspy.Constructor = b, a.fn.scrollspy.noConflict = function() { | ||||
| 		return a.fn.scrollspy = c, this | ||||
| 	}, a(window).on("load", function() { | ||||
| 		a('[data-spy="scroll"]').each(function() { | ||||
| 			var b = a(this); | ||||
| 			b.scrollspy(b.data()) | ||||
| 		}) | ||||
| 	}) | ||||
| }(jQuery), + function(a) { | ||||
| 	"use strict"; | ||||
| 	var b = function(b) { | ||||
| 		this.element = a(b) | ||||
| 	}; | ||||
| 	b.prototype.show = function() { | ||||
| 		var b = this.element, | ||||
| 			c = b.closest("ul:not(.dropdown-menu)"), | ||||
| 			d = b.data("target"); | ||||
| 		if (d || (d = b.attr("href"), d = d && d.replace(/.*(?=#[^\s]*$)/, "")), !b.parent("li").hasClass( | ||||
| 			"active")) { | ||||
| 			var e = c.find(".active:last a")[0], | ||||
| 				f = a.Event("show.bs.tab", { | ||||
| 					relatedTarget: e | ||||
| 				}); | ||||
| 			if (b.trigger(f), !f.isDefaultPrevented()) { | ||||
| 				var g = a(d); | ||||
| 				this.activate(b.parent("li"), c), this.activate(g, g.parent(), function() { | ||||
| 					b.trigger({ | ||||
| 						type: "shown.bs.tab", | ||||
| 						relatedTarget: e | ||||
| 					}) | ||||
| 				}) | ||||
| 			} | ||||
| 		} | ||||
| 	}, b.prototype.activate = function(b, c, d) { | ||||
| 		function e() { | ||||
| 			f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"), b.addClass("active"), | ||||
| 				g ? (b[0].offsetWidth, b.addClass("in")) : b.removeClass("fade"), b.parent(".dropdown-menu") && b | ||||
| 				.closest("li.dropdown").addClass("active"), d && d() | ||||
| 		} | ||||
| 		var f = c.find("> .active"), | ||||
| 			g = d && a.support.transition && f.hasClass("fade"); | ||||
| 		g ? f.one(a.support.transition.end, e).emulateTransitionEnd(150) : e(), f.removeClass("in") | ||||
| 	}; | ||||
| 	var c = a.fn.tab; | ||||
| 	a.fn.tab = function(c) { | ||||
| 		return this.each(function() { | ||||
| 			var d = a(this), | ||||
| 				e = d.data("bs.tab"); | ||||
| 			e || d.data("bs.tab", e = new b(this)), "string" == typeof c && e[c]() | ||||
| 		}) | ||||
| 	}, a.fn.tab.Constructor = b, a.fn.tab.noConflict = function() { | ||||
| 		return a.fn.tab = c, this | ||||
| 	}, a(document).on("click.bs.tab.data-api", '[data-toggle="tab"], [data-toggle="pill"]', function(b) { | ||||
| 		b.preventDefault(), a(this).tab("show") | ||||
| 	}) | ||||
| }(jQuery), + function(a) { | ||||
| 	"use strict"; | ||||
| 	var b = function(c, d) { | ||||
| 		this.options = a.extend({}, b.DEFAULTS, d), this.$window = a(window).on("scroll.bs.affix.data-api", a.proxy( | ||||
| 			this.checkPosition, this)).on("click.bs.affix.data-api", a.proxy(this.checkPositionWithEventLoop, | ||||
| 			this)), this.$element = a(c), this.affixed = this.unpin = null, this.checkPosition() | ||||
| 	}; | ||||
| 	b.RESET = "affix affix-top affix-bottom", b.DEFAULTS = { | ||||
| 		offset: 0 | ||||
| 	}, b.prototype.checkPositionWithEventLoop = function() { | ||||
| 		setTimeout(a.proxy(this.checkPosition, this), 1) | ||||
| 	}, b.prototype.checkPosition = function() { | ||||
| 		if (this.$element.is(":visible")) { | ||||
| 			var c = a(document).height(), | ||||
| 				d = this.$window.scrollTop(), | ||||
| 				e = this.$element.offset(), | ||||
| 				f = this.options.offset, | ||||
| 				g = f.top, | ||||
| 				h = f.bottom; | ||||
| 			"object" != typeof f && (h = g = f), "function" == typeof g && (g = f.top()), "function" == typeof h && | ||||
| 				(h = f.bottom()); | ||||
| 			var i = null != this.unpin && d + this.unpin <= e.top ? !1 : null != h && e.top + this.$element | ||||
| 			.height() >= c - h ? "bottom" : null != g && g >= d ? "top" : !1; | ||||
| 			this.affixed !== i && (this.unpin && this.$element.css("top", ""), this.affixed = i, this.unpin = | ||||
| 				"bottom" == i ? e.top - d : null, this.$element.removeClass(b.RESET).addClass("affix" + (i ? | ||||
| 					"-" + i : "")), "bottom" == i && this.$element.offset({ | ||||
| 					top: document.body.offsetHeight - h - this.$element.height() | ||||
| 				})) | ||||
| 		} | ||||
| 	}; | ||||
| 	var c = a.fn.affix; | ||||
| 	a.fn.affix = function(c) { | ||||
| 		return this.each(function() { | ||||
| 			var d = a(this), | ||||
| 				e = d.data("bs.affix"), | ||||
| 				f = "object" == typeof c && c; | ||||
| 			e || d.data("bs.affix", e = new b(this, f)), "string" == typeof c && e[c]() | ||||
| 		}) | ||||
| 	}, a.fn.affix.Constructor = b, a.fn.affix.noConflict = function() { | ||||
| 		return a.fn.affix = c, this | ||||
| 	}, a(window).on("load", function() { | ||||
| 		a('[data-spy="affix"]').each(function() { | ||||
| 			var b = a(this), | ||||
| 				c = b.data(); | ||||
| 			c.offset = c.offset || {}, c.offsetBottom && (c.offset.bottom = c.offsetBottom), c | ||||
| 				.offsetTop && (c.offset.top = c.offsetTop), b.affix(c) | ||||
| 		}) | ||||
| 	}) | ||||
| }(jQuery); | ||||
| @ -0,0 +1,36 @@ | ||||
| $(function () { | ||||
|     $(".header_nav>ul>li>a").on("click",function () { | ||||
|         $(this).addClass("nav_current").parent("li").siblings("li").children("a").removeClass("nav_current"); | ||||
|     }) | ||||
| 
 | ||||
|     $(".header_nav>ul>li").hover(function () { | ||||
|         $(this).children("ul").toggle(); | ||||
|     }) | ||||
| 
 | ||||
|     $(".header>.header_nav>ul>li>ul>li").hover(function () { | ||||
|         $(this).children("ul").toggle(); | ||||
|     }) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     $("#add_ipt").on("click",function () { | ||||
|         $('#modal_add').modal(); | ||||
|     }) | ||||
| 
 | ||||
| 
 | ||||
|     $("#date_ipt").on("click",function () { | ||||
|         $('#myModal').modal(); | ||||
|     }) | ||||
| 
 | ||||
|     $("#video_ipt").on("click",function () { | ||||
|         $('#Modal').modal(); | ||||
|     }) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| }) | ||||
| @ -0,0 +1,867 @@ | ||||
| (function (global, factory) { | ||||
| 	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('echarts')) : | ||||
| 	typeof define === 'function' && define.amd ? define(['exports', 'echarts'], factory) : | ||||
| 	(factory((global.dataTool = {}),global.echarts)); | ||||
| }(this, (function (exports,echarts) { 'use strict'; | ||||
| 
 | ||||
| /** | ||||
|  * @module zrender/core/util | ||||
|  */ | ||||
| 
 | ||||
| // 用于处理merge时无法遍历Date等对象的问题
 | ||||
| var arrayProto = Array.prototype; | ||||
| var nativeMap = arrayProto.map; | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Those data types can be cloned: | ||||
|  *     Plain object, Array, TypedArray, number, string, null, undefined. | ||||
|  * Those data types will be assgined using the orginal data: | ||||
|  *     BUILTIN_OBJECT | ||||
|  * Instance of user defined class will be cloned to a plain object, without | ||||
|  * properties in prototype. | ||||
|  * Other data types is not supported (not sure what will happen). | ||||
|  * | ||||
|  * Caution: do not support clone Date, for performance consideration. | ||||
|  * (There might be a large number of date in `series.data`). | ||||
|  * So date should not be modified in and out of echarts. | ||||
|  * | ||||
|  * @param {*} source | ||||
|  * @return {*} new | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {*} target | ||||
|  * @param {*} source | ||||
|  * @param {boolean} [overwrite=false] | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @param {Array} targetAndSources The first item is target, and the rests are source. | ||||
|  * @param {boolean} [overwrite=false] | ||||
|  * @return {*} target | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @param {*} target | ||||
|  * @param {*} source | ||||
|  * @memberOf module:zrender/core/util | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @param {*} target | ||||
|  * @param {*} source | ||||
|  * @param {boolean} [overlay=false] | ||||
|  * @memberOf module:zrender/core/util | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * 查询数组中元素的index | ||||
|  * @memberOf module:zrender/core/util | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * 构造类继承关系 | ||||
|  * | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {Function} clazz 源类 | ||||
|  * @param {Function} baseClazz 基类 | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {Object|Function} target | ||||
|  * @param {Object|Function} sorce | ||||
|  * @param {boolean} overlay | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Consider typed array. | ||||
|  * @param {Array|TypedArray} data | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * 数组或对象遍历 | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {Object|Array} obj | ||||
|  * @param {Function} cb | ||||
|  * @param {*} [context] | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * 数组映射 | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {Array} obj | ||||
|  * @param {Function} cb | ||||
|  * @param {*} [context] | ||||
|  * @return {Array} | ||||
|  */ | ||||
| function map(obj, cb, context) { | ||||
|     if (!(obj && cb)) { | ||||
|         return; | ||||
|     } | ||||
|     if (obj.map && obj.map === nativeMap) { | ||||
|         return obj.map(cb, context); | ||||
|     } | ||||
|     else { | ||||
|         var result = []; | ||||
|         for (var i = 0, len = obj.length; i < len; i++) { | ||||
|             result.push(cb.call(context, obj[i], i, obj)); | ||||
|         } | ||||
|         return result; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {Array} obj | ||||
|  * @param {Function} cb | ||||
|  * @param {Object} [memo] | ||||
|  * @param {*} [context] | ||||
|  * @return {Array} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * 数组过滤 | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {Array} obj | ||||
|  * @param {Function} cb | ||||
|  * @param {*} [context] | ||||
|  * @return {Array} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * 数组项查找 | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {Array} obj | ||||
|  * @param {Function} cb | ||||
|  * @param {*} [context] | ||||
|  * @return {*} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {Function} func | ||||
|  * @param {*} context | ||||
|  * @return {Function} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {Function} func | ||||
|  * @return {Function} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {*} value | ||||
|  * @return {boolean} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {*} value | ||||
|  * @return {boolean} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {*} value | ||||
|  * @return {boolean} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {*} value | ||||
|  * @return {boolean} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {*} value | ||||
|  * @return {boolean} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {*} value | ||||
|  * @return {boolean} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {*} value | ||||
|  * @return {boolean} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Whether is exactly NaN. Notice isNaN('a') returns true. | ||||
|  * @param {*} value | ||||
|  * @return {boolean} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * If value1 is not null, then return value1, otherwise judget rest of values. | ||||
|  * Low performance. | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @return {*} Final value | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {Array} arr | ||||
|  * @param {number} startIndex | ||||
|  * @param {number} endIndex | ||||
|  * @return {Array} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Normalize css liked array configuration | ||||
|  * e.g. | ||||
|  *  3 => [3, 3, 3, 3] | ||||
|  *  [4, 2] => [4, 2, 4, 2] | ||||
|  *  [4, 3, 2] => [4, 3, 2, 3] | ||||
|  * @param {number|Array.<number>} val | ||||
|  * @return {Array.<number>} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {boolean} condition | ||||
|  * @param {string} message | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @memberOf module:zrender/core/util | ||||
|  * @param {string} str string to be trimed | ||||
|  * @return {string} trimed string | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Set an object as primitive to be ignored traversing children in clone or merge | ||||
|  */ | ||||
| 
 | ||||
| /* | ||||
| * Licensed to the Apache Software Foundation (ASF) under one | ||||
| * or more contributor license agreements.  See the NOTICE file | ||||
| * distributed with this work for additional information | ||||
| * regarding copyright ownership.  The ASF licenses this file | ||||
| * to you under the Apache License, Version 2.0 (the | ||||
| * "License"); you may not use this file except in compliance | ||||
| * with the License.  You may obtain a copy of the License at | ||||
| * | ||||
| *   http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| * | ||||
| * Unless required by applicable law or agreed to in writing, | ||||
| * software distributed under the License is distributed on an | ||||
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||
| * KIND, either express or implied.  See the License for the | ||||
| * specific language governing permissions and limitations | ||||
| * under the License. | ||||
| */ | ||||
| 
 | ||||
| // GEXF File Parser
 | ||||
| // http://gexf.net/1.2draft/gexf-12draft-primer.pdf
 | ||||
| 
 | ||||
| function parse(xml) { | ||||
|     var doc; | ||||
|     if (typeof xml === 'string') { | ||||
|         var parser = new DOMParser(); | ||||
|         doc = parser.parseFromString(xml, 'text/xml'); | ||||
|     } | ||||
|     else { | ||||
|         doc = xml; | ||||
|     } | ||||
|     if (!doc || doc.getElementsByTagName('parsererror').length) { | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
|     var gexfRoot = getChildByTagName(doc, 'gexf'); | ||||
| 
 | ||||
|     if (!gexfRoot) { | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
|     var graphRoot = getChildByTagName(gexfRoot, 'graph'); | ||||
| 
 | ||||
|     var attributes = parseAttributes(getChildByTagName(graphRoot, 'attributes')); | ||||
|     var attributesMap = {}; | ||||
|     for (var i = 0; i < attributes.length; i++) { | ||||
|         attributesMap[attributes[i].id] = attributes[i]; | ||||
|     } | ||||
| 
 | ||||
|     return { | ||||
|         nodes: parseNodes(getChildByTagName(graphRoot, 'nodes'), attributesMap), | ||||
|         links: parseEdges(getChildByTagName(graphRoot, 'edges')) | ||||
|     }; | ||||
| } | ||||
| 
 | ||||
| function parseAttributes(parent) { | ||||
|     return parent ? map(getChildrenByTagName(parent, 'attribute'), function (attribDom) { | ||||
|         return { | ||||
|             id: getAttr(attribDom, 'id'), | ||||
|             title: getAttr(attribDom, 'title'), | ||||
|             type: getAttr(attribDom, 'type') | ||||
|         }; | ||||
|     }) : []; | ||||
| } | ||||
| 
 | ||||
| function parseNodes(parent, attributesMap) { | ||||
|     return parent ? map(getChildrenByTagName(parent, 'node'), function (nodeDom) { | ||||
| 
 | ||||
|         var id = getAttr(nodeDom, 'id'); | ||||
|         var label = getAttr(nodeDom, 'label'); | ||||
| 
 | ||||
|         var node = { | ||||
|             id: id, | ||||
|             name: label, | ||||
|             itemStyle: { | ||||
|                 normal: {} | ||||
|             } | ||||
|         }; | ||||
| 
 | ||||
|         var vizSizeDom = getChildByTagName(nodeDom, 'viz:size'); | ||||
|         var vizPosDom = getChildByTagName(nodeDom, 'viz:position'); | ||||
|         var vizColorDom = getChildByTagName(nodeDom, 'viz:color'); | ||||
|         // var vizShapeDom = getChildByTagName(nodeDom, 'viz:shape');
 | ||||
| 
 | ||||
|         var attvaluesDom = getChildByTagName(nodeDom, 'attvalues'); | ||||
| 
 | ||||
|         if (vizSizeDom) { | ||||
|             node.symbolSize = parseFloat(getAttr(vizSizeDom, 'value')); | ||||
|         } | ||||
|         if (vizPosDom) { | ||||
|             node.x = parseFloat(getAttr(vizPosDom, 'x')); | ||||
|             node.y = parseFloat(getAttr(vizPosDom, 'y')); | ||||
|             // z
 | ||||
|         } | ||||
|         if (vizColorDom) { | ||||
|             node.itemStyle.normal.color = 'rgb(' +[ | ||||
|                 getAttr(vizColorDom, 'r') | 0, | ||||
|                 getAttr(vizColorDom, 'g') | 0, | ||||
|                 getAttr(vizColorDom, 'b') | 0 | ||||
|             ].join(',') + ')'; | ||||
|         } | ||||
|         // if (vizShapeDom) {
 | ||||
|             // node.shape = getAttr(vizShapeDom, 'shape');
 | ||||
|         // }
 | ||||
|         if (attvaluesDom) { | ||||
|             var attvalueDomList = getChildrenByTagName(attvaluesDom, 'attvalue'); | ||||
| 
 | ||||
|             node.attributes = {}; | ||||
| 
 | ||||
|             for (var j = 0; j < attvalueDomList.length; j++) { | ||||
|                 var attvalueDom = attvalueDomList[j]; | ||||
|                 var attId = getAttr(attvalueDom, 'for'); | ||||
|                 var attValue = getAttr(attvalueDom, 'value'); | ||||
|                 var attribute = attributesMap[attId]; | ||||
| 
 | ||||
|                 if (attribute) { | ||||
|                     switch (attribute.type) { | ||||
|                         case 'integer': | ||||
|                         case 'long': | ||||
|                             attValue = parseInt(attValue, 10); | ||||
|                             break; | ||||
|                         case 'float': | ||||
|                         case 'double': | ||||
|                             attValue = parseFloat(attValue); | ||||
|                             break; | ||||
|                         case 'boolean': | ||||
|                             attValue = attValue.toLowerCase() == 'true'; | ||||
|                             break; | ||||
|                         default: | ||||
|                     } | ||||
|                     node.attributes[attId] = attValue; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return node; | ||||
|     }) : []; | ||||
| } | ||||
| 
 | ||||
| function parseEdges(parent) { | ||||
|     return parent ? map(getChildrenByTagName(parent, 'edge'), function (edgeDom) { | ||||
|         var id = getAttr(edgeDom, 'id'); | ||||
|         var label = getAttr(edgeDom, 'label'); | ||||
| 
 | ||||
|         var sourceId = getAttr(edgeDom, 'source'); | ||||
|         var targetId = getAttr(edgeDom, 'target'); | ||||
| 
 | ||||
|         var edge = { | ||||
|             id: id, | ||||
|             name: label, | ||||
|             source: sourceId, | ||||
|             target: targetId, | ||||
|             lineStyle: { | ||||
|                 normal: {} | ||||
|             } | ||||
|         }; | ||||
| 
 | ||||
|         var lineStyle = edge.lineStyle.normal; | ||||
| 
 | ||||
|         var vizThicknessDom = getChildByTagName(edgeDom, 'viz:thickness'); | ||||
|         var vizColorDom = getChildByTagName(edgeDom, 'viz:color'); | ||||
|         // var vizShapeDom = getChildByTagName(edgeDom, 'viz:shape');
 | ||||
| 
 | ||||
|         if (vizThicknessDom) { | ||||
|             lineStyle.width = parseFloat(vizThicknessDom.getAttribute('value')); | ||||
|         } | ||||
|         if (vizColorDom) { | ||||
|             lineStyle.color = 'rgb(' + [ | ||||
|                 getAttr(vizColorDom, 'r') | 0, | ||||
|                 getAttr(vizColorDom, 'g') | 0, | ||||
|                 getAttr(vizColorDom, 'b') | 0 | ||||
|             ].join(',') + ')'; | ||||
|         } | ||||
|         // if (vizShapeDom) {
 | ||||
|         //     edge.shape = vizShapeDom.getAttribute('shape');
 | ||||
|         // }
 | ||||
| 
 | ||||
|         return edge; | ||||
|     }) : []; | ||||
| } | ||||
| 
 | ||||
| function getAttr(el, attrName) { | ||||
|     return el.getAttribute(attrName); | ||||
| } | ||||
| 
 | ||||
| function getChildByTagName (parent, tagName) { | ||||
|     var node = parent.firstChild; | ||||
| 
 | ||||
|     while (node) { | ||||
|         if ( | ||||
|             node.nodeType != 1 || | ||||
|             node.nodeName.toLowerCase() != tagName.toLowerCase() | ||||
|         ) { | ||||
|             node = node.nextSibling; | ||||
|         } else { | ||||
|             return node; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return null; | ||||
| } | ||||
| 
 | ||||
| function getChildrenByTagName (parent, tagName) { | ||||
|     var node = parent.firstChild; | ||||
|     var children = []; | ||||
|     while (node) { | ||||
|         if (node.nodeName.toLowerCase() == tagName.toLowerCase()) { | ||||
|             children.push(node); | ||||
|         } | ||||
|         node = node.nextSibling; | ||||
|     } | ||||
| 
 | ||||
|     return children; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| var gexf = (Object.freeze || Object)({ | ||||
| 	parse: parse | ||||
| }); | ||||
| 
 | ||||
| /* | ||||
| * Licensed to the Apache Software Foundation (ASF) under one | ||||
| * or more contributor license agreements.  See the NOTICE file | ||||
| * distributed with this work for additional information | ||||
| * regarding copyright ownership.  The ASF licenses this file | ||||
| * to you under the Apache License, Version 2.0 (the | ||||
| * "License"); you may not use this file except in compliance | ||||
| * with the License.  You may obtain a copy of the License at | ||||
| * | ||||
| *   http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| * | ||||
| * Unless required by applicable law or agreed to in writing, | ||||
| * software distributed under the License is distributed on an | ||||
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||
| * KIND, either express or implied.  See the License for the | ||||
| * specific language governing permissions and limitations | ||||
| * under the License. | ||||
| */ | ||||
| 
 | ||||
| /** | ||||
|  * Copyright (c) 2010-2015, Michael Bostock | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions are met: | ||||
|  * | ||||
|  * * Redistributions of source code must retain the above copyright notice, this | ||||
|  *   list of conditions and the following disclaimer. | ||||
|  * | ||||
|  * * Redistributions in binary form must reproduce the above copyright notice, | ||||
|  *   this list of conditions and the following disclaimer in the documentation | ||||
|  *   and/or other materials provided with the distribution. | ||||
|  * | ||||
|  * * The name Michael Bostock may not be used to endorse or promote products | ||||
|  *   derived from this software without specific prior written permission. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||
|  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
|  * DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, | ||||
|  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||||
|  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
|  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | ||||
|  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||
|  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||||
|  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  */ | ||||
| 
 | ||||
| /** | ||||
|  * @see <https://github.com/mbostock/d3/blob/master/src/arrays/quantile.js>
 | ||||
|  * @see <http://en.wikipedia.org/wiki/Quantile>
 | ||||
|  * @param {Array.<number>} ascArr | ||||
|  */ | ||||
| var quantile = function(ascArr, p) { | ||||
|     var H = (ascArr.length - 1) * p + 1, | ||||
|         h = Math.floor(H), | ||||
|         v = +ascArr[h - 1], | ||||
|         e = H - h; | ||||
|     return e ? v + e * (ascArr[h] - v) : v; | ||||
| }; | ||||
| 
 | ||||
| /* | ||||
| * Licensed to the Apache Software Foundation (ASF) under one | ||||
| * or more contributor license agreements.  See the NOTICE file | ||||
| * distributed with this work for additional information | ||||
| * regarding copyright ownership.  The ASF licenses this file | ||||
| * to you under the Apache License, Version 2.0 (the | ||||
| * "License"); you may not use this file except in compliance | ||||
| * with the License.  You may obtain a copy of the License at | ||||
| * | ||||
| *   http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| * | ||||
| * Unless required by applicable law or agreed to in writing, | ||||
| * software distributed under the License is distributed on an | ||||
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||
| * KIND, either express or implied.  See the License for the | ||||
| * specific language governing permissions and limitations | ||||
| * under the License. | ||||
| */ | ||||
| 
 | ||||
| /** | ||||
|  * Linear mapping a value from domain to range | ||||
|  * @memberOf module:echarts/util/number | ||||
|  * @param  {(number|Array.<number>)} val | ||||
|  * @param  {Array.<number>} domain Domain extent domain[0] can be bigger than domain[1] | ||||
|  * @param  {Array.<number>} range  Range extent range[0] can be bigger than range[1] | ||||
|  * @param  {boolean} clamp | ||||
|  * @return {(number|Array.<number>} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Convert a percent string to absolute number. | ||||
|  * Returns NaN if percent is not a valid string or number | ||||
|  * @memberOf module:echarts/util/number | ||||
|  * @param {string|number} percent | ||||
|  * @param {number} all | ||||
|  * @return {number} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * (1) Fix rounding error of float numbers. | ||||
|  * (2) Support return string to avoid scientific notation like '3.5e-7'. | ||||
|  * | ||||
|  * @param {number} x | ||||
|  * @param {number} [precision] | ||||
|  * @param {boolean} [returnStr] | ||||
|  * @return {number|string} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| function asc(arr) { | ||||
|     arr.sort(function (a, b) { | ||||
|         return a - b; | ||||
|     }); | ||||
|     return arr; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Get precision | ||||
|  * @param {number} val | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @param {string|number} val | ||||
|  * @return {number} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Minimal dicernible data precisioin according to a single pixel. | ||||
|  * | ||||
|  * @param {Array.<number>} dataExtent | ||||
|  * @param {Array.<number>} pixelExtent | ||||
|  * @return {number} precision | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Get a data of given precision, assuring the sum of percentages | ||||
|  * in valueList is 1. | ||||
|  * The largest remainer method is used. | ||||
|  * https://en.wikipedia.org/wiki/Largest_remainder_method
 | ||||
|  * | ||||
|  * @param {Array.<number>} valueList a list of all data | ||||
|  * @param {number} idx index of the data to be processed in valueList | ||||
|  * @param {number} precision integer number showing digits of precision | ||||
|  * @return {number} percent ranging from 0 to 100 | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| // Number.MAX_SAFE_INTEGER, ie do not support.
 | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * To 0 - 2 * PI, considering negative radian. | ||||
|  * @param {number} radian | ||||
|  * @return {number} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @param {type} radian | ||||
|  * @return {boolean} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * @param {string|Date|number} value These values can be accepted: | ||||
|  *   + An instance of Date, represent a time in its own time zone. | ||||
|  *   + Or string in a subset of ISO 8601, only including: | ||||
|  *     + only year, month, date: '2012-03', '2012-03-01', '2012-03-01 05', '2012-03-01 05:06', | ||||
|  *     + separated with T or space: '2012-03-01T12:22:33.123', '2012-03-01 12:22:33.123', | ||||
|  *     + time zone: '2012-03-01T12:22:33Z', '2012-03-01T12:22:33+8000', '2012-03-01T12:22:33-05:00', | ||||
|  *     all of which will be treated as local time if time zone is not specified | ||||
|  *     (see <https://momentjs.com/>).
 | ||||
|  *   + Or other string format, including (all of which will be treated as loacal time): | ||||
|  *     '2012', '2012-3-1', '2012/3/1', '2012/03/01', | ||||
|  *     '2009/6/12 2:00', '2009/6/12 2:05:08', '2009/6/12 2:05:08.123' | ||||
|  *   + a timestamp, which represent a time in UTC. | ||||
|  * @return {Date} date | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Quantity of a number. e.g. 0.1, 1, 10, 100 | ||||
|  * | ||||
|  * @param  {number} val | ||||
|  * @return {number} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * find a “nice” number approximately equal to x. Round the number if round = true, | ||||
|  * take ceiling if round = false. The primary observation is that the “nicest” | ||||
|  * numbers in decimal are 1, 2, and 5, and all power-of-ten multiples of these numbers. | ||||
|  * | ||||
|  * See "Nice Numbers for Graph Labels" of Graphic Gems. | ||||
|  * | ||||
|  * @param  {number} val Non-negative value. | ||||
|  * @param  {boolean} round | ||||
|  * @return {number} | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Order intervals asc, and split them when overlap. | ||||
|  * expect(numberUtil.reformIntervals([ | ||||
|  *     {interval: [18, 62], close: [1, 1]}, | ||||
|  *     {interval: [-Infinity, -70], close: [0, 0]}, | ||||
|  *     {interval: [-70, -26], close: [1, 1]}, | ||||
|  *     {interval: [-26, 18], close: [1, 1]}, | ||||
|  *     {interval: [62, 150], close: [1, 1]}, | ||||
|  *     {interval: [106, 150], close: [1, 1]}, | ||||
|  *     {interval: [150, Infinity], close: [0, 0]} | ||||
|  * ])).toEqual([ | ||||
|  *     {interval: [-Infinity, -70], close: [0, 0]}, | ||||
|  *     {interval: [-70, -26], close: [1, 1]}, | ||||
|  *     {interval: [-26, 18], close: [0, 1]}, | ||||
|  *     {interval: [18, 62], close: [0, 1]}, | ||||
|  *     {interval: [62, 150], close: [0, 1]}, | ||||
|  *     {interval: [150, Infinity], close: [0, 0]} | ||||
|  * ]); | ||||
|  * @param {Array.<Object>} list, where `close` mean open or close | ||||
|  *        of the interval, and Infinity can be used. | ||||
|  * @return {Array.<Object>} The origin list, which has been reformed. | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * parseFloat NaNs numeric-cast false positives (null|true|false|"") | ||||
|  * ...but misinterprets leading-number strings, particularly hex literals ("0x...") | ||||
|  * subtraction forces infinities to NaN | ||||
|  * | ||||
|  * @param {*} v | ||||
|  * @return {boolean} | ||||
|  */ | ||||
| 
 | ||||
| /* | ||||
| * Licensed to the Apache Software Foundation (ASF) under one | ||||
| * or more contributor license agreements.  See the NOTICE file | ||||
| * distributed with this work for additional information | ||||
| * regarding copyright ownership.  The ASF licenses this file | ||||
| * to you under the Apache License, Version 2.0 (the | ||||
| * "License"); you may not use this file except in compliance | ||||
| * with the License.  You may obtain a copy of the License at | ||||
| * | ||||
| *   http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| * | ||||
| * Unless required by applicable law or agreed to in writing, | ||||
| * software distributed under the License is distributed on an | ||||
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||
| * KIND, either express or implied.  See the License for the | ||||
| * specific language governing permissions and limitations | ||||
| * under the License. | ||||
| */ | ||||
| 
 | ||||
| /** | ||||
|  * See: | ||||
|  *  <https://en.wikipedia.org/wiki/Box_plot#cite_note-frigge_hoaglin_iglewicz-2>
 | ||||
|  *  <http://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/boxplot.stats.html>
 | ||||
|  * | ||||
|  * Helper method for preparing data. | ||||
|  * | ||||
|  * @param {Array.<number>} rawData like | ||||
|  *        [ | ||||
|  *            [12,232,443], (raw data set for the first box) | ||||
|  *            [3843,5545,1232], (raw datat set for the second box) | ||||
|  *            ... | ||||
|  *        ] | ||||
|  * @param {Object} [opt] | ||||
|  * | ||||
|  * @param {(number|string)} [opt.boundIQR=1.5] Data less than min bound is outlier. | ||||
|  *      default 1.5, means Q1 - 1.5 * (Q3 - Q1). | ||||
|  *      If 'none'/0 passed, min bound will not be used. | ||||
|  * @param {(number|string)} [opt.layout='horizontal'] | ||||
|  *      Box plot layout, can be 'horizontal' or 'vertical' | ||||
|  * @return {Object} { | ||||
|  *      boxData: Array.<Array.<number>> | ||||
|  *      outliers: Array.<Array.<number>> | ||||
|  *      axisData: Array.<string> | ||||
|  * } | ||||
|  */ | ||||
| var prepareBoxplotData = function (rawData, opt) { | ||||
|     opt = opt || []; | ||||
|     var boxData = []; | ||||
|     var outliers = []; | ||||
|     var axisData = []; | ||||
|     var boundIQR = opt.boundIQR; | ||||
|     var useExtreme = boundIQR === 'none' || boundIQR === 0; | ||||
| 
 | ||||
|     for (var i = 0; i < rawData.length; i++) { | ||||
|         axisData.push(i + ''); | ||||
|         var ascList = asc(rawData[i].slice()); | ||||
| 
 | ||||
|         var Q1 = quantile(ascList, 0.25); | ||||
|         var Q2 = quantile(ascList, 0.5); | ||||
|         var Q3 = quantile(ascList, 0.75); | ||||
|         var min = ascList[0]; | ||||
|         var max = ascList[ascList.length - 1]; | ||||
| 
 | ||||
|         var bound = (boundIQR == null ? 1.5 : boundIQR) * (Q3 - Q1); | ||||
| 
 | ||||
|         var low = useExtreme | ||||
|             ? min | ||||
|             : Math.max(min, Q1 - bound); | ||||
|         var high = useExtreme | ||||
|             ? max | ||||
|             : Math.min(max, Q3 + bound); | ||||
| 
 | ||||
|         boxData.push([low, Q1, Q2, Q3, high]); | ||||
| 
 | ||||
|         for (var j = 0; j < ascList.length; j++) { | ||||
|             var dataItem = ascList[j]; | ||||
|             if (dataItem < low || dataItem > high) { | ||||
|                 var outlier = [i, dataItem]; | ||||
|                 opt.layout === 'vertical' && outlier.reverse(); | ||||
|                 outliers.push(outlier); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     return { | ||||
|         boxData: boxData, | ||||
|         outliers: outliers, | ||||
|         axisData: axisData | ||||
|     }; | ||||
| }; | ||||
| 
 | ||||
| /* | ||||
| * Licensed to the Apache Software Foundation (ASF) under one | ||||
| * or more contributor license agreements.  See the NOTICE file | ||||
| * distributed with this work for additional information | ||||
| * regarding copyright ownership.  The ASF licenses this file | ||||
| * to you under the Apache License, Version 2.0 (the | ||||
| * "License"); you may not use this file except in compliance | ||||
| * with the License.  You may obtain a copy of the License at | ||||
| * | ||||
| *   http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| * | ||||
| * Unless required by applicable law or agreed to in writing, | ||||
| * software distributed under the License is distributed on an | ||||
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||
| * KIND, either express or implied.  See the License for the | ||||
| * specific language governing permissions and limitations | ||||
| * under the License. | ||||
| */ | ||||
| 
 | ||||
| var version = '1.0.0'; | ||||
| 
 | ||||
| // For backward compatibility, where the namespace `dataTool` will
 | ||||
| // be mounted on `echarts` is the extension `dataTool` is imported.
 | ||||
| // But the old version of echarts do not have `dataTool` namespace,
 | ||||
| // so check it before mounting.
 | ||||
| if (echarts.dataTool) { | ||||
|     echarts.dataTool.version = version; | ||||
|     echarts.dataTool.gexf = gexf; | ||||
|     echarts.dataTool.prepareBoxplotData = prepareBoxplotData; | ||||
| } | ||||
| 
 | ||||
| exports.version = version; | ||||
| exports.gexf = gexf; | ||||
| exports.prepareBoxplotData = prepareBoxplotData; | ||||
| 
 | ||||
| }))); | ||||
| //# sourceMappingURL=dataTool.js.map
 | ||||