You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by mc...@apache.org on 2014/12/16 18:36:47 UTC

[01/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of qtip2.

Repository: incubator-nifi
Updated Branches:
  refs/heads/develop 1cc3ce575 -> d7b1113a8


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/57b4178f/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.js
index de35e9a..411a0f8 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.js
@@ -1,706 +1,5 @@
-/*
- * qTip2 - Pretty powerful tooltips
- * http://craigsworks.com/projects/qtip2/
- *
- * Version: 2.0.0pre
- * Copyright 2009-2010 Craig Michael Thompson - http://craigsworks.com
- *
- * Dual licensed under MIT or GPLv2 licenses
- *   http://en.wikipedia.org/wiki/MIT_License
- *   http://en.wikipedia.org/wiki/GNU_General_Public_License
- *
- * Date: Thu Apr 26 20:40:09 2012 +0100
- *//*jslint browser: true, onevar: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: true *//*global window: false, jQuery: false, console: false, define: false */// Uses AMD or browser globals to create a jQuery plugin.
-(function (a) {
-    typeof define == "function" && define.amd ? define(["jquery"], a) : a(jQuery)
-})(function (a) {
-    "use strict";
-    function v() {
-        v.history = v.history || [], v.history.push(arguments);
-        if ("object" == typeof console) {
-            var a = console[console.warn ? "warn" : "log"], b = Array.prototype.slice.call(arguments), c;
-            typeof arguments[0] == "string" && (b[0] = "qTip2: " + b[0]), c = a.apply ? a.apply(console, b) : a(b)
-        }
-    }
-    function w(b) {
-        var e;
-        if (!b || "object" != typeof b)
-            return c;
-        if (b.metadata === d || "object" != typeof b.metadata)
-            b.metadata = {type: b.metadata};
-        if ("content"in b) {
-            if (b.content === d || "object" != typeof b.content || b.content.jquery)
-                b.content = {text: b.content};
-            e = b.content.text || c, !a.isFunction(e) && (!e && !e.attr || e.length < 1 || "object" == typeof e && !e.jquery) && (b.content.text = c);
-            if ("title"in b.content) {
-                if (b.content.title === d || "object" != typeof b.content.title)
-                    b.content.title = {text: b.content.title};
-                e = b.content.title.text || c, !a.isFunction(e) && (!e && !e.attr || e.length < 1 || "object" == typeof e && !e.jquery) && (b.content.title.text = c)
-            }
-        }
-        return"position"in b && (b.position === d || "object" != typeof b.position) && (b.position = {my: b.position, at: b.position}), "show"in b && (b.show === d || "object" != typeof b.show) && (b.show.jquery ? b.show = {target: b.show} : b.show = {event: b.show}), "hide"in b && (b.hide === d || "object" != typeof b.hide) && (b.hide.jquery ? b.hide = {target: b.hide} : b.hide = {event: b.hide}), "style"in b && (b.style === d || "object" != typeof b.style) && (b.style = {classes: b.style}), a.each(g, function () {
-            this.sanitize && this.sanitize(b)
-        }), b
-    }
-    function x(r, s, v, x) {
-        function H(a) {
-            var b = 0, c, d = s, e = a.split(".");
-            while (d = d[e[b++]])
-                b < e.length && (c = d);
-            return[c || s, e.pop()]
-        }
-        function I() {
-            var a = s.style.widget;
-            D.toggleClass(k, a).toggleClass(n, s.style.def && !a), F.content.toggleClass(k + "-content", a), F.titlebar && F.titlebar.toggleClass(k + "-header", a), F.button && F.button.toggleClass(j + "-icon", !a)
-        }
-        function J(a) {
-            F.title && (F.titlebar.remove(), F.titlebar = F.title = F.button = d, a !== c && y.reposition())
-        }
-        function K() {
-            var b = s.content.title.button, d = typeof b == "string", e = d ? b : "Close tooltip";
-            F.button && F.button.remove(), b.jquery ? F.button = b : F.button = a("<a />", {"class": "ui-state-default ui-tooltip-close " + (s.style.widget ? "" : j + "-icon"), title: e, "aria-label": e}).prepend(a("<span />", {"class": "ui-icon ui-icon-close", html: "&times;"})), F.button.appendTo(F.titlebar).attr("role", "button").click(function (a) {
-                return D.hasClass(l) || y.hide(a), c
-            }), y.redraw()
-        }
-        function L() {
-            var c = A + "-title";
-            F.titlebar && J(), F.titlebar = a("<div />", {"class": j + "-titlebar " + (s.style.widget ? "ui-widget-header" : "")}).append(F.title = a("<div />", {id: c, "class": j + "-title", "aria-atomic": b})).insertBefore(F.content).delegate(".ui-tooltip-close", "mousedown keydown mouseup keyup mouseout", function (b) {
-                a(this).toggleClass("ui-state-active ui-state-focus", b.type.substr(-4) === "down")
-            }).delegate(".ui-tooltip-close", "mouseover mouseout", function (b) {
-                a(this).toggleClass("ui-state-hover", b.type === "mouseover")
-            }), s.content.title.button ? K() : y.rendered && y.redraw()
-        }
-        function M(a) {
-            var b = F.button, d = F.title;
-            if (!y.rendered)
-                return c;
-            a ? (d || L(), K()) : b.remove()
-        }
-        function N(b, d) {
-            var e = F.title;
-            if (!y.rendered || !b)
-                return c;
-            a.isFunction(b) && (b = b.call(r, G.event, y));
-            if (b === c || !b && b !== "")
-                return J(c);
-            b.jquery && b.length > 0 ? e.empty().append(b.css({display: "block"})) : e.html(b), y.redraw(), d !== c && y.rendered && D[0].offsetWidth > 0 && y.reposition(G.event)
-        }
-        function O(b, d) {
-            function g(b) {
-                function i(e) {
-                    e && (delete h[e.src], clearTimeout(y.timers.img[e.src]), a(e).unbind(E)), a.isEmptyObject(h) && (y.redraw(), d !== c && y.reposition(G.event), b())
-                }
-                var g, h = {};
-                if ((g = f.find("img[src]:not([height]):not([width])")).length === 0)
-                    return i();
-                g.each(function (b, c) {
-                    if (h[c.src] !== e)
-                        return;
-                    var d = 0, f = 3;
-                    (function g() {
-                        if (c.height || c.width || d > f)
-                            return i(c);
-                        d += 1, y.timers.img[c.src] = setTimeout(g, 700)
-                    })(), a(c).bind("error" + E + " load" + E, function () {
-                        i(this)
-                    }), h[c.src] = c
-                })
-            }
-            var f = F.content;
-            return!y.rendered || !b ? c : (a.isFunction(b) && (b = b.call(r, G.event, y) || ""), b.jquery && b.length > 0 ? f.empty().append(b.css({display: "block"})) : f.html(b), y.rendered < 0 ? D.queue("fx", g) : (C = 0, g(a.noop)), y)
-        }
-        function P() {
-            function j(a) {
-                if (D.hasClass(l))
-                    return c;
-                clearTimeout(y.timers.show), clearTimeout(y.timers.hide);
-                var d = function () {
-                    y.toggle(b, a)
-                };
-                s.show.delay > 0 ? y.timers.show = setTimeout(d, s.show.delay) : d()
-            }
-            function k(b) {
-                if (D.hasClass(l) || B || C)
-                    return c;
-                var f = a(b.relatedTarget || b.target), g = f.closest(m)[0] === D[0], h = f[0] === e.show[0];
-                clearTimeout(y.timers.show), clearTimeout(y.timers.hide);
-                if (d.target === "mouse" && g || s.hide.fixed && /mouse(out|leave|move)/.test(b.type) && (g || h)) {
-                    try {
-                        b.preventDefault(), b.stopImmediatePropagation()
-                    } catch (i) {
-                    }
-                    return
-                }
-                s.hide.delay > 0 ? y.timers.hide = setTimeout(function () {
-                    y.hide(b)
-                }, s.hide.delay) : y.hide(b)
-            }
-            function n(a) {
-                if (D.hasClass(l))
-                    return c;
-                clearTimeout(y.timers.inactive), y.timers.inactive = setTimeout(function () {
-                    y.hide(a)
-                }, s.hide.inactive)
-            }
-            function o(a) {
-                y.rendered && D[0].offsetWidth > 0 && y.reposition(a)
-            }
-            var d = s.position, e = {show: s.show.target, hide: s.hide.target, viewport: a(d.viewport), document: a(document), body: a(document.body), window: a(window)}, g = {show: a.trim("" + s.show.event).split(" "), hide: a.trim("" + s.hide.event).split(" ")}, i = a.browser.msie && parseInt(a.browser.version, 10) === 6;
-            D.bind("mouseenter" + E + " mouseleave" + E, function (a) {
-                var b = a.type === "mouseenter";
-                b && y.focus(a), D.toggleClass(p, b)
-            }), s.hide.fixed && (e.hide = e.hide.add(D), D.bind("mouseover" + E, function () {
-                D.hasClass(l) || clearTimeout(y.timers.hide)
-            })), /mouse(out|leave)/i.test(s.hide.event) ? s.hide.leave === "window" && e.window.bind("mouseout" + E + " blur" + E, function (a) {
-                /select|option/.test(a.target) && !a.relatedTarget && y.hide(a)
-            }) : /mouse(over|enter)/i.test(s.show.event) && e.hide.bind("mouseleave" + E, function (a) {
-                clearTimeout(y.timers.show)
-            }), ("" + s.hide.event).indexOf("unfocus") > -1 && d.container.closest("html").bind("mousedown" + E, function (b) {
-                var c = a(b.target), d = y.rendered && !D.hasClass(l) && D[0].offsetWidth > 0, e = c.parents(m).filter(D[0]).length > 0;
-                c[0] !== r[0] && c[0] !== D[0] && !e && !r.has(c[0]).length && !c.attr("disabled") && y.hide(b)
-            }), "number" == typeof s.hide.inactive && (e.show.bind("qtip-" + v + "-inactive", n), a.each(f.inactiveEvents, function (a, b) {
-                e.hide.add(F.tooltip).bind(b + E + "-inactive", n)
-            })), a.each(g.hide, function (b, c) {
-                var d = a.inArray(c, g.show), f = a(e.hide);
-                d > -1 && f.add(e.show).length === f.length || c === "unfocus" ? (e.show.bind(c + E, function (a) {
-                    D[0].offsetWidth > 0 ? k(a) : j(a)
-                }), delete g.show[d]) : e.hide.bind(c + E, k)
-            }), a.each(g.show, function (a, b) {
-                e.show.bind(b + E, j)
-            }), "number" == typeof s.hide.distance && e.show.add(D).bind("mousemove" + E, function (a) {
-                var b = G.origin || {}, c = s.hide.distance, d = Math.abs;
-                (d(a.pageX - b.pageX) >= c || d(a.pageY - b.pageY) >= c) && y.hide(a)
-            }), d.target === "mouse" && (e.show.bind("mousemove" + E, function (a) {
-                h = {pageX: a.pageX, pageY: a.pageY, type: "mousemove"}
-            }), d.adjust.mouse && (s.hide.event && (D.bind("mouseleave" + E, function (a) {
-                (a.relatedTarget || a.target) !== e.show[0] && y.hide(a)
-            }), F.target.bind("mouseenter" + E + " mouseleave" + E, function (a) {
-                G.onTarget = a.type === "mouseenter"
-            })), e.document.bind("mousemove" + E, function (a) {
-                y.rendered && G.onTarget && !D.hasClass(l) && D[0].offsetWidth > 0 && y.reposition(a || h)
-            }))), (d.adjust.resize || e.viewport.length) && (a.event.special.resize ? e.viewport : e.window).bind("resize" + E, o), (e.viewport.length || i && D.css("position") === "fixed") && e.viewport.bind("scroll" + E, o)
-        }
-        function Q() {
-            var b = [s.show.target[0], s.hide.target[0], y.rendered && F.tooltip[0], s.position.container[0], s.position.viewport[0], window, document];
-            y.rendered ? a([]).pushStack(a.grep(b, function (a) {
-                return typeof a == "object"
-            })).unbind(E) : s.show.target.unbind(E + "-create")
-        }
-        var y = this, z = document.body, A = j + "-" + v, B = 0, C = 0, D = a(), E = ".qtip-" + v, F, G;
-        y.id = v, y.rendered = c, y.destroyed = c, y.elements = F = {target: r}, y.timers = {img: {}}, y.options = s, y.checks = {}, y.plugins = {}, y.cache = G = {event: {}, target: a(), disabled: c, attr: x, onTarget: c}, y.checks.builtin = {"^id$": function (d, e, g) {
-                var h = g === b ? f.nextid : g, i = j + "-" + h;
-                h !== c && h.length > 0 && !a("#" + i).length && (D[0].id = i, F.content[0].id = i + "-content", F.title[0].id = i + "-title")
-            }, "^content.text$": function (a, b, c) {
-                O(c)
-            }, "^content.title.text$": function (a, b, c) {
-                if (!c)
-                    return J();
-                !F.title && c && L(), N(c)
-            }, "^content.title.button$": function (a, b, c) {
-                M(c)
-            }, "^position.(my|at)$": function (a, b, c) {
-                "string" == typeof c && (a[b] = new g.Corner(c))
-            }, "^position.container$": function (a, b, c) {
-                y.rendered && D.appendTo(c)
-            }, "^show.ready$": function () {
-                y.rendered ? y.toggle(b) : y.render(1)
-            }, "^style.classes$": function (a, b, c) {
-                D.attr("class", j + " qtip ui-helper-reset " + c)
-            }, "^style.widget|content.title": I, "^events.(render|show|move|hide|focus|blur)$": function (b, c, d) {
-                D[(a.isFunction(d) ? "" : "un") + "bind"]("tooltip" + c, d)
-            }, "^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)": function () {
-                var a = s.position;
-                D.attr("tracking", a.target === "mouse" && a.adjust.mouse), Q(), P()
-            }}, a.extend(y, {render: function (d) {
-                if (y.rendered)
-                    return y;
-                var e = s.content.text, f = s.content.title.text, h = s.position, i = a.Event("tooltiprender");
-                return a.attr(r[0], "aria-describedby", A), D = F.tooltip = a("<div/>", {id: A, "class": j + " qtip ui-helper-reset " + n + " " + s.style.classes + " " + j + "-pos-" + s.position.my.abbrev(), width: s.style.width || "", height: s.style.height || "", tracking: h.target === "mouse" && h.adjust.mouse, role: "alert", "aria-live": "polite", "aria-atomic": c, "aria-describedby": A + "-content", "aria-hidden": b}).toggleClass(l, G.disabled).data("qtip", y).appendTo(s.position.container).append(F.content = a("<div />", {"class": j + "-content", id: A + "-content", "aria-atomic": b})), y.rendered = -1, C = 1, B = 1, f && (L(), a.isFunction(f) || N(f, c)), a.isFunction(e) || O(e, c), y.rendered = b, I(), a.each(s.events, function (b, c) {
-                    a.isFunction(c) && D.bind(b === "toggle" ? "tooltipshow tooltiphide" : "tooltip" + b, c)
-                }), a.each(g, function () {
-                    this.initialize === "render" && this(y)
-                }), P(), D.queue("fx", function (a) {
-                    i.originalEvent = G.event, D.trigger(i, [y]), C = 0, B = 0, y.redraw(), (s.show.ready || d) && y.toggle(b, G.event, c), a()
-                }), y
-            }, get: function (a) {
-                var b, c;
-                switch (a.toLowerCase()) {
-                    case"dimensions":
-                        b = {height: D.outerHeight(), width: D.outerWidth()};
-                        break;
-                    case"offset":
-                        b = g.offset(D, s.position.container);
-                        break;
-                    default:
-                        c = H(a.toLowerCase()), b = c[0][c[1]], b = b.precedance ? b.string() : b
-                }
-                return b
-            }, set: function (e, f) {
-                function m(a, b) {
-                    var c, d, e;
-                    for (c in k)
-                        for (d in k[c])
-                            if (e = (new RegExp(d, "i")).exec(a))
-                                b.push(e), k[c][d].apply(y, b)
-                }
-                var g = /^position\.(my|at|adjust|target|container)|style|content|show\.ready/i, h = /^content\.(title|attr)|style/i, i = c, j = c, k = y.checks, l;
-                return"string" == typeof e ? (l = e, e = {}, e[l] = f) : e = a.extend(b, {}, e), a.each(e, function (b, c) {
-                    var d = H(b.toLowerCase()), f;
-                    f = d[0][d[1]], d[0][d[1]] = "object" == typeof c && c.nodeType ? a(c) : c, e[b] = [d[0], d[1], c, f], i = g.test(b) || i, j = h.test(b) || j
-                }), w(s), B = C = 1, a.each(e, m), B = C = 0, y.rendered && D[0].offsetWidth > 0 && (i && y.reposition(s.position.target === "mouse" ? d : G.event), j && y.redraw()), y
-            }, toggle: function (e, f) {
-                function t() {
-                    e ? (a.browser.msie && D[0].style.removeAttribute("filter"), D.css("overflow", ""), "string" == typeof i.autofocus && a(i.autofocus, D).focus(), i.target.trigger("qtip-" + v + "-inactive")) : D.css({display: "", visibility: "", opacity: "", left: "", top: ""}), r = a.Event("tooltip" + (e ? "visible" : "hidden")), r.originalEvent = f ? G.event : d, D.trigger(r, [y])
-                }
-                if (!y.rendered)
-                    return e ? y.render(1) : y;
-                var g = e ? "show" : "hide", i = s[g], j = s[e ? "hide" : "show"], k = s.position, l = s.content, n = D[0].offsetWidth > 0, o = e || i.target.length === 1, p = !f || i.target.length < 2 || G.target[0] === f.target, q, r;
-                (typeof e).search("boolean|number") && (e = !n);
-                if (!D.is(":animated") && n === e && p)
-                    return y;
-                if (f) {
-                    if (/over|enter/.test(f.type) && /out|leave/.test(G.event.type) && s.show.target.add(f.target).length === s.show.target.length && D.has(f.relatedTarget).length)
-                        return y;
-                    G.event = a.extend({}, f)
-                }
-                return r = a.Event("tooltip" + g), r.originalEvent = f ? G.event : d, D.trigger(r, [y, 90]), r.isDefaultPrevented() ? y : (a.attr(D[0], "aria-hidden", !e), e ? (G.origin = a.extend({}, h), y.focus(f), a.isFunction(l.text) && O(l.text, c), a.isFunction(l.title.text) && N(l.title.text, c), !u && k.target === "mouse" && k.adjust.mouse && (a(document).bind("mousemove.qtip", function (a) {
-                    h = {pageX: a.pageX, pageY: a.pageY, type: "mousemove"}
-                }), u = b), y.reposition(f, arguments[2]), (r.solo = !!i.solo) && a(m, i.solo).not(D).qtip("hide", r)) : (clearTimeout(y.timers.show), delete G.origin, u && !a(m + '[tracking="true"]:visible', i.solo).not(D).length && (a(document).unbind("mousemove.qtip"), u = c), y.blur(f)), i.effect === c || o === c ? (D[g](), t.call(D)) : a.isFunction(i.effect) ? (D.stop(1, 1), i.effect.call(D, y), D.queue("fx", function (a) {
-                    t(), a()
-                })) : D.fadeTo(90, e ? 1 : 0, t), e && i.target.trigger("qtip-" + v + "-inactive"), y)
-            }, show: function (a) {
-                return y.toggle(b, a)
-            }, hide: function (a) {
-                return y.toggle(c, a)
-            }, focus: function (b) {
-                if (!y.rendered)
-                    return y;
-                var c = a(m), d = parseInt(D[0].style.zIndex, 10), e = f.zindex + c.length, g = a.extend({}, b), h, i;
-                return D.hasClass(o) || (i = a.Event("tooltipfocus"), i.originalEvent = g, D.trigger(i, [y, e]), i.isDefaultPrevented() || (d !== e && (c.each(function () {
-                    this.style.zIndex > d && (this.style.zIndex = this.style.zIndex - 1)
-                }), c.filter("." + o).qtip("blur", g)), D.addClass(o)[0].style.zIndex = e)), y
-            }, blur: function (b) {
-                var c = a.extend({}, b), d;
-                return D.removeClass(o), d = a.Event("tooltipblur"), d.originalEvent = c, D.trigger(d, [y]), y
-            }, reposition: function (b, d) {
-                if (!y.rendered || B)
-                    return y;
-                B = 1;
-                var e = s.position.target, f = s.position, i = f.my, k = f.at, l = f.adjust, m = l.method.split(" "), n = D.outerWidth(), o = D.outerHeight(), p = 0, q = 0, r = a.Event("tooltipmove"), t = D.css("position") === "fixed", u = f.viewport, v = {left: 0, top: 0}, w = f.container, x = c, A = y.plugins.tip, C = D[0].offsetWidth > 0, E = {horizontal: m[0], vertical: m[1] = m[1] || m[0], enabled: u.jquery && e[0] !== window && e[0] !== z && l.method !== "none", left: function (a) {
-                        var b = E.horizontal === "shift", c = l.x * (E.horizontal.substr(-6) === "invert" ? 2 : 0), d = -w.offset.left + u.offset.left + u.scrollLeft, e = i.x === "left" ? n : i.x === "right" ? -n : -n / 2, f = k.x === "left" ? p : k.x === "right" ? -p : -p / 2, g = A && A.size ? A.size.width || 0 : 0, h = A && A.corner && A.corner.precedance === "x" && !b ? g : 0, j = d - a + h, m = a + n - u.width - d + h, o = e - (i.precedance === "x" || i.x === i.y ? f : 0) - (k.x === "center" ? p / 2 : 0), q = i.x === "center";
-                        return b ? (h = A && A.corner && A.corner.precedance === "y" ? g : 0, o = (i.x === "left" ? 1 : -1) * e - h, v.left += j > 0 ? j : m > 0 ? -m : 0, v.left = Math.max(-w.offset.left + u.offset.left + (h && A.corner.x === "center" ? A.offset : 0), a - o, Math.min(Math.max(-w.offset.left + u.offset.left + u.width, a + o), v.left))) : (j > 0 && (i.x !== "left" || m > 0) ? v.left -= o + c : m > 0 && (i.x !== "right" || j > 0) && (v.left -= (q ? -o : o) + c), v.left < d && -v.left > m && (v.left = a)), v.left - a
-                    }, top: function (a) {
-                        var b = E.vertical === "shift", c = l.y * (E.vertical.substr(-6) === "invert" ? 2 : 0), d = -w.offset.top + u.offset.top + u.scrollTop, e = i.y === "top" ? o : i.y === "bottom" ? -o : -o / 2, f = k.y === "top" ? q : k.y === "bottom" ? -q : -q / 2, g = A && A.size ? A.size.height || 0 : 0, h = A && A.corner && A.corner.precedance === "y" && !b ? g : 0, j = d - a + h, m = a + o - u.height - d + h, n = e - (i.precedance === "y" || i.x === i.y ? f : 0) - (k.y === "center" ? q / 2 : 0), p = i.y === "center";
-                        return b ? (h = A && A.corner && A.corner.precedance === "x" ? g : 0, n = (i.y === "top" ? 1 : -1) * e - h, v.top += j > 0 ? j : m > 0 ? -m : 0, v.top = Math.max(-w.offset.top + u.offset.top + (h && A.corner.x === "center" ? A.offset : 0), a - n, Math.min(Math.max(-w.offset.top + u.offset.top + u.height, a + n), v.top))) : (j > 0 && (i.y !== "top" || m > 0) ? v.top -= n + c : m > 0 && (i.y !== "bottom" || j > 0) && (v.top -= (p ? -n : n) + c), v.top < 0 && -v.top > m && (v.top = a)), v.top - a
-                    }}, H;
-                if (a.isArray(e) && e.length === 2)
-                    k = {x: "left", y: "top"}, v = {left: e[0], top: e[1]};
-                else if (e === "mouse" && (b && b.pageX || G.event.pageX))
-                    k = {x: "left", y: "top"}, b = (!b || b.type !== "resize" && b.type !== "scroll" ? b && b.pageX && b.type === "mousemove" ? b : h && h.pageX && (l.mouse || !b || !b.pageX) ? {pageX: h.pageX, pageY: h.pageY} : !l.mouse && G.origin && G.origin.pageX && s.show.distance ? G.origin : b : G.event) || b || G.event || h || {}, v = {top: b.pageY, left: b.pageX};
-                else {
-                    e === "event" ? b && b.target && b.type !== "scroll" && b.type !== "resize" ? e = G.target = a(b.target) : e = G.target : e = G.target = a(e.jquery ? e : F.target), e = a(e).eq(0);
-                    if (e.length === 0)
-                        return y;
-                    e[0] === document || e[0] === window ? (p = g.iOS ? window.innerWidth : e.width(), q = g.iOS ? window.innerHeight : e.height(), e[0] === window && (v = {top: (u || e).scrollTop(), left: (u || e).scrollLeft()})) : e.is("area") && g.imagemap ? v = g.imagemap(e, k, E.enabled ? m : c) : e[0].namespaceURI === "http://www.w3.org/2000/svg" && g.svg ? v = g.svg(e, k) : (p = e.outerWidth(), q = e.outerHeight(), v = g.offset(e, w)), v.offset && (p = v.width, q = v.height, x = v.flipoffset, v = v.offset);
-                    if (g.iOS < 4.1 && g.iOS > 3.1 || g.iOS == 4.3 || !g.iOS && t)
-                        H = a(window), v.left -= H.scrollLeft(), v.top -= H.scrollTop();
-                    v.left += k.x === "right" ? p : k.x === "center" ? p / 2 : 0, v.top += k.y === "bottom" ? q : k.y === "center" ? q / 2 : 0
-                }
-                return v.left += l.x + (i.x === "right" ? -n : i.x === "center" ? -n / 2 : 0), v.top += l.y + (i.y === "bottom" ? -o : i.y === "center" ? -o / 2 : 0), E.enabled ? (u = {elem: u, height: u[(u[0] === window ? "h" : "outerH") + "eight"](), width: u[(u[0] === window ? "w" : "outerW") + "idth"](), scrollLeft: t ? 0 : u.scrollLeft(), scrollTop: t ? 0 : u.scrollTop(), offset: u.offset() || {left: 0, top: 0}}, w = {elem: w, scrollLeft: w.scrollLeft(), scrollTop: w.scrollTop(), offset: w.offset() || {left: 0, top: 0}}, v.adjusted = {left: E.horizontal !== "none" ? E.left(v.left) : 0, top: E.vertical !== "none" ? E.top(v.top) : 0}, v.adjusted.left + v.adjusted.top && D.attr("class", D[0].className.replace(/ui-tooltip-pos-\w+/i, j + "-pos-" + i.abbrev())), x && v.adjusted.left && (v.left += x.left), x && v.adjusted.top && (v.top += x.top)) : v.adjusted = {left: 0, top: 0}, r.originalEvent = a.extend({}, b), D.trigger(r, [y, v, u.elem || u]), r.isDefaultPrevented() ? y : (delete
  v.adjusted, d === c || !C || isNaN(v.left) || isNaN(v.top) || e === "mouse" || !a.isFunction(f.effect) ? D.css(v) : a.isFunction(f.effect) && (f.effect.call(D, y, a.extend({}, v)), D.queue(function (b) {
-                    a(this).css({opacity: "", height: ""}), a.browser.msie && this.style.removeAttribute("filter"), b()
-                })), B = 0, y)
-            }, redraw: function () {
-                if (y.rendered < 1 || C)
-                    return y;
-                var a = s.position.container, b, c, d, e;
-                return C = 1, s.style.height && D.css("height", s.style.height), s.style.width ? D.css("width", s.style.width) : (D.css("width", "").addClass(q), c = D.width() + 1, d = D.css("max-width") || "", e = D.css("min-width") || "", b = (d + e).indexOf("%") > -1 ? a.width() / 100 : 0, d = (d.indexOf("%") > -1 ? b : 1) * parseInt(d, 10) || c, e = (e.indexOf("%") > -1 ? b : 1) * parseInt(e, 10) || 0, c = d + e ? Math.min(Math.max(c, e), d) : c, D.css("width", Math.round(c)).removeClass(q)), C = 0, y
-            }, disable: function (b) {
-                return"boolean" != typeof b && (b = !D.hasClass(l) && !G.disabled), y.rendered ? (D.toggleClass(l, b), a.attr(D[0], "aria-disabled", b)) : G.disabled = !!b, y
-            }, enable: function () {
-                return y.disable(c)
-            }, destroy: function () {
-                var c = r[0], d = a.attr(c, t), e = r.data("qtip");
-                y.destroyed = b, y.rendered && (D.stop(1, 0).remove(), a.each(y.plugins, function () {
-                    this.destroy && this.destroy()
-                })), clearTimeout(y.timers.show), clearTimeout(y.timers.hide), Q();
-                if (!e || y === e)
-                    a.removeData(c, "qtip"), s.suppress && d && (a.attr(c, "title", d), r.removeAttr(t)), r.removeAttr("aria-describedby");
-                return r.unbind(".qtip-" + v), delete i[y.id], r
-            }})
-    }
-    function y(e, h) {
-        var i, j, k, l, m, n = a(this), o = a(document.body), p = this === document ? o : n, q = n.metadata ? n.metadata(h.metadata) : d, r = h.metadata.type === "html5" && q ? q[h.metadata.name] : d, s = n.data(h.metadata.name || "qtipopts");
-        try {
-            s = typeof s == "string" ? (new Function("return " + s))() : s
-        } catch (u) {
-            v("Unable to parse HTML5 attribute data: " + s)
-        }
-        l = a.extend(b, {}, f.defaults, h, typeof s == "object" ? w(s) : d, w(r || q)), j = l.position, l.id = e;
-        if ("boolean" == typeof l.content.text) {
-            k = n.attr(l.content.attr);
-            if (l.content.attr === c || !k)
-                return v("Unable to locate content for tooltip! Aborting render of tooltip on element: ", n), c;
-            l.content.text = k
-        }
-        j.container.length || (j.container = o), j.target === c && (j.target = p), l.show.target === c && (l.show.target = p), l.show.solo === b && (l.show.solo = j.container.closest("body")), l.hide.target === c && (l.hide.target = p), l.position.viewport === b && (l.position.viewport = j.container), j.container = j.container.eq(0), j.at = new g.Corner(j.at), j.my = new g.Corner(j.my);
-        if (a.data(this, "qtip"))
-            if (l.overwrite)
-                n.qtip("destroy");
-            else if (l.overwrite === c)
-                return c;
-        return l.suppress && (m = a.attr(this, "title")) && a(this).removeAttr("title").attr(t, m), i = new x(n, l, e, !!k), a.data(this, "qtip", i), n.bind("remove.qtip-" + e + " removeqtip.qtip-" + e, function () {
-            i.destroy()
-        }), i
-    }
-    function z(d) {
-        var e = this, g = d.elements.tooltip, h = d.options.content.ajax, i = f.defaults.content.ajax, j = ".qtip-ajax", k = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, l = b, m = c, n;
-        d.checks.ajax = {"^content.ajax": function (a, b, c) {
-                b === "ajax" && (h = c), b === "once" ? e.init() : h && h.url ? e.load() : g.unbind(j)
-            }}, a.extend(e, {init: function () {
-                return h && h.url && g.unbind(j)[h.once ? "one" : "bind"]("tooltipshow" + j, e.load), e
-            }, load: function (f) {
-                function r() {
-                    var e;
-                    if (d.destroyed)
-                        return;
-                    l = c, p && (m = b, d.show(f.originalEvent)), (e = i.complete || h.complete) && a.isFunction(e) && e.apply(h.context || d, arguments)
-                }
-                function s(b, c, e) {
-                    var f;
-                    if (d.destroyed)
-                        return;
-                    o && (b = a("<div/>").append(b.replace(k, "")).find(o)), (f = i.success || h.success) && a.isFunction(f) ? f.call(h.context || d, b, c, e) : d.set("content.text", b)
-                }
-                function t(a, b, c) {
-                    if (d.destroyed || a.status === 0)
-                        return;
-                    d.set("content.text", b + ": " + c)
-                }
-                if (m) {
-                    m = c;
-                    return
-                }
-                var g = h.url.indexOf(" "), j = h.url, o, p = !h.loading && l;
-                if (p)
-                    try {
-                        f.preventDefault()
-                    } catch (q) {
-                    }
-                else if (f && f.isDefaultPrevented())
-                    return e;
-                n && n.abort && n.abort(), g > -1 && (o = j.substr(g), j = j.substr(0, g)), n = a.ajax(a.extend({error: i.error || t, context: d}, h, {url: j, success: s, complete: r}))
-            }, destroy: function () {
-                n && n.abort && n.abort(), d.destroyed = b
-            }}), e.init()
-    }
-    function A(b) {
-        var c = this, d = b.elements, e = d.tooltip, f = ".bgiframe-" + b.id;
-        a.extend(c, {init: function () {
-                d.bgiframe = a('<iframe class="ui-tooltip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';"  style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>'), d.bgiframe.appendTo(e), e.bind("tooltipmove" + f, c.adjust)
-            }, adjust: function () {
-                var a = b.get("dimensions"), c = b.plugins.tip, f = d.tip, g, h;
-                h = parseInt(e.css("border-left-width"), 10) || 0, h = {left: -h, top: -h}, c && f && (g = c.corner.precedance === "x" ? ["width", "left"] : ["height", "top"], h[g[1]] -= f[g[0]]()), d.bgiframe.css(h).css(a)
-            }, destroy: function () {
-                d.bgiframe.remove(), e.unbind(f)
-            }}), c.init()
-    }
-    function B(d) {
-        var e = this, f = d.options.show.modal, h = d.elements, i = h.tooltip, j = "#qtip-overlay", k = ".qtipmodal", l = k + d.id, n = "is-modal-qtip", p = a(document.body), q;
-        d.checks.modal = {"^show.modal.(on|blur)$": function () {
-                e.init(), h.overlay.toggle(i.is(":visible"))
-            }}, a.extend(e, {init: function () {
-                return f.on ? (q = e.create(), i.attr(n, b).css("z-index", g.modal.zindex + a(m + "[" + n + "]").length).unbind(k).unbind(l).bind("tooltipshow" + k + " tooltiphide" + k, function (b, c, d) {
-                    var f = b.originalEvent;
-                    if (b.target === i[0])
-                        if (f && b.type === "tooltiphide" && /mouse(leave|enter)/.test(f.type) && a(f.relatedTarget).closest(q[0]).length)
-                            try {
-                                b.preventDefault()
-                            } catch (g) {
-                            }
-                        else
-                            (!f || f && !f.solo) && e[b.type.replace("tooltip", "")](b, d)
-                }).bind("tooltipfocus" + k, function (b) {
-                    if (b.isDefaultPrevented() || b.target !== i[0])
-                        return;
-                    var c = a(m).filter("[" + n + "]"), d = g.modal.zindex + c.length, e = parseInt(i[0].style.zIndex, 10);
-                    q[0].style.zIndex = d - 1, c.each(function () {
-                        this.style.zIndex > e && (this.style.zIndex -= 1)
-                    }), c.end().filter("." + o).qtip("blur", b.originalEvent), i.addClass(o)[0].style.zIndex = d;
-                    try {
-                        b.preventDefault()
-                    } catch (f) {
-                    }
-                }).bind("tooltiphide" + k, function (b) {
-                    b.target === i[0] && a("[" + n + "]").filter(":visible").not(i).last().qtip("focus", b)
-                }), f.escape && a(window).unbind(l).bind("keydown" + l, function (a) {
-                    a.keyCode === 27 && i.hasClass(o) && d.hide(a)
-                }), f.blur && h.overlay.unbind(l).bind("click" + l, function (a) {
-                    i.hasClass(o) && d.hide(a)
-                }), e) : e
-            }, create: function () {
-                function d() {
-                    q.css({height: a(window).height(), width: a(window).width()})
-                }
-                var b = a(j);
-                return b.length ? h.overlay = b.insertAfter(a(m).last()) : (q = h.overlay = a("<div />", {id: j.substr(1), html: "<div></div>", mousedown: function () {
-                        return c
-                    }}).insertAfter(a(m).last()), a(window).unbind(k).bind("resize" + k, d), d(), q)
-            }, toggle: function (d, g, h) {
-                if (d && d.isDefaultPrevented())
-                    return e;
-                var j = f.effect, k = g ? "show" : "hide", o = q.is(":visible"), r = a("[" + n + "]").filter(":visible").not(i), s;
-                return q || (q = e.create()), q.is(":animated") && o === g || !g && r.length ? e : (g ? (q.css({left: 0, top: 0}), q.toggleClass("blurs", f.blur), p.bind("focusin" + l, function (b) {
-                    var d = a(b.target), e = d.closest(".qtip"), f = e.length < 1 ? c : parseInt(e[0].style.zIndex, 10) > parseInt(i[0].style.zIndex, 10);
-                    !f && a(b.target).closest(m)[0] !== i[0] && i.find("input:visible").filter(":first").focus()
-                })) : p.undelegate("*", "focusin" + l), q.stop(b, c), a.isFunction(j) ? j.call(q, g) : j === c ? q[k]() : q.fadeTo(parseInt(h, 10) || 90, g ? 1 : 0, function () {
-                    g || a(this).hide()
-                }), g || q.queue(function (a) {
-                    q.css({left: "", top: ""}), a()
-                }), e)
-            }, show: function (a, c) {
-                return e.toggle(a, b, c)
-            }, hide: function (a, b) {
-                return e.toggle(a, c, b)
-            }, destroy: function () {
-                var b = q;
-                return b && (b = a("[" + n + "]").not(i).length < 1, b ? (h.overlay.remove(), a(window).unbind(k)) : h.overlay.unbind(k + d.id), p.undelegate("*", "focusin" + l)), i.removeAttr(n).unbind(k)
-            }}), e.init()
-    }
-    function C(a, b, c) {
-        var d = Math.ceil(b / 2), e = Math.ceil(c / 2), f = {bottomright: [[0, 0], [b, c], [b, 0]], bottomleft: [[0, 0], [b, 0], [0, c]], topright: [[0, c], [b, 0], [b, c]], topleft: [[0, 0], [0, c], [b, c]], topcenter: [[0, c], [d, 0], [b, c]], bottomcenter: [[0, 0], [b, 0], [d, c]], rightcenter: [[0, 0], [b, e], [0, c]], leftcenter: [[b, 0], [b, c], [0, e]]};
-        return f.lefttop = f.bottomright, f.righttop = f.bottomleft, f.leftbottom = f.topright, f.rightbottom = f.topleft, f[a.string()]
-    }
-    function D(f, h) {
-        function t() {
-            var a = n.width;
-            n.width = n.height, n.height = a
-        }
-        function u() {
-            n.width = j.width, n.height = j.height
-        }
-        function v(a, d, g, h) {
-            if (!k.tip)
-                return;
-            var l = i.corner.clone(), n = g.adjusted, o = f.options.position.adjust.method.split(" "), p = o[0], q = o[1] || o[0], r = {left: c, top: c, x: 0, y: 0}, s, t = {}, u;
-            i.corner.fixed !== b && (p === "shift" && l.precedance === "x" && n.left && l.y !== "center" ? l.precedance = l.precedance === "x" ? "y" : "x" : p !== "shift" && n.left && (l.x = l.x === "center" ? n.left > 0 ? "left" : "right" : l.x === "left" ? "right" : "left"), q === "shift" && l.precedance === "y" && n.top && l.x !== "center" ? l.precedance = l.precedance === "y" ? "x" : "y" : q !== "shift" && n.top && (l.y = l.y === "center" ? n.top > 0 ? "top" : "bottom" : l.y === "top" ? "bottom" : "top"), l.string() !== m.corner.string() && (m.top !== n.top || m.left !== n.left) && i.update(l, c)), s = i.position(l, n), s.right !== e && (s.left = -s.right), s.bottom !== e && (s.top = -s.bottom), s.user = Math.max(0, j.offset);
-            if (r.left = p === "shift" && !!n.left)
-                l.x === "center" ? t["margin-left"] = r.x = s["margin-left"] - n.left : (u = s.right !== e ? [n.left, -s.left] : [-n.left, s.left], (r.x = Math.max(u[0], u[1])) > u[0] && (g.left -= n.left, r.left = c), t[s.right !== e ? "right" : "left"] = r.x);
-            if (r.top = q === "shift" && !!n.top)
-                l.y === "center" ? t["margin-top"] = r.y = s["margin-top"] - n.top : (u = s.bottom !== e ? [n.top, -s.top] : [-n.top, s.top], (r.y = Math.max(u[0], u[1])) > u[0] && (g.top -= n.top, r.top = c), t[s.bottom !== e ? "bottom" : "top"] = r.y);
-            k.tip.css(t).toggle(!(r.x && r.y || l.x === "center" && r.y || l.y === "center" && r.x)), g.left -= s.left.charAt ? s.user : p !== "shift" || r.top || !r.left && !r.top ? s.left : 0, g.top -= s.top.charAt ? s.user : q !== "shift" || r.left || !r.left && !r.top ? s.top : 0, m.left = n.left, m.top = n.top, m.corner = l.clone()
-        }
-        function w(a, b, c) {
-            b = b ? b : a[a.precedance];
-            var d = l.hasClass(q), e = k.titlebar && a.y === "top", f = e ? k.titlebar : k.content, g = "border-" + b + "-width", h;
-            return l.addClass(q), h = parseInt(f.css(g), 10), h = (c ? h || parseInt(l.css(g), 10) : h) || 0, l.toggleClass(q, d), h
-        }
-        function x(b) {
-            var c = k.titlebar && b.y === "top", d = c ? k.titlebar : k.content, e = a.browser.mozilla, f = e ? "-moz-" : a.browser.webkit ? "-webkit-" : "", g = b.y + (e ? "" : "-") + b.x, h = f + (e ? "border-radius-" + g : "border-" + g + "-radius");
-            return parseInt(d.css(h), 10) || parseInt(l.css(h), 10) || 0
-        }
-        function y(a) {
-            var b = a.precedance === "y", c = n[b ? "width" : "height"], d = n[b ? "height" : "width"], e = a.string().indexOf("center") > -1, f = c * (e ? .5 : 1), g = Math.pow, h = Math.round, i, j, k, l = Math.sqrt(g(f, 2) + g(d, 2)), m = [p / f * l, p / d * l];
-            return m[2] = Math.sqrt(g(m[0], 2) - g(p, 2)), m[3] = Math.sqrt(g(m[1], 2) - g(p, 2)), i = l + m[2] + m[3] + (e ? 0 : m[0]), j = i / l, k = [h(j * d), h(j * c)], {height: k[b ? 0 : 1], width: k[b ? 1 : 0]}
-        }
-        var i = this, j = f.options.style.tip, k = f.elements, l = k.tooltip, m = {top: 0, left: 0}, n = {width: j.width, height: j.height}, o = {}, p = j.border || 0, r = ".qtip-tip", s = !!(a("<canvas />")[0] || {}).getContext;
-        i.corner = d, i.mimic = d, i.border = p, i.offset = j.offset, i.size = n, f.checks.tip = {"^position.my|style.tip.(corner|mimic|border)$": function () {
-                i.init() || i.destroy(), f.reposition()
-            }, "^style.tip.(height|width)$": function () {
-                n = {width: j.width, height: j.height}, i.create(), i.update(), f.reposition()
-            }, "^content.title.text|style.(classes|widget)$": function () {
-                k.tip && k.tip.length && i.update()
-            }}, a.extend(i, {init: function () {
-                var b = i.detectCorner() && (s || a.browser.msie);
-                return b && (i.create(), i.update(), l.unbind(r).bind("tooltipmove" + r, v)), b
-            }, detectCorner: function () {
-                var a = j.corner, d = f.options.position, e = d.at, h = d.my.string ? d.my.string() : d.my;
-                return a === c || h === c && e === c ? c : (a === b ? i.corner = new g.Corner(h) : a.string || (i.corner = new g.Corner(a), i.corner.fixed = b), m.corner = new g.Corner(i.corner.string()), i.corner.string() !== "centercenter")
-            }, detectColours: function (b) {
-                var c, d, e, g = k.tip.css("cssText", ""), h = b || i.corner, m = h[h.precedance], p = "border-" + m + "-color", r = "border" + m.charAt(0) + m.substr(1) + "Color", s = /rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i, t = "background-color", u = "transparent", v = " !important", w = a(document.body).css("color"), x = f.elements.content.css("color"), y = k.titlebar && (h.y === "top" || h.y === "center" && g.position().top + n.height / 2 + j.offset < k.titlebar.outerHeight(1)), z = y ? k.titlebar : k.content;
-                l.addClass(q), o.fill = d = g.css(t), o.border = e = g[0].style[r] || g.css(p) || l.css(p);
-                if (!d || s.test(d))
-                    o.fill = z.css(t) || u, s.test(o.fill) && (o.fill = l.css(t) || d);
-                if (!e || s.test(e) || e === w)
-                    o.border = z.css(p) || u, s.test(o.border) && (o.border = e);
-                a("*", g).add(g).css("cssText", t + ":" + u + v + ";border:0" + v + ";"), l.removeClass(q)
-            }, create: function () {
-                var b = n.width, c = n.height, d;
-                k.tip && k.tip.remove(), k.tip = a("<div />", {"class": "ui-tooltip-tip"}).css({width: b, height: c}).prependTo(l), s ? a("<canvas />").appendTo(k.tip)[0].getContext("2d").save() : (d = '<vml:shape coordorigin="0,0" style="display:inline-block; position:absolute; behavior:url(#default#VML);"></vml:shape>', k.tip.html(d + d), a("*", k.tip).bind("click mousedown", function (a) {
-                    a.stopPropagation()
-                }))
-            }, update: function (e, f) {
-                var h = k.tip, l = h.children(), q = n.width, r = n.height, v = "px solid ", x = "px dashed transparent", z = j.mimic, A = Math.round, B, D, E, F, G;
-                e || (e = m.corner || i.corner), z === c ? z = e : (z = new g.Corner(z), z.precedance = e.precedance, z.x === "inherit" ? z.x = e.x : z.y === "inherit" ? z.y = e.y : z.x === z.y && (z[e.precedance] = e[e.precedance])), B = z.precedance, e.precedance === "x" ? t() : u(), k.tip.css({width: q = n.width, height: r = n.height}), i.detectColours(e), o.border !== "transparent" && o.border !== "#123456" ? (p = w(e, d, b), j.border === 0 && p > 0 && (o.fill = o.border), i.border = p = j.border !== b ? j.border : p) : i.border = p = 0, E = C(z, q, r), i.size = G = y(e), h.css(G), e.precedance === "y" ? F = [A(z.x === "left" ? p : z.x === "right" ? G.width - q - p : (G.width - q) / 2), A(z.y === "top" ? G.height - r : 0)] : F = [A(z.x === "left" ? G.width - q : 0), A(z.y === "top" ? p : z.y === "bottom" ? G.height - r - p : (G.height - r) / 2)], s ? (l.attr(G), D = l[0].getContext("2d"), D.restore(), D.save(), D.clearRect(0, 0, 3e3, 3e3), D.translate(F[0], F[1]), D.beginPath(),
  D.moveTo(E[0][0], E[0][1]), D.lineTo(E[1][0], E[1][1]), D.lineTo(E[2][0], E[2][1]), D.closePath(), D.fillStyle = o.fill, D.strokeStyle = o.border, D.lineWidth = p * 2, D.lineJoin = "miter", D.miterLimit = 100, p && D.stroke(), D.fill()) : (E = "m" + E[0][0] + "," + E[0][1] + " l" + E[1][0] + "," + E[1][1] + " " + E[2][0] + "," + E[2][1] + " xe", F[2] = p && /^(r|b)/i.test(e.string()) ? parseFloat(a.browser.version, 10) === 8 ? 2 : 1 : 0, l.css({antialias: "" + (z.string().indexOf("center") > -1), left: F[0] - F[2] * Number(B === "x"), top: F[1] - F[2] * Number(B === "y"), width: q + p, height: r + p}).each(function (b) {
-                    var c = a(this);
-                    c[c.prop ? "prop" : "attr"]({coordsize: q + p + " " + (r + p), path: E, fillcolor: o.fill, filled: !!b, stroked: !b}).css({display: p || b ? "block" : "none"}), !b && c.html() === "" && c.html('<vml:stroke weight="' + p * 2 + 'px" color="' + o.border + '" miterlimit="1000" joinstyle="miter" ' + ' style="behavior:url(#default#VML); display:inline-block;" />')
-                })), f !== c && i.position(e)
-            }, position: function (d) {
-                var e = k.tip, f = {}, g = Math.max(0, j.offset), h, l, m;
-                return j.corner === c || !e ? c : (d = d || i.corner, h = d.precedance, l = y(d), m = [d.x, d.y], h === "x" && m.reverse(), a.each(m, function (a, c) {
-                    var e, i;
-                    c === "center" ? (e = h === "y" ? "left" : "top", f[e] = "50%", f["margin-" + e] = -Math.round(l[h === "y" ? "width" : "height"] / 2) + g) : (e = w(d, c, b), i = x(d), f[c] = a ? p ? w(d, c) : 0 : g + (i > e ? i : 0))
-                }), f[d[h]] -= l[h === "x" ? "width" : "height"], e.css({top: "", bottom: "", left: "", right: "", margin: ""}).css(f), f)
-            }, destroy: function () {
-                k.tip && k.tip.remove(), k.tip = !1, l.unbind(r)
-            }}), i.init()
-    }
-    var b = !0, c = !1, d = null, e, f, g, h, i = {}, j = "ui-tooltip", k = "ui-widget", l = "ui-state-disabled", m = "div.qtip." + j, n = j + "-default", o = j + "-focus", p = j + "-hover", q = j + "-fluid", r = "-31000px", s = "_replacedByqTip", t = "oldtitle", u;
-    f = a.fn.qtip = function (g, h, i) {
-        var j = ("" + g).toLowerCase(), k = d, l = a.makeArray(arguments).slice(1), m = l[l.length - 1], n = this[0] ? a.data(this[0], "qtip") : d;
-        if (!arguments.length && n || j === "api")
-            return n;
-        if ("string" == typeof g)
-            return this.each(function () {
-                var d = a.data(this, "qtip");
-                if (!d)
-                    return b;
-                m && m.timeStamp && (d.cache.event = m);
-                if (j !== "option" && j !== "options" || !h)
-                    d[j] && d[j].apply(d[j], l);
-                else {
-                    if (!a.isPlainObject(h) && i === e)
-                        return k = d.get(h), c;
-                    d.set(h, i)
-                }
-            }), k !== d ? k : this;
-        if ("object" == typeof g || !arguments.length)
-            return n = w(a.extend(b, {}, g)), f.bind.call(this, n, m)
-    }, f.bind = function (d, j) {
-        return this.each(function (k) {
-            function r(b) {
-                function d() {
-                    p.render(typeof b == "object" || l.show.ready), m.show.add(m.hide).unbind(o)
-                }
-                if (p.cache.disabled)
-                    return c;
-                p.cache.event = a.extend({}, b), p.cache.target = b ? a(b.target) : [e], l.show.delay > 0 ? (clearTimeout(p.timers.show), p.timers.show = setTimeout(d, l.show.delay), n.show !== n.hide && m.hide.bind(n.hide, function () {
-                    clearTimeout(p.timers.show)
-                })) : d()
-            }
-            var l, m, n, o, p, q;
-            q = a.isArray(d.id) ? d.id[k] : d.id, q = !q || q === c || q.length < 1 || i[q] ? f.nextid++ : i[q] = q, o = ".qtip-" + q + "-create", p = y.call(this, q, d);
-            if (p === c)
-                return b;
-            l = p.options, a.each(g, function () {
-                this.initialize === "initialize" && this(p)
-            }), m = {show: l.show.target, hide: l.hide.target}, n = {show: a.trim("" + l.show.event).replace(/ /g, o + " ") + o, hide: a.trim("" + l.hide.event).replace(/ /g, o + " ") + o}, /mouse(over|enter)/i.test(n.show) && !/mouse(out|leave)/i.test(n.hide) && (n.hide += " mouseleave" + o), m.show.bind("mousemove" + o, function (a) {
-                h = {pageX: a.pageX, pageY: a.pageY, type: "mousemove"}, p.cache.onTarget = b
-            }), m.show.bind(n.show, r), (l.show.ready || l.prerender) && r(j)
-        })
-    }, g = f.plugins = {Corner: function (a) {
-            a = ("" + a).replace(/([A-Z])/, " $1").replace(/middle/gi, "center").toLowerCase(), this.x = (a.match(/left|right/i) || a.match(/center/) || ["inherit"])[0].toLowerCase(), this.y = (a.match(/top|bottom|center/i) || ["inherit"])[0].toLowerCase();
-            var b = a.charAt(0);
-            this.precedance = b === "t" || b === "b" ? "y" : "x", this.string = function () {
-                return this.precedance === "y" ? this.y + this.x : this.x + this.y
-            }, this.abbrev = function () {
-                var a = this.x.substr(0, 1), b = this.y.substr(0, 1);
-                return a === b ? a : a === "c" || a !== "c" && b !== "c" ? b + a : a + b
-            }, this.clone = function () {
-                return{x: this.x, y: this.y, precedance: this.precedance, string: this.string, abbrev: this.abbrev, clone: this.clone}
-            }
-        }, offset: function (b, c) {
-            function j(a, b) {
-                d.left += b * a.scrollLeft(), d.top += b * a.scrollTop()
-            }
-            var d = b.offset(), e = b.closest("body")[0], f = c, g, h, i;
-            if (f) {
-                do
-                    f.css("position") !== "static" && (h = f.position(), d.left -= h.left + (parseInt(f.css("borderLeftWidth"), 10) || 0) + (parseInt(f.css("marginLeft"), 10) || 0), d.top -= h.top + (parseInt(f.css("borderTopWidth"), 10) || 0) + (parseInt(f.css("marginTop"), 10) || 0), !g && (i = f.css("overflow")) !== "hidden" && i !== "visible" && (g = f));
-                while ((f = a(f[0].offsetParent)).length);
-                g && g[0] !== e && j(g, 1)
-            }
-            return d
-        }, iOS: parseFloat(("" + (/CPU.*OS ([0-9_]{1,3})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0, ""])[1]).replace("undefined", "3_2").replace("_", ".")) || c, fn: {attr: function (b, c) {
-                if (this.length) {
-                    var d = this[0], e = "title", f = a.data(d, "qtip");
-                    if (b === e && f && "object" == typeof f && f.options.suppress)
-                        return arguments.length < 2 ? a.attr(d, t) : (f && f.options.content.attr === e && f.cache.attr && f.set("content.text", c), this.attr(t, c))
-                }
-                return a.fn["attr" + s].apply(this, arguments)
-            }, clone: function (b) {
-                var c = a([]), d = "title", e = a.fn["clone" + s].apply(this, arguments);
-                return b || e.filter("[" + t + "]").attr("title", function () {
-                    return a.attr(this, t)
-                }).removeAttr(t), e
-            }}}, a.each(g.fn, function (c, d) {
-        if (!d || a.fn[c + s])
-            return b;
-        var e = a.fn[c + s] = a.fn[c];
-        a.fn[c] = function () {
-            return d.apply(this, arguments) || e.apply(this, arguments)
-        }
-    }), a.ui || (a["cleanData" + s] = a.cleanData, a.cleanData = function (b) {
-        for (var c = 0, d; (d = b[c]) !== e; c++)
-            try {
-                a(d).triggerHandler("removeqtip")
-            } catch (f) {
-            }
-        a["cleanData" + s](b)
-    }), f.version = "2.0.0pre", f.nextid = 0, f.inactiveEvents = "click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "), f.zindex = 15e3, f.defaults = {prerender: c, id: c, overwrite: b, suppress: b, content: {text: b, attr: "title", title: {text: c, button: c}}, position: {my: "top left", at: "bottom right", target: c, container: c, viewport: c, adjust: {x: 0, y: 0, mouse: b, resize: b, method: "flip flip"}, effect: function (b, d, e) {
-                a(this).animate(d, {duration: 200, queue: c})
-            }}, show: {target: c, event: "mouseenter", effect: b, delay: 90, solo: c, ready: c, autofocus: c}, hide: {target: c, event: "mouseleave", effect: b, delay: 0, fixed: c, inactive: c, leave: "window", distance: c}, style: {classes: "", widget: c, width: c, height: c, def: b}, events: {render: d, move: d, show: d, hide: d, toggle: d, visible: d, hidden: d, focus: d, blur: d}}, g.ajax = function (a) {
-        var b = a.plugins.ajax;
-        return"object" == typeof b ? b : a.plugins.ajax = new z(a)
-    }, g.ajax.initialize = "render", g.ajax.sanitize = function (a) {
-        var b = a.content, c;
-        b && "ajax"in b && (c = b.ajax, typeof c != "object" && (c = a.content.ajax = {url: c}), "boolean" != typeof c.once && c.once && (c.once = !!c.once))
-    }, a.extend(b, f.defaults, {content: {ajax: {loading: b, once: b}}}), g.bgiframe = function (b) {
-        var d = a.browser, e = b.plugins.bgiframe;
-        return a("select, object").length < 1 || !d.msie || ("" + d.version).charAt(0) !== "6" ? c : "object" == typeof e ? e : b.plugins.bgiframe = new A(b)
-    }, g.bgiframe.initialize = "render", g.imagemap = function (b, c, d) {
-        function n(a, b, c) {
-            var d = 0, e = 1, f = 1, g = 0, h = 0, i = a.width, j = a.height;
-            while (i > 0 && j > 0 && e > 0 && f > 0) {
-                i = Math.floor(i / 2), j = Math.floor(j / 2), c.x === "left" ? e = i : c.x === "right" ? e = a.width - i : e += Math.floor(i / 2), c.y === "top" ? f = j : c.y === "bottom" ? f = a.height - j : f += Math.floor(j / 2), d = b.length;
-                while (d--) {
-                    if (b.length < 2)
-                        break;
-                    g = b[d][0] - a.offset.left, h = b[d][1] - a.offset.top, (c.x === "left" && g >= e || c.x === "right" && g <= e || c.x === "center" && (g < e || g > a.width - e) || c.y === "top" && h >= f || c.y === "bottom" && h <= f || c.y === "center" && (h < f || h > a.height - f)) && b.splice(d, 1)
-                }
-            }
-            return{left: b[0][0], top: b[0][1]}
-        }
-        b.jquery || (b = a(b));
-        var e = (b[0].shape || b.attr("shape")).toLowerCase(), f = (b[0].coords || b.attr("coords")).split(","), g = [], h = a('img[usemap="#' + b.parent("map").attr("name") + '"]'), i = h.offset(), j = {width: 0, height: 0, offset: {top: 1e10, right: 0, bottom: 0, left: 1e10}}, k = 0, l = 0, m;
-        i.left += Math.ceil((h.outerWidth() - h.width()) / 2), i.top += Math.ceil((h.outerHeight() - h.height()) / 2);
-        if (e === "poly") {
-            k = f.length;
-            while (k--)
-                l = [parseInt(f[--k], 10), parseInt(f[k + 1], 10)], l[0] > j.offset.right && (j.offset.right = l[0]), l[0] < j.offset.left && (j.offset.left = l[0]), l[1] > j.offset.bottom && (j.offset.bottom = l[1]), l[1] < j.offset.top && (j.offset.top = l[1]), g.push(l)
-        } else
-            g = a.map(f, function (a) {
-                return parseInt(a, 10)
-            });
-        switch (e) {
-            case"rect":
-                j = {width: Math.abs(g[2] - g[0]), height: Math.abs(g[3] - g[1]), offset: {left: Math.min(g[0], g[2]), top: Math.min(g[1], g[3])}};
-                break;
-            case"circle":
-                j = {width: g[2] + 2, height: g[2] + 2, offset: {left: g[0], top: g[1]}};
-                break;
-            case"poly":
-                a.extend(j, {width: Math.abs(j.offset.right - j.offset.left), height: Math.abs(j.offset.bottom - j.offset.top)}), c.string() === "centercenter" ? j.offset = {left: j.offset.left + j.width / 2, top: j.offset.top + j.height / 2} : (j.offset = n(j, g.slice(), c), d && (d[0] === "flip" || d[1] === "flip") && (j.flipoffset = n(j, g.slice(), {x: c.x === "left" ? "right" : c.x === "right" ? "left" : "center", y: c.y === "top" ? "bottom" : c.y === "bottom" ? "top" : "center"}), j.flipoffset.left -= j.offset.left, j.flipoffset.top -= j.offset.top)), j.width = j.height = 0
-        }
-        return j.offset.left += i.left, j.offset.top += i.top, j
-    }, g.modal = function (a) {
-        var b = a.plugins.modal;
-        return"object" == typeof b ? b : a.plugins.modal = new B(a)
-    }, g.modal.initialize = "render", g.modal.sanitize = function (a) {
-        a.show && (typeof a.show.modal != "object" ? a.show.modal = {on: !!a.show.modal} : typeof a.show.modal.on == "undefined" && (a.show.modal.on = b))
-    }, g.modal.zindex = f.zindex + 1e3, a.extend(b, f.defaults, {show: {modal: {on: c, effect: b, blur: b, escape: b}}}), g.svg = function (b, c) {
-        var d = a(document), e = b[0], f = {width: 0, height: 0, offset: {top: 1e10, left: 1e10}}, g, h, i, j, k;
-        if (e.getBBox && e.parentNode) {
-            g = e.getBBox(), h = e.getScreenCTM(), i = e.farthestViewportElement || e;
-            if (!i.createSVGPoint)
-                return f;
-            j = i.createSVGPoint(), j.x = g.x, j.y = g.y, k = j.matrixTransform(h), f.offset.left = k.x, f.offset.top = k.y, j.x += g.width, j.y += g.height, k = j.matrixTransform(h), f.width = k.x - f.offset.left, f.height = k.y - f.offset.top, f.offset.left += d.scrollLeft(), f.offset.top += d.scrollTop()
-        }
-        return f
-    }, g.tip = function (a) {
-        var b = a.plugins.tip;
-        return"object" == typeof b ? b : a.plugins.tip = new D(a)
-    }, g.tip.initialize = "render", g.tip.sanitize = function (a) {
-        var c = a.style, d;
-        c && "tip"in c && (d = a.style.tip, typeof d != "object" && (a.style.tip = {corner: d}), /string|boolean/i.test(typeof d.corner) || (d.corner = b), typeof d.width != "number" && delete d.width, typeof d.height != "number" && delete d.height, typeof d.border != "number" && d.border !== b && delete d.border, typeof d.offset != "number" && delete d.offset)
-    }, a.extend(b, f.defaults, {style: {tip: {corner: b, mimic: c, width: 6, height: 6, border: b, offset: 0}}})
-});
\ No newline at end of file
+/* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */
+
+!function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=F,this.elements={target:a},this._id=S+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:E,attr:e,onTooltip:E,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=E}function f(a){return a===F||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?E:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?E:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==E,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context
 :b})).then(e.success,F,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(d.isPlainObject(b.title)&&(b.button=b.title.button,b.title=b.title.text),g(b.title||E)&&(b.title=E))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===D?{ready:D}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(R,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d<f.length&&(c=e);return[c||a,f.pop()]}function j(a,b){var c,d,e;for(c in this.checks)for(d in this.checks[c])(e=new RegExp(d,"i").exec(a))&&(b.push(e),("builtin"===c||this.plugins[c])&&this.checks[c][d].apply(this.plugins[c]||this,b))}function k(a){retu
 rn V.concat("").join(a?"-"+a+" ":" ")}function l(a,b){return b>0?setTimeout(d.proxy(a,this),b):void a.call(this)}function m(a){this.tooltip.hasClass(ab)||(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=l.call(this,function(){this.toggle(D,a)},this.options.show.delay))}function n(a){if(!this.tooltip.hasClass(ab)&&!this.destroyed){var b=d(a.relatedTarget),c=b.closest(W)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=l.call(this,function(){this.toggle(E,a)},this.options.hide.delay,this)}}function o(a){!this.tooltip.hasClass(ab)&&this.options.hide.inactive&&(clearTimeout(this.timers.inactive),this.timers.inactive=l.call(this,function(){this.hide(a)},this.options.hide.inactiv
 e))}function p(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function q(a,c,e){d(b.body).delegate(a,(c.split?c:c.join("."+S+" "))+"."+S,function(){var a=y.api[d.attr(this,U)];a&&!a.disabled&&e.apply(a,arguments)})}function r(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):F,p="html5"===f.metadata.type&&o?o[f.metadata.name]:F,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(D,{},y.defaults,f,"object"==typeof q?h(q):F,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===E||!j)return E;k.content.text=j}if(i.container.length||(i.container=m),i.target===E&&(i.target=n),k.show.target===E&&(k.show.target=n),k.show.solo===D&&(k.show.solo=i.container.closest("body")),k.hide.target===E&&(k.hide.target=n),k.position.viewport===D&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new A(i.at,D),i.my=new A(i.my),
 a.data(S))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===E)return E;return a.attr(T,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(cb,l).attr("title",""),g=new e(a,k,c,!!j),a.data(S,g),g}function s(a){return a.charAt(0).toUpperCase()+a.slice(1)}function t(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+rb.join(f+" ")+f).split(" "),h=0;if(qb[b])return a.css(qb[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return qb[b]=d,e}function u(a,b){return Math.ceil(parseFloat(t(a,b)))}function v(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.init(this.qtip=a)}function w(a,b){this.options=b,this._ns="-modal",this.init(this.qtip=a)}function x(a){this._ns="ie6",this.init(this.qtip=a)}var y,z,A,B,C,D=!0,E=!1,F=null,G="x",H="y",I="width",J="height",K="top",L="left",M="bottom",N="right",O="center",P="flipinvert",Q="shift",R={},S="qtip",T="data-hasqtip",U="data-qtip-id",V=["ui-widget","ui-tooltip"],W="."+S,X="click dblclick mo
 usedown mouseup mousemove mouseleave mouseenter".split(" "),Y=S+"-fixed",Z=S+"-default",$=S+"-focus",_=S+"-hover",ab=S+"-disabled",bb="_replacedByqTip",cb="oldtitle",db={ie:function(){for(var a=4,c=b.createElement("div");(c.innerHTML="<!--[if gt IE "+a+"]><i></i><![endif]-->")&&c.getElementsByTagName("i")[0];a+=1);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||E};z=e.prototype,z._when=function(a){return d.when.apply(d,a)},z.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),f.posClass=this._createPosClass((this.position={my:k.my,at:k.at}).my),this.tooltip=g.tooltip=b=d("<div/>",{id:this._id,"class":[S,Z,e.style.classes,
 f.posClass].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":E,"aria-describedby":this._id+"-content","aria-hidden":D}).toggleClass(ab,this.disabled).attr(U,this.id).data(S,this).appendTo(k.container).append(g.content=d("<div />",{"class":S+"-content",id:this._id+"-content","aria-atomic":D})),this.rendered=-1,this.positioning=D,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,E))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,E)),this.rendered=D,this._setWidget(),d.each(R,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=E,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(D,f.event,E),c.hiddenDuringWait=E}),y.api[this.id]=this,this},z.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=D;var
  a,b=this.target,c=b.attr(cb);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()});for(a in this.timers)clearTimeout(this.timers[a]);b.removeData(S).removeAttr(U).removeAttr(T).removeAttr("aria-describedby"),this.options.suppress&&c&&b.attr("title",c).removeAttr(cb),this._unassignEvents(),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=F,delete y.api[this.id]}}return this.destroyed?this.target:(a===D&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},B=z.checks={builtin:{"^id$":function(a,b,c,e){var f=c===D?y.nextid:c,g=S+"-"+f;f!==E&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(th
 is.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(this.position[b]=a[b]=new A(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(D)||this.toggle(D))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def"
 :function(a,b,c){this.rendered&&this.tooltip.toggleClass(Z,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},z.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var eb=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,fb=/^prerender|show\.ready/i;z.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=E,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&fb.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.n
 odeType?d(c):c,f=eb.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=D,d.each(a,d.proxy(j,this)),this.positioning=E,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?F:this.cache.event),this},z._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=D,a.then(function(a){return e.waiting=E,c._update(a,b)},F,function(a){return c._update(a,b)})):a===E||!a&&""!==a?E:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):E},z._waitForContent=function(a){var b=this.cache;return b.waiting=D,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=E}).promise()},z._updateContent=function(a,b){this._update(a,this.elements.content,b)},z._updateTi
 tle=function(a,b){this._update(a,this.elements.title,b)===E&&this._removeTitle(E)},z._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":S+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":S+"-title","aria-atomic":D})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},z._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=F,a!==E&&this.reposition())},z._createPosClass=function(a){return S+"-pos-"+(a||this.options.position.my).abbrev()},z.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)
 return this;this.positioning=D;var f,g,h,i,j=this.cache,k=this.tooltip,l=this.options.position,m=l.target,n=l.my,o=l.at,p=l.viewport,q=l.container,r=l.adjust,s=r.method.split(" "),t=k.outerWidth(E),u=k.outerHeight(E),v=0,w=0,x=k.css("position"),y={left:0,top:0},z=k[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=q[0].ownerDocument,F=this.mouse;if(d.isArray(m)&&2===m.length)o={x:L,y:K},y={left:m[0],top:m[1]};else if("mouse"===m)o={x:L,y:K},(!r.mouse||this.options.hide.distance)&&j.origin&&j.origin.pageX?c=j.origin:!c||c&&("resize"===c.type||"scroll"===c.type)?c=j.event:F&&F.pageX&&(c=F),"static"!==x&&(y=q.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),y={left:c.pageX-y.left+(g&&g.left||0),top:c.pageY-y.top+(g&&g.top||0)},r.mouse&&A&&F&&(y.left-=(F.scrollX||0)-B.scrollLeft(),y.top-=(F.scrollY||0)-B.scrollTop());else{if("event"===m?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?j.target=d(c.target):c.target||(j.target=this.eleme
 nts.target):"event"!==m&&(j.target=d(m.jquery?m:this.elements.target)),m=j.target,m=d(m).eq(0),0===m.length)return this;m[0]===b||m[0]===a?(v=db.iOS?a.innerWidth:m.width(),w=db.iOS?a.innerHeight:m.height(),m[0]===a&&(y={top:(p||m).scrollTop(),left:(p||m).scrollLeft()})):R.imagemap&&m.is("area")?f=R.imagemap(this,m,o,R.viewport?s:E):R.svg&&m&&m[0].ownerSVGElement?f=R.svg(this,m,o,R.viewport?s:E):(v=m.outerWidth(E),w=m.outerHeight(E),y=m.offset()),f&&(v=f.width,w=f.height,g=f.offset,y=f.position),y=this.reposition.offset(m,y,q),(db.iOS>3.1&&db.iOS<4.1||db.iOS>=4.3&&db.iOS<4.33||!db.iOS&&"fixed"===x)&&(y.left-=B.scrollLeft(),y.top-=B.scrollTop()),(!f||f&&f.adjustable!==E)&&(y.left+=o.x===N?v:o.x===O?v/2:0,y.top+=o.y===M?w:o.y===O?w/2:0)}return y.left+=r.x+(n.x===N?-t:n.x===O?-t/2:0),y.top+=r.y+(n.y===M?-u:n.y===O?-u/2:0),R.viewport?(h=y.adjusted=R.viewport(this,y,l,v,w,t,u),g&&h.left&&(y.left+=g.left),g&&h.top&&(y.top+=g.top),h.my&&(this.position.my=h.my)):y.adjusted={left:0,top:0},j.p
 osClass!==(i=this._createPosClass(this.position.my))&&k.removeClass(j.posClass).addClass(j.posClass=i),this._trigger("move",[y,p.elem||p],c)?(delete y.adjusted,e===E||!z||isNaN(y.left)||isNaN(y.top)||"mouse"===m||!d.isFunction(l.effect)?k.css(y):d.isFunction(l.effect)&&(l.effect.call(k,this,d.extend({},y)),k.queue(function(a){d(this).css({opacity:"",height:""}),db.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=E,this):this},z.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!db.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||
 "visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var gb=(A=z.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,O).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?H:G}).prototype;gb.invert=function(a,b){this[a]=this[a]===L?N:this[a]===N?L:b||this[a]},gb.string=function(a){var b=this.x,c=this.y,d=b!==c?"center"===b||"center"!==c&&(this.precedance===H||this.forceY)?[c,b]:[b,c]:[b];return a!==!1?d.join(" "):d},gb.abbrev=function(){var a=this.string(!1);return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},gb.clone=function(){return new A(this.string(),this.forceY)},z.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&e.event&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).le
 ngth===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=d.event.fix(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=D),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",l=this.options[k],m=(this.options[a?"hide":"show"],this.options.position),n=this.options.content,o=this.tooltip.css("width"),p=this.tooltip.is(":visible"),q=a||1===l.target.length,r=!c||l.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!p),h=!g.is(":animated")&&p===a&&r,i=h?F:!!this._trigger(k,[90]),this.destroyed?this:(i!==E&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(this.mouse&&(e.origin=d.event.fix(this.mouse)),d.isFunction(n.text)&&this._updateContent(n.text,E),d.isFunction(n.title)&&this._updateTitle(n.title,E),!C&&"mouse"===m.target&&m.adjust.mouse&&(d(b).bind("mousemove."+S,this._storeMouse),C=D),o||g.css("width",g.outerWidth(E)),this.reposition(c,arguments[2]),o||g
 .css("width",""),l.solo&&("string"==typeof l.solo?d(l.solo):d(W,l.solo)).not(g).not(l.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,C&&!d(W+'[tracking="true"]:visible',l.solo).not(g).length&&(d(b).unbind("mousemove."+S),C=E),this.blur(c)),j=d.proxy(function(){a?(db.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof l.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),l.effect===E||q===E?(g[k](),j()):d.isFunction(l.effect)?(g.stop(1,1),l.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&l.target.trigger("qtip-"+this.id+"-inactive"),this))},z.show=function(a){return this.toggle(D,a)},z.hide=function(a){return this.toggle(E,a)},z.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(W),c=this.tooltip,
 e=parseInt(c[0].style.zIndex,10),f=y.zindex+b.length;return c.hasClass($)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+$).qtip("blur",a)),c.addClass($)[0].style.zIndex=f),this},z.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass($),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},z.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(ab):this.disabled):"boolean"!=typeof a&&(a=D),this.rendered&&this.tooltip.toggleClass(ab,a).attr("aria-disabled",a),this.disabled=!!a,this)},z.enable=function(){return this.disable(E)},z._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("<a />",{"class":"qtip-close "+(this.options.style.widget?"":S+"-icon"),title:g,"aria-label":g}).prepend
 (d("<span />",{"class":"ui-icon ui-icon-close",html:"&times;"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(ab)||a.hide(b),E})},z._updateButton=function(a){if(!this.rendered)return E;var b=this.elements.button;a?this._createButton():b.remove()},z._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(ab);c.removeClass(ab),ab=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(ab,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Z,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(S+"-icon",!a)},z._storeMouse=function(a){return(this.mouse=d.event.fix(a)).type="mousemove",this},z._bind=function(a,b,c,e,f){if(a&&c&&b.length){var g="."+this._id+(e?"-"+e:"");return d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this)),this}},z._unbind=function(a,b){return a&&d(a).unbind("."+this._id+(b?"
 -"+b:"")),this},z._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||F,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=E,!e.isDefaultPrevented()},z._bindEvents=function(a,b,c,e,f,g){var h=c.filter(e).add(e.filter(c)),i=[];h.length&&(d.each(b,function(b,c){var e=d.inArray(c,a);e>-1&&i.push(a.splice(e,1)[0])}),i.length&&(this._bind(h,i,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)}),c=c.not(h),e=e.not(h))),this._bind(c,a,f),this._bind(e,b,g)},z._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?E:(this.cache.event=a&&d.event.fix(a),this.cache.target=a&&d(a.target),clearTimeout(this.timers.show),void(this.timers.show=l.call(this,function(){this.render("object"==typeof a||c.show.ready)},c.prerender?0:c.show.delay)))}var c=this.options,e=c.show.target,f=c.hide.target,g=c.show.event?d.trim(""+c.show.event).split(" "):[],h=c.hi
 de.event?d.trim(""+c.hide.event).split(" "):[];this._bind(this.elements.target,["remove","removeqtip"],function(){this.destroy(!0)},"destroy"),/mouse(over|enter)/i.test(c.show.event)&&!/mouse(out|leave)/i.test(c.hide.event)&&h.push("mouseleave"),this._bind(e,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=D}),this._bindEvents(g,h,e,f,b,function(){return this.timers?void clearTimeout(this.timers.show):E}),(c.show.ready||c.prerender)&&b.call(this,a)},z._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),q=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeNam
 e)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(Y)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0,e=b.parents(W).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",o,"inactive"),this._bind(i.add(g),y.inactiveEvents,o)),this._bindEvents(r,s,h,i,m,n),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mousee
 nter","mouseleave"],function(a){return this.cache?void(this.cache.onTarget="mouseenter"===a.type):E}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:q,"resize",p),f.adjust.scroll&&this._bind(q.add(f.container),"scroll",p)},z._unassignEvents=function(){var c=this.options,e=c.show.target,f=c.hide.target,g=d.grep([this.elements.target[0],this.rendered&&this.tooltip[0],c.position.container[0],c.position.viewport[0],c.position.container.closest("html")[0],a,b],function(a){return"object"==typeof a});e&&e.toArray&&(g=g.concat(e.toArray())),f&&f.toArray&&(g=g.concat(f.toArray())),this._unbind(g)._unbind(g,"destroy")._unbind(g,"inactive")},d(function(){q(W,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(Y)&&!c
 .hasClass(ab)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.position.adjust.mouse&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(_,b)}),q("["+U+"]",X,o)}),y=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=F,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],S):F;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,S);if(!a)return D;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),E;a.set(b,e)}}),g!==F?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(D,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===E||c.length<1||y.api[c]?y.nextid++:c,b=r(d(this),c,k),b===E?D:(y.api[c]=b,d.each(R,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,y.api={},d.each({attr
 :function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,cb):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(cb,b))}return d.fn["attr"+bb].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+bb].apply(this,arguments));return a||b.filter("["+cb+"]").attr("title",function(){return d.attr(this,cb)}).removeAttr(cb),b}},function(a,b){if(!b||d.fn[a+bb])return D;var c=d.fn[a+bb]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+bb]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(T))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+bb].apply(this,arguments)}),y.version="2.2.1",y.nextid=0,y.inactiveEvents=X,y.zindex=15e3,y.defaults={prerender:E,id:E,overwrite:D,suppress:D,content:{text:D,attr:"title",title:E,button:E},position:{my:"top left",at
 :"bottom right",target:E,container:E,viewport:E,adjust:{x:0,y:0,mouse:D,scroll:D,resize:D,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:E})}},show:{target:E,event:"mouseenter",effect:D,delay:90,solo:E,ready:E,autofocus:E},hide:{target:E,event:"mouseleave",effect:D,delay:0,fixed:E,inactive:E,leave:"window",distance:E},style:{classes:"",widget:E,width:E,height:E,def:D},events:{render:F,move:F,show:F,hide:F,toggle:F,visible:F,hidden:F,focus:F,blur:F}};var hb,ib="margin",jb="border",kb="color",lb="background-color",mb="transparent",nb=" !important",ob=!!b.createElement("canvas").getContext,pb=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,qb={},rb=["Webkit","O","Moz","ms"];if(ob)var sb=a.devicePixelRatio||1,tb=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),ub=sb/tb;else var vb=fu
 nction(a,b,c){return"<qtipvml:"+a+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(b||"")+' style="behavior: url(#default#VML); '+(c||"")+'" />'};d.extend(v.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("<div />",{"class":S+"-tip"}).prependTo(a.tooltip),ob?(b=d("<canvas />").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=vb("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(b+b),a._bind(d("*",c).add(c),["click","mousedown"],function(a){a.stopPropagation()},this._ns)),a._bind(a.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(a){var b=this.qtip.elements.titlebar;return b&&(a.y===K||a.y===O&&this.element.position().top+this.size[1]/2+this.options.offset<b.outerHeight(D))
 },_parseCorner:function(a){var b=this.qtip.options.position.my;return a===E||b===E?a=E:a===D?a=new A(b.string()):a.string||(a=new A(a),a.fixed=D),a},_parseWidth:function(a,b,c){var d=this.qtip.elements,e=jb+s(b)+"Width";return(c?u(c,e):u(d.content,e)||u(this._useTitle(a)&&d.titlebar||d.content,e)||u(d.tooltip,e))||0},_parseRadius:function(a){var b=this.qtip.elements,c=jb+s(a.y)+s(a.x)+"Radius";return db.ie<9?0:u(this._useTitle(a)&&b.titlebar||b.content,c)||u(b.tooltip,c)||0},_invalidColour:function(a,b,c){var d=a.css(b);return!d||c&&d===a.css(c)||pb.test(d)?E:d},_parseColours:function(a){var b=this.qtip.elements,c=this.element.css("cssText",""),e=jb+s(a[a.precedance])+s(kb),f=this._useTitle(a)&&b.titlebar||b.content,g=this._invalidColour,h=[];return h[0]=g(c,lb)||g(f,lb)||g(b.content,lb)||g(b.tooltip,lb)||c.css(lb),h[1]=g(c,e,kb)||g(f,e,kb)||g(b.content,e,kb)||g(b.tooltip,e,kb)||b.tooltip.css(e),d("*",c).add(c).css("cssText",lb+":"+mb+nb+";"+jb+":0"+nb+";"),h},_calculateSize:functio
 n(a){var b,c,d,e=a.precedance===H,f=this.options.width,g=this.options.height,h="c"===a.abbrev(),i=(e?f:g)*(h?.5:1),j=Math.pow,k=Math.round,l=Math.sqrt(j(i,2)+j(g,2)),m=[this.border/i*l,this.border/g*l];return m[2]=Math.sqrt(j(m[0],2)-j(this.border,2)),m[3]=Math.sqrt(j(m[1],2)-j(this.border,2)),b=l+m[2]+m[3]+(h?0:m[0]),c=b/l,d=[k(c*f),k(c*g)],e?d:d.reverse()},_calculateTip:function(a,b,c){c=c||1,b=b||this.size;var d=b[0]*c,e=b[1]*c,f=Math.ceil(d/2),g=Math.ceil(e/2),h={br:[0,0,d,e,d,0],bl:[0,0,d,0,0,e],tr:[0,e,d,0,d,e],tl:[0,0,0,e,d,e],tc:[0,e,f,0,d,e],bc:[0,0,d,0,f,e],rc:[0,0,d,g,0,e],lc:[d,0,d,e,0,g]};return h.lt=h.br,h.rt=h.bl,h.lb=h.tr,h.rb=h.tl,h[a.abbrev()]},_drawCoords:function(a,b){a.beginPath(),a.moveTo(b[0],b[1]),a.lineTo(b[2],b[3]),a.lineTo(b

<TRUNCATED>

[47/50] [abbrv] incubator-nifi git commit: NIFI-27: - Reverting to a slightly old version of minicolors to do issues compressing the css in the latests version.

Posted by mc...@apache.org.
NIFI-27:
- Reverting to a slightly old version of minicolors to do issues compressing the css in the latests version.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/a016bf47
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/a016bf47
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/a016bf47

Branch: refs/heads/develop
Commit: a016bf47bdb778fd436544bd445c1c031aeefb7b
Parents: f10bb3c
Author: Matt Gilman <ma...@gmail.com>
Authored: Tue Dec 16 11:12:15 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Tue Dec 16 11:12:15 2014 -0500

----------------------------------------------------------------------
 .../js/jquery/minicolors/jquery.minicolors.css  | 284 +++++++++----------
 .../jquery/minicolors/jquery.minicolors.min.js  |   8 +-
 2 files changed, 140 insertions(+), 152 deletions(-)
----------------------------------------------------------------------



[07/50] [abbrv] incubator-nifi git commit: Merge branch 'nifi-27' of https://git-wip-us.apache.org/repos/asf/incubator-nifi into nifi-27

Posted by mc...@apache.org.
Merge branch 'nifi-27' of https://git-wip-us.apache.org/repos/asf/incubator-nifi into nifi-27


Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/2f2474ef
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/2f2474ef
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/2f2474ef

Branch: refs/heads/develop
Commit: 2f2474efbc20f07a5ee2ce10ce48954f4854146e
Parents: 9180b7d fef8071
Author: Matt Gilman <ma...@gmail.com>
Authored: Wed Dec 10 12:58:18 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Wed Dec 10 12:58:18 2014 -0500

----------------------------------------------------------------------

----------------------------------------------------------------------



[21/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of codemirror.

Posted by mc...@apache.org.
NIFI-27:
- Latest version of codemirror.


Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/1d23e6e1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/1d23e6e1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/1d23e6e1

Branch: refs/heads/develop
Commit: 1d23e6e13625a6ce4ae40b71c06d9ae42d771b48
Parents: 8a0e2ce
Author: Matt Gilman <ma...@gmail.com>
Authored: Wed Dec 10 12:56:04 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Wed Dec 10 14:36:44 2014 -0500

----------------------------------------------------------------------
 .../src/main/webapp/WEB-INF/pages/canvas.jsp    |    4 +-
 .../src/main/webapp/js/codemirror/LICENSE       |   38 +-
 .../js/codemirror/addon/edit/matchbrackets.js   |  125 -
 .../js/codemirror/addon/hint/show-hint.css      |   54 +-
 .../js/codemirror/addon/hint/show-hint.js       |  411 -
 .../js/codemirror/lib/codemirror-compressed.js  |   16 +
 .../webapp/js/codemirror/lib/codemirror.css     |  282 +-
 .../main/webapp/js/codemirror/lib/codemirror.js | 8488 ------------------
 8 files changed, 228 insertions(+), 9190 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/1d23e6e1/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
index 09c8207..a40b745 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
@@ -33,9 +33,7 @@
         <link rel="stylesheet" href="js/jquery/minicolors/jquery.minicolors.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
-        <script type="text/javascript" src="js/codemirror/lib/codemirror.js"></script>
-        <script type="text/javascript" src="js/codemirror/addon/edit/matchbrackets.js"></script>
-        <script type="text/javascript" src="js/codemirror/addon/hint/show-hint.js"></script>
+        <script type="text/javascript" src="js/codemirror/lib/codemirror-compressed.js"></script>
         <script type="text/javascript" src="js/jquery/jquery-1.7.min.js"></script>
         <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/1d23e6e1/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/LICENSE
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/LICENSE b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/LICENSE
old mode 100755
new mode 100644
index 4f1e9d1..d21bbea
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/LICENSE
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/LICENSE
@@ -1,19 +1,19 @@
-Copyright (C) 2013 by Marijn Haverbeke <ma...@gmail.com> and others
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
+Copyright (C) 2014 by Marijn Haverbeke <ma...@gmail.com> and others
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/1d23e6e1/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/edit/matchbrackets.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/edit/matchbrackets.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/edit/matchbrackets.js
deleted file mode 100755
index 5f91f9b..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/edit/matchbrackets.js
+++ /dev/null
@@ -1,125 +0,0 @@
-(function (mod) {
-    if (typeof exports == "object" && typeof module == "object") // CommonJS
-        mod(require("../../lib/codemirror"));
-    else if (typeof define == "function" && define.amd) // AMD
-        define(["../../lib/codemirror"], mod);
-    else // Plain browser env
-        mod(CodeMirror);
-})(function (CodeMirror) {
-    var ie_lt8 = /MSIE \d/.test(navigator.userAgent) &&
-            (document.documentMode == null || document.documentMode < 8);
-
-    var Pos = CodeMirror.Pos;
-
-    var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"};
-
-    function findMatchingBracket(cm, where, strict, config) {
-        var line = cm.getLineHandle(where.line), pos = where.ch - 1;
-        var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)];
-        if (!match)
-            return null;
-        var dir = match.charAt(1) == ">" ? 1 : -1;
-        if (strict && (dir > 0) != (pos == where.ch))
-            return null;
-        var style = cm.getTokenTypeAt(Pos(where.line, pos + 1));
-
-        var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style || null, config);
-        return {from: Pos(where.line, pos), to: found && found.pos,
-            match: found && found.ch == match.charAt(0), forward: dir > 0};
-    }
-
-    function scanForBracket(cm, where, dir, style, config) {
-        var maxScanLen = (config && config.maxScanLineLength) || 10000;
-        var maxScanLines = (config && config.maxScanLines) || 500;
-
-        var stack = [], re = /[(){}[\]]/;
-        var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1)
-                : Math.max(cm.firstLine() - 1, where.line - maxScanLines);
-        for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) {
-            var line = cm.getLine(lineNo);
-            if (!line)
-                continue;
-            var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1;
-            if (line.length > maxScanLen)
-                continue;
-            if (lineNo == where.line)
-                pos = where.ch - (dir < 0 ? 1 : 0);
-            for (; pos != end; pos += dir) {
-                var ch = line.charAt(pos);
-                if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) {
-                    var match = matching[ch];
-                    if ((match.charAt(1) == ">") == (dir > 0))
-                        stack.push(ch);
-                    else if (!stack.length)
-                        return {pos: Pos(lineNo, pos), ch: ch};
-                    else
-                        stack.pop();
-                }
-            }
-        }
-    }
-
-    function matchBrackets(cm, autoclear, config) {
-        // Disable brace matching in long lines, since it'll cause hugely slow updates
-        var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000;
-        var marks = [], ranges = cm.listSelections();
-        for (var i = 0; i < ranges.length; i++) {
-            var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, false, config);
-            if (match && cm.getLine(match.from.line).length <= maxHighlightLen &&
-                    match.to && cm.getLine(match.to.line).length <= maxHighlightLen) {
-                var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket";
-                marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style}));
-                if (match.to)
-                    marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style}));
-            }
-        }
-
-        if (marks.length) {
-            // Kludge to work around the IE bug from issue #1193, where text
-            // input stops going to the textare whever this fires.
-            if (ie_lt8 && cm.state.focused)
-                cm.display.input.focus();
-
-            var clear = function () {
-                cm.operation(function () {
-                    for (var i = 0; i < marks.length; i++)
-                        marks[i].clear();
-                });
-            };
-            if (autoclear)
-                setTimeout(clear, 800);
-            else
-                return clear;
-        }
-    }
-
-    var currentlyHighlighted = null;
-    function doMatchBrackets(cm) {
-        cm.operation(function () {
-            if (currentlyHighlighted) {
-                currentlyHighlighted();
-                currentlyHighlighted = null;
-            }
-            currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets);
-        });
-    }
-
-    CodeMirror.defineOption("matchBrackets", false, function (cm, val, old) {
-        if (old && old != CodeMirror.Init)
-            cm.off("cursorActivity", doMatchBrackets);
-        if (val) {
-            cm.state.matchBrackets = typeof val == "object" ? val : {};
-            cm.on("cursorActivity", doMatchBrackets);
-        }
-    });
-
-    CodeMirror.defineExtension("matchBrackets", function () {
-        matchBrackets(this, true);
-    });
-    CodeMirror.defineExtension("findMatchingBracket", function (pos, strict) {
-        return findMatchingBracket(this, pos, strict);
-    });
-    CodeMirror.defineExtension("scanForBracket", function (pos, dir, style) {
-        return scanForBracket(this, pos, dir, style);
-    });
-});

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/1d23e6e1/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.css
old mode 100755
new mode 100644
index 44449b2..924e638
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.css
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.css
@@ -1,38 +1,38 @@
 .CodeMirror-hints {
-    position: absolute;
-    z-index: 10;
-    overflow: hidden;
-    list-style: none;
+  position: absolute;
+  z-index: 10;
+  overflow: hidden;
+  list-style: none;
 
-    margin: 0;
-    padding: 2px;
+  margin: 0;
+  padding: 2px;
 
-    -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
-    -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
-    box-shadow: 2px 3px 5px rgba(0,0,0,.2);
-    border-radius: 3px;
-    border: 1px solid silver;
+  -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
+  -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
+  box-shadow: 2px 3px 5px rgba(0,0,0,.2);
+  border-radius: 3px;
+  border: 1px solid silver;
 
-    background: white;
-    font-size: 90%;
-    font-family: monospace;
+  background: white;
+  font-size: 90%;
+  font-family: monospace;
 
-    max-height: 20em;
-    overflow-y: auto;
+  max-height: 20em;
+  overflow-y: auto;
 }
 
 .CodeMirror-hint {
-    margin: 0;
-    padding: 0 4px;
-    border-radius: 2px;
-    max-width: 19em;
-    overflow: hidden;
-    white-space: pre;
-    color: black;
-    cursor: pointer;
+  margin: 0;
+  padding: 0 4px;
+  border-radius: 2px;
+  max-width: 19em;
+  overflow: hidden;
+  white-space: pre;
+  color: black;
+  cursor: pointer;
 }
 
-.CodeMirror-hint-active {
-    background: #08f;
-    color: white;
+li.CodeMirror-hint-active {
+  background: #08f;
+  color: white;
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/1d23e6e1/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.js
deleted file mode 100755
index c820fdd..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.js
+++ /dev/null
@@ -1,411 +0,0 @@
-(function (mod) {
-    if (typeof exports == "object" && typeof module == "object") // CommonJS
-        mod(require("../../lib/codemirror"));
-    else if (typeof define == "function" && define.amd) // AMD
-        define(["../../lib/codemirror"], mod);
-    else // Plain browser env
-        mod(CodeMirror);
-})(function (CodeMirror) {
-    "use strict";
-
-    var HINT_ELEMENT_CLASS = "CodeMirror-hint";
-    var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active";
-
-    CodeMirror.showHint = function (cm, getHints, options) {
-        // We want a single cursor position.
-        if (cm.listSelections().length > 1 || cm.somethingSelected())
-            return;
-        if (getHints == null) {
-            if (options && options.async)
-                return;
-            else
-                getHints = CodeMirror.hint.auto;
-        }
-
-        if (cm.state.completionActive)
-            cm.state.completionActive.close();
-
-        var completion = cm.state.completionActive = new Completion(cm, getHints, options || {});
-        CodeMirror.signal(cm, "startCompletion", cm);
-        if (completion.options.async)
-            getHints(cm, function (hints) {
-                completion.showHints(hints);
-            }, completion.options);
-        else
-            return completion.showHints(getHints(cm, completion.options));
-    };
-
-    function Completion(cm, getHints, options) {
-        this.cm = cm;
-        this.getHints = getHints;
-        this.options = options;
-        this.widget = this.onClose = null;
-    }
-
-    Completion.prototype = {
-        close: function () {
-            if (!this.active())
-                return;
-            this.cm.state.completionActive = null;
-
-            if (this.widget)
-                this.widget.close();
-            if (this.onClose)
-                this.onClose();
-            CodeMirror.signal(this.cm, "endCompletion", this.cm);
-        },
-        active: function () {
-            return this.cm.state.completionActive == this;
-        },
-        pick: function (data, i) {
-            var completion = data.list[i];
-            if (completion.hint)
-                completion.hint(this.cm, data, completion);
-            else
-                this.cm.replaceRange(getText(completion), completion.from || data.from, completion.to || data.to);
-            CodeMirror.signal(data, "pick", completion);
-            this.close();
-        },
-        showHints: function (data) {
-            if (!data || !data.list.length || !this.active())
-                return this.close();
-
-            if (this.options.completeSingle != false && data.list.length == 1)
-                this.pick(data, 0);
-            else
-                this.showWidget(data);
-        },
-        showWidget: function (data) {
-            this.widget = new Widget(this, data);
-            CodeMirror.signal(data, "shown");
-
-            var debounce = 0, completion = this, finished;
-            var closeOn = this.options.closeCharacters || /[\s()\[\]{};:>,]/;
-            var startPos = this.cm.getCursor(), startLen = this.cm.getLine(startPos.line).length;
-
-            var requestAnimationFrame = window.requestAnimationFrame || function (fn) {
-                return setTimeout(fn, 1000 / 60);
-            };
-            var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout;
-
-            function done() {
-                if (finished)
-                    return;
-                finished = true;
-                completion.close();
-                completion.cm.off("cursorActivity", activity);
-                if (data)
-                    CodeMirror.signal(data, "close");
-            }
-
-            function update() {
-                if (finished)
-                    return;
-                CodeMirror.signal(data, "update");
-                if (completion.options.async)
-                    completion.getHints(completion.cm, finishUpdate, completion.options);
-                else
-                    finishUpdate(completion.getHints(completion.cm, completion.options));
-            }
-            function finishUpdate(data_) {
-                data = data_;
-                if (finished)
-                    return;
-                if (!data || !data.list.length)
-                    return done();
-                completion.widget = new Widget(completion, data);
-            }
-
-            function clearDebounce() {
-                if (debounce) {
-                    cancelAnimationFrame(debounce);
-                    debounce = 0;
-                }
-            }
-
-            function activity() {
-                clearDebounce();
-                var pos = completion.cm.getCursor(), line = completion.cm.getLine(pos.line);
-                if (pos.line != startPos.line || line.length - pos.ch != startLen - startPos.ch ||
-                        pos.ch < startPos.ch || completion.cm.somethingSelected() ||
-                        (pos.ch && closeOn.test(line.charAt(pos.ch - 1)))) {
-                    completion.close();
-                } else {
-                    debounce = requestAnimationFrame(update);
-                    if (completion.widget)
-                        completion.widget.close();
-                }
-            }
-            this.cm.on("cursorActivity", activity);
-            this.onClose = done;
-        }
-    };
-
-    function getText(completion) {
-        if (typeof completion == "string")
-            return completion;
-        else
-            return completion.text;
-    }
-
-    function buildKeyMap(options, handle) {
-        var baseMap = {
-            Up: function () {
-                handle.moveFocus(-1);
-            },
-            Down: function () {
-                handle.moveFocus(1);
-            },
-            PageUp: function () {
-                handle.moveFocus(-handle.menuSize() + 1, true);
-            },
-            PageDown: function () {
-                handle.moveFocus(handle.menuSize() - 1, true);
-            },
-            Home: function () {
-                handle.setFocus(0);
-            },
-            End: function () {
-                handle.setFocus(handle.length - 1);
-            },
-            Enter: handle.pick,
-            Tab: handle.pick,
-            Esc: handle.close
-        };
-        var ourMap = options.customKeys ? {} : baseMap;
-        function addBinding(key, val) {
-            var bound;
-            if (typeof val != "string")
-                bound = function (cm) {
-                    return val(cm, handle);
-                };
-            // This mechanism is deprecated
-            else if (baseMap.hasOwnProperty(val))
-                bound = baseMap[val];
-            else
-                bound = val;
-            ourMap[key] = bound;
-        }
-        if (options.customKeys)
-            for (var key in options.customKeys)
-                if (options.customKeys.hasOwnProperty(key))
-                    addBinding(key, options.customKeys[key]);
-        if (options.extraKeys)
-            for (var key in options.extraKeys)
-                if (options.extraKeys.hasOwnProperty(key))
-                    addBinding(key, options.extraKeys[key]);
-        return ourMap;
-    }
-
-    function getHintElement(hintsElement, el) {
-        while (el && el != hintsElement) {
-            if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement)
-                return el;
-            el = el.parentNode;
-        }
-    }
-
-    function Widget(completion, data) {
-        this.completion = completion;
-        this.data = data;
-        var widget = this, cm = completion.cm, options = completion.options;
-
-        var hints = this.hints = document.createElement("ul");
-        hints.className = "CodeMirror-hints";
-        this.selectedHint = options.getDefaultSelection ? options.getDefaultSelection(cm, options, data) : 0;
-
-        var completions = data.list;
-        for (var i = 0; i < completions.length; ++i) {
-            var elt = hints.appendChild(document.createElement("li")), cur = completions[i];
-            var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS);
-            if (cur.className != null)
-                className = cur.className + " " + className;
-            elt.className = className;
-            if (cur.render)
-                cur.render(elt, data, cur);
-            else
-                elt.appendChild(document.createTextNode(cur.displayText || getText(cur)));
-            elt.hintId = i;
-        }
-
-        var pos = cm.cursorCoords(options.alignWithWord !== false ? data.from : null);
-        var left = pos.left, top = pos.bottom, below = true;
-        hints.style.left = left + "px";
-        hints.style.top = top + "px";
-        // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.
-        var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth);
-        var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight);
-        (options.container || document.body).appendChild(hints);
-        var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH;
-        if (overlapY > 0) {
-            var height = box.bottom - box.top, curTop = box.top - (pos.bottom - pos.top);
-            if (curTop - height > 0) { // Fits above cursor
-                hints.style.top = (top = curTop - height) + "px";
-                below = false;
-            } else if (height > winH) {
-                hints.style.height = (winH - 5) + "px";
-                hints.style.top = (top = pos.bottom - box.top) + "px";
-                var cursor = cm.getCursor();
-                if (data.from.ch != cursor.ch) {
-                    pos = cm.cursorCoords(cursor);
-                    hints.style.left = (left = pos.left) + "px";
-                    box = hints.getBoundingClientRect();
-                }
-            }
-        }
-        var overlapX = box.left - winW;
-        if (overlapX > 0) {
-            if (box.right - box.left > winW) {
-                hints.style.width = (winW - 5) + "px";
-                overlapX -= (box.right - box.left) - winW;
-            }
-            hints.style.left = (left = pos.left - overlapX) + "px";
-        }
-
-        cm.addKeyMap(this.keyMap = buildKeyMap(options, {
-            moveFocus: function (n, avoidWrap) {
-                widget.changeActive(widget.selectedHint + n, avoidWrap);
-            },
-            setFocus: function (n) {
-                widget.changeActive(n);
-            },
-            menuSize: function () {
-                return widget.screenAmount();
-            },
-            length: completions.length,
-            close: function () {
-                completion.close();
-            },
-            pick: function () {
-                widget.pick();
-            },
-            data: data
-        }));
-
-        if (options.closeOnUnfocus !== false) {
-            var closingOnBlur;
-            cm.on("blur", this.onBlur = function () {
-                closingOnBlur = setTimeout(function () {
-                    completion.close();
-                }, 100);
-            });
-            cm.on("focus", this.onFocus = function () {
-                clearTimeout(closingOnBlur);
-            });
-        }
-
-        var startScroll = cm.getScrollInfo();
-        cm.on("scroll", this.onScroll = function () {
-            var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect();
-            var newTop = top + startScroll.top - curScroll.top;
-            var point = newTop - (window.pageYOffset || (document.documentElement || document.body).scrollTop);
-            if (!below)
-                point += hints.offsetHeight;
-            if (point <= editor.top || point >= editor.bottom)
-                return completion.close();
-            hints.style.top = newTop + "px";
-            hints.style.left = (left + startScroll.left - curScroll.left) + "px";
-        });
-
-        CodeMirror.on(hints, "dblclick", function (e) {
-            var t = getHintElement(hints, e.target || e.srcElement);
-            if (t && t.hintId != null) {
-                widget.changeActive(t.hintId);
-                widget.pick();
-            }
-        });
-
-        CodeMirror.on(hints, "click", function (e) {
-            var t = getHintElement(hints, e.target || e.srcElement);
-            if (t && t.hintId != null) {
-                widget.changeActive(t.hintId);
-                if (options.completeOnSingleClick)
-                    widget.pick();
-            }
-        });
-
-        CodeMirror.on(hints, "mousedown", function () {
-            setTimeout(function () {
-                cm.focus();
-            }, 20);
-        });
-
-        CodeMirror.signal(data, "select", completions[0], hints.firstChild);
-        return true;
-    }
-
-    Widget.prototype = {
-        close: function () {
-            if (this.completion.widget != this)
-                return;
-            this.completion.widget = null;
-            this.hints.parentNode.removeChild(this.hints);
-            this.completion.cm.removeKeyMap(this.keyMap);
-
-            var cm = this.completion.cm;
-            if (this.completion.options.closeOnUnfocus !== false) {
-                cm.off("blur", this.onBlur);
-                cm.off("focus", this.onFocus);
-            }
-            cm.off("scroll", this.onScroll);
-        },
-        pick: function () {
-            this.completion.pick(this.data, this.selectedHint);
-        },
-        changeActive: function (i, avoidWrap) {
-            if (i >= this.data.list.length)
-                i = avoidWrap ? this.data.list.length - 1 : 0;
-            else if (i < 0)
-                i = avoidWrap ? 0 : this.data.list.length - 1;
-            if (this.selectedHint == i)
-                return;
-            var node = this.hints.childNodes[this.selectedHint];
-            node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, "");
-            node = this.hints.childNodes[this.selectedHint = i];
-            node.className += " " + ACTIVE_HINT_ELEMENT_CLASS;
-            if (node.offsetTop < this.hints.scrollTop)
-                this.hints.scrollTop = node.offsetTop - 3;
-            else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight)
-                this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3;
-            CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node);
-        },
-        screenAmount: function () {
-            return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1;
-        }
-    };
-
-    CodeMirror.registerHelper("hint", "auto", function (cm, options) {
-        var helpers = cm.getHelpers(cm.getCursor(), "hint"), words;
-        if (helpers.length) {
-            for (var i = 0; i < helpers.length; i++) {
-                var cur = helpers[i](cm, options);
-                if (cur && cur.list.length)
-                    return cur;
-            }
-        } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) {
-            if (words)
-                return CodeMirror.hint.fromList(cm, {words: words});
-        } else if (CodeMirror.hint.anyword) {
-            return CodeMirror.hint.anyword(cm, options);
-        }
-    });
-
-    CodeMirror.registerHelper("hint", "fromList", function (cm, options) {
-        var cur = cm.getCursor(), token = cm.getTokenAt(cur);
-        var found = [];
-        for (var i = 0; i < options.words.length; i++) {
-            var word = options.words[i];
-            if (word.slice(0, token.string.length) == token.string)
-                found.push(word);
-        }
-
-        if (found.length)
-            return {
-                list: found,
-                from: CodeMirror.Pos(cur.line, token.start),
-                to: CodeMirror.Pos(cur.line, token.end)
-            };
-    });
-
-    CodeMirror.commands.autocomplete = CodeMirror.showHint;
-});


[30/50] [abbrv] incubator-nifi git commit: NIFI-27: - Starting to upgrade jQuery and jQuery UI.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-1.7.min.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-1.7.min.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-1.7.min.js
deleted file mode 100755
index af79a71..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-1.7.min.js
+++ /dev/null
@@ -1,2934 +0,0 @@
-/*! jQuery v1.7 jquery.com | jquery.org/license */
-(function (a, b) {
-    function cA(a) {
-        return f.isWindow(a) ? a : a.nodeType === 9 ? a.defaultView || a.parentWindow : !1
-    }
-    function cx(a) {
-        if (!cm[a]) {
-            var b = c.body, d = f("<" + a + ">").appendTo(b), e = d.css("display");
-            d.remove();
-            if (e === "none" || e === "") {
-                cn || (cn = c.createElement("iframe"), cn.frameBorder = cn.width = cn.height = 0), b.appendChild(cn);
-                if (!co || !cn.createElement)
-                    co = (cn.contentWindow || cn.contentDocument).document, co.write((c.compatMode === "CSS1Compat" ? "<!doctype html>" : "") + "<html><body>"), co.close();
-                d = co.createElement(a), co.body.appendChild(d), e = f.css(d, "display"), b.removeChild(cn)
-            }
-            cm[a] = e
-        }
-        return cm[a]
-    }
-    function cw(a, b) {
-        var c = {};
-        f.each(cs.concat.apply([], cs.slice(0, b)), function () {
-            c[this] = a
-        });
-        return c
-    }
-    function cv() {
-        ct = b
-    }
-    function cu() {
-        setTimeout(cv, 0);
-        return ct = f.now()
-    }
-    function cl() {
-        try {
-            return new a.ActiveXObject("Microsoft.XMLHTTP")
-        } catch (b) {
-        }
-    }
-    function ck() {
-        try {
-            return new a.XMLHttpRequest
-        } catch (b) {
-        }
-    }
-    function ce(a, c) {
-        a.dataFilter && (c = a.dataFilter(c, a.dataType));
-        var d = a.dataTypes, e = {}, g, h, i = d.length, j, k = d[0], l, m, n, o, p;
-        for (g = 1; g < i; g++) {
-            if (g === 1)
-                for (h in a.converters)
-                    typeof h == "string" && (e[h.toLowerCase()] = a.converters[h]);
-            l = k, k = d[g];
-            if (k === "*")
-                k = l;
-            else if (l !== "*" && l !== k) {
-                m = l + " " + k, n = e[m] || e["* " + k];
-                if (!n) {
-                    p = b;
-                    for (o in e) {
-                        j = o.split(" ");
-                        if (j[0] === l || j[0] === "*") {
-                            p = e[j[1] + " " + k];
-                            if (p) {
-                                o = e[o], o === !0 ? n = p : p === !0 && (n = o);
-                                break
-                            }
-                        }
-                    }
-                }
-                !n && !p && f.error("No conversion from " + m.replace(" ", " to ")), n !== !0 && (c = n ? n(c) : p(o(c)))
-            }
-        }
-        return c
-    }
-    function cd(a, c, d) {
-        var e = a.contents, f = a.dataTypes, g = a.responseFields, h, i, j, k;
-        for (i in g)
-            i in d && (c[g[i]] = d[i]);
-        while (f[0] === "*")
-            f.shift(), h === b && (h = a.mimeType || c.getResponseHeader("content-type"));
-        if (h)
-            for (i in e)
-                if (e[i] && e[i].test(h)) {
-                    f.unshift(i);
-                    break
-                }
-        if (f[0]in d)
-            j = f[0];
-        else {
-            for (i in d) {
-                if (!f[0] || a.converters[i + " " + f[0]]) {
-                    j = i;
-                    break
-                }
-                k || (k = i)
-            }
-            j = j || k
-        }
-        if (j) {
-            j !== f[0] && f.unshift(j);
-            return d[j]
-        }
-    }
-    function cc(a, b, c, d) {
-        if (f.isArray(b))
-            f.each(b, function (b, e) {
-                c || bG.test(a) ? d(a, e) : cc(a + "[" + (typeof e == "object" || f.isArray(e) ? b : "") + "]", e, c, d)
-            });
-        else if (!c && b != null && typeof b == "object")
-            for (var e in b)
-                cc(a + "[" + e + "]", b[e], c, d);
-        else
-            d(a, b)
-    }
-    function cb(a, c) {
-        var d, e, g = f.ajaxSettings.flatOptions || {};
-        for (d in c)
-            c[d] !== b && ((g[d] ? a : e || (e = {}))[d] = c[d]);
-        e && f.extend(!0, a, e)
-    }
-    function ca(a, c, d, e, f, g) {
-        f = f || c.dataTypes[0], g = g || {}, g[f] = !0;
-        var h = a[f], i = 0, j = h ? h.length : 0, k = a === bV, l;
-        for (; i < j && (k || !l); i++)
-            l = h[i](c, d, e), typeof l == "string" && (!k || g[l] ? l = b : (c.dataTypes.unshift(l), l = ca(a, c, d, e, l, g)));
-        (k || !l) && !g["*"] && (l = ca(a, c, d, e, "*", g));
-        return l
-    }
-    function b_(a) {
-        return function (b, c) {
-            typeof b != "string" && (c = b, b = "*");
-            if (f.isFunction(c)) {
-                var d = b.toLowerCase().split(bR), e = 0, g = d.length, h, i, j;
-                for (; e < g; e++)
-                    h = d[e], j = /^\+/.test(h), j && (h = h.substr(1) || "*"), i = a[h] = a[h] || [], i[j ? "unshift" : "push"](c)
-            }
-        }
-    }
-    function bE(a, b, c) {
-        var d = b === "width" ? a.offsetWidth : a.offsetHeight, e = b === "width" ? bz : bA;
-        if (d > 0) {
-            c !== "border" && f.each(e, function () {
-                c || (d -= parseFloat(f.css(a, "padding" + this)) || 0), c === "margin" ? d += parseFloat(f.css(a, c + this)) || 0 : d -= parseFloat(f.css(a, "border" + this + "Width")) || 0
-            });
-            return d + "px"
-        }
-        d = bB(a, b, b);
-        if (d < 0 || d == null)
-            d = a.style[b] || 0;
-        d = parseFloat(d) || 0, c && f.each(e, function () {
-            d += parseFloat(f.css(a, "padding" + this)) || 0, c !== "padding" && (d += parseFloat(f.css(a, "border" + this + "Width")) || 0), c === "margin" && (d += parseFloat(f.css(a, c + this)) || 0)
-        });
-        return d + "px"
-    }
-    function br(a, b) {
-        b.src ? f.ajax({url: b.src, async: !1, dataType: "script"}) : f.globalEval((b.text || b.textContent || b.innerHTML || "").replace(bi, "/*$0*/")), b.parentNode && b.parentNode.removeChild(b)
-    }
-    function bq(a) {
-        var b = (a.nodeName || "").toLowerCase();
-        b === "input" ? bp(a) : b !== "script" && typeof a.getElementsByTagName != "undefined" && f.grep(a.getElementsByTagName("input"), bp)
-    }
-    function bp(a) {
-        if (a.type === "checkbox" || a.type === "radio")
-            a.defaultChecked = a.checked
-    }
-    function bo(a) {
-        return typeof a.getElementsByTagName != "undefined" ? a.getElementsByTagName("*") : typeof a.querySelectorAll != "undefined" ? a.querySelectorAll("*") : []
-    }
-    function bn(a, b) {
-        var c;
-        if (b.nodeType === 1) {
-            b.clearAttributes && b.clearAttributes(), b.mergeAttributes && b.mergeAttributes(a), c = b.nodeName.toLowerCase();
-            if (c === "object")
-                b.outerHTML = a.outerHTML;
-            else if (c !== "input" || a.type !== "checkbox" && a.type !== "radio") {
-                if (c === "option")
-                    b.selected = a.defaultSelected;
-                else if (c === "input" || c === "textarea")
-                    b.defaultValue = a.defaultValue
-            } else
-                a.checked && (b.defaultChecked = b.checked = a.checked), b.value !== a.value && (b.value = a.value);
-            b.removeAttribute(f.expando)
-        }
-    }
-    function bm(a, b) {
-        if (b.nodeType === 1 && !!f.hasData(a)) {
-            var c, d, e, g = f._data(a), h = f._data(b, g), i = g.events;
-            if (i) {
-                delete h.handle, h.events = {};
-                for (c in i)
-                    for (d = 0, e = i[c].length; d < e; d++)
-                        f.event.add(b, c + (i[c][d].namespace ? "." : "") + i[c][d].namespace, i[c][d], i[c][d].data)
-            }
-            h.data && (h.data = f.extend({}, h.data))
-        }
-    }
-    function bl(a, b) {
-        return f.nodeName(a, "table") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a
-    }
-    function X(a) {
-        var b = Y.split(" "), c = a.createDocumentFragment();
-        if (c.createElement)
-            while (b.length)
-                c.createElement(b.pop());
-        return c
-    }
-    function W(a, b, c) {
-        b = b || 0;
-        if (f.isFunction(b))
-            return f.grep(a, function (a, d) {
-                var e = !!b.call(a, d, a);
-                return e === c
-            });
-        if (b.nodeType)
-            return f.grep(a, function (a, d) {
-                return a === b === c
-            });
-        if (typeof b == "string") {
-            var d = f.grep(a, function (a) {
-                return a.nodeType === 1
-            });
-            if (R.test(b))
-                return f.filter(b, d, !c);
-            b = f.filter(b, d)
-        }
-        return f.grep(a, function (a, d) {
-            return f.inArray(a, b) >= 0 === c
-        })
-    }
-    function V(a) {
-        return!a || !a.parentNode || a.parentNode.nodeType === 11
-    }
-    function N() {
-        return!0
-    }
-    function M() {
-        return!1
-    }
-    function n(a, b, c) {
-        var d = b + "defer", e = b + "queue", g = b + "mark", h = f._data(a, d);
-        h && (c === "queue" || !f._data(a, e)) && (c === "mark" || !f._data(a, g)) && setTimeout(function () {
-            !f._data(a, e) && !f._data(a, g) && (f.removeData(a, d, !0), h.fire())
-        }, 0)
-    }
-    function m(a) {
-        for (var b in a) {
-            if (b === "data" && f.isEmptyObject(a[b]))
-                continue;
-            if (b !== "toJSON")
-                return!1
-        }
-        return!0
-    }
-    function l(a, c, d) {
-        if (d === b && a.nodeType === 1) {
-            var e = "data-" + c.replace(k, "-$1").toLowerCase();
-            d = a.getAttribute(e);
-            if (typeof d == "string") {
-                try {
-                    d = d === "true" ? !0 : d === "false" ? !1 : d === "null" ? null : f.isNumeric(d) ? parseFloat(d) : j.test(d) ? f.parseJSON(d) : d
-                } catch (g) {
-                }
-                f.data(a, c, d)
-            } else
-                d = b
-        }
-        return d
-    }
-    function h(a) {
-        var b = g[a] = {}, c, d;
-        a = a.split(/\s+/);
-        for (c = 0, d = a.length; c < d; c++)
-            b[a[c]] = !0;
-        return b
-    }
-    var c = a.document, d = a.navigator, e = a.location, f = function () {
-        function K() {
-            if (!e.isReady) {
-                try {
-                    c.documentElement.doScroll("left")
-                } catch (a) {
-                    setTimeout(K, 1);
-                    return
-                }
-                e.ready()
-            }
-        }
-        var e = function (a, b) {
-            return new e.fn.init(a, b, h)
-        }, f = a.jQuery, g = a.$, h, i = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, j = /\S/, k = /^\s+/, l = /\s+$/, m = /\d/, n = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, o = /^[\],:{}\s]*$/, p = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, q = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, r = /(?:^|:|,)(?:\s*\[)+/g, s = /(webkit)[ \/]([\w.]+)/, t = /(opera)(?:.*version)?[ \/]([\w.]+)/, u = /(msie) ([\w.]+)/, v = /(mozilla)(?:.*? rv:([\w.]+))?/, w = /-([a-z]|[0-9])/ig, x = /^-ms-/, y = function (a, b) {
-            return(b + "").toUpperCase()
-        }, z = d.userAgent, A, B, C, D = Object.prototype.toString, E = Object.prototype.hasOwnProperty, F = Array.prototype.push, G = Array.prototype.slice, H = String.prototype.trim, I = Array.prototype.indexOf, J = {};
-        e.fn = e.prototype = {constructor: e, init: function (a, d, f) {
-                var g, h, j, k;
-                if (!a)
-                    return this;
-                if (a.nodeType) {
-                    this.context = this[0] = a, this.length = 1;
-                    return this
-                }
-                if (a === "body" && !d && c.body) {
-                    this.context = c, this[0] = c.body, this.selector = a, this.length = 1;
-                    return this
-                }
-                if (typeof a == "string") {
-                    a.charAt(0) !== "<" || a.charAt(a.length - 1) !== ">" || a.length < 3 ? g = i.exec(a) : g = [null, a, null];
-                    if (g && (g[1] || !d)) {
-                        if (g[1]) {
-                            d = d instanceof e ? d[0] : d, k = d ? d.ownerDocument || d : c, j = n.exec(a), j ? e.isPlainObject(d) ? (a = [c.createElement(j[1])], e.fn.attr.call(a, d, !0)) : a = [k.createElement(j[1])] : (j = e.buildFragment([g[1]], [k]), a = (j.cacheable ? e.clone(j.fragment) : j.fragment).childNodes);
-                            return e.merge(this, a)
-                        }
-                        h = c.getElementById(g[2]);
-                        if (h && h.parentNode) {
-                            if (h.id !== g[2])
-                                return f.find(a);
-                            this.length = 1, this[0] = h
-                        }
-                        this.context = c, this.selector = a;
-                        return this
-                    }
-                    return!d || d.jquery ? (d || f).find(a) : this.constructor(d).find(a)
-                }
-                if (e.isFunction(a))
-                    return f.ready(a);
-                a.selector !== b && (this.selector = a.selector, this.context = a.context);
-                return e.makeArray(a, this)
-            }, selector: "", jquery: "1.7", length: 0, size: function () {
-                return this.length
-            }, toArray: function () {
-                return G.call(this, 0)
-            }, get: function (a) {
-                return a == null ? this.toArray() : a < 0 ? this[this.length + a] : this[a]
-            }, pushStack: function (a, b, c) {
-                var d = this.constructor();
-                e.isArray(a) ? F.apply(d, a) : e.merge(d, a), d.prevObject = this, d.context = this.context, b === "find" ? d.selector = this.selector + (this.selector ? " " : "") + c : b && (d.selector = this.selector + "." + b + "(" + c + ")");
-                return d
-            }, each: function (a, b) {
-                return e.each(this, a, b)
-            }, ready: function (a) {
-                e.bindReady(), B.add(a);
-                return this
-            }, eq: function (a) {
-                return a === -1 ? this.slice(a) : this.slice(a, +a + 1)
-            }, first: function () {
-                return this.eq(0)
-            }, last: function () {
-                return this.eq(-1)
-            }, slice: function () {
-                return this.pushStack(G.apply(this, arguments), "slice", G.call(arguments).join(","))
-            }, map: function (a) {
-                return this.pushStack(e.map(this, function (b, c) {
-                    return a.call(b, c, b)
-                }))
-            }, end: function () {
-                return this.prevObject || this.constructor(null)
-            }, push: F, sort: [].sort, splice: [].splice}, e.fn.init.prototype = e.fn, e.extend = e.fn.extend = function () {
-            var a, c, d, f, g, h, i = arguments[0] || {}, j = 1, k = arguments.length, l = !1;
-            typeof i == "boolean" && (l = i, i = arguments[1] || {}, j = 2), typeof i != "object" && !e.isFunction(i) && (i = {}), k === j && (i = this, --j);
-            for (; j < k; j++)
-                if ((a = arguments[j]) != null)
-                    for (c in a) {
-                        d = i[c], f = a[c];
-                        if (i === f)
-                            continue;
-                        l && f && (e.isPlainObject(f) || (g = e.isArray(f))) ? (g ? (g = !1, h = d && e.isArray(d) ? d : []) : h = d && e.isPlainObject(d) ? d : {}, i[c] = e.extend(l, h, f)) : f !== b && (i[c] = f)
-                    }
-            return i
-        }, e.extend({noConflict: function (b) {
-                a.$ === e && (a.$ = g), b && a.jQuery === e && (a.jQuery = f);
-                return e
-            }, isReady: !1, readyWait: 1, holdReady: function (a) {
-                a ? e.readyWait++ : e.ready(!0)
-            }, ready: function (a) {
-                if (a === !0 && !--e.readyWait || a !== !0 && !e.isReady) {
-                    if (!c.body)
-                        return setTimeout(e.ready, 1);
-                    e.isReady = !0;
-                    if (a !== !0 && --e.readyWait > 0)
-                        return;
-                    B.fireWith(c, [e]), e.fn.trigger && e(c).trigger("ready").unbind("ready")
-                }
-            }, bindReady: function () {
-                if (!B) {
-                    B = e.Callbacks("once memory");
-                    if (c.readyState === "complete")
-                        return setTimeout(e.ready, 1);
-                    if (c.addEventListener)
-                        c.addEventListener("DOMContentLoaded", C, !1), a.addEventListener("load", e.ready, !1);
-                    else if (c.attachEvent) {
-                        c.attachEvent("onreadystatechange", C), a.attachEvent("onload", e.ready);
-                        var b = !1;
-                        try {
-                            b = a.frameElement == null
-                        } catch (d) {
-                        }
-                        c.documentElement.doScroll && b && K()
-                    }
-                }
-            }, isFunction: function (a) {
-                return e.type(a) === "function"
-            }, isArray: Array.isArray || function (a) {
-                return e.type(a) === "array"
-            }, isWindow: function (a) {
-                return a && typeof a == "object" && "setInterval"in a
-            }, isNumeric: function (a) {
-                return a != null && m.test(a) && !isNaN(a)
-            }, type: function (a) {
-                return a == null ? String(a) : J[D.call(a)] || "object"
-            }, isPlainObject: function (a) {
-                if (!a || e.type(a) !== "object" || a.nodeType || e.isWindow(a))
-                    return!1;
-                try {
-                    if (a.constructor && !E.call(a, "constructor") && !E.call(a.constructor.prototype, "isPrototypeOf"))
-                        return!1
-                } catch (c) {
-                    return!1
-                }
-                var d;
-                for (d in a)
-                    ;
-                return d === b || E.call(a, d)
-            }, isEmptyObject: function (a) {
-                for (var b in a)
-                    return!1;
-                return!0
-            }, error: function (a) {
-                throw a
-            }, parseJSON: function (b) {
-                if (typeof b != "string" || !b)
-                    return null;
-                b = e.trim(b);
-                if (a.JSON && a.JSON.parse)
-                    return a.JSON.parse(b);
-                if (o.test(b.replace(p, "@").replace(q, "]").replace(r, "")))
-                    return(new Function("return " + b))();
-                e.error("Invalid JSON: " + b)
-            }, parseXML: function (c) {
-                var d, f;
-                try {
-                    a.DOMParser ? (f = new DOMParser, d = f.parseFromString(c, "text/xml")) : (d = new ActiveXObject("Microsoft.XMLDOM"), d.async = "false", d.loadXML(c))
-                } catch (g) {
-                    d = b
-                }
-                (!d || !d.documentElement || d.getElementsByTagName("parsererror").length) && e.error("Invalid XML: " + c);
-                return d
-            }, noop: function () {
-            }, globalEval: function (b) {
-                b && j.test(b) && (a.execScript || function (b) {
-                    a.eval.call(a, b)
-                })(b)
-            }, camelCase: function (a) {
-                return a.replace(x, "ms-").replace(w, y)
-            }, nodeName: function (a, b) {
-                return a.nodeName && a.nodeName.toUpperCase() === b.toUpperCase()
-            }, each: function (a, c, d) {
-                var f, g = 0, h = a.length, i = h === b || e.isFunction(a);
-                if (d) {
-                    if (i) {
-                        for (f in a)
-                            if (c.apply(a[f], d) === !1)
-                                break
-                    } else
-                        for (; g < h; )
-                            if (c.apply(a[g++], d) === !1)
-                                break
-                } else if (i) {
-                    for (f in a)
-                        if (c.call(a[f], f, a[f]) === !1)
-                            break
-                } else
-                    for (; g < h; )
-                        if (c.call(a[g], g, a[g++]) === !1)
-                            break;
-                return a
-            }, trim: H ? function (a) {
-                return a == null ? "" : H.call(a)
-            } : function (a) {
-                return a == null ? "" : (a + "").replace(k, "").replace(l, "")
-            }, makeArray: function (a, b) {
-                var c = b || [];
-                if (a != null) {
-                    var d = e.type(a);
-                    a.length == null || d === "string" || d === "function" || d === "regexp" || e.isWindow(a) ? F.call(c, a) : e.merge(c, a)
-                }
-                return c
-            }, inArray: function (a, b, c) {
-                var d;
-                if (b) {
-                    if (I)
-                        return I.call(b, a, c);
-                    d = b.length, c = c ? c < 0 ? Math.max(0, d + c) : c : 0;
-                    for (; c < d; c++)
-                        if (c in b && b[c] === a)
-                            return c
-                }
-                return-1
-            }, merge: function (a, c) {
-                var d = a.length, e = 0;
-                if (typeof c.length == "number")
-                    for (var f = c.length; e < f; e++)
-                        a[d++] = c[e];
-                else
-                    while (c[e] !== b)
-                        a[d++] = c[e++];
-                a.length = d;
-                return a
-            }, grep: function (a, b, c) {
-                var d = [], e;
-                c = !!c;
-                for (var f = 0, g = a.length; f < g; f++)
-                    e = !!b(a[f], f), c !== e && d.push(a[f]);
-                return d
-            }, map: function (a, c, d) {
-                var f, g, h = [], i = 0, j = a.length, k = a instanceof e || j !== b && typeof j == "number" && (j > 0 && a[0] && a[j - 1] || j === 0 || e.isArray(a));
-                if (k)
-                    for (; i < j; i++)
-                        f = c(a[i], i, d), f != null && (h[h.length] = f);
-                else
-                    for (g in a)
-                        f = c(a[g], g, d), f != null && (h[h.length] = f);
-                return h.concat.apply([], h)
-            }, guid: 1, proxy: function (a, c) {
-                if (typeof c == "string") {
-                    var d = a[c];
-                    c = a, a = d
-                }
-                if (!e.isFunction(a))
-                    return b;
-                var f = G.call(arguments, 2), g = function () {
-                    return a.apply(c, f.concat(G.call(arguments)))
-                };
-                g.guid = a.guid = a.guid || g.guid || e.guid++;
-                return g
-            }, access: function (a, c, d, f, g, h) {
-                var i = a.length;
-                if (typeof c == "object") {
-                    for (var j in c)
-                        e.access(a, j, c[j], f, g, d);
-                    return a
-                }
-                if (d !== b) {
-                    f = !h && f && e.isFunction(d);
-                    for (var k = 0; k < i; k++)
-                        g(a[k], c, f ? d.call(a[k], k, g(a[k], c)) : d, h);
-                    return a
-                }
-                return i ? g(a[0], c) : b
-            }, now: function () {
-                return(new Date).getTime()
-            }, uaMatch: function (a) {
-                a = a.toLowerCase();
-                var b = s.exec(a) || t.exec(a) || u.exec(a) || a.indexOf("compatible") < 0 && v.exec(a) || [];
-                return{browser: b[1] || "", version: b[2] || "0"}
-            }, sub: function () {
-                function a(b, c) {
-                    return new a.fn.init(b, c)
-                }
-                e.extend(!0, a, this), a.superclass = this, a.fn = a.prototype = this(), a.fn.constructor = a, a.sub = this.sub, a.fn.init = function (d, f) {
-                    f && f instanceof e && !(f instanceof a) && (f = a(f));
-                    return e.fn.init.call(this, d, f, b)
-                }, a.fn.init.prototype = a.fn;
-                var b = a(c);
-                return a
-            }, browser: {}}), e.each("Boolean Number String Function Array Date RegExp Object".split(" "), function (a, b) {
-            J["[object " + b + "]"] = b.toLowerCase()
-        }), A = e.uaMatch(z), A.browser && (e.browser[A.browser] = !0, e.browser.version = A.version), e.browser.webkit && (e.browser.safari = !0), j.test(" ") && (k = /^[\s\xA0]+/, l = /[\s\xA0]+$/), h = e(c), c.addEventListener ? C = function () {
-            c.removeEventListener("DOMContentLoaded", C, !1), e.ready()
-        } : c.attachEvent && (C = function () {
-            c.readyState === "complete" && (c.detachEvent("onreadystatechange", C), e.ready())
-        }), typeof define == "function" && define.amd && define.amd.jQuery && define("jquery", [], function () {
-            return e
-        });
-        return e
-    }(), g = {};
-    f.Callbacks = function (a) {
-        a = a ? g[a] || h(a) : {};
-        var c = [], d = [], e, i, j, k, l, m = function (b) {
-            var d, e, g, h, i;
-            for (d = 0, e = b.length; d < e; d++)
-                g = b[d], h = f.type(g), h === "array" ? m(g) : h === "function" && (!a.unique || !o.has(g)) && c.push(g)
-        }, n = function (b, f) {
-            f = f || [], e = !a.memory || [b, f], i = !0, l = j || 0, j = 0, k = c.length;
-            for (; c && l < k; l++)
-                if (c[l].apply(b, f) === !1 && a.stopOnFalse) {
-                    e = !0;
-                    break
-                }
-            i = !1, c && (a.once ? e === !0 ? o.disable() : c = [] : d && d.length && (e = d.shift(), o.fireWith(e[0], e[1])))
-        }, o = {add: function () {
-                if (c) {
-                    var a = c.length;
-                    m(arguments), i ? k = c.length : e && e !== !0 && (j = a, n(e[0], e[1]))
-                }
-                return this
-            }, remove: function () {
-                if (c) {
-                    var b = arguments, d = 0, e = b.length;
-                    for (; d < e; d++)
-                        for (var f = 0; f < c.length; f++)
-                            if (b[d] === c[f]) {
-                                i && f <= k && (k--, f <= l && l--), c.splice(f--, 1);
-                                if (a.unique)
-                                    break
-                            }
-                }
-                return this
-            }, has: function (a) {
-                if (c) {
-                    var b = 0, d = c.length;
-                    for (; b < d; b++)
-                        if (a === c[b])
-                            return!0
-                }
-                return!1
-            }, empty: function () {
-                c = [];
-                return this
-            }, disable: function () {
-                c = d = e = b;
-                return this
-            }, disabled: function () {
-                return!c
-            }, lock: function () {
-                d = b, (!e || e === !0) && o.disable();
-                return this
-            }, locked: function () {
-                return!d
-            }, fireWith: function (b, c) {
-                d && (i ? a.once || d.push([b, c]) : (!a.once || !e) && n(b, c));
-                return this
-            }, fire: function () {
-                o.fireWith(this, arguments);
-                return this
-            }, fired: function () {
-                return!!e
-            }};
-        return o
-    };
-    var i = [].slice;
-    f.extend({Deferred: function (a) {
-            var b = f.Callbacks("once memory"), c = f.Callbacks("once memory"), d = f.Callbacks("memory"), e = "pending", g = {resolve: b, reject: c, notify: d}, h = {done: b.add, fail: c.add, progress: d.add, state: function () {
-                    return e
-                }, isResolved: b.fired, isRejected: c.fired, then: function (a, b, c) {
-                    i.done(a).fail(b).progress(c);
-                    return this
-                }, always: function () {
-                    return i.done.apply(i, arguments).fail.apply(i, arguments)
-                }, pipe: function (a, b, c) {
-                    return f.Deferred(function (d) {
-                        f.each({done: [a, "resolve"], fail: [b, "reject"], progress: [c, "notify"]}, function (a, b) {
-                            var c = b[0], e = b[1], g;
-                            f.isFunction(c) ? i[a](function () {
-                                g = c.apply(this, arguments), g && f.isFunction(g.promise) ? g.promise().then(d.resolve, d.reject, d.notify) : d[e + "With"](this === i ? d : this, [g])
-                            }) : i[a](d[e])
-                        })
-                    }).promise()
-                }, promise: function (a) {
-                    if (a == null)
-                        a = h;
-                    else
-                        for (var b in h)
-                            a[b] = h[b];
-                    return a
-                }}, i = h.promise({}), j;
-            for (j in g)
-                i[j] = g[j].fire, i[j + "With"] = g[j].fireWith;
-            i.done(function () {
-                e = "resolved"
-            }, c.disable, d.lock).fail(function () {
-                e = "rejected"
-            }, b.disable, d.lock), a && a.call(i, i);
-            return i
-        }, when: function (a) {
-            function m(a) {
-                return function (b) {
-                    e[a] = arguments.length > 1 ? i.call(arguments, 0) : b, j.notifyWith(k, e)
-                }
-            }
-            function l(a) {
-                return function (c) {
-                    b[a] = arguments.length > 1 ? i.call(arguments, 0) : c, --g || j.resolveWith(j, b)
-                }
-            }
-            var b = i.call(arguments, 0), c = 0, d = b.length, e = Array(d), g = d, h = d, j = d <= 1 && a && f.isFunction(a.promise) ? a : f.Deferred(), k = j.promise();
-            if (d > 1) {
-                for (; c < d; c++)
-                    b[c] && b[c].promise && f.isFunction(b[c].promise) ? b[c].promise().then(l(c), j.reject, m(c)) : --g;
-                g || j.resolveWith(j, b)
-            } else
-                j !== a && j.resolveWith(j, d ? [a] : []);
-            return k
-        }}), f.support = function () {
-        var a = c.createElement("div"), b = c.documentElement, d, e, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u;
-        a.setAttribute("className", "t"), a.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>", d = a.getElementsByTagName("*"), e = a.getElementsByTagName("a")[0];
-        if (!d || !d.length || !e)
-            return{};
-        g = c.createElement("select"), h = g.appendChild(c.createElement("option")), i = a.getElementsByTagName("input")[0], k = {leadingWhitespace: a.firstChild.nodeType === 3, tbody: !a.getElementsByTagName("tbody").length, htmlSerialize: !!a.getElementsByTagName("link").length, style: /top/.test(e.getAttribute("style")), hrefNormalized: e.getAttribute("href") === "/a", opacity: /^0.55/.test(e.style.opacity), cssFloat: !!e.style.cssFloat, unknownElems: !!a.getElementsByTagName("nav").length, checkOn: i.value === "on", optSelected: h.selected, getSetAttribute: a.className !== "t", enctype: !!c.createElement("form").enctype, submitBubbles: !0, changeBubbles: !0, focusinBubbles: !1, deleteExpando: !0, noCloneEvent: !0, inlineBlockNeedsLayout: !1, shrinkWrapBlocks: !1, reliableMarginRight: !0}, i.checked = !0, k.noCloneChecked = i.cloneNode(!0).checked, g.disabled = !0, k.optDisabled = !h.disabled;
-        try {
-            delete a.test
-        } catch (v) {
-            k.deleteExpando = !1
-        }
-        !a.addEventListener && a.attachEvent && a.fireEvent && (a.attachEvent("onclick", function () {
-            k.noCloneEvent = !1
-        }), a.cloneNode(!0).fireEvent("onclick")), i = c.createElement("input"), i.value = "t", i.setAttribute("type", "radio"), k.radioValue = i.value === "t", i.setAttribute("checked", "checked"), a.appendChild(i), l = c.createDocumentFragment(), l.appendChild(a.lastChild), k.checkClone = l.cloneNode(!0).cloneNode(!0).lastChild.checked, a.innerHTML = "", a.style.width = a.style.paddingLeft = "1px", m = c.getElementsByTagName("body")[0], o = c.createElement(m ? "div" : "body"), p = {visibility: "hidden", width: 0, height: 0, border: 0, margin: 0, background: "none"}, m && f.extend(p, {position: "absolute", left: "-999px", top: "-999px"});
-        for (t in p)
-            o.style[t] = p[t];
-        o.appendChild(a), n = m || b, n.insertBefore(o, n.firstChild), k.appendChecked = i.checked, k.boxModel = a.offsetWidth === 2, "zoom"in a.style && (a.style.display = "inline", a.style.zoom = 1, k.inlineBlockNeedsLayout = a.offsetWidth === 2, a.style.display = "", a.innerHTML = "<div style='width:4px;'></div>", k.shrinkWrapBlocks = a.offsetWidth !== 2), a.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>", q = a.getElementsByTagName("td"), u = q[0].offsetHeight === 0, q[0].style.display = "", q[1].style.display = "none", k.reliableHiddenOffsets = u && q[0].offsetHeight === 0, a.innerHTML = "", c.defaultView && c.defaultView.getComputedStyle && (j = c.createElement("div"), j.style.width = "0", j.style.marginRight = "0", a.appendChild(j), k.reliableMarginRight = (parseInt((c.defaultView.getComputedStyle(j, null) || {marginRight: 0}).marginRight, 10) || 0) === 0);
-        if (a.attachEvent)
-            for (t in{submit:1, change:1, focusin:1})
-                s = "on" + t, u = s in a, u || (a.setAttribute(s, "return;"), u = typeof a[s] == "function"), k[t + "Bubbles"] = u;
-        f(function () {
-            var a, b, d, e, g, h, i = 1, j = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;", l = "visibility:hidden;border:0;", n = "style='" + j + "border:5px solid #000;padding:0;'", p = "<div " + n + "><div></div></div>" + "<table " + n + " cellpadding='0' cellspacing='0'>" + "<tr><td></td></tr></table>";
-            m = c.getElementsByTagName("body")[0];
-            !m || (a = c.createElement("div"), a.style.cssText = l + "width:0;height:0;position:static;top:0;margin-top:" + i + "px", m.insertBefore(a, m.firstChild), o = c.createElement("div"), o.style.cssText = j + l, o.innerHTML = p, a.appendChild(o), b = o.firstChild, d = b.firstChild, g = b.nextSibling.firstChild.firstChild, h = {doesNotAddBorder: d.offsetTop !== 5, doesAddBorderForTableAndCells: g.offsetTop === 5}, d.style.position = "fixed", d.style.top = "20px", h.fixedPosition = d.offsetTop === 20 || d.offsetTop === 15, d.style.position = d.style.top = "", b.style.overflow = "hidden", b.style.position = "relative", h.subtractsBorderForOverflowNotVisible = d.offsetTop === -5, h.doesNotIncludeMarginInBodyOffset = m.offsetTop !== i, m.removeChild(a), o = a = null, f.extend(k, h))
-        }), o.innerHTML = "", n.removeChild(o), o = l = g = h = m = j = a = i = null;
-        return k
-    }(), f.boxModel = f.support.boxModel;
-    var j = /^(?:\{.*\}|\[.*\])$/, k = /([A-Z])/g;
-    f.extend({cache: {}, uuid: 0, expando: "jQuery" + (f.fn.jquery + Math.random()).replace(/\D/g, ""), noData: {embed: !0, object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", applet: !0}, hasData: function (a) {
-            a = a.nodeType ? f.cache[a[f.expando]] : a[f.expando];
-            return!!a && !m(a)
-        }, data: function (a, c, d, e) {
-            if (!!f.acceptData(a)) {
-                var g, h, i, j = f.expando, k = typeof c == "string", l = a.nodeType, m = l ? f.cache : a, n = l ? a[f.expando] : a[f.expando] && f.expando, o = c === "events";
-                if ((!n || !m[n] || !o && !e && !m[n].data) && k && d === b)
-                    return;
-                n || (l ? a[f.expando] = n = ++f.uuid : n = f.expando), m[n] || (m[n] = {}, l || (m[n].toJSON = f.noop));
-                if (typeof c == "object" || typeof c == "function")
-                    e ? m[n] = f.extend(m[n], c) : m[n].data = f.extend(m[n].data, c);
-                g = h = m[n], e || (h.data || (h.data = {}), h = h.data), d !== b && (h[f.camelCase(c)] = d);
-                if (o && !h[c])
-                    return g.events;
-                k ? (i = h[c], i == null && (i = h[f.camelCase(c)])) : i = h;
-                return i
-            }
-        }, removeData: function (a, b, c) {
-            if (!!f.acceptData(a)) {
-                var d, e, g, h = f.expando, i = a.nodeType, j = i ? f.cache : a, k = i ? a[f.expando] : f.expando;
-                if (!j[k])
-                    return;
-                if (b) {
-                    d = c ? j[k] : j[k].data;
-                    if (d) {
-                        f.isArray(b) ? b = b : b in d ? b = [b] : (b = f.camelCase(b), b in d ? b = [b] : b = b.split(" "));
-                        for (e = 0, g = b.length; e < g; e++)
-                            delete d[b[e]];
-                        if (!(c ? m : f.isEmptyObject)(d))
-                            return
-                    }
-                }
-                if (!c) {
-                    delete j[k].data;
-                    if (!m(j[k]))
-                        return
-                }
-                f.support.deleteExpando || !j.setInterval ? delete j[k] : j[k] = null, i && (f.support.deleteExpando ? delete a[f.expando] : a.removeAttribute ? a.removeAttribute(f.expando) : a[f.expando] = null)
-            }
-        }, _data: function (a, b, c) {
-            return f.data(a, b, c, !0)
-        }, acceptData: function (a) {
-            if (a.nodeName) {
-                var b = f.noData[a.nodeName.toLowerCase()];
-                if (b)
-                    return b !== !0 && a.getAttribute("classid") === b
-            }
-            return!0
-        }}), f.fn.extend({data: function (a, c) {
-            var d, e, g, h = null;
-            if (typeof a == "undefined") {
-                if (this.length) {
-                    h = f.data(this[0]);
-                    if (this[0].nodeType === 1 && !f._data(this[0], "parsedAttrs")) {
-                        e = this[0].attributes;
-                        for (var i = 0, j = e.length; i < j; i++)
-                            g = e[i].name, g.indexOf("data-") === 0 && (g = f.camelCase(g.substring(5)), l(this[0], g, h[g]));
-                        f._data(this[0], "parsedAttrs", !0)
-                    }
-                }
-                return h
-            }
-            if (typeof a == "object")
-                return this.each(function () {
-                    f.data(this, a)
-                });
-            d = a.split("."), d[1] = d[1] ? "." + d[1] : "";
-            if (c === b) {
-                h = this.triggerHandler("getData" + d[1] + "!", [d[0]]), h === b && this.length && (h = f.data(this[0], a), h = l(this[0], a, h));
-                return h === b && d[1] ? this.data(d[0]) : h
-            }
-            return this.each(function () {
-                var b = f(this), e = [d[0], c];
-                b.triggerHandler("setData" + d[1] + "!", e), f.data(this, a, c), b.triggerHandler("changeData" + d[1] + "!", e)
-            })
-        }, removeData: function (a) {
-            return this.each(function () {
-                f.removeData(this, a)
-            })
-        }}), f.extend({_mark: function (a, b) {
-            a && (b = (b || "fx") + "mark", f._data(a, b, (f._data(a, b) || 0) + 1))
-        }, _unmark: function (a, b, c) {
-            a !== !0 && (c = b, b = a, a = !1);
-            if (b) {
-                c = c || "fx";
-                var d = c + "mark", e = a ? 0 : (f._data(b, d) || 1) - 1;
-                e ? f._data(b, d, e) : (f.removeData(b, d, !0), n(b, c, "mark"))
-            }
-        }, queue: function (a, b, c) {
-            var d;
-            if (a) {
-                b = (b || "fx") + "queue", d = f._data(a, b), c && (!d || f.isArray(c) ? d = f._data(a, b, f.makeArray(c)) : d.push(c));
-                return d || []
-            }
-        }, dequeue: function (a, b) {
-            b = b || "fx";
-            var c = f.queue(a, b), d = c.shift(), e = {};
-            d === "inprogress" && (d = c.shift()), d && (b === "fx" && c.unshift("inprogress"), f._data(a, b + ".run", e), d.call(a, function () {
-                f.dequeue(a, b)
-            }, e)), c.length || (f.removeData(a, b + "queue " + b + ".run", !0), n(a, b, "queue"))
-        }}), f.fn.extend({queue: function (a, c) {
-            typeof a != "string" && (c = a, a = "fx");
-            if (c === b)
-                return f.queue(this[0], a);
-            return this.each(function () {
-                var b = f.queue(this, a, c);
-                a === "fx" && b[0] !== "inprogress" && f.dequeue(this, a)
-            })
-        }, dequeue: function (a) {
-            return this.each(function () {
-                f.dequeue(this, a)
-            })
-        }, delay: function (a, b) {
-            a = f.fx ? f.fx.speeds[a] || a : a, b = b || "fx";
-            return this.queue(b, function (b, c) {
-                var d = setTimeout(b, a);
-                c.stop = function () {
-                    clearTimeout(d)
-                }
-            })
-        }, clearQueue: function (a) {
-            return this.queue(a || "fx", [])
-        }, promise: function (a, c) {
-            function m() {
-                --h || d.resolveWith(e, [e])
-            }
-            typeof a != "string" && (c = a, a = b), a = a || "fx";
-            var d = f.Deferred(), e = this, g = e.length, h = 1, i = a + "defer", j = a + "queue", k = a + "mark", l;
-            while (g--)
-                if (l = f.data(e[g], i, b, !0) || (f.data(e[g], j, b, !0) || f.data(e[g], k, b, !0)) && f.data(e[g], i, f.Callbacks("once memory"), !0))
-                    h++, l.add(m);
-            m();
-            return d.promise()
-        }});
-    var o = /[\n\t\r]/g, p = /\s+/, q = /\r/g, r = /^(?:button|input)$/i, s = /^(?:button|input|object|select|textarea)$/i, t = /^a(?:rea)?$/i, u = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, v = f.support.getSetAttribute, w, x, y;
-    f.fn.extend({attr: function (a, b) {
-            return f.access(this, a, b, !0, f.attr)
-        }, removeAttr: function (a) {
-            return this.each(function () {
-                f.removeAttr(this, a)
-            })
-        }, prop: function (a, b) {
-            return f.access(this, a, b, !0, f.prop)
-        }, removeProp: function (a) {
-            a = f.propFix[a] || a;
-            return this.each(function () {
-                try {
-                    this[a] = b, delete this[a]
-                } catch (c) {
-                }
-            })
-        }, addClass: function (a) {
-            var b, c, d, e, g, h, i;
-            if (f.isFunction(a))
-                return this.each(function (b) {
-                    f(this).addClass(a.call(this, b, this.className))
-                });
-            if (a && typeof a == "string") {
-                b = a.split(p);
-                for (c = 0, d = this.length; c < d; c++) {
-                    e = this[c];
-                    if (e.nodeType === 1)
-                        if (!e.className && b.length === 1)
-                            e.className = a;
-                        else {
-                            g = " " + e.className + " ";
-                            for (h = 0, i = b.length; h < i; h++)
-                                ~g.indexOf(" " + b[h] + " ") || (g += b[h] + " ");
-                            e.className = f.trim(g)
-                        }
-                }
-            }
-            return this
-        }, removeClass: function (a) {
-            var c, d, e, g, h, i, j;
-            if (f.isFunction(a))
-                return this.each(function (b) {
-                    f(this).removeClass(a.call(this, b, this.className))
-                });
-            if (a && typeof a == "string" || a === b) {
-                c = (a || "").split(p);
-                for (d = 0, e = this.length; d < e; d++) {
-                    g = this[d];
-                    if (g.nodeType === 1 && g.className)
-                        if (a) {
-                            h = (" " + g.className + " ").replace(o, " ");
-                            for (i = 0, j = c.length; i < j; i++)
-                                h = h.replace(" " + c[i] + " ", " ");
-                            g.className = f.trim(h)
-                        } else
-                            g.className = ""
-                }
-            }
-            return this
-        }, toggleClass: function (a, b) {
-            var c = typeof a, d = typeof b == "boolean";
-            if (f.isFunction(a))
-                return this.each(function (c) {
-                    f(this).toggleClass(a.call(this, c, this.className, b), b)
-                });
-            return this.each(function () {
-                if (c === "string") {
-                    var e, g = 0, h = f(this), i = b, j = a.split(p);
-                    while (e = j[g++])
-                        i = d ? i : !h.hasClass(e), h[i ? "addClass" : "removeClass"](e)
-                } else if (c === "undefined" || c === "boolean")
-                    this.className && f._data(this, "__className__", this.className), this.className = this.className || a === !1 ? "" : f._data(this, "__className__") || ""
-            })
-        }, hasClass: function (a) {
-            var b = " " + a + " ", c = 0, d = this.length;
-            for (; c < d; c++)
-                if (this[c].nodeType === 1 && (" " + this[c].className + " ").replace(o, " ").indexOf(b) > -1)
-                    return!0;
-            return!1
-        }, val: function (a) {
-            var c, d, e, g = this[0];
-            if (!arguments.length) {
-                if (g) {
-                    c = f.valHooks[g.nodeName.toLowerCase()] || f.valHooks[g.type];
-                    if (c && "get"in c && (d = c.get(g, "value")) !== b)
-                        return d;
-                    d = g.value;
-                    return typeof d == "string" ? d.replace(q, "") : d == null ? "" : d
-                }
-                return b
-            }
-            e = f.isFunction(a);
-            return this.each(function (d) {
-                var g = f(this), h;
-                if (this.nodeType === 1) {
-                    e ? h = a.call(this, d, g.val()) : h = a, h == null ? h = "" : typeof h == "number" ? h += "" : f.isArray(h) && (h = f.map(h, function (a) {
-                        return a == null ? "" : a + ""
-                    })), c = f.valHooks[this.nodeName.toLowerCase()] || f.valHooks[this.type];
-                    if (!c || !("set"in c) || c.set(this, h, "value") === b)
-                        this.value = h
-                }
-            })
-        }}), f.extend({valHooks: {option: {get: function (a) {
-                    var b = a.attributes.value;
-                    return!b || b.specified ? a.value : a.text
-                }}, select: {get: function (a) {
-                    var b, c, d, e, g = a.selectedIndex, h = [], i = a.options, j = a.type === "select-one";
-                    if (g < 0)
-                        return null;
-                    c = j ? g : 0, d = j ? g + 1 : i.length;
-                    for (; c < d; c++) {
-                        e = i[c];
-                        if (e.selected && (f.support.optDisabled ? !e.disabled : e.getAttribute("disabled") === null) && (!e.parentNode.disabled || !f.nodeName(e.parentNode, "optgroup"))) {
-                            b = f(e).val();
-                            if (j)
-                                return b;
-                            h.push(b)
-                        }
-                    }
-                    if (j && !h.length && i.length)
-                        return f(i[g]).val();
-                    return h
-                }, set: function (a, b) {
-                    var c = f.makeArray(b);
-                    f(a).find("option").each(function () {
-                        this.selected = f.inArray(f(this).val(), c) >= 0
-                    }), c.length || (a.selectedIndex = -1);
-                    return c
-                }}}, attrFn: {val: !0, css: !0, html: !0, text: !0, data: !0, width: !0, height: !0, offset: !0}, attr: function (a, c, d, e) {
-            var g, h, i, j = a.nodeType;
-            if (!a || j === 3 || j === 8 || j === 2)
-                return b;
-            if (e && c in f.attrFn)
-                return f(a)[c](d);
-            if (!("getAttribute"in a))
-                return f.prop(a, c, d);
-            i = j !== 1 || !f.isXMLDoc(a), i && (c = c.toLowerCase(), h = f.attrHooks[c] || (u.test(c) ? x : w));
-            if (d !== b) {
-                if (d === null) {
-                    f.removeAttr(a, c);
-                    return b
-                }
-                if (h && "set"in h && i && (g = h.set(a, d, c)) !== b)
-                    return g;
-                a.setAttribute(c, "" + d);
-                return d
-            }
-            if (h && "get"in h && i && (g = h.get(a, c)) !== null)
-                return g;
-            g = a.getAttribute(c);
-            return g === null ? b : g
-        }, removeAttr: function (a, b) {
-            var c, d, e, g, h = 0;
-            if (a.nodeType === 1) {
-                d = (b || "").split(p), g = d.length;
-                for (; h < g; h++)
-                    e = d[h].toLowerCase(), c = f.propFix[e] || e, f.attr(a, e, ""), a.removeAttribute(v ? e : c), u.test(e) && c in a && (a[c] = !1)
-            }
-        }, attrHooks: {type: {set: function (a, b) {
-                    if (r.test(a.nodeName) && a.parentNode)
-                        f.error("type property can't be changed");
-                    else if (!f.support.radioValue && b === "radio" && f.nodeName(a, "input")) {
-                        var c = a.value;
-                        a.setAttribute("type", b), c && (a.value = c);
-                        return b
-                    }
-                }}, value: {get: function (a, b) {
-                    if (w && f.nodeName(a, "button"))
-                        return w.get(a, b);
-                    return b in a ? a.value : null
-                }, set: function (a, b, c) {
-                    if (w && f.nodeName(a, "button"))
-                        return w.set(a, b, c);
-                    a.value = b
-                }}}, propFix: {tabindex: "tabIndex", readonly: "readOnly", "for": "htmlFor", "class": "className", maxlength: "maxLength", cellspacing: "cellSpacing", cellpadding: "cellPadding", rowspan: "rowSpan", colspan: "colSpan", usemap: "useMap", frameborder: "frameBorder", contenteditable: "contentEditable"}, prop: function (a, c, d) {
-            var e, g, h, i = a.nodeType;
-            if (!a || i === 3 || i === 8 || i === 2)
-                return b;
-            h = i !== 1 || !f.isXMLDoc(a), h && (c = f.propFix[c] || c, g = f.propHooks[c]);
-            return d !== b ? g && "set"in g && (e = g.set(a, d, c)) !== b ? e : a[c] = d : g && "get"in g && (e = g.get(a, c)) !== null ? e : a[c]
-        }, propHooks: {tabIndex: {get: function (a) {
-                    var c = a.getAttributeNode("tabindex");
-                    return c && c.specified ? parseInt(c.value, 10) : s.test(a.nodeName) || t.test(a.nodeName) && a.href ? 0 : b
-                }}}}), f.attrHooks.tabindex = f.propHooks.tabIndex, x = {get: function (a, c) {
-            var d, e = f.prop(a, c);
-            return e === !0 || typeof e != "boolean" && (d = a.getAttributeNode(c)) && d.nodeValue !== !1 ? c.toLowerCase() : b
-        }, set: function (a, b, c) {
-            var d;
-            b === !1 ? f.removeAttr(a, c) : (d = f.propFix[c] || c, d in a && (a[d] = !0), a.setAttribute(c, c.toLowerCase()));
-            return c
-        }}, v || (y = {name: !0, id: !0}, w = f.valHooks.button = {get: function (a, c) {
-            var d;
-            d = a.getAttributeNode(c);
-            return d && (y[c] ? d.nodeValue !== "" : d.specified) ? d.nodeValue : b
-        }, set: function (a, b, d) {
-            var e = a.getAttributeNode(d);
-            e || (e = c.createAttribute(d), a.setAttributeNode(e));
-            return e.nodeValue = b + ""
-        }}, f.attrHooks.tabindex.set = w.set, f.each(["width", "height"], function (a, b) {
-        f.attrHooks[b] = f.extend(f.attrHooks[b], {set: function (a, c) {
-                if (c === "") {
-                    a.setAttribute(b, "auto");
-                    return c
-                }
-            }})
-    }), f.attrHooks.contenteditable = {get: w.get, set: function (a, b, c) {
-            b === "" && (b = "false"), w.set(a, b, c)
-        }}), f.support.hrefNormalized || f.each(["href", "src", "width", "height"], function (a, c) {
-        f.attrHooks[c] = f.extend(f.attrHooks[c], {get: function (a) {
-                var d = a.getAttribute(c, 2);
-                return d === null ? b : d
-            }})
-    }), f.support.style || (f.attrHooks.style = {get: function (a) {
-            return a.style.cssText.toLowerCase() || b
-        }, set: function (a, b) {
-            return a.style.cssText = "" + b
-        }}), f.support.optSelected || (f.propHooks.selected = f.extend(f.propHooks.selected, {get: function (a) {
-            var b = a.parentNode;
-            b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex);
-            return null
-        }})), f.support.enctype || (f.propFix.enctype = "encoding"), f.support.checkOn || f.each(["radio", "checkbox"], function () {
-        f.valHooks[this] = {get: function (a) {
-                return a.getAttribute("value") === null ? "on" : a.value
-            }}
-    }), f.each(["radio", "checkbox"], function () {
-        f.valHooks[this] = f.extend(f.valHooks[this], {set: function (a, b) {
-                if (f.isArray(b))
-                    return a.checked = f.inArray(f(a).val(), b) >= 0
-            }})
-    });
-    var z = /\.(.*)$/, A = /^(?:textarea|input|select)$/i, B = /\./g, C = / /g, D = /[^\w\s.|`]/g, E = /^([^\.]*)?(?:\.(.+))?$/, F = /\bhover(\.\S+)?/, G = /^key/, H = /^(?:mouse|contextmenu)|click/, I = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, J = function (a) {
-        var b = I.exec(a);
-        b &&
-                (b[1] = (b[1] || "").toLowerCase(), b[3] = b[3] && new RegExp("(?:^|\\s)" + b[3] + "(?:\\s|$)"));
-        return b
-    }, K = function (a, b) {
-        return(!b[1] || a.nodeName.toLowerCase() === b[1]) && (!b[2] || a.id === b[2]) && (!b[3] || b[3].test(a.className))
-    }, L = function (a) {
-        return f.event.special.hover ? a : a.replace(F, "mouseenter$1 mouseleave$1")
-    };
-    f.event = {add: function (a, c, d, e, g) {
-            var h, i, j, k, l, m, n, o, p, q, r, s;
-            if (!(a.nodeType === 3 || a.nodeType === 8 || !c || !d || !(h = f._data(a)))) {
-                d.handler && (p = d, d = p.handler), d.guid || (d.guid = f.guid++), j = h.events, j || (h.events = j = {}), i = h.handle, i || (h.handle = i = function (a) {
-                    return typeof f != "undefined" && (!a || f.event.triggered !== a.type) ? f.event.dispatch.apply(i.elem, arguments) : b
-                }, i.elem = a), c = L(c).split(" ");
-                for (k = 0; k < c.length; k++) {
-                    l = E.exec(c[k]) || [], m = l[1], n = (l[2] || "").split(".").sort(), s = f.event.special[m] || {}, m = (g ? s.delegateType : s.bindType) || m, s = f.event.special[m] || {}, o = f.extend({type: m, origType: l[1], data: e, handler: d, guid: d.guid, selector: g, namespace: n.join(".")}, p), g && (o.quick = J(g), !o.quick && f.expr.match.POS.test(g) && (o.isPositional = !0)), r = j[m];
-                    if (!r) {
-                        r = j[m] = [], r.delegateCount = 0;
-                        if (!s.setup || s.setup.call(a, e, n, i) === !1)
-                            a.addEventListener ? a.addEventListener(m, i, !1) : a.attachEvent && a.attachEvent("on" + m, i)
-                    }
-                    s.add && (s.add.call(a, o), o.handler.guid || (o.handler.guid = d.guid)), g ? r.splice(r.delegateCount++, 0, o) : r.push(o), f.event.global[m] = !0
-                }
-                a = null
-            }
-        }, global: {}, remove: function (a, b, c, d) {
-            var e = f.hasData(a) && f._data(a), g, h, i, j, k, l, m, n, o, p, q;
-            if (!!e && !!(m = e.events)) {
-                b = L(b || "").split(" ");
-                for (g = 0; g < b.length; g++) {
-                    h = E.exec(b[g]) || [], i = h[1], j = h[2];
-                    if (!i) {
-                        j = j ? "." + j : "";
-                        for (l in m)
-                            f.event.remove(a, l + j, c, d);
-                        return
-                    }
-                    n = f.event.special[i] || {}, i = (d ? n.delegateType : n.bindType) || i, p = m[i] || [], k = p.length, j = j ? new RegExp("(^|\\.)" + j.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-                    if (c || j || d || n.remove)
-                        for (l = 0; l < p.length; l++) {
-                            q = p[l];
-                            if (!c || c.guid === q.guid)
-                                if (!j || j.test(q.namespace))
-                                    if (!d || d === q.selector || d === "**" && q.selector)
-                                        p.splice(l--, 1), q.selector && p.delegateCount--, n.remove && n.remove.call(a, q)
-                        }
-                    else
-                        p.length = 0;
-                    p.length === 0 && k !== p.length && ((!n.teardown || n.teardown.call(a, j) === !1) && f.removeEvent(a, i, e.handle), delete m[i])
-                }
-                f.isEmptyObject(m) && (o = e.handle, o && (o.elem = null), f.removeData(a, ["events", "handle"], !0))
-            }
-        }, customEvent: {getData: !0, setData: !0, changeData: !0}, trigger: function (c, d, e, g) {
-            if (!e || e.nodeType !== 3 && e.nodeType !== 8) {
-                var h = c.type || c, i = [], j, k, l, m, n, o, p, q, r, s;
-                h.indexOf("!") >= 0 && (h = h.slice(0, -1), k = !0), h.indexOf(".") >= 0 && (i = h.split("."), h = i.shift(), i.sort());
-                if ((!e || f.event.customEvent[h]) && !f.event.global[h])
-                    return;
-                c = typeof c == "object" ? c[f.expando] ? c : new f.Event(h, c) : new f.Event(h), c.type = h, c.isTrigger = !0, c.exclusive = k, c.namespace = i.join("."), c.namespace_re = c.namespace ? new RegExp("(^|\\.)" + i.join("\\.(?:.*\\.)?") + "(\\.|$)") : null, o = h.indexOf(":") < 0 ? "on" + h : "", (g || !e) && c.preventDefault();
-                if (!e) {
-                    j = f.cache;
-                    for (l in j)
-                        j[l].events && j[l].events[h] && f.event.trigger(c, d, j[l].handle.elem, !0);
-                    return
-                }
-                c.result = b, c.target || (c.target = e), d = d != null ? f.makeArray(d) : [], d.unshift(c), p = f.event.special[h] || {};
-                if (p.trigger && p.trigger.apply(e, d) === !1)
-                    return;
-                r = [[e, p.bindType || h]];
-                if (!g && !p.noBubble && !f.isWindow(e)) {
-                    s = p.delegateType || h, n = null;
-                    for (m = e.parentNode; m; m = m.parentNode)
-                        r.push([m, s]), n = m;
-                    n && n === e.ownerDocument && r.push([n.defaultView || n.parentWindow || a, s])
-                }
-                for (l = 0; l < r.length; l++) {
-                    m = r[l][0], c.type = r[l][1], q = (f._data(m, "events") || {})[c.type] && f._data(m, "handle"), q && q.apply(m, d), q = o && m[o], q && f.acceptData(m) && q.apply(m, d);
-                    if (c.isPropagationStopped())
-                        break
-                }
-                c.type = h, c.isDefaultPrevented() || (!p._default || p._default.apply(e.ownerDocument, d) === !1) && (h !== "click" || !f.nodeName(e, "a")) && f.acceptData(e) && o && e[h] && (h !== "focus" && h !== "blur" || c.target.offsetWidth !== 0) && !f.isWindow(e) && (n = e[o], n && (e[o] = null), f.event.triggered = h, e[h](), f.event.triggered = b, n && (e[o] = n));
-                return c.result
-            }
-        }, dispatch: function (c) {
-            c = f.event.fix(c || a.event);
-            var d = (f._data(this, "events") || {})[c.type] || [], e = d.delegateCount, g = [].slice.call(arguments, 0), h = !c.exclusive && !c.namespace, i = (f.event.special[c.type] || {}).handle, j = [], k, l, m, n, o, p, q, r, s, t, u;
-            g[0] = c, c.delegateTarget = this;
-            if (e && !c.target.disabled && (!c.button || c.type !== "click"))
-                for (m = c.target; m != this; m = m.parentNode || this) {
-                    o = {}, q = [];
-                    for (k = 0; k < e; k++)
-                        r = d[k], s = r.selector, t = o[s], r.isPositional ? t = (t || (o[s] = f(s))).index(m) >= 0 : t === b && (t = o[s] = r.quick ? K(m, r.quick) : f(m).is(s)), t && q.push(r);
-                    q.length && j.push({elem: m, matches: q})
-                }
-            d.length > e && j.push({elem: this, matches: d.slice(e)});
-            for (k = 0; k < j.length && !c.isPropagationStopped(); k++) {
-                p = j[k], c.currentTarget = p.elem;
-                for (l = 0; l < p.matches.length && !c.isImmediatePropagationStopped(); l++) {
-                    r = p.matches[l];
-                    if (h || !c.namespace && !r.namespace || c.namespace_re && c.namespace_re.test(r.namespace))
-                        c.data = r.data, c.handleObj = r, n = (i || r.handler).apply(p.elem, g), n !== b && (c.result = n, n === !1 && (c.preventDefault(), c.stopPropagation()))
-                }
-            }
-            return c.result
-        }, props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: {props: "char charCode key keyCode".split(" "), filter: function (a, b) {
-                a.which == null && (a.which = b.charCode != null ? b.charCode : b.keyCode);
-                return a
-            }}, mouseHooks: {props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "), filter: function (a, d) {
-                var e, f, g, h = d.button, i = d.fromElement;
-                a.pageX == null && d.clientX != null && (e = a.target.ownerDocument || c, f = e.documentElement, g = e.body, a.pageX = d.clientX + (f && f.scrollLeft || g && g.scrollLeft || 0) - (f && f.clientLeft || g && g.clientLeft || 0), a.pageY = d.clientY + (f && f.scrollTop || g && g.scrollTop || 0) - (f && f.clientTop || g && g.clientTop || 0)), !a.relatedTarget && i && (a.relatedTarget = i === a.target ? d.toElement : i), !a.which && h !== b && (a.which = h & 1 ? 1 : h & 2 ? 3 : h & 4 ? 2 : 0);
-                return a
-            }}, fix: function (a) {
-            if (a[f.expando])
-                return a;
-            var d, e, g = a, h = f.event.fixHooks[a.type] || {}, i = h.props ? this.props.concat(h.props) : this.props;
-            a = f.Event(g);
-            for (d = i.length; d; )
-                e = i[--d], a[e] = g[e];
-            a.target || (a.target = g.srcElement || c), a.target.nodeType === 3 && (a.target = a.target.parentNode), a.metaKey === b && (a.metaKey = a.ctrlKey);
-            return h.filter ? h.filter(a, g) : a
-        }, special: {ready: {setup: f.bindReady}, focus: {delegateType: "focusin", noBubble: !0}, blur: {delegateType: "focusout", noBubble: !0}, beforeunload: {setup: function (a, b, c) {
-                    f.isWindow(this) && (this.onbeforeunload = c)
-                }, teardown: function (a, b) {
-                    this.onbeforeunload === b && (this.onbeforeunload = null)
-                }}}, simulate: function (a, b, c, d) {
-            var e = f.extend(new f.Event, c, {type: a, isSimulated: !0, originalEvent: {}});
-            d ? f.event.trigger(e, null, b) : f.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault()
-        }}, f.event.handle = f.event.dispatch, f.removeEvent = c.removeEventListener ? function (a, b, c) {
-        a.removeEventListener && a.removeEventListener(b, c, !1)
-    } : function (a, b, c) {
-        a.detachEvent && a.detachEvent("on" + b, c)
-    }, f.Event = function (a, b) {
-        if (!(this instanceof f.Event))
-            return new f.Event(a, b);
-        a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || a.returnValue === !1 || a.getPreventDefault && a.getPreventDefault() ? N : M) : this.type = a, b && f.extend(this, b), this.timeStamp = a && a.timeStamp || f.now(), this[f.expando] = !0
-    }, f.Event.prototype = {preventDefault: function () {
-            this.isDefaultPrevented = N;
-            var a = this.originalEvent;
-            !a || (a.preventDefault ? a.preventDefault() : a.returnValue = !1)
-        }, stopPropagation: function () {
-            this.isPropagationStopped = N;
-            var a = this.originalEvent;
-            !a || (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0)
-        }, stopImmediatePropagation: function () {
-            this.isImmediatePropagationStopped = N, this.stopPropagation()
-        }, isDefaultPrevented: M, isPropagationStopped: M, isImmediatePropagationStopped: M}, f.each({mouseenter: "mouseover", mouseleave: "mouseout"}, function (a, b) {
-        f.event.special[a] = f.event.special[b] = {delegateType: b, bindType: b, handle: function (a) {
-                var b = this, c = a.relatedTarget, d = a.handleObj, e = d.selector, g, h;
-                if (!c || d.origType === a.type || c !== b && !f.contains(b, c))
-                    g = a.type, a.type = d.origType, h = d.handler.apply(this, arguments), a.type = g;
-                return h
-            }}
-    }), f.support.submitBubbles || (f.event.special.submit = {setup: function () {
-            if (f.nodeName(this, "form"))
-                return!1;
-            f.event.add(this, "click._submit keypress._submit", function (a) {
-                var c = a.target, d = f.nodeName(c, "input") || f.nodeName(c, "button") ? c.form : b;
-                d && !d._submit_attached && (f.event.add(d, "submit._submit", function (a) {
-                    this.parentNode && f.event.simulate("submit", this.parentNode, a, !0)
-                }), d._submit_attached = !0)
-            })
-        }, teardown: function () {
-            if (f.nodeName(this, "form"))
-                return!1;
-            f.event.remove(this, "._submit")
-        }}), f.support.changeBubbles || (f.event.special.change = {setup: function () {
-            if (A.test(this.nodeName)) {
-                if (this.type === "checkbox" || this.type === "radio")
-                    f.event.add(this, "propertychange._change", function (a) {
-                        a.originalEvent.propertyName === "checked" && (this._just_changed = !0)
-                    }), f.event.add(this, "click._change", function (a) {
-                        this._just_changed && (this._just_changed = !1, f.event.simulate("change", this, a, !0))
-                    });
-                return!1
-            }
-            f.event.add(this, "beforeactivate._change", function (a) {
-                var b = a.target;
-                A.test(b.nodeName) && !b._change_attached && (f.event.add(b, "change._change", function (a) {
-                    this.parentNode && !a.isSimulated && f.event.simulate("change", this.parentNode, a, !0)
-                }), b._change_attached = !0)
-            })
-        }, handle: function (a) {
-            var b = a.target;
-            if (this !== b || a.isSimulated || a.isTrigger || b.type !== "radio" && b.type !== "checkbox")
-                return a.handleObj.handler.apply(this, arguments)
-        }, teardown: function () {
-            f.event.remove(this, "._change");
-            return A.test(this.nodeName)
-        }}), f.support.focusinBubbles || f.each({focus: "focusin", blur: "focusout"}, function (a, b) {
-        var d = 0, e = function (a) {
-            f.event.simulate(b, a.target, f.event.fix(a), !0)
-        };
-        f.event.special[b] = {setup: function () {
-                d++ === 0 && c.addEventListener(a, e, !0)
-            }, teardown: function () {
-                --d === 0 && c.removeEventListener(a, e, !0)
-            }}
-    }), f.fn.extend({on: function (a, c, d, e, g) {
-            var h, i;
-            if (typeof a == "object") {
-                typeof c != "string" && (d = c, c = b);
-                for (i in a)
-                    this.on(i, c, d, a[i], g);
-                return this
-            }
-            d == null && e == null ? (e = c, d = c = b) : e == null && (typeof c == "string" ? (e = d, d = b) : (e = d, d = c, c = b));
-            if (e === !1)
-                e = M;
-            else if (!e)
-                return this;
-            g === 1 && (h = e, e = function (a) {
-                f().off(a);
-                return h.apply(this, arguments)
-            }, e.guid = h.guid || (h.guid = f.guid++));
-            return this.each(function () {
-                f.event.add(this, a, e, d, c)
-            })
-        }, one: function (a, b, c, d) {
-            return this.on.call(this, a, b, c, d, 1)
-        }, off: function (a, c, d) {
-            if (a && a.preventDefault && a.handleObj) {
-                var e = a.handleObj;
-                f(a.delegateTarget).off(e.namespace ? e.type + "." + e.namespace : e.type, e.selector, e.handler);
-                return this
-            }
-            if (typeof a == "object") {
-                for (var g in a)
-                    this.off(g, c, a[g]);
-                return this
-            }
-            if (c === !1 || typeof c == "function")
-                d = c, c = b;
-            d === !1 && (d = M);
-            return this.each(function () {
-                f.event.remove(this, a, d, c)
-            })
-        }, bind: function (a, b, c) {
-            return this.on(a, null, b, c)
-        }, unbind: function (a, b) {
-            return this.off(a, null, b)
-        }, live: function (a, b, c) {
-            f(this.context).on(a, this.selector, b, c);
-            return this
-        }, die: function (a, b) {
-            f(this.context).off(a, this.selector || "**", b);
-            return this
-        }, delegate: function (a, b, c, d) {
-            return this.on(b, a, c, d)
-        }, undelegate: function (a, b, c) {
-            return arguments.length == 1 ? this.off(a, "**") : this.off(b, a, c)
-        }, trigger: function (a, b) {
-            return this.each(function () {
-                f.event.trigger(a, b, this)
-            })
-        }, triggerHandler: function (a, b) {
-            if (this[0])
-                return f.event.trigger(a, b, this[0], !0)
-        }, toggle: function (a) {
-            var b = arguments, c = a.guid || f.guid++, d = 0, e = function (c) {
-                var e = (f._data(this, "lastToggle" + a.guid) || 0) % d;
-                f._data(this, "lastToggle" + a.guid, e + 1), c.preventDefault();
-                return b[e].apply(this, arguments) || !1
-            };
-            e.guid = c;
-            while (d < b.length)
-                b[d++].guid = c;
-            return this.click(e)
-        }, hover: function (a, b) {
-            return this.mouseenter(a).mouseleave(b || a)
-        }}), f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function (a, b) {
-        f.fn[b] = function (a, c) {
-            c == null && (c = a, a = null);
-            return arguments.length > 0 ? this.bind(b, a, c) : this.trigger(b)
-        }, f.attrFn && (f.attrFn[b] = !0), G.test(b) && (f.event.fixHooks[b] = f.event.keyHooks), H.test(b) && (f.event.fixHooks[b] = f.event.mouseHooks)
-    }), function () {
-        function x(a, b, c, e, f, g) {
-            for (var h = 0, i = e.length; h < i; h++) {
-                var j = e[h];
-                if (j) {
-                    var k = !1;
-                    j = j[a];
-                    while (j) {
-                        if (j[d] === c) {
-                            k = e[j.sizset];
-                            break
-                        }
-                        if (j.nodeType === 1) {
-                            g || (j[d] = c, j.sizset = h);
-                            if (typeof b != "string") {
-                                if (j === b) {
-                                    k = !0;
-                                    break
-                                }
-                            } else if (m.filter(b, [j]).length > 0) {
-                                k = j;
-                                break
-                            }
-                        }
-                        j = j[a]
-                    }
-                    e[h] = k
-                }
-            }
-        }
-        function w(a, b, c, e, f, g) {
-            for (var h = 0, i = e.length; h < i; h++) {
-                var j = e[h];
-                if (j) {
-                    var k = !1;
-                    j = j[a];
-                    while (j) {
-                        if (j[d] === c) {
-                            k = e[j.sizset];
-                            break
-                        }
-                        j.nodeType === 1 && !g && (j[d] = c, j.sizset = h);
-                        if (j.nodeName.toLowerCase() === b) {
-                            k = j;
-                            break
-                        }
-                        j = j[a]
-                    }
-                    e[h] = k
-                }
-            }
-        }
-        var a = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, d = "sizcache" + (Math.random() + "").replace(".", ""), e = 0, g = Object.prototype.toString, h = !1, i = !0, j = /\\/g, k = /\r\n/g, l = /\W/;
-        [0, 0].sort(function () {
-            i = !1;
-            return 0
-        });
-        var m = function (b, d, e, f) {
-            e = e || [], d = d || c;
-            var h = d;
-            if (d.nodeType !== 1 && d.nodeType !== 9)
-                return[];
-            if (!b || typeof b != "string")
-                return e;
-            var i, j, k, l, n, q, r, t, u = !0, v = m.isXML(d), w = [], x = b;
-            do {
-                a.exec(""), i = a.exec(x);
-                if (i) {
-                    x = i[3], w.push(i[1]);
-                    if (i[2]) {
-                        l = i[3];
-                        break
-                    }
-                }
-            } while (i);
-            if (w.length > 1 && p.exec(b))
-                if (w.length === 2 && o.relative[w[0]])
-                    j = y(w[0] + w[1], d, f);
-                else {
-                    j = o.relative[w[0]] ? [d] : m(w.shift(), d);
-                    while (w.length)
-                        b = w.shift(), o.relative[b] && (b += w.shift()), j = y(b, j, f)
-                }
-            else {
-                !f && w.length > 1 && d.nodeType === 9 && !v && o.match.ID.test(w[0]) && !o.match.ID.test(w[w.length - 1]) && (n = m.find(w.shift(), d, v), d = n.expr ? m.filter(n.expr, n.set)[0] : n.set[0]);
-                if (d) {
-                    n = f ? {expr: w.pop(), set: s(f)} : m.find(w.pop(), w.length === 1 && (w[0] === "~" || w[0] === "+") && d.parentNode ? d.parentNode : d, v), j = n.expr ? m.filter(n.expr, n.set) : n.set, w.length > 0 ? k = s(j) : u = !1;
-                    while (w.length)
-                        q = w.pop(), r = q, o.relative[q] ? r = w.pop() : q = "", r == null && (r = d), o.relative[q](k, r, v)
-                } else
-                    k = w = []
-            }
-            k || (k = j), k || m.error(q || b);
-            if (g.call(k) === "[object Array]")
-                if (!u)
-                    e.push.apply(e, k);
-                else if (d && d.nodeType === 1)
-                    for (t = 0; k[t] != null; t++)
-                        k[t] && (k[t] === !0 || k[t].nodeType === 1 && m.contains(d, k[t])) && e.push(j[t]);
-                else
-                    for (t = 0; k[t] != null; t++)
-                        k[t] && k[t].nodeType === 1 && e.push(j[t]);
-            else
-                s(k, e);
-            l && (m(l, h, e, f), m.uniqueSort(e));
-            return e
-        };
-        m.uniqueSort = function (a) {
-            if (u) {
-                h = i, a.sort(u);
-                if (h)
-                    for (var b = 1; b < a.length; b++)
-                        a[b] === a[b - 1] && a.splice(b--, 1)
-            }
-            return a
-        }, m.matches = function (a, b) {
-            return m(a, null, null, b)
-        }, m.matchesSelector = function (a, b) {
-            return m(b, null, null, [a]).length > 0
-        }, m.find = function (a, b, c) {
-            var d, e, f, g, h, i;
-            if (!a)
-                return[];
-            for (e = 0, f = o.order.length; e < f; e++) {
-                h = o.order[e];
-                if (g = o.leftMatch[h].exec(a)) {
-                    i = g[1], g.splice(1, 1);
-                    if (i.substr(i.length - 1) !== "\\") {
-                        g[1] = (g[1] || "").replace(j, ""), d = o.find[h](g, b, c);
-                        if (d != null) {
-                            a = a.replace(o.match[h], "");
-                            break
-                        }
-                    }
-                }
-            }
-            d || (d = typeof b.getElementsByTagName != "undefined" ? b.getElementsByTagName("*") : []);
-            return{set: d, expr: a}
-        }, m.filter = function (a, c, d, e) {
-            var f, g, h, i, j, k, l, n, p, q = a, r = [], s = c, t = c && c[0] && m.isXML(c[0]);
-            while (a && c.length) {
-                for (h in o.filter)
-                    if ((f = o.leftMatch[h].exec(a)) != null && f[2]) {
-                        k = o.filter[h], l = f[1], g = !1, f.splice(1, 1);
-                        if (l.substr(l.length - 1) === "\\")
-                            continue;
-                        s === r && (r = []);
-                        if (o.preFilter[h]) {
-                            f = o.preFilter[h](f, s, d, r, e, t);
-                            if (!f)
-                                g = i = !0;
-                            else if (f === !0)
-                                continue
-                        }
-                        if (f)
-                            for (n = 0; (j = s[n]) != null; n++)
-                                j && (i = k(j, f, n, s), p = e ^ i, d && i != null ? p ? g = !0 : s[n] = !1 : p && (r.push(j), g = !0));
-                        if (i !== b) {
-                            d || (s = r), a = a.replace(o.match[h], "");
-                            if (!g)
-                                return[];
-                            break
-                        }
-                    }
-                if (a === q)
-                    if (g == null)
-                        m.error(a);
-                    else
-                        break;
-                q = a
-            }
-            return s
-        }, m.error = function (a) {
-            throw"Syntax error, unrecognized expression: " + a
-        };
-        var n = m.getText = function (a) {
-            var b, c, d = a.nodeType, e = "";
-            if (d) {
-                if (d === 1) {
-                    if (typeof a.textContent == "string")
-                        return a.textContent;
-                    if (typeof a.innerText == "string")
-                        return a.innerText.replace(k, "");
-                    for (a = a.firstChild; a; a = a.nextSibling)
-                        e += n(a)
-                } else if (d === 3 || d === 4)
-                    return a.nodeValue
-            } else
-                for (b = 0; c = a[b]; b++)
-                    c.nodeType !== 8 && (e += n(c));
-            return e
-        }, o = m.selectors = {order: ["ID", "NAME", "TAG"], match: {ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/}, leftMatch: {}, attrMap: {"class": "className", "for": "htmlFor"}, attrHandle: {href: function (a) {
-                    return a.getAttribute("href")
-                }, type: function (a) {
-                    return a.getAttribute("type")
-                }}, relative: {"+": function (a, b) {
-                    var c = typeof b == "string", d = c && !l.test(b), e = c && !d;
-                    d && (b = b.toLowerCase());
-                    for (var f = 0, g = a.length, h; f < g; f++)
-                        if (h = a[f]) {
-                            while ((h = h.previousSibling) && h.nodeType !== 1)
-                                ;
-                            a[f] = e || h && h.nodeName.toLowerCase() === b ? h || !1 : h === b
-                        }
-                    e && m.filter(b, a, !0)
-                }, ">": function (a, b) {
-                    var c, d = typeof b == "string", e = 0, f = a.length;
-                    if (d && !l.test(b)) {
-                        b = b.toLowerCase();
-                        for (; e < f; e++) {
-                            c = a[e];
-                            if (c) {
-                                var g = c.parentNode;
-                                a[e] = g.nodeName.toLowerCase() === b ? g : !1
-                            }
-                        }
-                    } else {
-                        for (; e < f; e++)
-                            c = a[e], c && (a[e] = d ? c.parentNode : c.parentNode === b);
-                        d && m.filter(b, a, !0)
-                    }
-                }, "": function (a, b, c) {
-                    var d, f = e++, g = x;
-                    typeof b == "string" && !l.test(b) && (b = b.toLowerCase(), d = b, g = w), g("parentNode", b, f, a, d, c)
-                }, "~": function (a, b, c) {
-                    var d, f = e++, g = x;
-                    typeof b == "string" && !l.test(b) && (b = b.toLowerCase(), d = b, g = w), g("previousSibling", b, f, a, d, c)
-                }}, find: {ID: function (a, b, c) {
-                    if (typeof b.getElementById != "undefined" && !c) {
-                        var d = b.getElementById(a[1]);
-                        return d && d.parentNode ? [d] : []
-                    }
-                }, NAME: function (a, b) {
-                    if (typeof b.getElementsByName != "undefined") {
-                        var c = [], d = b.getElementsByName(a[1]);
-                        for (var e = 0, f = d.length; e < f; e++)
-                            d[e].getAttribute("name") === a[1] && c.push(d[e]);
-                        return c.length === 0 ? null : c
-                    }
-                }, TAG: function (a, b) {
-                    if (typeof b.getElementsByTagName != "undefined")
-                        return b.getElementsByTagName(a[1])
-                }}, preFilter: {CLASS: function (a, b, c, d, e, f) {
-                    a = " " + a[1].replace(j, "") + " ";
-                    if (f)
-                        return a;
-                    for (var g = 0, h; (h = b[g]) != null; g++)
-                        h && (e ^ (h.className && (" " + h.className + " ").replace(/[\t\n\r]/g, " ").indexOf(a) >= 0) ? c || d.push(h) : c && (b[g] = !1));
-                    return!1
-                }, ID: function (a) {
-                    return a[1].replace(j, "")
-                }, TAG: function (a, b) {
-                    return a[1].replace(j, "").toLowerCase()
-                }, CHILD: function (a) {
-                    if (a[1] === "nth") {
-                        a[2] || m.error(a[0]), a[2] = a[2].replace(/^\+|\s*/g, "");
-                        var b = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2] === "even" && "2n" || a[2] === "odd" && "2n+1" || !/\D/.test(a[2]) && "0n+" + a[2] || a[2]);
-                        a[2] = b[1] + (b[2] || 1) - 0, a[3] = b[3] - 0
-                    } else
-                        a[2] && m.error(a[0]);
-                    a[0] = e++;
-                    return a
-                }, ATTR: function (a, b, c, d, e, f) {
-                    var g = a[1] = a[1].replace(j, "");
-                    !f && o.attrMap[g] && (a[1] = o.attrMap[g]), a[4] = (a[4] || a[5] || "").replace(j, ""), a[2] === "~=" && (a[4] = " " + a[4] + " ");
-                    return a
-                }, PSEUDO: function (b, c, d, e, f) {
-                    if (b[1] === "not")
-                        if ((a.exec(b[3]) || "").length > 1 || /^\w/.test(b[3]))
-                            b[3] = m(b[3], null, null, c);
-                        else {
-                            var g = m.filter(b[3], c, d, !0 ^ f);
-                            d || e.push.apply(e, g);
-                            return!1
-                        }
-                    else if (o.match.POS.test(b[0]) || o.match.CHILD.test(b[0]))
-                        return!0;
-                    return b
-                }, POS: function (a) {
-                    a.unshift(!0);
-                    return a
-                }}, filters: {enabled: function (a) {
-                    return a.disabled === !1 && a.type !== "hidden"
-                }, disabled: function (a) {
-                    return a.disabled === !0
-                }, checked: function (a) {
-                    return a.checked === !0
-                }, selected: function (a) {
-                    a.parentNode && a.parentNode.selectedIndex;
-                    return a.selected === !0
-                }, parent: function (a) {
-                    return!!a.firstChild
-                }, empty: function (a) {
-                    return!a.firstChild
-                }, has: function (a, b, c) {
-                    return!!m(c[3], a).length
-                }, header: function (a) {
-                    return/h\d/i.test(a.nodeName)
-                }, text: function (a) {
-                    var b = a.getAttribu

<TRUNCATED>

[38/50] [abbrv] incubator-nifi git commit: NIFI-27: - Upgrading jQuery and jQuery UI. - Replacing all instances of Deferred.then with Deferred.done/fail due to API change introduced in 1.8. - Restoring line returns between public methods. - Upgrading jqu

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/bulletin-board/nf-bulletin-board.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/bulletin-board/nf-bulletin-board.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/bulletin-board/nf-bulletin-board.js
index 864eb70..f181016 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/bulletin-board/nf-bulletin-board.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/bulletin-board/nf-bulletin-board.js
@@ -112,14 +112,14 @@ nf.BulletinBoard = (function () {
             type: 'GET',
             url: config.urls.controllerAbout,
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             var aboutDetails = response.about;
             var bulletinBoardTitle = aboutDetails.title + ' Bulletin Board';
 
             // set the document title and the about title
             document.title = bulletinBoardTitle;
             $('#bulletin-board-header-text').text(bulletinBoardTitle);
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
 
         // get the banners if we're not in the shell
         var loadBanners = $.Deferred(function (deferred) {
@@ -128,7 +128,7 @@ nf.BulletinBoard = (function () {
                     type: 'GET',
                     url: config.urls.banners,
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     // ensure the banners response is specified
                     if (nf.Common.isDefinedAndNotNull(response.banners)) {
                         if (nf.Common.isDefinedAndNotNull(response.banners.headerText) && response.banners.headerText !== '') {
@@ -160,7 +160,7 @@ nf.BulletinBoard = (function () {
                     }
 
                     deferred.resolve();
-                }, function (xhr, status, error) {
+                }).fail(function (xhr, status, error) {
                     nf.Common.handleAjaxError(xhr, status, error);
                     deferred.reject();
                 });
@@ -170,9 +170,9 @@ nf.BulletinBoard = (function () {
         });
 
         return $.Deferred(function (deferred) {
-            $.when(getTitle, loadBanners).then(function () {
+            $.when(getTitle, loadBanners).done(function () {
                 deferred.resolve();
-            }, function () {
+            }).fail(function () {
                 deferred.reject();
             });
         }).promise();
@@ -294,7 +294,7 @@ nf.BulletinBoard = (function () {
             url: config.urls.bulletinBoard,
             data: data,
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             // ensure the bulletin board was specified
             if (nf.Common.isDefinedAndNotNull(response.bulletinBoard)) {
                 var bulletinBoard = response.bulletinBoard;
@@ -369,7 +369,7 @@ nf.BulletinBoard = (function () {
                     bulletinContainer.prepend('<div class="bulletin-action">&#8230;</div>');
                 }
             }
-        }, function (xhr, status, error) {
+        }).fail(function (xhr, status, error) {
             // likely caused by a invalid regex
             if (xhr.status === 404) {
                 $('#bulletin-error-message').text(xhr.responseText).show();

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-actions.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-actions.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-actions.js
index f73545d..dc8ca31 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-actions.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-actions.js
@@ -40,10 +40,10 @@ nf.Actions = (function () {
             url: uri,
             data: data,
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             // update the revision
             nf.Client.setRevision(response.revision);
-        }, function (xhr, status, error) {
+        }).fail(function (xhr, status, error) {
             if (xhr.status === 400 || xhr.status === 404 || xhr.status === 409) {
                 nf.Dialog.showOkDialog({
                     dialogContent: nf.Common.escapeHtml(xhr.responseText),
@@ -86,12 +86,14 @@ nf.Actions = (function () {
                 nf.CanvasUtils.enterGroup(selectionData.component.id);
             }
         },
+        
         /**
          * Exits the current process group but entering the parent group.
          */
         leaveGroup: function () {
             nf.CanvasUtils.enterGroup(nf.Canvas.getParentGroupId());
         },
+        
         /**
          * Refresh the flow of the remote process group in the specified selection.
          * 
@@ -153,6 +155,7 @@ nf.Actions = (function () {
                 poll(1);
             }
         },
+        
         /**
          * Opens the remote process group in the specified selection.
          * 
@@ -172,6 +175,7 @@ nf.Actions = (function () {
                 }
             }
         },
+        
         /**
          * Shows and selects the source of the connection in the specified selection.
          * 
@@ -190,6 +194,7 @@ nf.Actions = (function () {
                 }
             }
         },
+        
         /**
          * Shows and selects the destination of the connection in the specified selection.
          * 
@@ -208,6 +213,7 @@ nf.Actions = (function () {
                 }
             }
         },
+        
         /**
          * Shows the downstream components from the specified selection.
          * 
@@ -230,6 +236,7 @@ nf.Actions = (function () {
                 }
             }
         },
+        
         /**
          * Shows the upstream components from the specified selection.
          * 
@@ -252,6 +259,7 @@ nf.Actions = (function () {
                 }
             }
         },
+        
         /**
          * Shows and selects the component in the specified selection.
          * 
@@ -268,6 +276,7 @@ nf.Actions = (function () {
                 nf.Actions.center(selection);
             }
         },
+        
         /**
          * Selects all components in the specified selection.
          * 
@@ -276,12 +285,14 @@ nf.Actions = (function () {
         select: function (selection) {
             selection.classed('selected', true);
         },
+        
         /**
          * Selects all components.
          */
         selectAll: function () {
             nf.Actions.select(d3.selectAll('g.component, g.connection'));
         },
+        
         /**
          * Centers the component in the specified selection.
          * 
@@ -331,6 +342,7 @@ nf.Actions = (function () {
                 });
             }
         },
+        
         /**
          * Enables all eligible selected components.
          */
@@ -360,6 +372,7 @@ nf.Actions = (function () {
                 });
             }
         },
+        
         /**
          * Disables all eligible selected components.
          */
@@ -389,6 +402,7 @@ nf.Actions = (function () {
                 });
             }
         },
+        
         /**
          * Starts the components in the specified selection.
          * 
@@ -443,6 +457,7 @@ nf.Actions = (function () {
                 }
             }
         },
+        
         /**
          * Stops the components in the specified selection.
          * 
@@ -496,6 +511,7 @@ nf.Actions = (function () {
                 }
             }
         },
+        
         /**
          * Enables transmission for the components in the specified selection.
          * 
@@ -513,6 +529,7 @@ nf.Actions = (function () {
                 });
             });
         },
+        
         /**
          * Disables transmission for the components in the specified selection.
          * 
@@ -530,6 +547,7 @@ nf.Actions = (function () {
                 });
             });
         },
+        
         /**
          * Shows the configuration dialog for the specified selection.
          * 
@@ -557,6 +575,7 @@ nf.Actions = (function () {
                 }
             }
         },
+        
         // Defines an action for showing component details (like configuration but read only).
         showDetails: function (selection) {
             if (selection.size() === 1) {
@@ -579,6 +598,7 @@ nf.Actions = (function () {
                 }
             }
         },
+        
         /**
          * Shows the usage documentation for the component in the specified selection.
          * 
@@ -592,6 +612,7 @@ nf.Actions = (function () {
                 }));
             }
         },
+        
         /**
          * Shows the stats for the specified selection.
          * 
@@ -623,6 +644,7 @@ nf.Actions = (function () {
                 }
             }
         },
+        
         /**
          * Opens the remote ports dialog for the remote process group in the specified selection.
          * 
@@ -633,6 +655,7 @@ nf.Actions = (function () {
                 nf.RemoteProcessGroupPorts.showPorts(selection);
             }
         },
+        
         /**
          * Hides and open cancellable dialogs.
          */
@@ -646,12 +669,14 @@ nf.Actions = (function () {
                 }
             });
         },
+        
         /**
          * Reloads the status for the entire canvas (components and flow.)
          */
         reloadStatus: function () {
             nf.Canvas.reloadStatus();
         },
+        
         /**
          * Deletes the component in the specified selection.
          * 
@@ -675,7 +700,7 @@ nf.Actions = (function () {
                             clientId: revision.clientId
                         }),
                         dataType: 'json'
-                    }).then(function (response) {
+                    }).done(function (response) {
                         // update the revision
                         nf.Client.setRevision(response.revision);
 
@@ -723,15 +748,15 @@ nf.Actions = (function () {
                         // refresh the birdseye/toolbar
                         nf.Birdseye.refresh();
                         nf.CanvasToolbar.refresh();
-                    }, nf.Common.handleAjaxError);
+                    }).fail(nf.Common.handleAjaxError);
                 } else {
                     // create a snippet for the specified component and link to the data flow
                     var snippetDetails = nf.Snippet.marshal(selection, true);
-                    nf.Snippet.create(snippetDetails).then(function (response) {
+                    nf.Snippet.create(snippetDetails).done(function (response) {
                         var snippet = response.snippet;
 
                         // remove the snippet, effectively removing the components
-                        nf.Snippet.remove(snippet.id).then(function () {
+                        nf.Snippet.remove(snippet.id).done(function () {
                             var components = d3.map();
 
                             // add the id to the type's array
@@ -797,7 +822,7 @@ nf.Actions = (function () {
                             // refresh the birdseye/toolbar
                             nf.Birdseye.refresh();
                             nf.CanvasToolbar.refresh();
-                        }, function (xhr, status, error) {
+                        }).fail(function (xhr, status, error) {
                             // unable to acutally remove the components so attempt to
                             // unlink and remove just the snippet - if unlinking fails
                             // just ignore
@@ -807,10 +832,11 @@ nf.Actions = (function () {
 
                             nf.Common.handleAjaxError(xhr, status, error);
                         });
-                    }, nf.Common.handleAjaxError);
+                    }).fail(nf.Common.handleAjaxError);
                 }
             }
         },
+        
         /**
          * Opens the fill color dialog for the component in the specified selection.
          * 
@@ -842,6 +868,7 @@ nf.Actions = (function () {
                 $('#fill-color-dialog').modal('show');
             }
         },
+        
         /**
          * Groups the currently selected components into a new group.
          */
@@ -865,6 +892,7 @@ nf.Actions = (function () {
                 });
             });
         },
+        
         /**
          * Creates a new template based off the currently selected components. If no components
          * are selected, a template of the entire canvas is made.
@@ -914,7 +942,7 @@ nf.Actions = (function () {
                             var snippetDetails = nf.Snippet.marshal(selection, false);
 
                             // create the snippet
-                            nf.Snippet.create(snippetDetails).then(function (response) {
+                            nf.Snippet.create(snippetDetails).done(function (response) {
                                 var snippet = response.snippet;
 
                                 // create the template
@@ -927,21 +955,21 @@ nf.Actions = (function () {
                                         snippetId: snippet.id
                                     },
                                     dataType: 'json'
-                                }).then(function () {
+                                }).done(function () {
                                     // show the confirmation dialog
                                     nf.Dialog.showOkDialog({
                                         dialogContent: "Template '" + nf.Common.escapeHtml(templateName) + "' was successfully created.",
                                         overlayBackground: false
                                     });
-                                }, nf.Common.handleAjaxError).always(function () {
+                                }).always(function () {
                                     // remove the snippet
                                     nf.Snippet.remove(snippet.id);
 
                                     // clear the template dialog fields
                                     $('#new-template-name').val('');
                                     $('#new-template-description').val('');
-                                });
-                            }, nf.Common.handleAjaxError);
+                                }).fail(nf.Common.handleAjaxError);
+                            }).fail(nf.Common.handleAjaxError);
                         }
                     }
                 }, {
@@ -956,6 +984,7 @@ nf.Actions = (function () {
             // auto focus on the template name
             $('#new-template-name').focus();
         },
+        
         /**
          * Copies the component in the specified selection.
          * 
@@ -975,6 +1004,7 @@ nf.Actions = (function () {
                 origin: origin
             });
         },
+        
         /**
          * Pastes the currently copied selection.
          * 
@@ -1009,7 +1039,7 @@ nf.Actions = (function () {
                     };
 
                     // create a snippet from the details
-                    nf.Snippet.create(data['snippet']).then(function (createResponse) {
+                    nf.Snippet.create(data['snippet']).done(function (createResponse) {
                         var snippet = createResponse.snippet;
 
                         // determine the origin of the bounding box of the copy
@@ -1024,7 +1054,7 @@ nf.Actions = (function () {
                         }
 
                         // copy the snippet to the new location
-                        nf.Snippet.copy(snippet.id, nf.Canvas.getGroupId(), origin).then(function (copyResponse) {
+                        nf.Snippet.copy(snippet.id, nf.Canvas.getGroupId(), origin).done(function (copyResponse) {
                             var snippetContents = copyResponse.contents;
 
                             // update the graph accordingly
@@ -1039,7 +1069,7 @@ nf.Actions = (function () {
 
                             // remove the original snippet
                             nf.Snippet.remove(snippet.id).fail(reject);
-                        }, function () {
+                        }).fail(function () {
                             // an error occured while performing the copy operation, reload the
                             // graph in case it was a partial success
                             nf.Canvas.reload().done(function () {
@@ -1054,7 +1084,7 @@ nf.Actions = (function () {
                             // reject the deferred
                             reject();
                         });
-                    }, reject);
+                    }).fail(reject);
                 }).promise();
 
                 // show the appropriate message is the copy fails
@@ -1067,6 +1097,7 @@ nf.Actions = (function () {
                 });
             });
         },
+        
         /**
          * Moves the connection in the specified selection to the front.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-birdseye.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-birdseye.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-birdseye.js
index 175b7c3..b409434 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-birdseye.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-birdseye.js
@@ -335,6 +335,7 @@ nf.Birdseye = (function () {
                     })
                     .call(brush);
         },
+        
         /**
          * Handles rendering of the birdseye tool.
          */

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-header.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-header.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-header.js
index 7d8b7b9..edd2000 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-header.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-header.js
@@ -103,7 +103,7 @@ nf.CanvasHeader = (function () {
 
             // setup the refresh link actions
             $('#refresh-required-link').click(function () {
-                nf.Canvas.reload().then(function () {
+                nf.Canvas.reload().done(function () {
                     // update component visibility
                     nf.Canvas.View.updateVisibility();
 
@@ -113,7 +113,7 @@ nf.CanvasHeader = (function () {
                     // hide the refresh link
                     $('#stats-last-refreshed').removeClass('alert');
                     $('#refresh-required-container').hide();
-                }, function () {
+                }).fail(function () {
                     nf.Dialog.showOkDialog({
                         dialogContent: 'Unable to refresh the current group.',
                         overlayBackground: true
@@ -126,12 +126,12 @@ nf.CanvasHeader = (function () {
                 type: 'GET',
                 url: config.urls.controllerAbout,
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var aboutDetails = response.about;
                 // set the document title and the about title
                 document.title = aboutDetails.title;
                 $('#nf-version').text(aboutDetails.version);
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
 
             // configure the about dialog
             $('#nf-about').modal({
@@ -192,7 +192,7 @@ nf.CanvasHeader = (function () {
                                             'style[background-color]': color
                                         },
                                         dataType: 'json'
-                                    }).then(function (response) {
+                                    }).done(function (response) {
                                         // update the revision
                                         nf.Client.setRevision(response.revision);
 
@@ -202,7 +202,7 @@ nf.CanvasHeader = (function () {
                                         } else {
                                             nf.Label.set(response.label);
                                         }
-                                    }, function (xhr, status, error) {
+                                    }).fail(function (xhr, status, error) {
                                         if (xhr.status === 400 || xhr.status === 404 || xhr.status === 409) {
                                             nf.Dialog.showOkDialog({
                                                 dialogContent: nf.Common.escapeHtml(xhr.responseText),

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbar.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbar.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbar.js
index ef7486f..23cb20f 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbar.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbar.js
@@ -95,6 +95,7 @@ nf.CanvasToolbar = (function () {
                 });
             }
         },
+        
         /**
          * Called when the selection changes to update the toolbar appropriately.
          */

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbox.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbox.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbox.js
index d8cccd0..530c8a2 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbox.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbox.js
@@ -394,7 +394,7 @@ nf.CanvasToolbox = (function () {
                 y: pt.y
             },
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.processor)) {
                 // update the revision
                 nf.Client.setRevision(response.revision);
@@ -410,7 +410,7 @@ nf.CanvasToolbox = (function () {
                 // update the birdseye
                 nf.Birdseye.refresh();
             }
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -481,7 +481,7 @@ nf.CanvasToolbox = (function () {
                 y: pt.y
             },
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.inputPort)) {
                 // update the revision
                 nf.Client.setRevision(response.revision);
@@ -497,7 +497,7 @@ nf.CanvasToolbox = (function () {
                 // update the birdseye
                 nf.Birdseye.refresh();
             }
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -568,7 +568,7 @@ nf.CanvasToolbox = (function () {
                 y: pt.y
             },
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.outputPort)) {
                 // update the revision
                 nf.Client.setRevision(response.revision);
@@ -584,7 +584,7 @@ nf.CanvasToolbox = (function () {
                 // update the birdseye
                 nf.Birdseye.refresh();
             }
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -608,7 +608,7 @@ nf.CanvasToolbox = (function () {
                 y: pt.y
             },
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.processGroup)) {
                 // update the revision
                 nf.Client.setRevision(response.revision);
@@ -624,7 +624,7 @@ nf.CanvasToolbox = (function () {
                 // update the birdseye
                 nf.Birdseye.refresh();
             }
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -692,7 +692,7 @@ nf.CanvasToolbox = (function () {
                 y: pt.y
             },
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.remoteProcessGroup)) {
                 // update the revision
                 nf.Client.setRevision(response.revision);
@@ -708,7 +708,7 @@ nf.CanvasToolbox = (function () {
                 // update the birdseye
                 nf.Birdseye.refresh();
             }
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -730,7 +730,7 @@ nf.CanvasToolbox = (function () {
                 y: pt.y
             },
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.funnel)) {
                 // update the revision
                 nf.Client.setRevision(response.revision);
@@ -743,7 +743,7 @@ nf.CanvasToolbox = (function () {
                 // update the birdseye
                 nf.Birdseye.refresh();
             }
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -756,7 +756,7 @@ nf.CanvasToolbox = (function () {
             type: 'GET',
             url: config.urls.templates,
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             var templates = response.templates;
             if (nf.Common.isDefinedAndNotNull(templates) && templates.length > 0) {
                 var options = [];
@@ -809,7 +809,7 @@ nf.CanvasToolbox = (function () {
                 });
             }
 
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -833,7 +833,7 @@ nf.CanvasToolbox = (function () {
                 originY: pt.y
             },
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             // update the revision
             nf.Client.setRevision(response.revision);
 
@@ -845,7 +845,7 @@ nf.CanvasToolbox = (function () {
 
             // update the birdseye
             nf.Birdseye.refresh();
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -869,7 +869,7 @@ nf.CanvasToolbox = (function () {
                 height: nf.Label.config.height
             },
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.label)) {
                 // update the revision
                 nf.Client.setRevision(response.revision);
@@ -880,7 +880,7 @@ nf.CanvasToolbox = (function () {
                 // update the birdseye
                 nf.Birdseye.refresh();
             }
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     return {
@@ -987,7 +987,7 @@ nf.CanvasToolbox = (function () {
                     type: 'GET',
                     url: config.urls.processorTypes,
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     var tagCloud = {};
                     var tags = [];
 
@@ -1090,7 +1090,7 @@ nf.CanvasToolbox = (function () {
                         processorTypesGrid.render();
                     });
                     processorTypesData.syncGridSelection(processorTypesGrid, false);
-                }, nf.Common.handleAjaxError);
+                }).fail(nf.Common.handleAjaxError);
 
                 // define the function for filtering the list
                 $('#processor-type-filter').keyup(function () {
@@ -1146,6 +1146,7 @@ nf.CanvasToolbox = (function () {
                 $('<div/>').attr('title', nf.Common.config.type.label).addClass('label-icon-disable').addClass('toolbox-icon').appendTo(toolbox);
             }
         },
+        
         /**
          * Prompts the user to enter the name for the group.
          * 
@@ -1162,9 +1163,9 @@ nf.CanvasToolbox = (function () {
                     $('#new-process-group-name').val('');
 
                     // create the group and resolve the deferred accordingly
-                    $.when(createGroup(groupName, pt)).then(function (response) {
+                    createGroup(groupName, pt).done(function (response) {
                         deferred.resolve(response.processGroup);
-                    }, function () {
+                    }).fail(function () {
                         deferred.reject();
                     });
                 };

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-utils.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-utils.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-utils.js
index 8cb2b33..00142c5 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-utils.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-utils.js
@@ -91,6 +91,7 @@ nf.CanvasUtils = (function () {
                 }
             }
         },
+        
         /**
          * Calculates the point on the specified bounding box that is closest to the
          * specified point.
@@ -151,6 +152,7 @@ nf.CanvasUtils = (function () {
                 };
             }
         },
+        
         /**
          * Shows the specified component in the specified group.
          *
@@ -165,9 +167,9 @@ nf.CanvasUtils = (function () {
                     // load a different group if necessary
                     if (groupId !== nf.Canvas.getGroupId()) {
                         nf.Canvas.setGroupId(groupId);
-                        nf.Canvas.reload().then(function () {
+                        nf.Canvas.reload().done(function () {
                             deferred.resolve();
-                        }, function () {
+                        }).fail(function () {
                             nf.Dialog.showOkDialog({
                                 dialogContent: 'Unable to load the group for the specified component.',
                                 overlayBackground: false
@@ -194,6 +196,7 @@ nf.CanvasUtils = (function () {
                 });
             }
         },
+        
         /**
          * Gets the currently selected components and connections.
          * 
@@ -221,6 +224,7 @@ nf.CanvasUtils = (function () {
             // calculate the difference between the center point and the position of this component and convert to screen space
             nf.Canvas.View.translate([(center[0] - boundingBox.x) * scale, (center[1] - boundingBox.y) * scale]);
         },
+        
         /**
          * Position the component accordingly.
          * 
@@ -236,6 +240,7 @@ nf.CanvasUtils = (function () {
                 return 'translate(' + d.component.position.x + ', ' + d.component.position.y + ')';
             });
         },
+        
         /**
          * Applies single line ellipsis to the component in the specified selection if necessary.
          * 
@@ -271,6 +276,7 @@ nf.CanvasUtils = (function () {
                 selection.text(text.substring(0, i) + String.fromCharCode(8230));
             }
         },
+        
         /**
          * Applies multiline ellipsis to the component in the specified seleciton. Text will
          * wrap for the specified number of lines. The last line will be ellipsis if necessary.
@@ -343,6 +349,7 @@ nf.CanvasUtils = (function () {
                 word = words.pop();
             }
         },
+        
         /**
          * Updates the active thread count on the specified selection.
          * 
@@ -388,6 +395,7 @@ nf.CanvasUtils = (function () {
                 selection.selectAll('text.active-thread-count, rect.active-thread-count-background').style('display', 'none');
             }
         },
+        
         /**
          * Disables the default browser behavior of following image href when control clicking.
          * 
@@ -400,6 +408,7 @@ nf.CanvasUtils = (function () {
                 }
             });
         },
+        
         /**
          * Handles component bulletins.
          * 
@@ -456,6 +465,7 @@ nf.CanvasUtils = (function () {
                 selection.selectAll('image.bulletin-icon').style('display', 'none');
             }
         },
+        
         /**
          * Adds the specified tooltip to the specified target.
          * 
@@ -473,6 +483,7 @@ nf.CanvasUtils = (function () {
                         tip.style('display', 'none');
                     });
         },
+        
         /**
          * Determines if the specified selection is a connection.
          *
@@ -481,6 +492,7 @@ nf.CanvasUtils = (function () {
         isConnection: function (selection) {
             return selection.classed('connection');
         },
+        
         /**
          * Determines if the specified selection is a remote process group.
          *
@@ -489,6 +501,7 @@ nf.CanvasUtils = (function () {
         isRemoteProcessGroup: function (selection) {
             return selection.classed('remote-process-group');
         },
+        
         /**
          * Determines if the specified selection is a processor.
          *
@@ -497,6 +510,7 @@ nf.CanvasUtils = (function () {
         isProcessor: function (selection) {
             return selection.classed('processor');
         },
+        
         /**
          * Determines if the specified selection is a label.
          *
@@ -505,6 +519,7 @@ nf.CanvasUtils = (function () {
         isLabel: function (selection) {
             return selection.classed('label');
         },
+        
         /**
          * Determines if the specified selection is an input port.
          *
@@ -513,6 +528,7 @@ nf.CanvasUtils = (function () {
         isInputPort: function (selection) {
             return selection.classed('input-port');
         },
+        
         /**
          * Determines if the specified selection is an output port.
          *
@@ -521,6 +537,7 @@ nf.CanvasUtils = (function () {
         isOutputPort: function (selection) {
             return selection.classed('output-port');
         },
+        
         /**
          * Determines if the specified selection is a process group.
          *
@@ -529,6 +546,7 @@ nf.CanvasUtils = (function () {
         isProcessGroup: function (selection) {
             return selection.classed('process-group');
         },
+        
         /**
          * Determines if the specified selection is a funnel.
          *
@@ -537,6 +555,7 @@ nf.CanvasUtils = (function () {
         isFunnel: function (selection) {
             return selection.classed('funnel');
         },
+        
         /**
          * Determines if the components in the specified selection are runnable.
          *
@@ -558,6 +577,7 @@ nf.CanvasUtils = (function () {
 
             return runnable;
         },
+        
         /**
          * Determines if the component in the specified selection is runnable.
          *
@@ -578,6 +598,7 @@ nf.CanvasUtils = (function () {
 
             return runnable;
         },
+        
         /**
          * Determines if the components in the specified selection are stoppable.
          *
@@ -599,6 +620,7 @@ nf.CanvasUtils = (function () {
 
             return stoppable;
         },
+        
         /**
          * Determines if the component in the specified selection is runnable.
          *
@@ -617,6 +639,7 @@ nf.CanvasUtils = (function () {
 
             return stoppable;
         },
+        
         /**
          * Determines if the specified selection can all start transmitting.
          *
@@ -637,6 +660,7 @@ nf.CanvasUtils = (function () {
             });
             return canStartTransmitting;
         },
+        
         /**
          * Determines if the specified selection supports starting transmission.
          *
@@ -645,6 +669,7 @@ nf.CanvasUtils = (function () {
         canStartTransmitting: function (selection) {
             return nf.CanvasUtils.isRemoteProcessGroup(selection);
         },
+        
         /**
          * Determines if the specified selection can all stop transmitting.
          *
@@ -665,6 +690,7 @@ nf.CanvasUtils = (function () {
             });
             return canStopTransmitting;
         },
+        
         /**
          * Determines if the specified selection can stop transmission.
          *
@@ -673,6 +699,7 @@ nf.CanvasUtils = (function () {
         canStopTransmitting: function (selection) {
             return nf.CanvasUtils.isRemoteProcessGroup(selection);
         },
+        
         /**
          * Determines whether the components in the specified selection are deletable.
          *
@@ -686,6 +713,7 @@ nf.CanvasUtils = (function () {
 
             return nf.CanvasUtils.supportsModification(selection);
         },
+        
         /**
          * Determines whether the specified selection is in a state to support modification.
          *
@@ -741,6 +769,7 @@ nf.CanvasUtils = (function () {
             }
             return supportsModification;
         },
+        
         /**
          * Determines the connectable type for the specified source selection.
          *
@@ -761,6 +790,7 @@ nf.CanvasUtils = (function () {
             }
             return type;
         },
+        
         /**
          * Determines the connectable type for the specified destination selection.
          *
@@ -781,6 +811,7 @@ nf.CanvasUtils = (function () {
             }
             return type;
         },
+        
         /**
          * Determines if the graph is currently in a state to copy.
          *
@@ -813,12 +844,14 @@ nf.CanvasUtils = (function () {
             // ensure everything selected is copyable
             return selection.size() === copyable.size();
         },
+        
         /**
          * Determines if something is currently pastable.
          */
         isPastable: function () {
             return nf.Clipboard.isCopied();
         },
+        
         /**
          * Persists the current user view.
          */
@@ -836,6 +869,7 @@ nf.CanvasUtils = (function () {
             // store the item
             nf.Storage.setItem(name, item);
         },
+        
         /**
          * Gets the name for this connection.
          * 
@@ -849,6 +883,7 @@ nf.CanvasUtils = (function () {
             }
             return '';
         },
+        
         /**
          * Returns the component id of the source of this processor. If the connection is attached
          * to a port in a [sub|remote] group, the component id will be that of the group. Otherwise
@@ -863,6 +898,7 @@ nf.CanvasUtils = (function () {
             }
             return sourceId;
         },
+        
         /**
          * Returns the component id of the source of this processor. If the connection is attached
          * to a port in a [sub|remote] group, the component id will be that of the group. Otherwise
@@ -877,6 +913,7 @@ nf.CanvasUtils = (function () {
             }
             return destinationId;
         },
+        
         /**
          * Attempts to restore a persisted view. Returns a flag that indicates if the
          * view was restored.
@@ -911,6 +948,7 @@ nf.CanvasUtils = (function () {
 
             return viewRestored;
         },
+        
         /**
          * Enters the specified group.
          *
@@ -944,6 +982,7 @@ nf.CanvasUtils = (function () {
                 });
             });
         },
+        
         /**
          * Gets the origin of the bounding box for the specified selection.
          *
@@ -966,6 +1005,7 @@ nf.CanvasUtils = (function () {
 
             return origin;
         },
+        
         /**
          * Moves the specified components into the specified group.
          * 
@@ -979,11 +1019,11 @@ nf.CanvasUtils = (function () {
             nf.CanvasUtils.eligibleForMove(components, group).done(function () {
                 // create a snippet for the specified components and link to the data flow
                 var snippetDetails = nf.Snippet.marshal(components, true);
-                nf.Snippet.create(snippetDetails).then(function (response) {
+                nf.Snippet.create(snippetDetails).done(function (response) {
                     var snippet = response.snippet;
 
                     // move the snippet into the target
-                    nf.Snippet.move(snippet.id, groupData.component.id).then(function () {
+                    nf.Snippet.move(snippet.id, groupData.component.id).done(function () {
                         var componentMap = d3.map();
 
                         // add the id to the type's array
@@ -1006,16 +1046,17 @@ nf.CanvasUtils = (function () {
 
                         // reload the target group
                         nf.ProcessGroup.reload(groupData.component);
-                    }, nf.Common.handleAjaxError).always(function () {
+                    }).fail(nf.Common.handleAjaxError).always(function () {
                         // unable to acutally move the components so attempt to
                         // unlink and remove just the snippet
                         nf.Snippet.unlink(snippet.id).done(function () {
                             nf.Snippet.remove(snippet.id);
                         });
                     });
-                }, nf.Common.handleAjaxError);
+                }).fail(nf.Common.handleAjaxError);
             });
         },
+        
         /**
          * Removes any dangling edges. All components are retained as well as any
          * edges whose source and destination are also retained.
@@ -1053,6 +1094,7 @@ nf.CanvasUtils = (function () {
                 }
             });
         },
+        
         /**
          * Determines if the specified selection is disconnected from other nodes.
          *
@@ -1098,6 +1140,7 @@ nf.CanvasUtils = (function () {
 
             return isDisconnected;
         },
+        
         /**
          * Ensures components are eligible to be moved. The new target can be optionally specified.
          *
@@ -1138,7 +1181,7 @@ nf.CanvasUtils = (function () {
                                     type: 'GET',
                                     url: config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getParentGroupId()) + '/connections',
                                     dataType: 'json'
-                                }).then(function (response) {
+                                }).done(function (response) {
                                     var connections = response.connections;
                                     var conflictingPorts = [];
 
@@ -1173,7 +1216,7 @@ nf.CanvasUtils = (function () {
                                         portConnectionDeferred.resolve();
                                     }
 
-                                }, function () {
+                                }).fail(function () {
                                     portConnectionDeferred.reject();
                                 });
                             }
@@ -1193,7 +1236,7 @@ nf.CanvasUtils = (function () {
                                     verbose: true
                                 },
                                 dataType: 'json'
-                            }).then(function (response) {
+                            }).done(function (response) {
                                 var processGroup = response.processGroup;
                                 var processGroupContents = processGroup.contents;
 
@@ -1224,24 +1267,24 @@ nf.CanvasUtils = (function () {
                                 } else {
                                     portNameDeferred.resolve();
                                 }
-                            }, function () {
+                            }).fail(function () {
                                 portNameDeferred.reject();
                             });
                         }).promise();
                     };
 
                     // execute the checks in order
-                    $.when(portConnectionCheck()).then(function () {
+                    portConnectionCheck().done(function () {
                         if (nf.Common.isDefinedAndNotNull(group)) {
-                            $.when(portNameCheck()).then(function () {
+                            $.when(portNameCheck()).done(function () {
                                 deferred.resolve();
-                            }, function () {
+                            }).fail(function () {
                                 deferred.reject();
                             });
                         } else {
                             deferred.resolve();
                         }
-                    }, function () {
+                    }).fail(function () {
                         deferred.reject();
                     });
                 } else {
@@ -1249,6 +1292,7 @@ nf.CanvasUtils = (function () {
                 }
             }).promise();
         },
+        
         /**
          * Determines if the component in the specified selection is a valid connection source.
          * 
@@ -1264,6 +1308,7 @@ nf.CanvasUtils = (function () {
                     nf.CanvasUtils.isRemoteProcessGroup(selection) || nf.CanvasUtils.isInputPort(selection) ||
                     nf.CanvasUtils.isFunnel(selection);
         },
+        
         /**
          * Determines if the component in the specified selection is a valid connection destination.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas.js
index e72b5c8..c4798be 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas.js
@@ -170,7 +170,7 @@ nf.Canvas = (function () {
             type: 'GET',
             url: config.urls.revision,
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.revision)) {
                 var revision = response.revision;
                 var currentRevision = nf.Client.getRevision();
@@ -187,7 +187,7 @@ nf.Canvas = (function () {
                     }
                 }
             }
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -534,7 +534,7 @@ nf.Canvas = (function () {
             type: 'GET',
             url: config.urls.banners,
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             // ensure the banners response is specified
             if (nf.Common.isDefinedAndNotNull(response.banners)) {
                 if (nf.Common.isDefinedAndNotNull(response.banners.headerText) && response.banners.headerText !== '') {
@@ -558,7 +558,7 @@ nf.Canvas = (function () {
 
             // update the graph dimensions
             updateGraphSize();
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -614,7 +614,7 @@ nf.Canvas = (function () {
             type: 'GET',
             url: config.urls.status,
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             // report the updated status
             if (nf.Common.isDefinedAndNotNull(response.controllerStatus)) {
                 var controllerStatus = response.controllerStatus;
@@ -712,7 +712,7 @@ nf.Canvas = (function () {
                     $('#has-pending-accounts').hide();
                 }
             }
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -729,7 +729,7 @@ nf.Canvas = (function () {
                 verbose: true
             },
             dataType: 'json'
-        }).then(function (processGroupResponse) {
+        }).done(function (processGroupResponse) {
             // set the revision
             nf.Client.setRevision(processGroupResponse.revision);
 
@@ -759,7 +759,7 @@ nf.Canvas = (function () {
 
             // update the toolbar
             nf.CanvasToolbar.refresh();
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -777,7 +777,7 @@ nf.Canvas = (function () {
                     recursive: false
                 },
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 // report the updated stats
                 if (nf.Common.isDefinedAndNotNull(response.processGroupStatus)) {
                     var processGroupStatus = response.processGroupStatus;
@@ -789,7 +789,7 @@ nf.Canvas = (function () {
                     $('#stats-last-refreshed').text(processGroupStatus.statsLastRefreshed);
                 }
                 deferred.resolve();
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 // if clustered, a 404 likely means the flow status at the ncm is stale
                 if (!nf.Canvas.isClustered() || xhr.status !== 404) {
                     nf.Common.handleAjaxError(xhr, status, error);
@@ -857,9 +857,9 @@ nf.Canvas = (function () {
                     }
 
                     // don't load the status until the graph is loaded
-                    reloadStatus(nf.Canvas.getGroupId()).then(function () {
+                    reloadStatus(nf.Canvas.getGroupId()).done(function () {
                         deferred.resolve(processGroupResult);
-                    }, function () {
+                    }).fail(function () {
                         deferred.reject();
                     });
                 });
@@ -871,9 +871,9 @@ nf.Canvas = (function () {
         reloadStatus: function () {
             return $.Deferred(function (deferred) {
                 // refresh the status and check any bulletins
-                $.when(reloadStatus(nf.Canvas.getGroupId()), reloadFlowStatus()).then(function () {
+                $.when(reloadStatus(nf.Canvas.getGroupId()), reloadFlowStatus()).done(function () {
                     deferred.resolve();
-                }, function () {
+                }).fail(function () {
                     deferred.reject();
                 });
             }).promise();
@@ -900,13 +900,13 @@ nf.Canvas = (function () {
                     url: config.urls.cluster
                 }).done(function (response, status, xhr) {
                     clustered = true;
-                    deferred.resolveWith(xhr, [response, status, xhr]);
+                    deferred.resolve(response, status, xhr);
                 }).fail(function (xhr, status, error) {
                     if (xhr.status === 404) {
                         clustered = false;
-                        deferred.resolveWith(xhr, ['', 'success', xhr]);
+                        deferred.resolve('', 'success', xhr);
                     } else {
-                        deferred.rejectWith(xhr, [xhr, status, error]);
+                        deferred.reject(xhr, status, error);
                     }
                 });
             }).promise();
@@ -919,7 +919,7 @@ nf.Canvas = (function () {
             });
 
             // ensure the authorities and config request is processed first
-            $.when(authoritiesXhr, configXhr).then(function (authoritiesResult, configResult) {
+            $.when(authoritiesXhr, configXhr).done(function (authoritiesResult, configResult) {
                 var authoritiesResponse = authoritiesResult[0];
                 var configResponse = configResult[0];
 
@@ -934,7 +934,7 @@ nf.Canvas = (function () {
                 var configDetails = configResponse.config;
 
                 // when both request complete, load the application
-                isClusteredRequest.then(function () {
+                isClusteredRequest.done(function () {
                     // get the auto refresh interval
                     var autoRefreshIntervalSeconds = parseInt(configDetails.autoRefreshIntervalSeconds, 10);
 
@@ -942,7 +942,7 @@ nf.Canvas = (function () {
                     secureSiteToSite = configDetails.siteToSiteSecure;
 
                     // load d3
-                    loadD3().then(function () {
+                    loadD3().done(function () {
                         nf.Storage.init();
 
                         // initialize the application
@@ -982,7 +982,7 @@ nf.Canvas = (function () {
                         nf.ConnectionDetails.init();
                         nf.RemoteProcessGroupDetails.init();
                         nf.GoTo.init();
-                        nf.Graph.init().then(function () {
+                        nf.Graph.init().done(function () {
                             // determine the split between the polling
                             var pollingSplit = autoRefreshIntervalSeconds / 2;
 
@@ -994,10 +994,10 @@ nf.Canvas = (function () {
 
                             // hide the splash screen
                             nf.Canvas.hideSplash();
-                        }, nf.Common.handleAjaxError);
-                    }, nf.Common.handleAjaxError);
-                }, nf.Common.handleAjaxError);
-            }, nf.Common.handleAjaxError);
+                        }).fail(nf.Common.handleAjaxError);
+                    }).fail(nf.Common.handleAjaxError);
+                }).fail(nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
         /**
          * Defines the gradient colors used to render processors.
@@ -1214,6 +1214,7 @@ nf.Canvas = (function () {
                     // add the behavior to the canvas and disable dbl click zoom
                     svg.call(behavior).on('dblclick.zoom', null);
                 },
+                
                 /**
                  * Whether or not a component should be rendered based solely on the current scale.
                  * 
@@ -1222,6 +1223,7 @@ nf.Canvas = (function () {
                 shouldRenderPerScale: function () {
                     return nf.Canvas.View.scale() >= MIN_SCALE_TO_RENDER;
                 },
+                
                 /**
                  * Updates component visibility based on the current translation/scale.
                  */
@@ -1229,6 +1231,7 @@ nf.Canvas = (function () {
                     updateComponentVisibility();
                     nf.Graph.pan();
                 },
+                
                 /**
                  * Sets/gets the current translation.
                  * 
@@ -1241,6 +1244,7 @@ nf.Canvas = (function () {
                         behavior.translate(translate);
                     }
                 },
+                
                 /**
                  * Sets/gets the current scale.
                  * 
@@ -1253,6 +1257,7 @@ nf.Canvas = (function () {
                         behavior.scale(scale);
                     }
                 },
+                
                 /**
                  * Zooms in a single zoom increment.
                  */
@@ -1277,6 +1282,7 @@ nf.Canvas = (function () {
                         height: 1
                     });
                 },
+                
                 /**
                  * Zooms out a single zoom increment.
                  */
@@ -1301,6 +1307,7 @@ nf.Canvas = (function () {
                         height: 1
                     });
                 },
+                
                 /**
                  * Zooms to fit the entire graph on the canvas.
                  */
@@ -1347,6 +1354,7 @@ nf.Canvas = (function () {
                         height: canvasHeight / newScale
                     });
                 },
+                
                 /**
                  * Zooms to the actual size (1 to 1).
                  */
@@ -1395,6 +1403,7 @@ nf.Canvas = (function () {
                     // center as appropriate
                     nf.CanvasUtils.centerBoundingBox(box);
                 },
+                
                 /**
                  * Refreshes the view based on the configured translation and scale.
                  * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-clipboard.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-clipboard.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-clipboard.js
index d4a035b..4f22d7e 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-clipboard.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-clipboard.js
@@ -34,6 +34,7 @@ nf.Clipboard = (function () {
         addListener: function (listener, funct) {
             listeners[listener] = funct;
         },
+        
         /**
          * Remove the specified listener.
          * 
@@ -44,6 +45,7 @@ nf.Clipboard = (function () {
                 delete listeners[listener];
             }
         },
+        
         /**
          * Copy the specified data.
          * 
@@ -57,12 +59,14 @@ nf.Clipboard = (function () {
                 listeners[listener].call(listener, COPY, data);
             }
         },
+        
         /**
          * Checks to see if any data has been copied.
          */
         isCopied: function () {
             return nf.Common.isDefinedAndNotNull(data);
         },
+        
         /**
          * Gets the most recent data thats copied. This operation
          * will remove the corresponding data from the clipboard.

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connectable.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connectable.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connectable.js
index 31370b8..598b2ef 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connectable.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connectable.js
@@ -157,6 +157,7 @@ nf.Connectable = (function () {
                         d3.select(this).remove();
                     });
         },
+        
         activate: function (components) {
             components
                     .on('mouseenter.connectable', function (d) {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection-configuration.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection-configuration.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection-configuration.js
index d9d1f77..a8e4acc 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection-configuration.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection-configuration.js
@@ -250,7 +250,7 @@ nf.ConnectionConfiguration = (function () {
                     verbose: true
                 },
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var processGroup = response.processGroup;
                 var processGroupContents = processGroup.contents;
 
@@ -301,7 +301,7 @@ nf.ConnectionConfiguration = (function () {
 
                     deferred.reject();
                 }
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 // handle the error
                 nf.Common.handleAjaxError(xhr, status, error);
 
@@ -327,7 +327,7 @@ nf.ConnectionConfiguration = (function () {
                     verbose: true
                 },
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var remoteProcessGroup = response.remoteProcessGroup;
                 var remoteProcessGroupContents = remoteProcessGroup.contents;
 
@@ -379,7 +379,7 @@ nf.ConnectionConfiguration = (function () {
 
                     deferred.reject();
                 }
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 // handle the error
                 nf.Common.handleAjaxError(xhr, status, error);
 
@@ -475,7 +475,7 @@ nf.ConnectionConfiguration = (function () {
                     verbose: true
                 },
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var processGroup = response.processGroup;
                 var processGroupContents = processGroup.contents;
 
@@ -526,7 +526,7 @@ nf.ConnectionConfiguration = (function () {
 
                     deferred.reject();
                 }
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 // handle the error
                 nf.Common.handleAjaxError(xhr, status, error);
 
@@ -551,7 +551,7 @@ nf.ConnectionConfiguration = (function () {
                     verbose: true
                 },
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var remoteProcessGroup = response.remoteProcessGroup;
                 var remoteProcessGroupContents = remoteProcessGroup.contents;
 
@@ -603,7 +603,7 @@ nf.ConnectionConfiguration = (function () {
 
                     deferred.reject();
                 }
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 // handle the error
                 nf.Common.handleAjaxError(xhr, status, error);
 
@@ -848,7 +848,7 @@ nf.ConnectionConfiguration = (function () {
                     destinationType: destinationType
                 },
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 // update the revision
                 nf.Client.setRevision(response.revision);
 
@@ -876,7 +876,7 @@ nf.ConnectionConfiguration = (function () {
 
                 // update the birdseye
                 nf.Birdseye.refresh();
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 // handle the error
                 nf.Common.handleAjaxError(xhr, status, error);
             });
@@ -935,7 +935,7 @@ nf.ConnectionConfiguration = (function () {
                     destinationGroupId: destinationGroupId
                 },
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 if (nf.Common.isDefinedAndNotNull(response.connection)) {
                     var connection = response.connection;
 
@@ -959,7 +959,7 @@ nf.ConnectionConfiguration = (function () {
                         nf.RemoteProcessGroup.reload(destinationData.component);
                     }
                 }
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 if (xhr.status === 400 || xhr.status === 404 || xhr.status === 409) {
                     nf.Dialog.showOkDialog({
                         dialogContent: nf.Common.escapeHtml(xhr.responseText),
@@ -1128,7 +1128,7 @@ nf.ConnectionConfiguration = (function () {
                 type: 'GET',
                 url: config.urls.prioritizers,
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 // create an element for each available prioritizer
                 $.each(response.prioritizerTypes, function (i, documentedType) {
                     nf.ConnectionConfiguration.addAvailablePrioritizer('#prioritizer-available', documentedType);
@@ -1142,8 +1142,9 @@ nf.ConnectionConfiguration = (function () {
                     opacity: 0.6
                 });
                 $('#prioritizer-available, #prioritizer-selected').disableSelection();
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Adds the specified prioritizer to the specified container.
          * 
@@ -1165,6 +1166,7 @@ nf.ConnectionConfiguration = (function () {
                 }));
             }
         },
+        
         /**
          * Shows the dialog for creating a new connection.
          * 
@@ -1209,6 +1211,7 @@ nf.ConnectionConfiguration = (function () {
                 removeTempEdge();
             });
         },
+        
         /**
          * Shows the configuration for the specified connection. If a destination is
          * specified it will be considered a new destination.
@@ -1232,7 +1235,7 @@ nf.ConnectionConfiguration = (function () {
                 }
 
                 // initialize the connection dialog
-                $.when(initializeSourceEditConnectionDialog(source), initializeDestinationEditConnectionDialog(destination)).then(function () {
+                $.when(initializeSourceEditConnectionDialog(source), initializeDestinationEditConnectionDialog(destination)).done(function () {
                     var availableRelationships = connection.availableRelationships;
                     var selectedRelationships = connection.selectedRelationships;
 
@@ -1311,9 +1314,9 @@ nf.ConnectionConfiguration = (function () {
                                     if (nf.CanvasUtils.isProcessor(source)) {
                                         if (selectedRelationships.length > 0) {
                                             // if there are relationships selected update
-                                            updateConnection(selectedRelationships).then(function () {
+                                            updateConnection(selectedRelationships).done(function () {
                                                 deferred.resolve();
-                                            }, function () {
+                                            }).fail(function () {
                                                 deferred.reject();
                                             });
                                         } else {
@@ -1328,9 +1331,9 @@ nf.ConnectionConfiguration = (function () {
                                         }
                                     } else {
                                         // there are no relationships, but the source wasn't a processor, so update anyway
-                                        updateConnection(undefined).then(function () {
+                                        updateConnection(undefined).done(function () {
                                             deferred.resolve();
-                                        }, function () {
+                                        }).fail(function () {
                                             deferred.reject();
                                         });
                                     }
@@ -1366,7 +1369,7 @@ nf.ConnectionConfiguration = (function () {
                     if (relationshipNames.is(':visible') && relationshipNames.get(0).scrollHeight > relationshipNames.innerHeight()) {
                         relationshipNames.css('border-width', '1px');
                     }
-                }, function () {
+                }).fail(function () {
                     deferred.reject();
                 });
             }).promise();

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection.js
index d30eae5..0b0c40a 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection.js
@@ -945,13 +945,13 @@ nf.Connection = (function () {
             data: JSON.stringify(entity),
             dataType: 'json',
             contentType: 'application/json'
-        }).then(function (response) {
+        }).done(function (response) {
             // update the revision
             nf.Client.setRevision(response.revision);
 
             // request was successful, update the entry
             nf.Connection.set(response.connection);
-        }, function (xhr, status, error) {
+        }).fail(function (xhr, status, error) {
             if (xhr.status === 400 || xhr.status === 404 || xhr.status === 409) {
                 nf.Dialog.showOkDialog({
                     dialogContent: nf.Common.escapeHtml(xhr.responseText),
@@ -973,6 +973,7 @@ nf.Connection = (function () {
             selfLoopXOffset: (dimensions.width / 2) + 5,
             selfLoopYOffset: 25
         },
+        
         init: function () {
             connectionMap = d3.map();
 
@@ -1122,7 +1123,7 @@ nf.Connection = (function () {
                                     url: connectionData.component.uri,
                                     data: updatedConnectionData,
                                     dataType: 'json'
-                                }).then(function (response) {
+                                }).done(function (response) {
                                     var connectionData = response.connection;
 
                                     // update the revision
@@ -1130,7 +1131,7 @@ nf.Connection = (function () {
 
                                     // refresh to update the label
                                     nf.Connection.set(connectionData);
-                                }, function (xhr, status, error) {
+                                }).fail(function (xhr, status, error) {
                                     if (xhr.status === 400 || xhr.status === 404 || xhr.status === 409) {
                                         nf.Dialog.showOkDialog({
                                             dialogContent: nf.Common.escapeHtml(xhr.responseText),
@@ -1268,6 +1269,7 @@ nf.Connection = (function () {
                         d3.event.sourceEvent.stopPropagation();
                     });
         },
+        
         /**
          * Populates the graph with the specified connections.
          * 
@@ -1304,12 +1306,14 @@ nf.Connection = (function () {
             // apply the selection and handle all new connection
             select().enter().call(renderConnections, selectAll);
         },
+        
         /**
          * Reorders the connections based on their current z index.
          */
         reorder: function () {
             d3.selectAll('g.connection').call(sort);
         },
+        
         /**
          * Sets the value of the specified connection.
          * 
@@ -1343,6 +1347,7 @@ nf.Connection = (function () {
                 set(connection);
             }
         },
+        
         /**
          * Sets the connection status using the specified status.
          * 
@@ -1364,6 +1369,7 @@ nf.Connection = (function () {
             // update the visible connections
             d3.selectAll('g.connection.visible').call(updateConnectionStatus);
         },
+        
         /**
          * Refreshes the connection in the UI.
          * 
@@ -1376,12 +1382,14 @@ nf.Connection = (function () {
                 d3.selectAll('g.connection').call(updateConnections, true, true);
             }
         },
+        
         /**
          * Refreshes the components necessary after a pan event.
          */
         pan: function () {
             d3.selectAll('g.connection.entering, g.connection.leaving').call(updateConnections, false, true);
         },
+        
         /**
          * Removes the specified connection.
          * 
@@ -1399,12 +1407,14 @@ nf.Connection = (function () {
             // apply the selection and handle all removed connections
             select().exit().call(removeConnections);
         },
+        
         /**
          * Removes all processors.
          */
         removeAll: function () {
             nf.Connection.remove(connectionMap.keys());
         },
+        
         /**
          * Reloads the connection state from the server and refreshes the UI.
          * 
@@ -1421,6 +1431,7 @@ nf.Connection = (function () {
                 });
             }
         },
+        
         /**
          * Gets the connection that have a source or destination component with the specified id.
          * 
@@ -1439,6 +1450,7 @@ nf.Connection = (function () {
             });
             return connections;
         },
+        
         /**
          * If the connection id is specified it is returned. If no connection id
          * specified, all connections are returned.

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-context-menu.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-context-menu.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-context-menu.js
index dff1fdd..6365dd5 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-context-menu.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-context-menu.js
@@ -417,12 +417,14 @@ nf.ContextMenu = (function () {
                 'y': position[1]
             });
         },
+        
         /**
          * Hides the context menu.
          */
         hide: function () {
             $('#context-menu').hide();
         },
+        
         /**
          * Activates the context menu for the components in the specified selection.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-draggable.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-draggable.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-draggable.js
index 0865e7e..2eb3f1b 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-draggable.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-draggable.js
@@ -57,7 +57,7 @@ nf.Draggable = (function () {
                         y: newPosition.y
                     },
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     // update the revision
                     nf.Client.setRevision(response.revision);
 
@@ -69,7 +69,7 @@ nf.Draggable = (function () {
                         type: d.type,
                         id: d.component.id
                     });
-                }, function (xhr, status, error) {
+                }).fail(function (xhr, status, error) {
                     if (xhr.status === 400 || xhr.status === 404 || xhr.status === 409) {
                         nf.Dialog.showOkDialog({
                             dialogContent: nf.Common.escapeHtml(xhr.responseText),
@@ -114,7 +114,7 @@ nf.Draggable = (function () {
                     data: JSON.stringify(entity),
                     dataType: 'json',
                     contentType: 'application/json'
-                }).then(function (response) {
+                }).done(function (response) {
                     // update the revision
                     nf.Client.setRevision(response.revision);
 
@@ -132,7 +132,7 @@ nf.Draggable = (function () {
                         type: d.type,
                         id: d.component.id
                     });
-                }, function (xhr, status, error) {
+                }).fail(function (xhr, status, error) {
                     if (xhr.status === 400 || xhr.status === 404 || xhr.status === 409) {
                         nf.Dialog.showOkDialog({
                             dialogContent: nf.Common.escapeHtml(xhr.responseText),
@@ -300,6 +300,7 @@ nf.Draggable = (function () {
                         dragSelection.remove();
                     });
         },
+        
         /**
          * Activates the drag behavior for the components in the specified selection.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-funnel.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-funnel.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-funnel.js
index 84263d6..c21969e 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-funnel.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-funnel.js
@@ -135,6 +135,7 @@ nf.Funnel = (function () {
                         'class': 'funnels'
                     });
         },
+        
         /**
          * Populates the graph with the specified funnels.
          * 
@@ -165,6 +166,7 @@ nf.Funnel = (function () {
             // apply the selection and handle all new processors
             select().enter().call(renderFunnels, selectAll);
         },
+        
         /**
          * If the funnel id is specified it is returned. If no funnel id
          * specified, all funnels are returned.
@@ -178,6 +180,7 @@ nf.Funnel = (function () {
                 return funnelMap.get(id);
             }
         },
+        
         /**
          * If the funnel id is specified it is refresh according to the current 
          * state. If not funnel id is specified, all funnels are refreshed.
@@ -191,6 +194,7 @@ nf.Funnel = (function () {
                 d3.selectAll('g.funnel').call(updateFunnels);
             }
         },
+        
         /**
          * Reloads the funnel state from the server and refreshes the UI.
          * If the funnel is currently unknown, this function just returns.
@@ -208,6 +212,7 @@ nf.Funnel = (function () {
                 });
             }
         },
+        
         /**
          * Positions the component.
          * 
@@ -216,6 +221,7 @@ nf.Funnel = (function () {
         position: function (id) {
             d3.select('#id-' + id).call(nf.CanvasUtils.position);
         },
+        
         /**
          * Sets the specified funnel(s). If the is an array, it 
          * will set each funnel. If it is not an array, it will 
@@ -244,6 +250,7 @@ nf.Funnel = (function () {
                 set(funnels);
             }
         },
+        
         /**
          * Removes the specified funnel.
          * 
@@ -261,6 +268,7 @@ nf.Funnel = (function () {
             // apply the selection and handle all removed funnels
             select().exit().call(removeFunnels);
         },
+        
         /**
          * Removes all processors.
          */


[10/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of slickgrid.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.grid.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.grid.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.grid.js
index b4a2d7d..c12bae9 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.grid.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.grid.js
@@ -1,2832 +1,3422 @@
-/**
- * @license
- * (c) 2009-2012 Michael Leibman
- * michael{dot}leibman{at}gmail{dot}com
- * http://github.com/mleibman/slickgrid
- *
- * Distributed under MIT license.
- * All rights reserved.
- *
- * SlickGrid v2.0
- *
- * NOTES:
- *     Cell/row DOM manipulations are done directly bypassing jQuery's DOM manipulation methods.
- *     This increases the speed dramatically, but can only be done safely because there are no event handlers
- *     or data associated with any cell/row DOM nodes.  Cell editors must make sure they implement .destroy()
- *     and do proper cleanup.
- */
-
-// make sure required JavaScript modules are loaded
-if (typeof jQuery === "undefined") {
-    throw "SlickGrid requires jquery module to be loaded";
-}
-if (!jQuery.fn.drag) {
-    throw "SlickGrid requires jquery.event.drag module to be loaded";
-}
-if (typeof Slick === "undefined") {
-    throw "slick.core.js not loaded";
-}
-
-
-(function ($) {
-    // Slick.Grid
-    $.extend(true, window, {
-        Slick: {
-            Grid: SlickGrid
-        }
-    });
-
-    // shared across all grids on the page
-    var scrollbarDimensions;
-    var maxSupportedCssHeight;  // browser's breaking point
-
-    //////////////////////////////////////////////////////////////////////////////////////////////
-    // SlickGrid class implementation (available as Slick.Grid)
-
-    /**
-     * Creates a new instance of the grid.
-     * @class SlickGrid
-     * @constructor
-     * @param {Node}              container   Container node to create the grid in.
-     * @param {Array,Object}      data        An array of objects for databinding.
-     * @param {Array}             columns     An array of column definitions.
-     * @param {Object}            options     Grid options.
-     **/
-    function SlickGrid(container, data, columns, options) {
-        // settings
-        var defaults = {
-            explicitInitialization: false,
-            rowHeight: 25,
-            defaultColumnWidth: 80,
-            enableAddRow: false,
-            leaveSpaceForNewRows: false,
-            editable: false,
-            autoEdit: true,
-            enableCellNavigation: true,
-            enableColumnReorder: true,
-            asyncEditorLoading: false,
-            asyncEditorLoadDelay: 100,
-            forceFitColumns: false,
-            enableAsyncPostRender: false,
-            asyncPostRenderDelay: 60,
-            autoHeight: false,
-            editorLock: Slick.GlobalEditorLock,
-            showHeaderRow: false,
-            headerRowHeight: 25,
-            showTopPanel: false,
-            topPanelHeight: 25,
-            formatterFactory: null,
-            editorFactory: null,
-            cellFlashingCssClass: "flashing",
-            selectedCellCssClass: "selected",
-            multiSelect: true,
-            enableTextSelectionOnCells: false,
-            dataItemColumnValueExtractor: null,
-            fullWidthRows: false,
-            multiColumnSort: false,
-            defaultFormatter: defaultFormatter
-        };
-
-        var columnDefaults = {
-            name: "",
-            resizable: true,
-            sortable: false,
-            minWidth: 30,
-            rerenderOnResize: false,
-            headerCssClass: null
-        };
-
-        // scroller
-        var th;   // virtual height
-        var h;    // real scrollable height
-        var ph;   // page height
-        var n;    // number of pages
-        var cj;   // "jumpiness" coefficient
-
-        var page = 0;       // current page
-        var offset = 0;     // current page offset
-        var scrollDir = 1;
-
-        // private
-        var initialized = false;
-        var $container;
-        var uid = "slickgrid_" + Math.round(1000000 * Math.random());
-        var self = this;
-        var $focusSink;
-        var $headerScroller;
-        var $headers;
-        var $headerRow, $headerRowScroller;
-        var $topPanelScroller;
-        var $topPanel;
-        var $viewport;
-        var $canvas;
-        var $style;
-        var stylesheet, columnCssRulesL, columnCssRulesR;
-        var viewportH, viewportW;
-        var canvasWidth;
-        var viewportHasHScroll, viewportHasVScroll;
-        var headerColumnWidthDiff = 0, headerColumnHeightDiff = 0, // border+padding
-                cellWidthDiff = 0, cellHeightDiff = 0;
-        var absoluteColumnMinWidth;
-        var numberOfRows = 0;
-
-        var activePosX;
-        var activeRow, activeCell;
-        var activeCellNode = null;
-        var currentEditor = null;
-        var serializedEditorValue;
-        var editController;
-
-        var rowsCache = {};
-        var renderedRows = 0;
-        var numVisibleRows;
-        var prevScrollTop = 0;
-        var scrollTop = 0;
-        var lastRenderedScrollTop = 0;
-        var prevScrollLeft = 0;
-        var avgRowRenderTime = 10;
-
-        var selectionModel;
-        var selectedRows = [];
-
-        var plugins = [];
-        var cellCssClasses = {};
-
-        var columnsById = {};
-        var sortColumns = [];
-
-
-        // async call handles
-        var h_editorLoader = null;
-        var h_render = null;
-        var h_postrender = null;
-        var postProcessedRows = {};
-        var postProcessToRow = null;
-        var postProcessFromRow = null;
-
-        // perf counters
-        var counter_rows_rendered = 0;
-        var counter_rows_removed = 0;
-
-
-        //////////////////////////////////////////////////////////////////////////////////////////////
-        // Initialization
-
-        function init() {
-            $container = $(container);
-            if ($container.length < 1) {
-                throw new Error("SlickGrid requires a valid container, " + container + " does not exist in the DOM.");
-            }
-
-            // calculate these only once and share between grid instances
-            maxSupportedCssHeight = maxSupportedCssHeight || getMaxSupportedCssHeight();
-            scrollbarDimensions = scrollbarDimensions || measureScrollbar();
-
-            options = $.extend({}, defaults, options);
-            columnDefaults.width = options.defaultColumnWidth;
-
-            // validate loaded JavaScript modules against requested options
-            if (options.enableColumnReorder && !$.fn.sortable) {
-                throw new Error("SlickGrid's 'enableColumnReorder = true' option requires jquery-ui.sortable module to be loaded");
-            }
-
-            editController = {
-                "commitCurrentEdit": commitCurrentEdit,
-                "cancelCurrentEdit": cancelCurrentEdit
-            };
-
-            $container
-                    .empty()
-                    .css("overflow", "hidden")
-                    .css("outline", 0)
-                    .addClass(uid)
-                    .addClass("ui-widget");
-
-            // set up a positioning container if needed
-            if (!/relative|absolute|fixed/.test($container.css("position"))) {
-                $container.css("position", "relative");
-            }
-
-            $focusSink = $("<div tabIndex='0' hideFocus style='position:fixed;width:0;height:0;top:0;left:0;outline:0;'></div>").appendTo($container);
-
-            $headerScroller = $("<div class='slick-header ui-state-default' style='overflow:hidden;position:relative;' />").appendTo($container);
-            $headers = $("<div class='slick-header-columns' style='width:10000px; left:-1000px' />").appendTo($headerScroller);
-
-            $headerRowScroller = $("<div class='slick-headerrow ui-state-default' style='overflow:hidden;position:relative;' />").appendTo($container);
-            $headerRow = $("<div class='slick-headerrow-columns' />").appendTo($headerRowScroller);
-
-            $topPanelScroller = $("<div class='slick-top-panel-scroller ui-state-default' style='overflow:hidden;position:relative;' />").appendTo($container);
-            $topPanel = $("<div class='slick-top-panel' style='width:10000px' />").appendTo($topPanelScroller);
-
-            if (!options.showTopPanel) {
-                $topPanelScroller.hide();
-            }
-
-            if (!options.showHeaderRow) {
-                $headerRowScroller.hide();
-            }
-
-            $viewport = $("<div class='slick-viewport' style='width:100%;overflow:auto;outline:0;position:relative;;'>").appendTo($container);
-            $viewport.css("overflow-y", options.autoHeight ? "hidden" : "auto");
-
-            $canvas = $("<div class='grid-canvas' />").appendTo($viewport);
-
-            if (!options.explicitInitialization) {
-                finishInitialization();
-            }
-        }
-
-        function finishInitialization() {
-            if (!initialized) {
-                initialized = true;
-
-                viewportW = parseFloat($.css($container[0], "width", true));
-
-                // header columns and cells may have different padding/border skewing width calculations (box-sizing, hello?)
-                // calculate the diff so we can set consistent sizes
-                measureCellPaddingAndBorder();
-
-                // for usability reasons, all text selection in SlickGrid is disabled
-                // with the exception of input and textarea elements (selection must
-                // be enabled there so that editors work as expected); note that
-                // selection in grid cells (grid body) is already unavailable in
-                // all browsers except IE
-                disableSelection($headers); // disable all text selection in header (including input and textarea)
-
-                if (!options.enableTextSelectionOnCells) {
-                    // disable text selection in grid cells except in input and textarea elements
-                    // (this is IE-specific, because selectstart event will only fire in IE)
-                    $viewport.bind("selectstart.ui", function (event) {
-                        return $(event.target).is("input,textarea");
-                    });
-                }
-
-                createColumnHeaders();
-                setupColumnSort();
-                createCssRules();
-                resizeCanvas();
-                bindAncestorScrollEvents();
-
-                $container
-                        .bind("resize.slickgrid", resizeCanvas);
-                $viewport
-                        .bind("scroll.slickgrid", handleScroll);
-                $headerScroller
-                        .bind("contextmenu.slickgrid", handleHeaderContextMenu)
-                        .bind("click.slickgrid", handleHeaderClick);
-                $focusSink
-                        .bind("keydown.slickgrid", handleKeyDown);
-                $canvas
-                        .bind("keydown.slickgrid", handleKeyDown)
-                        .bind("click.slickgrid", handleClick)
-                        .bind("dblclick.slickgrid", handleDblClick)
-                        .bind("contextmenu.slickgrid", handleContextMenu)
-                        .bind("draginit", handleDragInit)
-                        .bind("dragstart", handleDragStart)
-                        .bind("drag", handleDrag)
-                        .bind("dragend", handleDragEnd)
-                        .delegate(".slick-cell", "mouseenter", handleMouseEnter)
-                        .delegate(".slick-cell", "mouseleave", handleMouseLeave);
-            }
-        }
-
-        function registerPlugin(plugin) {
-            plugins.unshift(plugin);
-            plugin.init(self);
-        }
-
-        function unregisterPlugin(plugin) {
-            for (var i = plugins.length; i >= 0; i--) {
-                if (plugins[i] === plugin) {
-                    if (plugins[i].destroy) {
-                        plugins[i].destroy();
-                    }
-                    plugins.splice(i, 1);
-                    break;
-                }
-            }
-        }
-
-        function setSelectionModel(model) {
-            if (selectionModel) {
-                selectionModel.onSelectedRangesChanged.unsubscribe(handleSelectedRangesChanged);
-                if (selectionModel.destroy) {
-                    selectionModel.destroy();
-                }
-            }
-
-            selectionModel = model;
-            if (selectionModel) {
-                selectionModel.init(self);
-                selectionModel.onSelectedRangesChanged.subscribe(handleSelectedRangesChanged);
-            }
-        }
-
-        function getSelectionModel() {
-            return selectionModel;
-        }
-
-        function getCanvasNode() {
-            return $canvas[0];
-        }
-
-        function measureScrollbar() {
-            var $c = $("<div style='position:absolute; top:-10000px; left:-10000px; width:100px; height:100px; overflow:scroll;'></div>").appendTo("body");
-            var dim = {
-                width: $c.width() - $c[0].clientWidth,
-                height: $c.height() - $c[0].clientHeight
-            };
-            $c.remove();
-            return dim;
-        }
-
-        function getCanvasWidth() {
-            var availableWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW;
-            var rowWidth = 0;
-            var i = columns.length;
-            while (i--) {
-                rowWidth += (columns[i].width || columnDefaults.width);
-            }
-            return options.fullWidthRows ? Math.max(rowWidth, availableWidth) : rowWidth;
-        }
-
-        function updateCanvasWidth(forceColumnWidthsUpdate) {
-            var oldCanvasWidth = canvasWidth;
-            canvasWidth = getCanvasWidth();
-
-            if (canvasWidth != oldCanvasWidth) {
-                $canvas.width(canvasWidth);
-                $headerRow.width(canvasWidth);
-                viewportHasHScroll = (canvasWidth > viewportW - scrollbarDimensions.width);
-            }
-
-            if (canvasWidth != oldCanvasWidth || forceColumnWidthsUpdate) {
-                applyColumnWidths();
-            }
-        }
-
-        function disableSelection($target) {
-            if ($target && $target.jquery) {
-                $target
-                        .attr("unselectable", "on")
-                        .css("MozUserSelect", "none")
-                        .bind("selectstart.ui", function () {
-                            return false;
-                        }); // from jquery:ui.core.js 1.7.2
-            }
-        }
-
-        function getMaxSupportedCssHeight() {
-            var increment = 1000000;
-            var supportedHeight = increment;
-            // FF reports the height back but still renders blank after ~6M px
-            var testUpTo = ($.browser.mozilla) ? 5000000 : 1000000000;
-            var div = $("<div style='display:none' />").appendTo(document.body);
-
-            while (supportedHeight <= testUpTo) {
-                div.css("height", supportedHeight + increment);
-                if (div.height() !== supportedHeight + increment) {
-                    break;
-                } else {
-                    supportedHeight += increment;
-                }
-            }
-
-            div.remove();
-            return supportedHeight;
-        }
-
-        // TODO:  this is static.  need to handle page mutation.
-        function bindAncestorScrollEvents() {
-            var elem = $canvas[0];
-            while ((elem = elem.parentNode) != document.body && elem != null) {
-                // bind to scroll containers only
-                if (elem == $viewport[0] || elem.scrollWidth != elem.clientWidth || elem.scrollHeight != elem.clientHeight) {
-                    $(elem).bind("scroll.slickgrid", handleActiveCellPositionChange);
-                }
-            }
-        }
-
-        function unbindAncestorScrollEvents() {
-            $canvas.parents().unbind("scroll.slickgrid");
-        }
-
-        function updateColumnHeader(columnId, title, toolTip) {
-            if (!initialized) {
-                return;
-            }
-            var idx = getColumnIndex(columnId);
-            var $header = $headers.children().eq(idx);
-            if ($header) {
-                columns[idx].name = title;
-                columns[idx].toolTip = toolTip;
-                $header
-                        .attr("title", toolTip || title || "")
-                        .children().eq(0).html(title);
-            }
-        }
-
-        function getHeaderRow() {
-            return $headerRow[0];
-        }
-
-        function getHeaderRowColumn(columnId) {
-            var idx = getColumnIndex(columnId);
-            var $header = $headerRow.children().eq(idx);
-            return $header && $header[0];
-        }
-
-        function createColumnHeaders() {
-            function hoverBegin() {
-                $(this).addClass("ui-state-hover");
-            }
-
-            function hoverEnd() {
-                $(this).removeClass("ui-state-hover");
-            }
-
-            $headers.empty();
-            $headerRow.empty();
-            columnsById = {};
-
-            for (var i = 0; i < columns.length; i++) {
-                var m = columns[i] = $.extend({}, columnDefaults, columns[i]);
-                columnsById[m.id] = i;
-
-                var header = $("<div class='ui-state-default slick-header-column' id='" + uid + m.id + "' />")
-                        .html("<span class='slick-column-name'>" + m.name + "</span>")
-                        .width(m.width - headerColumnWidthDiff)
-                        .attr("title", m.toolTip || m.name || "")
-                        .data("fieldId", m.id)
-                        .addClass(m.headerCssClass || "")
-                        .appendTo($headers);
-
-                if (options.enableColumnReorder || m.sortable) {
-                    header.hover(hoverBegin, hoverEnd);
-                }
-
-                if (m.sortable) {
-                    header.append("<span class='slick-sort-indicator' />");
-                }
-
-                if (options.showHeaderRow) {
-                    $("<div class='ui-state-default slick-headerrow-column l" + i + " r" + i + "'></div>")
-                            .appendTo($headerRow);
-                }
-            }
-
-            if (options.showHeaderRow) {
-                // add a spacer to let the container scroll beyond the header row columns width
-                $("<div style='display:block;height:1px;width:10000px;position:absolute;top:0;left:0;'></div>")
-                        .appendTo($headerRowScroller);
-            }
-
-            setSortColumns(sortColumns);
-            setupColumnResize();
-            if (options.enableColumnReorder) {
-                setupColumnReorder();
-            }
-        }
-
-        function setupColumnSort() {
-            $headers.click(function (e) {
-                // temporary workaround for a bug in jQuery 1.7.1 (http://bugs.jquery.com/ticket/11328)
-                e.metaKey = e.metaKey || e.ctrlKey;
-
-                if ($(e.target).hasClass("slick-resizable-handle")) {
-                    return;
-                }
-
-                var $col = $(e.target).closest(".slick-header-column");
-                if (!$col.length) {
-                    return;
-                }
-
-                var column = columns[getColumnIndex($col.data("fieldId"))];
-                if (column.sortable) {
-                    if (!getEditorLock().commitCurrentEdit()) {
-                        return;
-                    }
-
-                    var sortOpts = null;
-                    var i = 0;
-                    for (; i < sortColumns.length; i++) {
-                        if (sortColumns[i].columnId == column.id) {
-                            sortOpts = sortColumns[i];
-                            sortOpts.sortAsc = !sortOpts.sortAsc;
-                            break;
-                        }
-                    }
-
-                    if (e.metaKey && options.multiColumnSort) {
-                        if (sortOpts) {
-                            sortColumns.splice(i, 1);
-                        }
-                    }
-                    else {
-                        if ((!e.shiftKey && !e.metaKey) || !options.multiColumnSort) {
-                            sortColumns = [];
-                        }
-
-                        if (!sortOpts) {
-                            sortOpts = {columnId: column.id, sortAsc: true};
-                            sortColumns.push(sortOpts);
-                        } else if (sortColumns.length == 0) {
-                            sortColumns.push(sortOpts);
-                        }
-                    }
-
-                    setSortColumns(sortColumns);
-
-                    if (!options.multiColumnSort) {
-                        trigger(self.onSort, {
-                            multiColumnSort: false,
-                            sortCol: column,
-                            sortAsc: sortOpts.sortAsc}, e);
-                    } else {
-                        trigger(self.onSort, {
-                            multiColumnSort: true,
-                            sortCols: $.map(sortColumns, function (col) {
-                                return {sortCol: columns[getColumnIndex(col.columnId)], sortAsc: col.sortAsc};
-                            })}, e);
-                    }
-                }
-            });
-        }
-
-        function setupColumnReorder() {
-            $headers.sortable({
-                containment: "parent",
-                axis: "x",
-                cursor: "default",
-                tolerance: "intersection",
-                helper: "clone",
-                placeholder: "slick-sortable-placeholder ui-state-default slick-header-column",
-                forcePlaceholderSize: true,
-                start: function (e, ui) {
-                    $(ui.helper).addClass("slick-header-column-active");
-                },
-                beforeStop: function (e, ui) {
-                    $(ui.helper).removeClass("slick-header-column-active");
-                },
-                stop: function (e) {
-                    if (!getEditorLock().commitCurrentEdit()) {
-                        $(this).sortable("cancel");
-                        return;
-                    }
-
-                    var reorderedIds = $headers.sortable("toArray");
-                    var reorderedColumns = [];
-                    for (var i = 0; i < reorderedIds.length; i++) {
-                        reorderedColumns.push(columns[getColumnIndex(reorderedIds[i].replace(uid, ""))]);
-                    }
-                    setColumns(reorderedColumns);
-
-                    trigger(self.onColumnsReordered, {});
-                    e.stopPropagation();
-                    setupColumnResize();
-                }
-            });
-        }
-
-        function setupColumnResize() {
-            var $col, j, c, pageX, columnElements, minPageX, maxPageX, firstResizable, lastResizable;
-            columnElements = $headers.children();
-            columnElements.find(".slick-resizable-handle").remove();
-            columnElements.each(function (i, e) {
-                if (columns[i].resizable) {
-                    if (firstResizable === undefined) {
-                        firstResizable = i;
-                    }
-                    lastResizable = i;
-                }
-            });
-            if (firstResizable === undefined) {
-                return;
-            }
-            columnElements.each(function (i, e) {
-                if (i < firstResizable || (options.forceFitColumns && i >= lastResizable)) {
-                    return;
-                }
-                $col = $(e);
-                $("<div class='slick-resizable-handle' />")
-                        .appendTo(e)
-                        .bind("dragstart", function (e, dd) {
-                            if (!getEditorLock().commitCurrentEdit()) {
-                                return false;
-                            }
-                            pageX = e.pageX;
-                            $(this).parent().addClass("slick-header-column-active");
-                            var shrinkLeewayOnRight = null, stretchLeewayOnRight = null;
-                            // lock each column's width option to current width
-                            columnElements.each(function (i, e) {
-                                columns[i].previousWidth = $(e).outerWidth();
-                            });
-                            if (options.forceFitColumns) {
-                                shrinkLeewayOnRight = 0;
-                                stretchLeewayOnRight = 0;
-                                // colums on right affect maxPageX/minPageX
-                                for (j = i + 1; j < columnElements.length; j++) {
-                                    c = columns[j];
-                                    if (c.resizable) {
-                                        if (stretchLeewayOnRight !== null) {
-                                            if (c.maxWidth) {
-                                                stretchLeewayOnRight += c.maxWidth - c.previousWidth;
-                                            } else {
-                                                stretchLeewayOnRight = null;
-                                            }
-                                        }
-                                        shrinkLeewayOnRight += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth);
-                                    }
-                                }
-                            }
-                            var shrinkLeewayOnLeft = 0, stretchLeewayOnLeft = 0;
-                            for (j = 0; j <= i; j++) {
-                                // columns on left only affect minPageX
-                                c = columns[j];
-                                if (c.resizable) {
-                                    if (stretchLeewayOnLeft !== null) {
-                                        if (c.maxWidth) {
-                                            stretchLeewayOnLeft += c.maxWidth - c.previousWidth;
-                                        } else {
-                                            stretchLeewayOnLeft = null;
-                                        }
-                                    }
-                                    shrinkLeewayOnLeft += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth);
-                                }
-                            }
-                            if (shrinkLeewayOnRight === null) {
-                                shrinkLeewayOnRight = 100000;
-                            }
-                            if (shrinkLeewayOnLeft === null) {
-                                shrinkLeewayOnLeft = 100000;
-                            }
-                            if (stretchLeewayOnRight === null) {
-                                stretchLeewayOnRight = 100000;
-                            }
-                            if (stretchLeewayOnLeft === null) {
-                                stretchLeewayOnLeft = 100000;
-                            }
-                            maxPageX = pageX + Math.min(shrinkLeewayOnRight, stretchLeewayOnLeft);
-                            minPageX = pageX - Math.min(shrinkLeewayOnLeft, stretchLeewayOnRight);
-                        })
-                        .bind("drag", function (e, dd) {
-                            var actualMinWidth, d = Math.min(maxPageX, Math.max(minPageX, e.pageX)) - pageX, x;
-                            if (d < 0) { // shrink column
-                                x = d;
-                                for (j = i; j >= 0; j--) {
-                                    c = columns[j];
-                                    if (c.resizable) {
-                                        actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth);
-                                        if (x && c.previousWidth + x < actualMinWidth) {
-                                            x += c.previousWidth - actualMinWidth;
-                                            c.width = actualMinWidth;
-                                        } else {
-                                            c.width = c.previousWidth + x;
-                                            x = 0;
-                                        }
-                                    }
-                                }
-
-                                if (options.forceFitColumns) {
-                                    x = -d;
-                                    for (j = i + 1; j < columnElements.length; j++) {
-                                        c = columns[j];
-                                        if (c.resizable) {
-                                            if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {
-                                                x -= c.maxWidth - c.previousWidth;
-                                                c.width = c.maxWidth;
-                                            } else {
-                                                c.width = c.previousWidth + x;
-                                                x = 0;
-                                            }
-                                        }
-                                    }
-                                }
-                            } else { // stretch column
-                                x = d;
-                                for (j = i; j >= 0; j--) {
-                                    c = columns[j];
-                                    if (c.resizable) {
-                                        if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {
-                                            x -= c.maxWidth - c.previousWidth;
-                                            c.width = c.maxWidth;
-                                        } else {
-                                            c.width = c.previousWidth + x;
-                                            x = 0;
-                                        }
-                                    }
-                                }
-
-                                if (options.forceFitColumns) {
-                                    x = -d;
-                                    for (j = i + 1; j < columnElements.length; j++) {
-                                        c = columns[j];
-                                        if (c.resizable) {
-                                            actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth);
-                                            if (x && c.previousWidth + x < actualMinWidth) {
-                                                x += c.previousWidth - actualMinWidth;
-                                                c.width = actualMinWidth;
-                                            } else {
-                                                c.width = c.previousWidth + x;
-                                                x = 0;
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                            applyColumnHeaderWidths();
-                            if (options.syncColumnCellResize) {
-                                applyColumnWidths();
-                            }
-                        })
-                        .bind("dragend", function (e, dd) {
-                            var newWidth;
-                            $(this).parent().removeClass("slick-header-column-active");
-                            for (j = 0; j < columnElements.length; j++) {
-                                c = columns[j];
-                                newWidth = $(columnElements[j]).outerWidth();
-
-                                if (c.previousWidth !== newWidth && c.rerenderOnResize) {
-                                    invalidateAllRows();
-                                }
-                            }
-                            updateCanvasWidth(true);
-                            render();
-                            trigger(self.onColumnsResized, {});
-                        });
-            });
-        }
-
-        function getVBoxDelta($el) {
-            var p = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"];
-            var delta = 0;
-            $.each(p, function (n, val) {
-                delta += parseFloat($el.css(val)) || 0;
-            });
-            return delta;
-        }
-
-        function measureCellPaddingAndBorder() {
-            var el;
-            var h = ["borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight"];
-            var v = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"];
-
-            el = $("<div class='ui-state-default slick-header-column' style='visibility:hidden'>-</div>").appendTo($headers);
-            headerColumnWidthDiff = headerColumnHeightDiff = 0;
-            $.each(h, function (n, val) {
-                headerColumnWidthDiff += parseFloat(el.css(val)) || 0;
-            });
-            $.each(v, function (n, val) {
-                headerColumnHeightDiff += parseFloat(el.css(val)) || 0;
-            });
-            el.remove();
-
-            var r = $("<div class='slick-row' />").appendTo($canvas);
-            el = $("<div class='slick-cell' id='' style='visibility:hidden'>-</div>").appendTo(r);
-            cellWidthDiff = cellHeightDiff = 0;
-            $.each(h, function (n, val) {
-                cellWidthDiff += parseFloat(el.css(val)) || 0;
-            });
-            $.each(v, function (n, val) {
-                cellHeightDiff += parseFloat(el.css(val)) || 0;
-            });
-            r.remove();
-
-            absoluteColumnMinWidth = Math.max(headerColumnWidthDiff, cellWidthDiff);
-        }
-
-        function createCssRules() {
-            $style = $("<style type='text/css' rel='stylesheet' />").appendTo($("head"));
-            var rowHeight = (options.rowHeight - cellHeightDiff);
-            var rules = [
-                "." + uid + " .slick-header-column { left: 1000px; }",
-                "." + uid + " .slick-top-panel { height:" + options.topPanelHeight + "px; }",
-                "." + uid + " .slick-headerrow-columns { height:" + options.headerRowHeight + "px; }",
-                "." + uid + " .slick-cell { height:" + rowHeight + "px; }",
-                "." + uid + " .slick-row { height:" + options.rowHeight + "px; }"
-            ];
-
-            for (var i = 0; i < columns.length; i++) {
-                rules.push("." + uid + " .l" + i + " { }");
-                rules.push("." + uid + " .r" + i + " { }");
-            }
-
-            if ($style[0].styleSheet) { // IE
-                $style[0].styleSheet.cssText = rules.join(" ");
-            } else {
-                $style[0].appendChild(document.createTextNode(rules.join(" ")));
-            }
-        }
-
-        function getColumnCssRules(idx) {
-            if (!stylesheet) {
-                var sheets = document.styleSheets;
-                for (var i = 0; i < sheets.length; i++) {
-                    if ((sheets[i].ownerNode || sheets[i].owningElement) == $style[0]) {
-                        stylesheet = sheets[i];
-                        break;
-                    }
-                }
-
-                if (!stylesheet) {
-                    throw new Error("Cannot find stylesheet.");
-                }
-
-                // find and cache column CSS rules
-                columnCssRulesL = [];
-                columnCssRulesR = [];
-                var cssRules = (stylesheet.cssRules || stylesheet.rules);
-                var matches, columnIdx;
-                for (var i = 0; i < cssRules.length; i++) {
-                    var selector = cssRules[i].selectorText;
-                    if (matches = /\.l\d+/.exec(selector)) {
-                        columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10);
-                        columnCssRulesL[columnIdx] = cssRules[i];
-                    } else if (matches = /\.r\d+/.exec(selector)) {
-                        columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10);
-                        columnCssRulesR[columnIdx] = cssRules[i];
-                    }
-                }
-            }
-
-            return {
-                "left": columnCssRulesL[idx],
-                "right": columnCssRulesR[idx]
-            };
-        }
-
-        function removeCssRules() {
-            $style.remove();
-            stylesheet = null;
-        }
-
-        function destroy() {
-            getEditorLock().cancelCurrentEdit();
-
-            trigger(self.onBeforeDestroy, {});
-
-            for (var i = 0; i < plugins.length; i++) {
-                unregisterPlugin(plugins[i]);
-            }
-
-            if (options.enableColumnReorder && $headers.sortable) {
-                $headers.sortable("destroy");
-            }
-
-            unbindAncestorScrollEvents();
-            $container.unbind(".slickgrid");
-            removeCssRules();
-
-            $canvas.unbind("draginit dragstart dragend drag");
-            $container.empty().removeClass(uid);
-        }
-
-
-        //////////////////////////////////////////////////////////////////////////////////////////////
-        // General
-
-        function trigger(evt, args, e) {
-            e = e || new Slick.EventData();
-            args = args || {};
-            args.grid = self;
-            return evt.notify(args, e, self);
-        }
-
-        function getEditorLock() {
-            return options.editorLock;
-        }
-
-        function getEditController() {
-            return editController;
-        }
-
-        function getColumnIndex(id) {
-            return columnsById[id];
-        }
-
-        function autosizeColumns() {
-            var i, c,
-                    widths = [],
-                    shrinkLeeway = 0,
-                    total = 0,
-                    prevTotal,
-                    availWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW;
-
-            for (i = 0; i < columns.length; i++) {
-                c = columns[i];
-                widths.push(c.width);
-                total += c.width;
-                if (c.resizable) {
-                    shrinkLeeway += c.width - Math.max(c.minWidth, absoluteColumnMinWidth);
-                }
-            }
-
-            // shrink
-            prevTotal = total;
-            while (total > availWidth && shrinkLeeway) {
-                var shrinkProportion = (total - availWidth) / shrinkLeeway;
-                for (i = 0; i < columns.length && total > availWidth; i++) {
-                    c = columns[i];
-                    var width = widths[i];
-                    if (!c.resizable || width <= c.minWidth || width <= absoluteColumnMinWidth) {
-                        continue;
-                    }
-                    var absMinWidth = Math.max(c.minWidth, absoluteColumnMinWidth);
-                    var shrinkSize = Math.floor(shrinkProportion * (width - absMinWidth)) || 1;
-                    shrinkSize = Math.min(shrinkSize, width - absMinWidth);
-                    total -= shrinkSize;
-                    shrinkLeeway -= shrinkSize;
-                    widths[i] -= shrinkSize;
-                }
-                if (prevTotal == total) {  // avoid infinite loop
-                    break;
-                }
-                prevTotal = total;
-            }
-
-            // grow
-            prevTotal = total;
-            while (total < availWidth) {
-                var growProportion = availWidth / total;
-                for (i = 0; i < columns.length && total < availWidth; i++) {
-                    c = columns[i];
-                    if (!c.resizable || c.maxWidth <= c.width) {
-                        continue;
-                    }
-                    var growSize = Math.min(Math.floor(growProportion * c.width) - c.width, (c.maxWidth - c.width) || 1000000) || 1;
-                    total += growSize;
-                    widths[i] += growSize;
-                }
-                if (prevTotal == total) {  // avoid infinite loop
-                    break;
-                }
-                prevTotal = total;
-            }
-
-            var reRender = false;
-            for (i = 0; i < columns.length; i++) {
-                if (columns[i].rerenderOnResize && columns[i].width != widths[i]) {
-                    reRender = true;
-                }
-                columns[i].width = widths[i];
-            }
-
-            applyColumnHeaderWidths();
-            updateCanvasWidth(true);
-            if (reRender) {
-                invalidateAllRows();
-                render();
-            }
-        }
-
-        function applyColumnHeaderWidths() {
-            if (!initialized) {
-                return;
-            }
-            var h;
-            for (var i = 0, headers = $headers.children(), ii = headers.length; i < ii; i++) {
-                h = $(headers[i]);
-                if (h.width() !== columns[i].width - headerColumnWidthDiff) {
-                    h.width(columns[i].width - headerColumnWidthDiff);
-                }
-            }
-        }
-
-        function applyColumnWidths() {
-            var x = 0, w, rule;
-            for (var i = 0; i < columns.length; i++) {
-                w = columns[i].width;
-
-                rule = getColumnCssRules(i);
-                rule.left.style.left = x + "px";
-                rule.right.style.right = (canvasWidth - x - w) + "px";
-
-                x += columns[i].width;
-            }
-        }
-
-        function setSortColumn(columnId, ascending) {
-            setSortColumns([{columnId: columnId, sortAsc: ascending}]);
-        }
-
-        function setSortColumns(cols) {
-            sortColumns = cols;
-
-            var headerColumnEls = $headers.children();
-            headerColumnEls
-                    .removeClass("slick-header-column-sorted")
-                    .find(".slick-sort-indicator")
-                    .removeClass("slick-sort-indicator-asc slick-sort-indicator-desc");
-
-            $.each(sortColumns, function (i, col) {
-                if (col.sortAsc == null) {
-                    col.sortAsc = true;
-                }
-                var columnIndex = getColumnIndex(col.columnId);
-                if (columnIndex != null) {
-                    headerColumnEls.eq(columnIndex)
-                            .addClass("slick-header-column-sorted")
-                            .find(".slick-sort-indicator")
-                            .addClass(col.sortAsc ? "slick-sort-indicator-asc" : "slick-sort-indicator-desc");
-                }
-            });
-        }
-
-        function getSortColumns() {
-            return sortColumns;
-        }
-
-        function handleSelectedRangesChanged(e, ranges) {
-            selectedRows = [];
-            var hash = {};
-            for (var i = 0; i < ranges.length; i++) {
-                for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {
-                    if (!hash[j]) {  // prevent duplicates
-                        selectedRows.push(j);
-                    }
-                    hash[j] = {};
-                    for (var k = ranges[i].fromCell; k <= ranges[i].toCell; k++) {
-                        if (canCellBeSelected(j, k)) {
-                            hash[j][columns[k].id] = options.selectedCellCssClass;
-                        }
-                    }
-                }
-            }
-
-            setCellCssStyles(options.selectedCellCssClass, hash);
-
-            trigger(self.onSelectedRowsChanged, {rows: getSelectedRows()}, e);
-        }
-
-        function getColumns() {
-            return columns;
-        }
-
-        function setColumns(columnDefinitions) {
-            columns = columnDefinitions;
-            if (initialized) {
-                invalidateAllRows();
-                createColumnHeaders();
-                removeCssRules();
-                createCssRules();
-                resizeCanvas();
-                applyColumnWidths();
-                handleScroll();
-            }
-        }
-
-        function getOptions() {
-            return options;
-        }
-
-        function setOptions(args) {
-            if (!getEditorLock().commitCurrentEdit()) {
-                return;
-            }
-
-            makeActiveCellNormal();
-
-            if (options.enableAddRow !== args.enableAddRow) {
-                invalidateRow(getDataLength());
-            }
-
-            options = $.extend(options, args);
-
-            $viewport.css("overflow-y", options.autoHeight ? "hidden" : "auto");
-            render();
-        }
-
-        function setData(newData, scrollToTop) {
-            data = newData;
-            invalidateAllRows();
-            updateRowCount();
-            if (scrollToTop) {
-                scrollTo(0);
-            }
-        }
-
-        function getData() {
-            return data;
-        }
-
-        function getDataLength() {
-            if (data.getLength) {
-                return data.getLength();
-            } else {
-                return data.length;
-            }
-        }
-
-        function getDataItem(i) {
-            if (data.getItem) {
-                return data.getItem(i);
-            } else {
-                return data[i];
-            }
-        }
-
-        function getTopPanel() {
-            return $topPanel[0];
-        }
-
-        function showTopPanel() {
-            options.showTopPanel = true;
-            $topPanelScroller.slideDown("fast", resizeCanvas);
-        }
-
-        function hideTopPanel() {
-            options.showTopPanel = false;
-            $topPanelScroller.slideUp("fast", resizeCanvas);
-        }
-
-        function showHeaderRowColumns() {
-            options.showHeaderRow = true;
-            $headerRowScroller.slideDown("fast", resizeCanvas);
-        }
-
-        function hideHeaderRowColumns() {
-            options.showHeaderRow = false;
-            $headerRowScroller.slideUp("fast", resizeCanvas);
-        }
-
-        //////////////////////////////////////////////////////////////////////////////////////////////
-        // Rendering / Scrolling
-
-        function scrollTo(y) {
-            var oldOffset = offset;
-
-            page = Math.min(n - 1, Math.floor(y / ph));
-            offset = Math.round(page * cj);
-            var newScrollTop = y - offset;
-
-            if (offset != oldOffset) {
-                var range = getVisibleRange(newScrollTop);
-                cleanupRows(range.top, range.bottom);
-                updateRowPositions();
-            }
-
-            if (prevScrollTop != newScrollTop) {
-                scrollDir = (prevScrollTop + oldOffset < newScrollTop + offset) ? 1 : -1;
-                $viewport[0].scrollTop = (lastRenderedScrollTop = scrollTop = prevScrollTop = newScrollTop);
-
-                trigger(self.onViewportChanged, {});
-            }
-        }
-
-        function defaultFormatter(row, cell, value, columnDef, dataContext) {
-            if (value == null) {
-                return "";
-            } else {
-                return value.toString().replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
-            }
-        }
-
-        function getFormatter(row, column) {
-            var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);
-
-            // look up by id, then index
-            var columnOverrides = rowMetadata &&
-                    rowMetadata.columns &&
-                    (rowMetadata.columns[column.id] || rowMetadata.columns[getColumnIndex(column.id)]);
-
-            return (columnOverrides && columnOverrides.formatter) ||
-                    (rowMetadata && rowMetadata.formatter) ||
-                    column.formatter ||
-                    (options.formatterFactory && options.formatterFactory.getFormatter(column)) ||
-                    options.defaultFormatter;
-        }
-
-        function getEditor(row, cell) {
-            var column = columns[cell];
-            var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);
-            var columnMetadata = rowMetadata && rowMetadata.columns;
-
-            if (columnMetadata && columnMetadata[column.id] && columnMetadata[column.id].editor !== undefined) {
-                return columnMetadata[column.id].editor;
-            }
-            if (columnMetadata && columnMetadata[cell] && columnMetadata[cell].editor !== undefined) {
-                return columnMetadata[cell].editor;
-            }
-
-            return column.editor || (options.editorFactory && options.editorFactory.getEditor(column));
-        }
-
-        function getDataItemValueForColumn(item, columnDef) {
-            if (options.dataItemColumnValueExtractor) {
-                return options.dataItemColumnValueExtractor(item, columnDef);
-            }
-            return item[columnDef.field];
-        }
-
-        function appendRowHtml(stringArray, row) {
-            var d = getDataItem(row);
-            var dataLoading = row < getDataLength() && !d;
-            var cellCss;
-            var rowCss = "slick-row " +
-                    (dataLoading ? " loading" : "") +
-                    (row % 2 == 1 ? " odd" : " even");
-
-            var metadata = data.getItemMetadata && data.getItemMetadata(row);
-
-            if (metadata && metadata.cssClasses) {
-                rowCss += " " + metadata.cssClasses;
-            }
-
-            stringArray.push("<div class='ui-widget-content " + rowCss + "' row='" + row + "' style='top:" + (options.rowHeight * row - offset) + "px'>");
-
-            var colspan, m;
-            for (var i = 0, cols = columns.length; i < cols; i++) {
-                m = columns[i];
-                colspan = getColspan(row, i);  // TODO:  don't calc unless we have to
-                cellCss = "slick-cell l" + i + " r" + Math.min(columns.length - 1, i + colspan - 1) + (m.cssClass ? " " + m.cssClass : "");
-                if (row === activeRow && i === activeCell) {
-                    cellCss += (" active");
-                }
-
-                // TODO:  merge them together in the setter
-                for (var key in cellCssClasses) {
-                    if (cellCssClasses[key][row] && cellCssClasses[key][row][m.id]) {
-                        cellCss += (" " + cellCssClasses[key][row][m.id]);
-                    }
-                }
-
-                stringArray.push("<div class='" + cellCss + "'>");
-
-                // if there is a corresponding row (if not, this is the Add New row or this data hasn't been loaded yet)
-                if (d) {
-                    stringArray.push(getFormatter(row, m)(row, i, getDataItemValueForColumn(d, m), m, d));
-                }
-
-                stringArray.push("</div>");
-
-                if (colspan) {
-                    i += (colspan - 1);
-                }
-            }
-
-            stringArray.push("</div>");
-        }
-
-        function cleanupRows(rangeToKeep) {
-            for (var i in rowsCache) {
-                if (((i = parseInt(i, 10)) !== activeRow) && (i < rangeToKeep.top || i > rangeToKeep.bottom)) {
-                    removeRowFromCache(i);
-                }
-            }
-        }
-
-        function invalidate() {
-            updateRowCount();
-            invalidateAllRows();
-            render();
-        }
-
-        function invalidateAllRows() {
-            if (currentEditor) {
-                makeActiveCellNormal();
-            }
-            for (var row in rowsCache) {
-                removeRowFromCache(row);
-            }
-        }
-
-        function removeRowFromCache(row) {
-            var node = rowsCache[row];
-            if (!node) {
-                return;
-            }
-            $canvas[0].removeChild(node);
-            delete rowsCache[row];
-            delete postProcessedRows[row];
-            renderedRows--;
-            counter_rows_removed++;
-        }
-
-        function invalidateRows(rows) {
-            var i, rl;
-            if (!rows || !rows.length) {
-                return;
-            }
-            scrollDir = 0;
-            for (i = 0, rl = rows.length; i < rl; i++) {
-                if (currentEditor && activeRow === rows[i]) {
-                    makeActiveCellNormal();
-                }
-                if (rowsCache[rows[i]]) {
-                    removeRowFromCache(rows[i]);
-                }
-            }
-        }
-
-        function invalidateRow(row) {
-            invalidateRows([row]);
-        }
-
-        function updateCell(row, cell) {
-            var cellNode = getCellNode(row, cell);
-            if (!cellNode) {
-                return;
-            }
-
-            var m = columns[cell], d = getDataItem(row);
-            if (currentEditor && activeRow === row && activeCell === cell) {
-                currentEditor.loadValue(d);
-            } else {
-                cellNode.innerHTML = d ? getFormatter(row, m)(row, cell, getDataItemValueForColumn(d, m), m, d) : "";
-                invalidatePostProcessingResults(row);
-            }
-        }
-
-        function updateRow(row) {
-            if (!rowsCache[row]) {
-                return;
-            }
-
-            var columnIndex = 0
-            $(rowsCache[row]).children().each(function (i) {
-                var m = columns[columnIndex], d = getDataItem(row);
-                if (row === activeRow && i === activeCell && currentEditor) {
-                    currentEditor.loadValue(getDataItem(activeRow));
-                } else if (d) {
-                    this.innerHTML = getFormatter(row, m)(row, columnIndex, getDataItemValueForColumn(d, m), m, getDataItem(row));
-                } else {
-                    this.innerHTML = "";
-                }
-
-                columnIndex += getColspan(row, i);
-            });
-
-            invalidatePostProcessingResults(row);
-        }
-
-        function getViewportHeight() {
-            return parseFloat($.css($container[0], "height", true)) -
-                    parseFloat($.css($headerScroller[0], "height")) - getVBoxDelta($headerScroller) -
-                    (options.showTopPanel ? options.topPanelHeight + getVBoxDelta($topPanelScroller) : 0) -
-                    (options.showHeaderRow ? options.headerRowHeight + getVBoxDelta($headerRowScroller) : 0);
-        }
-
-        function resizeCanvas() {
-            if (!initialized) {
-                return;
-            }
-            if (options.autoHeight) {
-                viewportH = options.rowHeight * (getDataLength() + (options.enableAddRow ? 1 : 0) + (options.leaveSpaceForNewRows ? numVisibleRows - 1 : 0));
-            } else {
-                viewportH = getViewportHeight();
-            }
-
-            numVisibleRows = Math.ceil(viewportH / options.rowHeight);
-            viewportW = parseFloat($.css($container[0], "width", true));
-            $viewport.height(viewportH);
-
-            if (options.forceFitColumns) {
-                autosizeColumns();
-            }
-
-            updateRowCount();
-            render();
-        }
-
-        function updateRowCount() {
-            if (!initialized) {
-                return;
-            }
-            numberOfRows = getDataLength() +
-                    (options.enableAddRow ? 1 : 0) +
-                    (options.leaveSpaceForNewRows ? numVisibleRows - 1 : 0);
-
-            var oldViewportHasVScroll = viewportHasVScroll;
-            // with autoHeight, we do not need to accommodate the vertical scroll bar
-            viewportHasVScroll = !options.autoHeight && (numberOfRows * options.rowHeight > viewportH);
-
-            // remove the rows that are now outside of the data range
-            // this helps avoid redundant calls to .removeRow() when the size of the data decreased by thousands of rows
-            var l = options.enableAddRow ? getDataLength() : getDataLength() - 1;
-            for (var i in rowsCache) {
-                if (i >= l) {
-                    removeRowFromCache(i);
-                }
-            }
-
-            var oldH = h;
-            th = Math.max(options.rowHeight * numberOfRows, viewportH - scrollbarDimensions.height);
-            if (th < maxSupportedCssHeight) {
-                // just one page
-                h = ph = th;
-                n = 1;
-                cj = 0;
-            } else {
-                // break into pages
-                h = maxSupportedCssHeight;
-                ph = h / 100;
-                n = Math.floor(th / ph);
-                cj = (th - h) / (n - 1);
-            }
-
-            if (h !== oldH) {
-                $canvas.css("height", h);
-                scrollTop = $viewport[0].scrollTop;
-            }
-
-            var oldScrollTopInRange = (scrollTop + offset <= th - viewportH);
-
-            if (th == 0 || scrollTop == 0) {
-                page = offset = 0;
-            } else if (oldScrollTopInRange) {
-                // maintain virtual position
-                scrollTo(scrollTop + offset);
-            } else {
-                // scroll to bottom
-                scrollTo(th - viewportH);
-            }
-
-            if (h != oldH && options.autoHeight) {
-                resizeCanvas();
-            }
-
-            if (options.forceFitColumns && oldViewportHasVScroll != viewportHasVScroll) {
-                autosizeColumns();
-            }
-            updateCanvasWidth(false);
-        }
-
-        function getVisibleRange(viewportTop) {
-            if (viewportTop == null) {
-                viewportTop = scrollTop;
-            }
-
-            return {
-                top: Math.floor((viewportTop + offset) / options.rowHeight),
-                bottom: Math.ceil((viewportTop + offset + viewportH) / options.rowHeight)
-            };
-        }
-
-        function getRenderedRange(viewportTop) {
-            var range = getVisibleRange(viewportTop);
-            var buffer = Math.round(viewportH / options.rowHeight);
-            var minBuffer = 3;
-
-            if (scrollDir == -1) {
-                range.top -= buffer;
-                range.bottom += minBuffer;
-            } else if (scrollDir == 1) {
-                range.top -= minBuffer;
-                range.bottom += buffer;
-            } else {
-                range.top -= minBuffer;
-                range.bottom += minBuffer;
-            }
-
-            range.top = Math.max(0, range.top);
-            range.bottom = Math.min(options.enableAddRow ? getDataLength() : getDataLength() - 1, range.bottom);
-
-            return range;
-        }
-
-        function renderRows(range) {
-            var i, l,
-                    parentNode = $canvas[0],
-                    rowsBefore = renderedRows,
-                    stringArray = [],
-                    rows = [],
-                    startTimestamp = new Date(),
-                    needToReselectCell = false;
-
-            for (i = range.top; i <= range.bottom; i++) {
-                if (rowsCache[i]) {
-                    continue;
-                }
-                renderedRows++;
-                rows.push(i);
-                appendRowHtml(stringArray, i);
-                if (activeCellNode && activeRow === i) {
-                    needToReselectCell = true;
-                }
-                counter_rows_rendered++;
-            }
-
-            if (!rows.length) {
-                return;
-            }
-
-            var x = document.createElement("div");
-            x.innerHTML = stringArray.join("");
-
-            for (i = 0, l = x.childNodes.length; i < l; i++) {
-                rowsCache[rows[i]] = parentNode.appendChild(x.firstChild);
-            }
-
-            if (needToReselectCell) {
-                activeCellNode = getCellNode(activeRow, activeCell);
-            }
-
-            if (renderedRows - rowsBefore > 5) {
-                avgRowRenderTime = (new Date() - startTimestamp) / (renderedRows - rowsBefore);
-            }
-        }
-
-        function startPostProcessing() {
-            if (!options.enableAsyncPostRender) {
-                return;
-            }
-            clearTimeout(h_postrender);
-            h_postrender = setTimeout(asyncPostProcessRows, options.asyncPostRenderDelay);
-        }
-
-        function invalidatePostProcessingResults(row) {
-            delete postProcessedRows[row];
-            postProcessFromRow = Math.min(postProcessFromRow, row);
-            postProcessToRow = Math.max(postProcessToRow, row);
-            startPostProcessing();
-        }
-
-        function updateRowPositions() {
-            for (var row in rowsCache) {
-                rowsCache[row].style.top = (row * options.rowHeight - offset) + "px";
-            }
-        }
-
-        function render() {
-            if (!initialized) {
-                return;
-            }
-            var visible = getVisibleRange();
-            var rendered = getRenderedRange();
-
-            // remove rows no longer in the viewport
-            cleanupRows(rendered);
-
-            // add new rows
-            renderRows(rendered);
-
-            postProcessFromRow = visible.top;
-            postProcessToRow = Math.min(options.enableAddRow ? getDataLength() : getDataLength() - 1, visible.bottom);
-            startPostProcessing();
-
-            lastRenderedScrollTop = scrollTop;
-            h_render = null;
-        }
-
-        function handleScroll() {
-            scrollTop = $viewport[0].scrollTop;
-            var scrollLeft = $viewport[0].scrollLeft;
-            var scrollDist = Math.abs(scrollTop - prevScrollTop);
-
-            if (scrollLeft !== prevScrollLeft) {
-                prevScrollLeft = scrollLeft;
-                $headerScroller[0].scrollLeft = scrollLeft;
-                $topPanelScroller[0].scrollLeft = scrollLeft;
-                $headerRowScroller[0].scrollLeft = scrollLeft;
-            }
-
-            if (scrollDist) {
-                scrollDir = prevScrollTop < scrollTop ? 1 : -1;
-                prevScrollTop = scrollTop;
-
-                // switch virtual pages if needed
-                if (scrollDist < viewportH) {
-                    scrollTo(scrollTop + offset);
-                } else {
-                    var oldOffset = offset;
-                    page = Math.min(n - 1, Math.floor(scrollTop * ((th - viewportH) / (h - viewportH)) * (1 / ph)));
-                    offset = Math.round(page * cj);
-                    if (oldOffset != offset) {
-                        invalidateAllRows();
-                    }
-                }
-
-                if (h_render) {
-                    clearTimeout(h_render);
-                }
-
-                if (Math.abs(lastRenderedScrollTop - scrollTop) < viewportH) {
-                    render();
-                } else {
-                    h_render = setTimeout(render, 50);
-                }
-
-                trigger(self.onViewportChanged, {});
-            }
-
-            trigger(self.onScroll, {scrollLeft: scrollLeft, scrollTop: scrollTop});
-        }
-
-        function asyncPostProcessRows() {
-            while (postProcessFromRow <= postProcessToRow) {
-                var row = (scrollDir >= 0) ? postProcessFromRow++ : postProcessToRow--;
-                var rowNode = rowsCache[row];
-                if (!rowNode || postProcessedRows[row] || row >= getDataLength()) {
-                    continue;
-                }
-
-                var d = getDataItem(row), cellNodes = rowNode.childNodes;
-                for (var i = 0, j = 0, l = columns.length; i < l; ++i) {
-                    var m = columns[i];
-                    if (m.asyncPostRender) {
-                        m.asyncPostRender(cellNodes[j], postProcessFromRow, d, m);
-                    }
-                    ++j;
-                }
-
-                postProcessedRows[row] = true;
-                h_postrender = setTimeout(asyncPostProcessRows, options.asyncPostRenderDelay);
-                return;
-            }
-        }
-
-        function updateCellCssStylesOnRenderedRows(addedHash, removedHash) {
-            var node, columnId, addedRowHash, removedRowHash;
-            for (var row in rowsCache) {
-                removedRowHash = removedHash && removedHash[row];
-                addedRowHash = addedHash && addedHash[row];
-
-                if (removedRowHash) {
-                    for (columnId in removedRowHash) {
-                        if (!addedRowHash || removedRowHash[columnId] != addedRowHash[columnId]) {
-                            node = getCellNode(row, getColumnIndex(columnId));
-                            if (node) {
-                                $(node).removeClass(removedRowHash[columnId]);
-                            }
-                        }
-                    }
-                }
-
-                if (addedRowHash) {
-                    for (columnId in addedRowHash) {
-                        if (!removedRowHash || removedRowHash[columnId] != addedRowHash[columnId]) {
-                            node = getCellNode(row, getColumnIndex(columnId));
-                            if (node) {
-                                $(node).addClass(addedRowHash[columnId]);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        function addCellCssStyles(key, hash) {
-            if (cellCssClasses[key]) {
-                throw "addCellCssStyles: cell CSS hash with key '" + key + "' already exists.";
-            }
-
-            cellCssClasses[key] = hash;
-            updateCellCssStylesOnRenderedRows(hash, null);
-
-            trigger(self.onCellCssStylesChanged, {"key": key, "hash": hash});
-        }
-
-        function removeCellCssStyles(key) {
-            if (!cellCssClasses[key]) {
-                return;
-            }
-
-            updateCellCssStylesOnRenderedRows(null, cellCssClasses[key]);
-            delete cellCssClasses[key];
-
-            trigger(self.onCellCssStylesChanged, {"key": key, "hash": null});
-        }
-
-        function setCellCssStyles(key, hash) {
-            var prevHash = cellCssClasses[key];
-
-            cellCssClasses[key] = hash;
-            updateCellCssStylesOnRenderedRows(hash, prevHash);
-
-            trigger(self.onCellCssStylesChanged, {"key": key, "hash": hash});
-        }
-
-        function getCellCssStyles(key) {
-            return cellCssClasses[key];
-        }
-
-        function flashCell(row, cell, speed) {
-            speed = speed || 100;
-            if (rowsCache[row]) {
-                var $cell = $(getCellNode(row, cell));
-
-                function toggleCellClass(times) {
-                    if (!times) {
-                        return;
-                    }
-                    setTimeout(function () {
-                        $cell.queue(function () {
-                            $cell.toggleClass(options.cellFlashingCssClass).dequeue();
-                            toggleCellClass(times - 1);
-                        });
-                    },
-                            speed);
-                }
-
-                toggleCellClass(4);
-            }
-        }
-
-        //////////////////////////////////////////////////////////////////////////////////////////////
-        // Interactivity
-
-        function handleDragInit(e, dd) {
-            var cell = getCellFromEvent(e);
-            if (!cell || !cellExists(cell.row, cell.cell)) {
-                return false;
-            }
-
-            retval = trigger(self.onDragInit, dd, e);
-            if (e.isImmediatePropagationStopped()) {
-                return retval;
-            }
-
-            // if nobody claims to be handling drag'n'drop by stopping immediate propagation,
-            // cancel out of it
-            return false;
-        }
-
-        function handleDragStart(e, dd) {
-            var cell = getCellFromEvent(e);
-            if (!cell || !cellExists(cell.row, cell.cell)) {
-                return false;
-            }
-
-            var retval = trigger(self.onDragStart, dd, e);
-            if (e.isImmediatePropagationStopped()) {
-                return retval;
-            }
-
-            return false;
-        }
-
-        function handleDrag(e, dd) {
-            return trigger(self.onDrag, dd, e);
-        }
-
-        function handleDragEnd(e, dd) {
-            trigger(self.onDragEnd, dd, e);
-        }
-
-        function handleKeyDown(e) {
-            trigger(self.onKeyDown, {row: activeRow, cell: activeCell}, e);
-            var handled = e.isImmediatePropagationStopped();
-
-            if (!handled) {
-                if (!e.shiftKey && !e.altKey && !e.ctrlKey) {
-                    if (e.which == 27) {
-                        if (!getEditorLock().isActive()) {
-                            return; // no editing mode to cancel, allow bubbling and default processing (exit without cancelling the event)
-                        }
-                        cancelEditAndSetFocus();
-                    } else if (e.which == 37) {
-                        navigateLeft();
-                    } else if (e.which == 39) {
-                        navigateRight();
-                    } else if (e.which == 38) {
-                        navigateUp();
-                    } else if (e.which == 40) {
-                        navigateDown();
-                    } else if (e.which == 9) {
-                        navigateNext();
-                    } else if (e.which == 13) {
-                        if (options.editable) {
-                            if (currentEditor) {
-                                // adding new row
-                                if (activeRow === getDataLength()) {
-                                    navigateDown();
-                                }
-                                else {
-                                    commitEditAndSetFocus();
-                                }
-                            } else {
-                                if (getEditorLock().commitCurrentEdit()) {
-                                    makeActiveCellEditable();
-                                }
-                            }
-                        }
-                    } else {
-                        return;
-                    }
-                } else if (e.which == 9 && e.shiftKey && !e.ctrlKey && !e.altKey) {
-                    navigatePrev();
-                } else {
-                    return;
-                }
-            }
-
-            // the event has been handled so don't let parent element (bubbling/propagation) or browser (default) handle it
-            e.stopPropagation();
-            e.preventDefault();
-            try {
-                e.originalEvent.keyCode = 0; // prevent default behaviour for special keys in IE browsers (F3, F5, etc.)
-            }
-            // ignore exceptions - setting the original event's keycode throws access denied exception for "Ctrl"
-            // (hitting control key only, nothing else), "Shift" (maybe others)
-            catch (error) {
-            }
-        }
-
-        function handleClick(e) {
-            if (!currentEditor) {
-                setFocus();
-            }
-
-            var cell = getCellFromEvent(e);
-            if (!cell || (currentEditor !== null && activeRow == cell.row && activeCell == cell.cell)) {
-                return;
-            }
-
-            trigger(self.onClick, {row: cell.row, cell: cell.cell}, e);
-            if (e.isImmediatePropagationStopped()) {
-                return;
-            }
-
-            if (canCellBeActive(cell.row, cell.cell)) {
-                if (!getEditorLock().isActive() || getEditorLock().commitCurrentEdit()) {
-                    scrollRowIntoView(cell.row, false);
-                    setActiveCellInternal(getCellNode(cell.row, cell.cell), (cell.row === getDataLength()) || options.autoEdit);
-                }
-            }
-        }
-
-        function handleContextMenu(e) {
-            var $cell = $(e.target).closest(".slick-cell", $canvas);
-            if ($cell.length === 0) {
-                return;
-            }
-
-            // are we editing this cell?
-            if (activeCellNode === $cell[0] && currentEditor !== null) {
-                return;
-            }
-
-            trigger(self.onContextMenu, {}, e);
-        }
-
-        function handleDblClick(e) {
-            var cell = getCellFromEvent(e);
-            if (!cell || (currentEditor !== null && activeRow == cell.row && activeCell == cell.cell)) {
-                return;
-            }
-
-            trigger(self.onDblClick, {row: cell.row, cell: cell.cell}, e);
-            if (e.isImmediatePropagationStopped()) {
-                return;
-            }
-
-            if (options.editable) {
-                gotoCell(cell.row, cell.cell, true);
-            }
-        }
-
-        function handleHeaderContextMenu(e) {
-            var $header = $(e.target).closest(".slick-header-column", ".slick-header-columns");
-            var column = $header && columns[self.getColumnIndex($header.data("fieldId"))];
-            trigger(self.onHeaderContextMenu, {column: column}, e);
-        }
-
-        function handleHeaderClick(e) {
-            var $header = $(e.target).closest(".slick-header-column", ".slick-header-columns");
-            var column = $header && columns[self.getColumnIndex($header.data("fieldId"))];
-            if (column) {
-                trigger(self.onHeaderClick, {column: column}, e);
-            }
-        }
-
-        function handleMouseEnter(e) {
-            trigger(self.onMouseEnter, {}, e);
-        }
-
-        function handleMouseLeave(e) {
-            trigger(self.onMouseLeave, {}, e);
-        }
-
-        function cellExists(row, cell) {
-            return !(row < 0 || row >= getDataLength() || cell < 0 || cell >= columns.length);
-        }
-
-        function getCellFromPoint(x, y) {
-            var row = Math.floor((y + offset) / options.rowHeight);
-            var cell = 0;
-
-            var w = 0;
-            for (var i = 0; i < columns.length && w < x; i++) {
-                w += columns[i].width;
-                cell++;
-            }
-
-            if (cell < 0) {
-                cell = 0;
-            }
-
-            return {row: row, cell: cell - 1};
-        }
-
-        function getCellFromNode(node) {
-            // read column number from .l<columnNumber> CSS class
-            var cls = /l\d+/.exec(node.className);
-            if (!cls) {
-                throw "getCellFromNode: cannot get cell - " + node.className;
-            }
-            return parseInt(cls[0].substr(1, cls[0].length - 1), 10);
-        }
-
-        function getCellFromEvent(e) {
-            var $cell = $(e.target).closest(".slick-cell", $canvas);
-            if (!$cell.length) {
-                return null;
-            }
-
-            return {
-                row: $cell.parent().attr("row") | 0,
-                cell: getCellFromNode($cell[0])
-            };
-        }
-
-        function getCellNodeBox(row, cell) {
-            if (!cellExists(row, cell)) {
-                return null;
-            }
-
-            var y1 = row * options.rowHeight - offset;
-            var y2 = y1 + options.rowHeight - 1;
-            var x1 = 0;
-            for (var i = 0; i < cell; i++) {
-                x1 += columns[i].width;
-            }
-            var x2 = x1 + columns[cell].width;
-
-            return {
-                top: y1,
-                left: x1,
-                bottom: y2,
-                right: x2
-            };
-        }
-
-        //////////////////////////////////////////////////////////////////////////////////////////////
-        // Cell switching
-
-        function resetActiveCell() {
-            setActiveCellInternal(null, false);
-        }
-
-        function setFocus() {
-            $focusSink[0].focus();
-        }
-
-        function scrollActiveCellIntoView() {
-            if (activeCellNode) {
-                var left = $(activeCellNode).position().left,
-                        right = left + $(activeCellNode).outerWidth(),
-                        scrollLeft = $viewport.scrollLeft(),
-                        scrollRight = scrollLeft + $viewport.width();
-
-                if (left < scrollLeft) {
-                    $viewport.scrollLeft(left);
-                } else if (right > scrollRight) {
-                    $viewport.scrollLeft(Math.min(left, right - $viewport[0].clientWidth));
-                }
-            }
-        }
-
-        function setActiveCellInternal(newCell, editMode) {
-            if (activeCellNode !== null) {
-                makeActiveCellNormal();
-                $(activeCellNode).removeClass("active");
-            }
-
-            var activeCellChanged = (activeCellNode !== newCell);
-            activeCellNode = newCell;
-
-            if (activeCellNode != null) {
-                activeRow = parseInt($(activeCellNode).parent().attr("row"));
-                activeCell = activePosX = getCellFromNode(activeCellNode);
-
-                $(activeCellNode).addClass("active");
-
-                if (options.editable && editMode && isCellPotentiallyEditable(activeRow, activeCell)) {
-                    clearTimeout(h_editorLoader);
-
-                    if (options.asyncEditorLoading) {
-                        h_editorLoader = setTimeout(function () {
-                            makeActiveCellEditable();
-                        }, options.asyncEditorLoadDelay);
-                    } else {
-                        makeActiveCellEditable();
-                    }
-                } else {
-                    setFocus();
-                }
-            } else {
-                activeRow = activeCell = null;
-            }
-
-            if (activeCellChanged) {
-                scrollActiveCellIntoView();
-                trigger(self.onActiveCellChanged, getActiveCell());
-            }
-        }
-
-        function clearTextSelection() {
-            if (document.selection && document.selection.empty) {
-                document.selection.empty();
-            } else if (window.getSelection) {
-                var sel = window.getSelection();
-                if (sel && sel.removeAllRanges) {
-                    sel.removeAllRanges();
-                }
-            }
-        }
-
-        function isCellPotentiallyEditable(row, cell) {
-            // is the data for this row loaded?
-            if (row < getDataLength() && !getDataItem(row)) {
-                return false;
-            }
-
-            // are we in the Add New row?  can we create new from this cell?
-            if (columns[cell].cannotTriggerInsert && row >= getDataLength()) {
-                return false;
-            }
-
-            // does this cell have an editor?
-            if (!getEditor(row, cell)) {
-                return false;
-            }
-
-            return true;
-        }
-
-        function makeActiveCellNormal() {
-            if (!currentEditor) {
-                return;
-            }
-            trigger(self.onBeforeCellEditorDestroy, {editor: currentEditor});
-            currentEditor.destroy();
-            currentEditor = null;
-
-            if (activeCellNode) {
-                var d = getDataItem(activeRow);
-                $(activeCellNode).removeClass("editable invalid");
-                if (d) {
-                    var column = columns[activeCell];
-                    var formatter = getFormatter(activeRow, column);
-                    activeCellNode.innerHTML = formatter(activeRow, activeCell, getDataItemValueForColumn(d, column), column, getDataItem(activeRow));
-                    invalidatePostProcessingResults(activeRow);
-                }
-            }
-
-            // if there previously was text selected on a page (such as selected text in the edit cell just removed),
-            // IE can't set focus to anything else correctly
-            if ($.browser.msie) {
-                clearTextSelection();
-            }
-
-            getEditorLock().deactivate(editController);
-        }
-
-        function makeActiveCellEditable(editor) {
-            if (!activeCellNode) {
-                return;
-            }
-            if (!options.editable) {
-                throw "Grid : makeActiveCellEditable : should never get called when options.editable is false";
-            }
-
-            // cancel pending async call if there is one
-            clearTimeout(h_editorLoader);
-
-            if (!isCellPotentiallyEditable(activeRow, activeCell)) {
-                return;
-            }
-
-            var columnDef = columns[activeCell];
-            var item = getDataItem(activeRow);
-
-            if (trigger(self.onBeforeEditCell, {row: activeRow, cell: activeCell, item: item, column: columnDef}) === false) {
-                setFocus();
-                return;
-            }
-
-            getEditorLock().activate(editController);
-            $(activeCellNode).addClass("editable");
-
-            // don't clear the cell if a custom editor is passed through
-            if (!editor) {
-                activeCellNode.innerHTML = "";
-            }
-
-            currentEditor = new (editor || getEditor(activeRow, activeCell))({
-                grid: self,
-                gridPosition: absBox($container[0]),
-                position: absBox(activeCellNode),
-                container: activeCellNode,
-                column: columnDef,
-                item: item || {},
-                commitChanges: commitEditAndSetFocus,
-                cancelChanges: cancelEditAndSetFocus
-            });
-
-            if (item) {
-                currentEditor.loadValue(item);
-            }
-
-            serializedEditorValue = currentEditor.serializeValue();
-
-            if (currentEditor.position) {
-                handleActiveCellPositionChange();
-            }
-        }
-
-        function commitEditAndSetFocus() {
-            // if the commit fails, it would do so due to a validation error
-            // if so, do not steal the focus from the editor
-            if (getEditorLock().commitCurrentEdit()) {
-                setFocus();
-                if (options.autoEdit) {
-                    navigateDown();
-                }
-            }
-        }
-
-        function cancelEditAndSetFocus() {
-            if (getEditorLock().cancelCurrentEdit()) {
-                setFocus();
-            }
-        }
-
-        function absBox(elem) {
-            var box = {
-                top: elem.offsetTop,
-                left: elem.offsetLeft,
-                bottom: 0,
-                right: 0,
-                width: $(elem).outerWidth(),
-                height: $(elem).outerHeight(),
-                visible: true};
-            box.bottom = box.top + box.height;
-            box.right = box.left + box.width;
-
-            // walk up the tree
-            var offsetParent = elem.offsetParent;
-            while ((elem = elem.parentNode) != document.body) {
-                if (box.visible && elem.scrollHeight != elem.offsetHeight && $(elem).css("overflowY") != "visible") {
-                    box.visible = box.bottom > elem.scrollTop && box.top < elem.scrollTop + elem.clientHeight;
-                }
-
-                if (box.visible && elem.scrollWidth != elem.offsetWidth && $(elem).css("overflowX") != "visible") {
-                    box.visible = box.right > elem.scrollLeft && box.left < elem.scrollLeft + elem.clientWidth;
-                }
-
-                box.left -= elem.scrollLeft;
-                box.top -= elem.scrollTop;
-
-                if (elem === offsetParent) {
-                    box.left += elem.offsetLeft;
-                    box.top += elem.offsetTop;
-                    offsetParent = elem.offsetParent;
-                }
-
-                box.bottom = box.top + box.height;
-                box.right = box.left + box.width;
-            }
-
-            return box;
-        }
-
-        function getActiveCellPosition() {
-            return absBox(activeCellNode);
-        }
-
-        function getGridPosition() {
-            return absBox($container[0])
-        }
-
-        function handleActiveCellPositionChange() {
-            if (!activeCellNode) {
-                return;
-            }
-
-            trigger(self.onActiveCellPositionChanged, {});
-
-            if (currentEditor) {
-                var cellBox = getActiveCellPosition();
-                if (currentEditor.show && currentEditor.hide) {
-                    if (!cellBox.visible) {
-                        currentEditor.hide();
-                    } else {
-                        currentEditor.show();
-                    }
-                }
-
-                if (currentEditor.position) {
-                    currentEditor.position(cellBox);
-                }
-            }
-        }
-
-        function getCellEditor() {
-            return currentEditor;
-        }
-
-        function getActiveCell() {
-            if (!activeCellNode) {
-                return null;
-            } else {
-                return {row: activeRow, cell: activeCell};
-            }
-        }
-
-        function getActiveCellNode() {
-            return activeCellNode;
-        }
-
-        function scrollRowIntoView(row, doPaging) {
-            var rowAtTop = row * options.rowHeight;
-            var rowAtBottom = (row + 1) * options.rowHeight - viewportH + (viewportHasHScroll ? scrollbarDimensions.height : 0);
-
-            // need to page down?
-            if ((row + 1) * options.rowHeight > scrollTop + viewportH + offset) {
-                scrollTo(doPaging ? rowAtTop : rowAtBottom);
-                render();
-            }
-            // or page up?
-            else if (row * options.rowHeight < scrollTop + offset) {
-                scrollTo(doPaging ? rowAtBottom : rowAtTop);
-                render();
-            }
-        }
-
-        function getColspan(row, cell) {
-            var metadata = data.getItemMetadata && data.getItemMetadata(row);
-            if (!metadata || !metadata.columns) {
-                return 1;
-            }
-
-            var columnData = metadata.columns[columns[cell].id] || metadata.columns[cell];
-            var colspan = (columnData && columnData.colspan);
-            if (colspan === "*") {
-                colspan = columns.length - cell;
-            }
-            return (colspan || 1);
-        }
-
-        function findFirstFocusableCell(row) {
-            var cell = 0;
-            while (cell < columns.length) {
-                if (canCellBeActive(row, cell)) {
-                    return cell;
-                }
-                cell += getColspan(row, cell);
-            }
-            return null;
-        }
-
-        function findLastFocusableCell(row) {
-            var cell = 0;
-            var lastFocusableCell = null;
-            while (cell < columns.length) {
-                if (canCellBeActive(row, cell)) {
-                    lastFocusableCell = cell;
-                }
-                cell += getColspan(row, cell);
-            }
-            return lastFocusableCell;
-        }
-
-        function gotoRight(row, cell, posX) {
-            if (cell >= columns.length) {
-                return null;
-            }
-
-            do {
-                cell += getColspan(row, cell);
-            }
-            while (cell < columns.length && !canCellBeActive(row, cell));
-
-            if (cell < columns.length) {
-                return {
-                    "row": row,
-                    "cell": cell,
-                    "posX": cell
-                };
-            }
-            return null;
-        }
-
-        function gotoLeft(row, cell, posX) {
-            if (cell <= 0) {
-                return null;
-            }
-
-            var firstFocusableCell

<TRUNCATED>

[41/50] [abbrv] incubator-nifi git commit: NIFI-27: - Upgrading jQuery and jQuery UI. - Replacing all instances of Deferred.then with Deferred.done/fail due to API change introduced in 1.8. - Restoring line returns between public methods. - Upgrading jqu

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.css
index a1d0caf..91363b8 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.css
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.css
@@ -2,10 +2,18 @@
     position: relative;
 }
 
+.minicolors-sprite {
+    background-image: url(data:image/png;base64,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

<TRUNCATED>

[17/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of D3.

Posted by mc...@apache.org.
NIFI-27:
- Latest version of D3.


Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/8a0e2cee
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/8a0e2cee
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/8a0e2cee

Branch: refs/heads/develop
Commit: 8a0e2cee4a2ccdf0f253922a3f900409821e4776
Parents: 4c959f7
Author: Matt Gilman <ma...@gmail.com>
Authored: Wed Dec 10 11:26:27 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Wed Dec 10 14:36:35 2014 -0500

----------------------------------------------------------------------
 .../nifi-web-ui/src/main/webapp/js/d3/LICENSE   |   52 +-
 .../nifi-web-ui/src/main/webapp/js/d3/d3.min.js | 5390 +-----------------
 .../src/main/webapp/js/nf/nf-status-history.js  |   62 +-
 3 files changed, 42 insertions(+), 5462 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/8a0e2cee/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/LICENSE
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/LICENSE b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/LICENSE
old mode 100755
new mode 100644
index 83602d5..8301346
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/LICENSE
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/LICENSE
@@ -1,26 +1,26 @@
-Copyright (c) 2013, 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.
+Copyright (c) 2010-2014, 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.


[49/50] [abbrv] incubator-nifi git commit: NIFI-27: - Upgrading jQuery, jQuery UI, jqGrid. - Replacing deprecated functionality.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/d7b1113a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/js/jquery.jqGrid.min.js
----------------------------------------------------------------------
diff --git a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/js/jquery.jqGrid.min.js b/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/js/jquery.jqGrid.min.js
old mode 100755
new mode 100644
index 5ce272f..340d0a0
--- a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/js/jquery.jqGrid.min.js
+++ b/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/js/jquery.jqGrid.min.js
@@ -1,416 +1,545 @@
 /* 
- * jqGrid  3.6.5 - jQuery Grid 
- * Copyright (c) 2008, Tony Tomov, tony@trirand.com 
- * Dual licensed under the MIT and GPL licenses 
- * http://www.opensource.org/licenses/mit-license.php 
- * http://www.gnu.org/licenses/gpl-2.0.html 
- * Date:2010-05-05 
- * Modules: grid.base.js; jquery.fmatter.js; grid.custom.js; grid.common.js; grid.formedit.js; jquery.searchFilter.js; grid.inlinedit.js; grid.celledit.js; jqModal.js; jqDnR.js; grid.subgrid.js; grid.treegrid.js; grid.import.js; JsonXml.js; grid.setcolumns.js; grid.postext.js; grid.tbltogrid.js; grid.jqueryui.js; 
- */
-(function(b){b.jgrid = b.jgrid || {}; b.extend(b.jgrid, {htmlDecode:function(f){if (f == "&nbsp;" || f == "&#160;" || f.length == 1 && f.charCodeAt(0) == 160)return""; return!f?f:String(f).replace(/&amp;/g, "&").replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&quot;/g, '"')}, htmlEncode:function(f){return!f?f:String(f).replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/\"/g, "&quot;")}, format:function(f){var k = b.makeArray(arguments).slice(1); if (f === undefined)f = ""; return f.replace(/\{(\d+)\}/g, function(i,
-        h){return k[h]})}, getCellIndex:function(f){f = b(f); f = (!f.is("td") && !f.is("th")?f.closest("td,th"):f)[0]; if (b.browser.msie)return b.inArray(f, f.parentNode.cells); return f.cellIndex}, stripHtml:function(f){f += ""; var k = /<("[^"]*"|'[^']*'|[^'">])*>/gi; if (f)return(f = f.replace(k, "")) && f !== "&nbsp;" && f !== "&#160;"?f.replace(/\"/g, "'"):""; else return f}, stringToDoc:function(f){var k; if (typeof f !== "string")return f; try{k = (new DOMParser).parseFromString(f, "text/xml")} catch (i){k = new ActiveXObject("Microsoft.XMLDOM");
-        k.async = false; k.loadXML(f)}return k && k.documentElement && k.documentElement.tagName != "parsererror"?k:null}, parse:function(f){f = f; if (f.substr(0, 9) == "while(1);")f = f.substr(9); if (f.substr(0, 2) == "/*")f = f.substr(2, f.length - 4); f || (f = "{}"); return b.jgrid.useJSON === true && typeof JSON === "object" && typeof JSON.parse === "function"?JSON.parse(f):eval("(" + f + ")")}, jqID:function(f){f += ""; return f.replace(/([\.\:\[\]])/g, "\\$1")}, ajaxOptions:{}, extend:function(f){b.extend(b.fn.jqGrid, f); this.no_legacy_api || b.fn.extend(f)}});
-        b.fn.jqGrid = function(f){if (typeof f == "string"){var k = b.fn.jqGrid[f]; if (!k)throw"jqGrid - No such method: " + f; var i = b.makeArray(arguments).slice(1); return k.apply(this, i)}return this.each(function(){if (!this.grid){var h = b.extend(true, {url:"", height:150, page:1, rowNum:20, records:0, pager:"", pgbuttons:true, pginput:true, colModel:[], rowList:[], colNames:[], sortorder:"asc", sortname:"", datatype:"xml", mtype:"GET", altRows:false, selarrrow:[], savedRow:[], shrinkToFit:true, xmlReader:{}, jsonReader:{}, subGrid:false,
-                subGridModel:[], reccount:0, lastpage:0, lastsort:0, selrow:null, beforeSelectRow:null, onSelectRow:null, onSortCol:null, ondblClickRow:null, onRightClickRow:null, onPaging:null, onSelectAll:null, loadComplete:null, gridComplete:null, loadError:null, loadBeforeSend:null, afterInsertRow:null, beforeRequest:null, onHeaderClick:null, viewrecords:false, loadonce:false, multiselect:false, multikey:false, editurl:null, search:false, caption:"", hidegrid:true, hiddengrid:false, postData:{}, userData:{}, treeGrid:false, treeGridModel:"nested",
-                treeReader:{}, treeANode: - 1, ExpandColumn:null, tree_root_level:0, prmNames:{page:"page", rows:"rows", sort:"sidx", order:"sord", search:"_search", nd:"nd", id:"id", oper:"oper", editoper:"edit", addoper:"add", deloper:"del", subgridid:"id", npage:null}, forceFit:false, gridstate:"visible", cellEdit:false, cellsubmit:"remote", nv:0, loadui:"enable", toolbar:[false, ""], scroll:false, multiboxonly:false, deselectAfterSort:true, scrollrows:false, autowidth:false, scrollOffset:18, cellLayout:5, subGridWidth:20, multiselectWidth:20,
-                gridview:false, rownumWidth:25, rownumbers:false, pagerpos:"center", recordpos:"right", footerrow:false, userDataOnFooter:false, hoverrows:true, altclass:"ui-priority-secondary", viewsortcols:[false, "vertical", true], resizeclass:"", autoencode:false, remapColumns:[], ajaxGridOptions:{}, direction:"ltr", toppager:false, headertitles:false, scrollTimeout:200}, b.jgrid.defaults, f || {}), g = {headers:[], cols:[], footers:[], dragStart:function(c, d, e){this.resizing = {idx:c, startX:d.clientX, sOL:e[0]}; this.hDiv.style.cursor = "col-resize";
-                this.curGbox = b("#rs_m" + h.id, "#gbox_" + h.id); this.curGbox.css({display:"block", left:e[0], top:e[1], height:e[2]}); b.isFunction(h.resizeStart) && h.resizeStart.call(this, d, c); document.onselectstart = function(){return false}}, dragMove:function(c){if (this.resizing){var d = c.clientX - this.resizing.startX; c = this.headers[this.resizing.idx]; var e = h.direction === "ltr"?c.width + d:c.width - d, l; if (e > 33){this.curGbox.css({left:this.resizing.sOL + d}); if (h.forceFit === true){l = this.headers[this.resizing.idx + h.nv]; d = h.direction ===
-                "ltr"?l.width - d:l.width + d; if (d > 33){c.newWidth = e; l.newWidth = d}} else{this.newWidth = h.direction === "ltr"?h.tblwidth + d:h.tblwidth - d; c.newWidth = e}}}}, dragEnd:function(){this.hDiv.style.cursor = "default"; if (this.resizing){var c = this.resizing.idx, d = this.headers[c].newWidth || this.headers[c].width; d = parseInt(d, 10); this.resizing = false; b("#rs_m" + h.id).css("display", "none"); h.colModel[c].width = d; this.headers[c].width = d; this.headers[c].el.style.width = d + "px"; if (this.cols.length > 0)this.cols[c].style.width = d + "px";
-                if (this.footers.length > 0)this.footers[c].style.width = d + "px"; if (h.forceFit === true){d = this.headers[c + h.nv].newWidth || this.headers[c + h.nv].width; this.headers[c + h.nv].width = d; this.headers[c + h.nv].el.style.width = d + "px"; if (this.cols.length > 0)this.cols[c + h.nv].style.width = d + "px"; if (this.footers.length > 0)this.footers[c + h.nv].style.width = d + "px"; h.colModel[c + h.nv].width = d} else{h.tblwidth = this.newWidth || h.tblwidth; b("table:first", this.bDiv).css("width", h.tblwidth + "px"); b("table:first", this.hDiv).css("width",
-                h.tblwidth + "px"); this.hDiv.scrollLeft = this.bDiv.scrollLeft; if (h.footerrow){b("table:first", this.sDiv).css("width", h.tblwidth + "px"); this.sDiv.scrollLeft = this.bDiv.scrollLeft}}b.isFunction(h.resizeStop) && h.resizeStop.call(this, d, c)}this.curGbox = null; document.onselectstart = function(){return true}}, populateVisible:function(){g.timer && clearTimeout(g.timer); g.timer = null; var c = b(g.bDiv).height(); if (c){var d = b("table:first", g.bDiv), e = b("> tbody > tr:visible:first", d).outerHeight() || g.prevRowHeight; if (e){g.prevRowHeight =
-                e; var l = h.rowNum, n = g.scrollTop = g.bDiv.scrollTop, o = Math.round(d.position().top) - n, p = o + d.height(); e = e * l; var w, y, s; if (o <= 0 && (h.lastpage === undefined || parseInt((p + n + e - 1) / e, 10) <= h.lastpage)){y = parseInt((c - p + e - 1) / e, 10); if (p >= 0 || y < 2 || h.scroll === true){w = Math.round((p + n) / e) + 1; o = - 1} else o = 1}if (o > 0){w = parseInt(n / e, 10) + 1; y = parseInt((n + c) / e, 10) + 2 - w; s = true}if (y)if (!(h.lastpage && w > h.lastpage))if (g.hDiv.loading)g.timer = setTimeout(g.populateVisible, h.scrollTimeout); else{h.page = w; if (s){g.selectionPreserver(d[0]); g.emptyRows(g.bDiv,
-                false)}g.populate(y)}}}}, scrollGrid:function(){if (h.scroll){var c = g.bDiv.scrollTop; if (c != g.scrollTop){g.scrollTop = c; g.timer && clearTimeout(g.timer); g.timer = setTimeout(g.populateVisible, 200)}}g.hDiv.scrollLeft = g.bDiv.scrollLeft; if (h.footerrow)g.sDiv.scrollLeft = g.bDiv.scrollLeft}, selectionPreserver:function(c){var d = c.p, e = d.selrow, l = d.selarrrow?b.makeArray(d.selarrrow):null, n = c.grid.bDiv.scrollLeft, o = d.gridComplete; d.gridComplete = function(){d.selrow = null; d.selarrrow = []; if (d.multiselect && l && l.length >
-                0)for (var p = 0; p < l.length; p++)l[p] != e && b(c).jqGrid("setSelection", l[p], false); e && b(c).jqGrid("setSelection", e, false); c.grid.bDiv.scrollLeft = n; d.gridComplete = o; d.gridComplete && o()}}}; this.p = h; var j, m, a; if (this.p.colNames.length === 0)for (j = 0; j < this.p.colModel.length; j++)this.p.colNames[j] = this.p.colModel[j].label || this.p.colModel[j].name; if (this.p.colNames.length !== this.p.colModel.length)alert(b.jgrid.errors.model); else{var q = b("<div class='ui-jqgrid-view'></div>"), t, x = b.browser.msie?true:false, C = b.browser.safari?
-                true:false; a = this; a.p.direction = b.trim(a.p.direction.toLowerCase()); if (b.inArray(a.p.direction, ["ltr", "rtl"]) == - 1)a.p.direction = "ltr"; m = a.p.direction; b(q).insertBefore(this); b(this).appendTo(q).removeClass("scroll"); var K = b("<div class='ui-jqgrid ui-widget ui-widget-content ui-corner-all'></div>"); b(K).insertBefore(q).attr({id:"gbox_" + this.id, dir:m}); b(q).appendTo(K).attr("id", "gview_" + this.id); t = x && b.browser.version <= 6?'<iframe style="display:block;position:absolute;z-index:-1;filter:Alpha(Opacity=\'0\');" src="javascript:false;"></iframe>':
-                ""; b("<div class='ui-widget-overlay jqgrid-overlay' id='lui_" + this.id + "'></div>").append(t).insertBefore(q); b("<div class='loading ui-state-default ui-state-active' id='load_" + this.id + "'>" + this.p.loadtext + "</div>").insertBefore(q); b(this).attr({cellSpacing:"0", cellPadding:"0", border:"0", role:"grid", "aria-multiselectable":!!this.p.multiselect, "aria-labelledby":"gbox_" + this.id}); var J = function(c, d){c = parseInt(c, 10); return isNaN(c)?d?d:0:c}, F = function(c, d, e){var l = a.p.colModel[c], n = l.align, o = 'style="',
-                p = l.classes, w = l.name; if (n)o += "text-align:" + n + ";"; if (l.hidden === true)o += "display:none;"; if (d === 0)o += "width: " + g.headers[c].width + "px;"; o += '"' + (p !== undefined?' class="' + p + '"':"") + (l.title && e?' title="' + b.jgrid.stripHtml(e) + '"':""); o += ' aria-describedby="' + a.p.id + "_" + w + '"'; return o}, Q = function(c){return c === undefined || c === null || c === ""?"&#160;":a.p.autoencode?b.jgrid.htmlEncode(c):c + ""}, M = function(c, d, e, l, n){e = a.p.colModel[e]; if (typeof e.formatter !== "undefined"){c = {rowId:c, colModel:e, gid:a.p.id}; d = b.isFunction(e.formatter)?
-                e.formatter.call(a, d, c, l, n):b.fmatter?b.fn.fmatter(e.formatter, d, c, l, n):Q(d)} else d = Q(d); return d}, R = function(c, d, e, l, n){c = M(c, d, e, n, "add"); return'<td role="gridcell" ' + F(e, l, c) + ">" + c + "</td>"}, u = function(c, d, e){c = '<input role="checkbox" type="checkbox" id="jqg_' + c + '" class="cbox" name="jqg_' + c + '"/>'; d = F(d, e, ""); return'<td role="gridcell" aria-describedby="' + a.p.id + '_cb" ' + d + ">" + c + "</td>"}, la = function(c, d, e, l){e = (parseInt(e, 10) - 1) * parseInt(l, 10) + 1 + d; c = F(c, d, ""); return'<td role="gridcell" aria-describedby="' +
-                a.p.id + '_rn" class="ui-state-default jqgrid-rownum" ' + c + ">" + e + "</td>"}, ca = function(c){var d, e = [], l = 0, n; for (n = 0; n < a.p.colModel.length; n++){d = a.p.colModel[n]; if (d.name !== "cb" && d.name !== "subgrid" && d.name !== "rn"){e[l] = c == "xml"?d.xmlmap || d.name:d.jsonmap || d.name; l++}}return e}, fa = function(c){var d = a.p.remapColumns; if (!d || !d.length)d = b.map(a.p.colModel, function(e, l){return l}); if (c)d = b.map(d, function(e){return e < c?null:e - c}); return d}, aa = function(c, d){a.p.deepempty?b("tbody:first tr", c).remove():b("tbody:first",
-                c).empty(); if (d && a.p.scroll){b(">div:first", c).css({height:"auto"}).children("div:first").css({height:0, display:"none"}); c.scrollTop = 0}}, U = function(c, d){var e, l, n, o; if (typeof d === "function")return d(c); e = c[d]; if (e === undefined){if (typeof d === "string")n = d.split("."); try{if (o = n.length)for (e = c; e && o--; ){l = n.shift(); e = e[l]}} catch (p){}}return e}, ia = function(c, d, e, l, n){var o = new Date; a.p.reccount = 0; if (b.isXMLDoc(c)){if (a.p.treeANode === - 1 && !a.p.scroll){aa(d, false); e = 0} else e = e > 0?e:0; var p, w = 0, y, s, r = 0, v = 0,
-                z = 0, D, N, L = [], P, G = {}, da = a.rows.length, E, W, B = [], S = 0, ga = a.p.altRows === true?" " + a.p.altclass:""; a.p.xmlReader.repeatitems || (L = ca("xml")); D = a.p.keyIndex === false?a.p.xmlReader.id:a.p.keyIndex; if (L.length > 0 && !isNaN(D)){if (a.p.remapColumns && a.p.remapColumns.length)D = b.inArray(D, a.p.remapColumns); D = L[D]}N = (D + "").indexOf("[") === - 1?L.length?function(X, V){return b(D, X).text() || V}:function(X, V){return b(a.p.xmlReader.cell, X).eq(D).text() || V}:function(X, V){return X.getAttribute(D.replace(/[\[\]]/g, "")) || V}; a.p.userData =
-        {}; b(a.p.xmlReader.page, c).each(function(){a.p.page = this.textContent || this.text || 0}); b(a.p.xmlReader.total, c).each(function(){a.p.lastpage = this.textContent || this.text; if (a.p.lastpage === undefined)a.p.lastpage = 1}); b(a.p.xmlReader.records, c).each(function(){a.p.records = this.textContent || this.text || 0}); b(a.p.xmlReader.userdata, c).each(function(){a.p.userData[this.getAttribute("name")] = this.textContent || this.text}); c = b(a.p.xmlReader.root + " " + a.p.xmlReader.row, c); var ha = c.length, O = 0; if (c && ha){var ma = parseInt(a.p.rowNum,
-                10), wa = a.p.scroll?(parseInt(a.p.page, 10) - 1) * ma + 1:1; if (n)ma *= n + 1; for (n = b.isFunction(a.p.afterInsertRow); O < ha; ){E = c[O]; W = N(E, wa + O); p = e === 0?0:e + 1; p = (p + O) % 2 == 1?ga:""; B[S++] = '<tr id="' + W + '" role="row" class ="ui-widget-content jqgrow ui-row-' + a.p.direction + "" + p + '">'; if (a.p.rownumbers === true){B[S++] = la(0, O, a.p.page, a.p.rowNum); z = 1}if (a.p.multiselect === true){B[S++] = u(W, z, O); r = 1}if (a.p.subGrid === true){B[S++] = b(a).jqGrid("addSubGridCell", r + z, O + e); v = 1}if (a.p.xmlReader.repeatitems){P || (P = fa(r + v + z)); var za = b(a.p.xmlReader.cell,
-                E); b.each(P, function(X){var V = za[this]; if (!V)return false; y = V.textContent || V.text; G[a.p.colModel[X + r + v + z].name] = y; B[S++] = R(W, y, X + r + v + z, O + e, E)})} else for (p = 0; p < L.length; p++){y = b(L[p], E).text(); G[a.p.colModel[p + r + v + z].name] = y; B[S++] = R(W, y, p + r + v + z, O + e, E)}B[S++] = "</tr>"; if (a.p.gridview === false){if (a.p.treeGrid === true){p = a.p.treeANode >= - 1?a.p.treeANode:0; s = b(B.join(""))[0]; try{b(a).jqGrid("setTreeNode", G, s)} catch (Fa){}da === 0?b("tbody:first", d).append(s):b(a.rows[O + p + e]).after(s)} else b("tbody:first", d).append(B.join(""));
-                if (a.p.subGrid === true)try{b(a).jqGrid("addSubGrid", a.rows[a.rows.length - 1], r + z)} catch (Ga){}n && a.p.afterInsertRow.call(a, W, G, E); B = []; S = 0}G = {}; w++; O++; if (w == ma)break}}a.p.gridview === true && b("tbody:first", d).append(B.join("")); a.p.totaltime = new Date - o; if (w > 0){a.grid.cols = a.rows[0].cells; if (a.p.records === 0)a.p.records = ha}B = null; if (!a.p.treeGrid && !a.p.scroll)a.grid.bDiv.scrollTop = 0; a.p.reccount = w; a.p.treeANode = - 1; a.p.userDataOnFooter && b(a).jqGrid("footerData", "set", a.p.userData, true); l || na(false, true)}},
-                ra = function(c, d, e, l, n){var o = new Date; a.p.reccount = 0; if (c){if (a.p.treeANode === - 1 && !a.p.scroll){aa(d, false); e = 0} else e = e > 0?e:0; var p = 0, w, y, s, r = [], v, z = 0, D = 0, N = 0, L, P, G, da = {}, E, W = a.rows.length, B; s = []; E = 0; var S = a.p.altRows === true?" " + a.p.altclass:""; a.p.page = U(c, a.p.jsonReader.page) || 0; G = U(c, a.p.jsonReader.total); a.p.lastpage = G === undefined?1:G; a.p.records = U(c, a.p.jsonReader.records) || 0; a.p.userData = U(c, a.p.jsonReader.userdata) || {}; a.p.jsonReader.repeatitems || (v = r = ca("json")); G = a.p.keyIndex === false?a.p.jsonReader.id:
-                        a.p.keyIndex; if (r.length > 0 && !isNaN(G)){if (a.p.remapColumns && a.p.remapColumns.length)G = b.inArray(G, a.p.remapColumns); G = r[G]}if (P = U(c, a.p.jsonReader.root)){L = P.length; c = 0; var ga = parseInt(a.p.rowNum, 10), ha = a.p.scroll?(parseInt(a.p.page, 10) - 1) * ga + 1:1; if (n)ga *= n + 1; for (var O = b.isFunction(a.p.afterInsertRow); c < L; ){n = P[c]; B = U(n, G); if (B === undefined){B = ha + c; if (r.length === 0)if (a.p.jsonReader.cell)B = n[a.p.jsonReader.cell][G] || B}w = e === 0?0:e + 1; w = (w + c) % 2 == 1?S:""; s[E++] = '<tr id="' + B + '" role="row" class= "ui-widget-content jqgrow ui-row-' +
-                        a.p.direction + "" + w + '">'; if (a.p.rownumbers === true){s[E++] = la(0, c, a.p.page, a.p.rowNum); N = 1}if (a.p.multiselect){s[E++] = u(B, N, c); z = 1}if (a.p.subGrid){s[E++] = b(a).jqGrid("addSubGridCell", z + N, c + e); D = 1}if (a.p.jsonReader.repeatitems){if (a.p.jsonReader.cell)n = U(n, a.p.jsonReader.cell); v || (v = fa(z + D + N))}for (y = 0; y < v.length; y++){w = U(n, v[y]); s[E++] = R(B, w, y + z + D + N, c + e, n); da[a.p.colModel[y + z + D + N].name] = w}s[E++] = "</tr>"; if (a.p.gridview === false){if (a.p.treeGrid === true){E = a.p.treeANode >= - 1?a.p.treeANode:0; s = b(s.join(""))[0];
-                        try{b(a).jqGrid("setTreeNode", da, s)} catch (ma){}W === 0?b("tbody:first", d).append(s):b(a.rows[c + E + e]).after(s)} else b("tbody:first", d).append(s.join("")); if (a.p.subGrid === true)try{b(a).jqGrid("addSubGrid", a.rows[a.rows.length - 1], z + N)} catch (wa){}O && a.p.afterInsertRow.call(a, B, da, n); s = []; E = 0}da = {}; p++; c++; if (p == ga)break}a.p.gridview === true && b("tbody:first", d).append(s.join("")); a.p.totaltime = new Date - o; if (p > 0){a.grid.cols = a.rows[0].cells; if (a.p.records === 0)a.p.records = L}}if (!a.p.treeGrid && !a.p.scroll)a.grid.bDiv.scrollTop =
-                        0; a.p.reccount = p; a.p.treeANode = - 1; a.p.userDataOnFooter && b(a).jqGrid("footerData", "set", a.p.userData, true); l || na(false, true)}}, na = function(c, d){var e, l, n, o, p, w, y, s = ""; n = parseInt(a.p.page, 10) - 1; if (n < 0)n = 0; n *= parseInt(a.p.rowNum, 10); p = n + a.p.reccount; if (a.p.scroll){e = b("tbody:first > tr", a.grid.bDiv); n = p - e.length; if (l = e.outerHeight()){e = n * l; l = parseInt(a.p.records, 10) * l; b(">div:first", a.grid.bDiv).css({height:l}).children("div:first").css({height:e, display:e?"":"none"})}}s = a.p.pager?a.p.pager:""; s += a.p.toppager?
-                s?"," + a.p.toppager:a.p.toppager:""; if (s){y = b.jgrid.formatter.integer || {}; if (a.p.loadonce){e = l = 1; a.p.lastpage = a.page = 1; b(".selbox", s).attr("disabled", true)} else{e = J(a.p.page); l = J(a.p.lastpage); b(".selbox", s).attr("disabled", false)}if (a.p.pginput === true){b(".ui-pg-input", s).val(a.p.page); b("#sp_1", s).html(b.fmatter?b.fmatter.util.NumberFormat(a.p.lastpage, y):a.p.lastpage)}if (a.p.viewrecords)if (a.p.reccount === 0)b(".ui-paging-info", s).html(a.p.emptyrecords); else{o = n + 1; w = a.p.records; if (b.fmatter){o = b.fmatter.util.NumberFormat(o,
-                y); p = b.fmatter.util.NumberFormat(p, y); w = b.fmatter.util.NumberFormat(w, y)}b(".ui-paging-info", s).html(b.jgrid.format(a.p.recordtext, o, p, w))}if (a.p.pgbuttons === true){if (e <= 0)e = l = 0; if (e == 1 || e === 0){b("#first, #prev", a.p.pager).addClass("ui-state-disabled").removeClass("ui-state-hover"); a.p.toppager && b("#first_t, #prev_t", a.p.toppager).addClass("ui-state-disabled").removeClass("ui-state-hover")} else{b("#first, #prev", a.p.pager).removeClass("ui-state-disabled"); a.p.toppager && b("#first_t, #prev_t", a.p.toppager).removeClass("ui-state-disabled")}if (e ==
-                l || e === 0){b("#next, #last", a.p.pager).addClass("ui-state-disabled").removeClass("ui-state-hover"); a.p.toppager && b("#next_t, #last_t", a.p.toppager).addClass("ui-state-disabled").removeClass("ui-state-hover")} else{b("#next, #last", a.p.pager).removeClass("ui-state-disabled"); a.p.toppager && b("#next_t, #last_t", a.p.toppager).removeClass("ui-state-disabled")}}}c === true && a.p.rownumbers === true && b("td.jqgrid-rownum", a.rows).each(function(r){b(this).html(n + 1 + r)}); d && a.p.jqgdnd && b(a).jqGrid("gridDnD", "updateDnD");
-                b.isFunction(a.p.gridComplete) && a.p.gridComplete.call(a)}, Y = function(c){if (!a.grid.hDiv.loading){var d = a.p.scroll && c === false, e = {}, l, n = a.p.prmNames; if (a.p.page <= 0)a.p.page = 1; if (n.search !== null)e[n.search] = a.p.search; if (n.nd !== null)e[n.nd] = (new Date).getTime(); if (n.rows !== null)e[n.rows] = a.p.rowNum; if (n.page !== null)e[n.page] = a.p.page; if (n.sort !== null)e[n.sort] = a.p.sortname; if (n.order !== null)e[n.order] = a.p.sortorder; var o = a.p.loadComplete, p = b.isFunction(o); p || (o = null); var w = 0; c = c || 1; if (c > 1)if (n.npage !==
-                null){e[n.npage] = c; w = c - 1; c = 1} else o = function(s){p && a.p.loadComplete.call(a, s); a.grid.hDiv.loading = false; a.p.page++; Y(c - 1)}; else n.npage !== null && delete a.p.postData[n.npage]; b.extend(a.p.postData, e); var y = !a.p.scroll?0:a.rows.length - 1; if (b.isFunction(a.p.datatype))a.p.datatype.call(a, a.p.postData, "load_" + a.p.id); else{b.isFunction(a.p.beforeRequest) && a.p.beforeRequest.call(a); l = a.p.datatype.toLowerCase(); switch (l){case "json":case "jsonp":case "xml":case "script":b.ajax(b.extend({url:a.p.url, type:a.p.mtype,
-                dataType:l, data:b.isFunction(a.p.serializeGridData)?a.p.serializeGridData.call(a, a.p.postData):a.p.postData, success:function(s){l === "xml"?ia(s, a.grid.bDiv, y, c > 1, w):ra(s, a.grid.bDiv, y, c > 1, w); o && o.call(a, s); d && a.grid.populateVisible(); if (a.p.loadonce || a.p.treeGrid)a.p.datatype = "local"; ja()}, error:function(s, r, v){b.isFunction(a.p.loadError) && a.p.loadError.call(a, s, r, v); ja()}, beforeSend:function(s){oa(); b.isFunction(a.p.loadBeforeSend) && a.p.loadBeforeSend.call(a, s)}}, b.jgrid.ajaxOptions, a.p.ajaxGridOptions));
-                break; case "xmlstring":oa(); e = b.jgrid.stringToDoc(a.p.datastr); p && a.p.loadComplete.call(a, e); ia(e, a.grid.bDiv); a.p.datatype = "local"; a.p.datastr = null; ja(); break; case "jsonstring":oa(); e = typeof a.p.datastr == "string"?b.jgrid.parse(a.p.datastr):a.p.datastr; p && a.p.loadComplete.call(a, e); ra(e, a.grid.bDiv); a.p.datatype = "local"; a.p.datastr = null; ja(); break; case "local":case "clientside":oa(); a.p.datatype = "local"; p && a.p.loadComplete.call(a, ""); Aa(); na(true, true); ja(); break}}}}, oa = function(){a.grid.hDiv.loading =
-                true; if (!a.p.hiddengrid)switch (a.p.loadui){case "disable":break; case "enable":b("#load_" + a.p.id).show(); break; case "block":b("#lui_" + a.p.id).show(); b("#load_" + a.p.id).show(); break}}, ja = function(){a.grid.hDiv.loading = false; switch (a.p.loadui){case "disable":break; case "enable":b("#load_" + a.p.id).hide(); break; case "block":b("#lui_" + a.p.id).hide(); b("#load_" + a.p.id).hide(); break}}, Aa = function(){var c = /[\$,%]/g, d = [], e = 0, l, n, o, p = a.p.sortorder == "asc"?1: - 1, w = false, y; b.each(a.p.colModel, function(r){if (this.index ==
-                a.p.sortname || this.name == a.p.sortname){if (a.p.lastsort == r)w = true; e = r; l = this.sorttype; return false}}); o = l == "float" || l == "number" || l == "currency"?function(r){r = parseFloat(r.replace(c, "")); return isNaN(r)?0:r}:l == "int" || l == "integer"?function(r){return J(r.replace(c, ""), 0)}:l == "date" || l == "datetime"?function(r){return Ba(a.p.colModel[e].datefmt || "Y-m-d", r).getTime()}:b.isFunction(l)?l:function(r){return b.trim(r.toUpperCase())}; y = a.p.colModel[e]; b.each(a.rows, function(r, v){try{n = b.unformat(b(v).children("td").eq(e),
-        {rowId:v.id, colModel:y}, e, true)} catch (z){n = b(v).children("td").eq(e).text()}v.sortKey = o(n); d[r] = this}); if (a.p.treeGrid)b(a).jqGrid("SortTree", p); else{w?d.reverse():d.sort(function(r, v){if (r.sortKey < v.sortKey)return - p; if (r.sortKey > v.sortKey)return p; return 0}); if (d[0]){b("td", d[0]).each(function(r){b(this).css("width", g.headers[r].width + "px")}); a.grid.cols = d[0].cells}var s = ""; if (a.p.altRows)s = a.p.altclass; b.each(d, function(r, v){if (s)r % 2 == 1?b(v).addClass(s):b(v).removeClass(s); b("tbody", a.grid.bDiv).append(v);
-                v.sortKey = null})}a.grid.bDiv.scrollTop = 0}, Ba = function(c, d){var e = {m:1, d:1, y:1970, h:0, i:0, s:0}, l, n, o; if (d = b.trim(d)){d = d.split(/[\\\/:_;.\t\T\s-]/); c = c.split(/[\\\/:_;.\t\T\s-]/); var p = b.jgrid.formatter.date.monthNames, w = b.jgrid.formatter.date.AmPm, y = function(s, r){if (s === 0){if (r == 12)r = 0} else if (r != 12)r += 12; return r}; l = 0; for (n = c.length; l < n; l++){if (c[l] == "M"){o = b.inArray(d[l], p); if (o !== - 1 && o < 12)d[l] = o + 1}if (c[l] == "F"){o = b.inArray(d[l], p); if (o !== - 1 && o > 11)d[l] = o + 1 - 12}if (c[l] == "a"){o = b.inArray(d[l], w); if (o !==
-                - 1 && o < 2 && d[l] == w[o]){d[l] = o; e.h = y(d[l], e.h)}}if (c[l] == "A"){o = b.inArray(d[l], w); if (o !== - 1 && o > 1 && d[l] == w[o]){d[l] = o - 2; e.h = y(d[l], e.h)}}e[c[l].toLowerCase()] = parseInt(d[l], 10)}e.m = parseInt(e.m, 10) - 1; c = e.y; if (c >= 70 && c <= 99)e.y = 1900 + e.y; else if (c >= 0 && c <= 69)e.y = 2E3 + e.y}return new Date(e.y, e.m, e.d, e.h, e.i, e.s, 0)}; t = function(c, d){var e = "", l = "<table cellspacing='0' cellpadding='0' border='0' style='table-layout:auto;' class='ui-pg-table'><tbody><tr>", n = "", o, p, w, y, s = function(r){var v; if (b.isFunction(a.p.onPaging))v =
-                a.p.onPaging.call(a, r); a.p.selrow = null; if (a.p.multiselect){a.p.selarrrow = []; b("#cb_" + b.jgrid.jqID(a.p.id), a.grid.hDiv).attr("checked", false)}a.p.savedRow = []; if (v == "stop")return false; return true}; c = c.substr(1); o = "pg_" + c; p = c + "_left"; w = c + "_center"; y = c + "_right"; b("#" + c).append("<div id='" + o + "' class='ui-pager-control' role='group'><table cellspacing='0' cellpadding='0' border='0' class='ui-pg-table' style='width:100%;table-layout:fixed;' role='row'><tbody><tr><td id='" + p + "' align='left'></td><td id='" +
-                w + "' align='center' style='white-space:pre;'></td><td id='" + y + "' align='right'></td></tr></tbody></table></div>").attr("dir", "ltr"); if (a.p.rowList.length > 0){n = "<td dir='" + m + "'>"; n += "<select class='ui-pg-selbox' role='listbox'>"; for (p = 0; p < a.p.rowList.length; p++)n += "<option role='option' value='" + a.p.rowList[p] + "'" + (a.p.rowNum == a.p.rowList[p]?" selected":"") + ">" + a.p.rowList[p] + "</option>"; n += "</select></td>"}if (m == "rtl")l += n; if (a.p.pginput === true)e = "<td dir='" + m + "'>" + b.jgrid.format(a.p.pgtext || "", "<input class='ui-pg-input' type='text' size='2' maxlength='7' value='0' role='textbox'/>",
-                "<span id='sp_1'></span>") + "</td>"; if (a.p.pgbuttons === true){p = ["first" + d, "prev" + d, "next" + d, "last" + d]; m == "rtl" && p.reverse(); l += "<td id='" + p[0] + "' class='ui-pg-button ui-corner-all'><span class='ui-icon ui-icon-seek-first'></span></td>"; l += "<td id='" + p[1] + "' class='ui-pg-button ui-corner-all'><span class='ui-icon ui-icon-seek-prev'></span></td>"; l += e != ""?"<td class='ui-pg-button ui-state-disabled' style='width:4px;'><span class='ui-separator'></span></td>" + e + "<td class='ui-pg-button ui-state-disabled' style='width:4px;'><span class='ui-separator'></span></td>":
-                ""; l += "<td id='" + p[2] + "' class='ui-pg-button ui-corner-all'><span class='ui-icon ui-icon-seek-next'></span></td>"; l += "<td id='" + p[3] + "' class='ui-pg-button ui-corner-all'><span class='ui-icon ui-icon-seek-end'></span></td>"} else if (e != "")l += e; if (m == "ltr")l += n; l += "</tr></tbody></table>"; a.p.viewrecords === true && b("td#" + c + "_" + a.p.recordpos, "#" + o).append("<div dir='" + m + "' style='text-align:" + a.p.recordpos + "' class='ui-paging-info'></div>"); b("td#" + c + "_" + a.p.pagerpos, "#" + o).append(l); n = b(".ui-jqgrid").css("font-size") ||
-                "11px"; b("body").append("<div id='testpg' class='ui-jqgrid ui-widget ui-widget-content' style='font-size:" + n + ";visibility:hidden;' ></div>"); l = b(l).clone().appendTo("#testpg").width(); b("#testpg").remove(); if (l > 0){if (e != "")l += 50; b("td#" + c + "_" + a.p.pagerpos, "#" + o).width(l)}a.p._nvtd = []; a.p._nvtd[0] = l?Math.floor((a.p.width - l) / 2):Math.floor(a.p.width / 3); a.p._nvtd[1] = 0; l = null; b(".ui-pg-selbox", "#" + o).bind("change", function(){a.p.page = Math.round(a.p.rowNum * (a.p.page - 1) / this.value - 0.5) + 1; a.p.rowNum = this.value;
-                if (d)b(".ui-pg-selbox", a.p.pager).val(this.value); else a.p.toppager && b(".ui-pg-selbox", a.p.toppager).val(this.value); if (!s("records"))return false; Y(); return false}); if (a.p.pgbuttons === true){b(".ui-pg-button", "#" + o).hover(function(){if (b(this).hasClass("ui-state-disabled"))this.style.cursor = "default"; else{b(this).addClass("ui-state-hover"); this.style.cursor = "pointer"}}, function(){if (!b(this).hasClass("ui-state-disabled")){b(this).removeClass("ui-state-hover"); this.style.cursor = "default"}}); b("#first" +
-                d + ", #prev" + d + ", #next" + d + ", #last" + d, "#" + c).click(function(){var r = J(a.p.page, 1), v = J(a.p.lastpage, 1), z = false, D = true, N = true, L = true, P = true; if (v === 0 || v === 1)P = L = N = D = false; else if (v > 1 && r >= 1)if (r === 1)N = D = false; else{if (!(r > 1 && r < v))if (r === v)P = L = false} else if (v > 1 && r === 0){P = L = false; r = v - 1}if (this.id === "first" + d && D){a.p.page = 1; z = true}if (this.id === "prev" + d && N){a.p.page = r - 1; z = true}if (this.id === "next" + d && L){a.p.page = r + 1; z = true}if (this.id === "last" + d && P){a.p.page = v; z = true}if (z){if (!s(this.id))return false; Y()}return false})}a.p.pginput ===
-                true && b("input.ui-pg-input", "#" + o).keypress(function(r){if ((r.charCode?r.charCode:r.keyCode?r.keyCode:0) == 13){a.p.page = b(this).val() > 0?b(this).val():a.p.page; if (!s("user"))return false; Y(); return false}return this})}; var xa = function(c, d, e, l){if (a.p.colModel[d].sortable)if (!(a.p.savedRow.length > 0)){if (!e){if (a.p.lastsort == d)if (a.p.sortorder == "asc")a.p.sortorder = "desc"; else{if (a.p.sortorder == "desc")a.p.sortorder = "asc"} else a.p.sortorder = a.p.colModel[d].firstsortorder || "asc"; a.p.page = 1}if (l)if (a.p.lastsort ==
-                d && a.p.sortorder == l && !e)return; else a.p.sortorder = l; e = b("thead:first", a.grid.hDiv).get(0); b("tr th:eq(" + a.p.lastsort + ") span.ui-grid-ico-sort", e).addClass("ui-state-disabled"); b("tr th:eq(" + a.p.lastsort + ")", e).attr("aria-selected", "false"); b("tr th:eq(" + d + ") span.ui-icon-" + a.p.sortorder, e).removeClass("ui-state-disabled"); b("tr th:eq(" + d + ")", e).attr("aria-selected", "true"); if (!a.p.viewsortcols[0])if (a.p.lastsort != d){b("tr th:eq(" + a.p.lastsort + ") span.s-ico", e).hide(); b("tr th:eq(" + d + ") span.s-ico",
-                e).show()}c = c.substring(5); a.p.sortname = a.p.colModel[d].index || c; e = a.p.sortorder; if (b.isFunction(a.p.onSortCol))if (a.p.onSortCol.call(a, c, d, e) == "stop"){a.p.lastsort = d; return}if (a.p.datatype == "local")a.p.deselectAfterSort && b(a).jqGrid("resetSelection"); else{a.p.selrow = null; a.p.multiselect && b("#cb_" + b.jgrid.jqID(a.p.id), a.grid.hDiv).attr("checked", false); a.p.selarrrow = []; a.p.savedRow = []; a.p.scroll && aa(a.grid.bDiv, true)}a.p.subGrid && a.p.datatype == "local" && b("td.sgexpanded", "#" + a.p.id).each(function(){b(this).trigger("click")});
-                Y(); a.p.lastsort = d; if (a.p.sortname != c && d)a.p.lastsort = d}}, Ca = function(c){var d = c, e; for (e = c + 1; e < a.p.colModel.length; e++)if (a.p.colModel[e].hidden !== true){d = e; break}return d - c}, Da = function(c){var d, e = {}, l = C?0:a.p.cellLayout; for (d = e[0] = e[1] = e[2] = 0; d <= c; d++)if (a.p.colModel[d].hidden === false)e[0] += a.p.colModel[d].width + l; if (a.p.direction == "rtl")e[0] = a.p.width - e[0]; e[0] -= a.grid.bDiv.scrollLeft; if (b(a.grid.cDiv).is(":visible"))e[1] += b(a.grid.cDiv).height() + parseInt(b(a.grid.cDiv).css("padding-top"), 10) +
-                parseInt(b(a.grid.cDiv).css("padding-bottom"), 10); if (a.p.toolbar[0] === true && (a.p.toolbar[1] == "top" || a.p.toolbar[1] == "both"))e[1] += b(a.grid.uDiv).height() + parseInt(b(a.grid.uDiv).css("border-top-width"), 10) + parseInt(b(a.grid.uDiv).css("border-bottom-width"), 10); if (a.p.toppager)e[1] += b(a.grid.topDiv).height() + parseInt(b(a.grid.topDiv).css("border-bottom-width"), 10); e[2] += b(a.grid.bDiv).height() + b(a.grid.hDiv).height(); return e}; this.p.id = this.id; if (b.inArray(a.p.multikey, ["shiftKey", "altKey", "ctrlKey"]) ==
-                - 1)a.p.multikey = false; a.p.keyIndex = false; for (j = 0; j < a.p.colModel.length; j++)if (a.p.colModel[j].key === true){a.p.keyIndex = j; break}a.p.sortorder = a.p.sortorder.toLowerCase(); if (this.p.treeGrid === true)try{b(this).jqGrid("setTreeGrid")} catch (Ha){}if (this.p.subGrid)try{b(a).jqGrid("setSubGrid")} catch (Ia){}if (this.p.multiselect){this.p.colNames.unshift("<input role='checkbox' id='cb_" + this.p.id + "' class='cbox' type='checkbox'/>"); this.p.colModel.unshift({name:"cb", width:C?a.p.multiselectWidth + a.p.cellLayout:
-                a.p.multiselectWidth, sortable:false, resizable:false, hidedlg:true, search:false, align:"center", fixed:true})}if (this.p.rownumbers){this.p.colNames.unshift(""); this.p.colModel.unshift({name:"rn", width:a.p.rownumWidth, sortable:false, resizable:false, hidedlg:true, search:false, align:"center", fixed:true})}a.p.xmlReader = b.extend(true, {root:"rows", row:"row", page:"rows>page", total:"rows>total", records:"rows>records", repeatitems:true, cell:"cell", id:"[id]", userdata:"userdata", subgrid:{root:"rows", row:"row", repeatitems:true,
-                cell:"cell"}}, a.p.xmlReader); a.p.jsonReader = b.extend(true, {root:"rows", page:"page", total:"total", records:"records", repeatitems:true, cell:"cell", id:"id", userdata:"userdata", subgrid:{root:"rows", repeatitems:true, cell:"cell"}}, a.p.jsonReader); if (a.p.scroll){a.p.pgbuttons = false; a.p.pginput = false; a.p.rowList = []}var H = "<thead><tr class='ui-jqgrid-labels' role='rowheader'>", ya, ba, sa, ka, pa, I, A, ea; ba = ea = ""; if (a.p.shrinkToFit === true && a.p.forceFit === true)for (j = a.p.colModel.length - 1; j >= 0; j--)if (!a.p.colModel[j].hidden){a.p.colModel[j].resizable =
-                false; break}if (a.p.viewsortcols[1] == "horizontal"){ea = " ui-i-asc"; ba = " ui-i-desc"}ya = x?"class='ui-th-div-ie'":""; ea = "<span class='s-ico' style='display:none'><span sort='asc' class='ui-grid-ico-sort ui-icon-asc" + ea + " ui-state-disabled ui-icon ui-icon-triangle-1-n ui-sort-" + m + "'></span>"; ea += "<span sort='desc' class='ui-grid-ico-sort ui-icon-desc" + ba + " ui-state-disabled ui-icon ui-icon-triangle-1-s ui-sort-" + m + "'></span></span>"; for (j = 0; j < this.p.colNames.length; j++){ba = a.p.headertitles?' title="' + b.jgrid.stripHtml(a.p.colNames[j]) +
-                '"':""; H += "<th id='" + a.p.id + "_" + a.p.colModel[j].name + "' role='columnheader' class='ui-state-default ui-th-column ui-th-" + m + "'" + ba + ">"; ba = a.p.colModel[j].index || a.p.colModel[j].name; H += "<div id='jqgh_" + a.p.colModel[j].name + "' " + ya + ">" + a.p.colNames[j]; a.p.colModel[j].width = a.p.colModel[j].width?parseInt(a.p.colModel[j].width, 10):150; if (typeof a.p.colModel[j].title !== "boolean")a.p.colModel[j].title = true; if (ba == a.p.sortname)a.p.lastsort = j; H += ea + "</div></th>"}H += "</tr></thead>"; b(this).append(H); b("thead tr:first th",
-                this).hover(function(){b(this).addClass("ui-state-hover")}, function(){b(this).removeClass("ui-state-hover")}); if (this.p.multiselect){var ta = [], qa; b("#cb_" + b.jgrid.jqID(a.p.id), this).bind("click", function(){if (this.checked){b("[id^=jqg_]", a.rows).attr("checked", true); b(a.rows).each(function(c){if (!b(this).hasClass("subgrid")){b(this).addClass("ui-state-highlight").attr("aria-selected", "true"); a.p.selarrrow[c] = a.p.selrow = this.id}}); qa = true; ta = []} else{b("[id^=jqg_]", a.rows).attr("checked", false); b(a.rows).each(function(c){if (!b(this).hasClass("subgrid")){b(this).removeClass("ui-state-highlight").attr("aria-selected",
-                "false"); ta[c] = this.id}}); a.p.selarrrow = []; a.p.selrow = null; qa = false}if (b.isFunction(a.p.onSelectAll))a.p.onSelectAll.call(a, qa?a.p.selarrrow:ta, qa)})}if (a.p.autowidth === true){H = b(K).innerWidth(); a.p.width = H > 0?H:"nw"}(function(){var c = 0, d = a.p.cellLayout, e = 0, l, n = a.p.scrollOffset, o, p = false, w, y = 0, s = 0, r = 0, v; if (C)d = 0; b.each(a.p.colModel, function(){if (typeof this.hidden === "undefined")this.hidden = false; if (this.hidden === false){c += J(this.width, 0); if (this.fixed){y += this.width; s += this.width + d} else e++; r++}});
-                if (isNaN(a.p.width))a.p.width = g.width = c; else g.width = a.p.width; a.p.tblwidth = c; if (a.p.shrinkToFit === false && a.p.forceFit === true)a.p.forceFit = false; if (a.p.shrinkToFit === true && e > 0){w = g.width - d * e - s; if (!isNaN(a.p.height)){w -= n; p = true}c = 0; b.each(a.p.colModel, function(z){if (this.hidden === false && !this.fixed){this.width = o = Math.round(w * this.width / (a.p.tblwidth - y)); c += o; l = z}}); v = 0; if (p){if (g.width - s - (c + d * e) !== n)v = g.width - s - (c + d * e) - n} else if (!p && Math.abs(g.width - s - (c + d * e)) !== 1)v = g.width - s - (c + d * e); a.p.colModel[l].width +=
-                v; a.p.tblwidth = c + v + y + r * d; if (a.p.tblwidth > a.p.width){a.p.colModel[l].width -= a.p.tblwidth - parseInt(a.p.width, 10); a.p.tblwidth = a.p.width}}})(); b(K).css("width", g.width + "px").append("<div class='ui-jqgrid-resize-mark' id='rs_m" + a.p.id + "'>&#160;</div>"); b(q).css("width", g.width + "px"); H = b("thead:first", a).get(0); var ua = "<table role='grid' style='width:" + a.p.tblwidth + "px' class='ui-jqgrid-ftable' cellspacing='0' cellpadding='0' border='0'><tbody><tr role='row' class='ui-widget-content footrow footrow-" +
-                m + "'>"; q = b("tr:first", H); a.p.disableClick = false; b("th", q).each(function(c){sa = a.p.colModel[c].width; if (typeof a.p.colModel[c].resizable === "undefined")a.p.colModel[c].resizable = true; if (a.p.colModel[c].resizable){ka = document.createElement("span"); b(ka).html("&#160;").addClass("ui-jqgrid-resize ui-jqgrid-resize-" + m); b.browser.opera || b(ka).css("cursor", "col-resize"); b(this).addClass(a.p.resizeclass)} else ka = ""; b(this).css("width", sa + "px").prepend(ka); a.p.colModel[c].hidden && b(this).css("display", "none");
-                g.headers[c] = {width:sa, el:this}; pa = a.p.colModel[c].sortable; if (typeof pa !== "boolean")pa = a.p.colModel[c].sortable = true; var d = a.p.colModel[c].name; d == "cb" || d == "subgrid" || d == "rn" || a.p.viewsortcols[2] && b("div", this).addClass("ui-jqgrid-sortable"); if (pa)if (a.p.viewsortcols[0]){b("div span.s-ico", this).show(); c == a.p.lastsort && b("div span.ui-icon-" + a.p.sortorder, this).removeClass("ui-state-disabled")} else if (c == a.p.lastsort){b("div span.s-ico", this).show(); b("div span.ui-icon-" + a.p.sortorder, this).removeClass("ui-state-disabled")}ua +=
-                "<td role='gridcell' " + F(c, 0, "") + ">&#160;</td>"}).mousedown(function(c){if (b(c.target).closest("th>span.ui-jqgrid-resize").length == 1){var d = b.jgrid.getCellIndex(this); if (a.p.forceFit === true)a.p.nv = Ca(d); g.dragStart(d, c, Da(d)); return false}}).click(function(c){if (a.p.disableClick)return a.p.disableClick = false; var d = "th>div.ui-jqgrid-sortable", e, l; a.p.viewsortcols[2] || (d = "th>div>span>span.ui-grid-ico-sort"); c = b(c.target).closest(d); if (c.length == 1){d = b.jgrid.getCellIndex(this); if (!a.p.viewsortcols[2]){e =
-                true; l = c.attr("sort")}xa(b("div", this)[0].id, d, e, l); return false}}); if (a.p.sortable && b.fn.sortable)try{b(a).jqGrid("sortableColumns", q)} catch (Ja){}ua += "</tr></tbody></table>"; this.appendChild(document.createElement("tbody")); b(this).addClass("ui-jqgrid-btable"); q = b("<table class='ui-jqgrid-htable' style='width:" + a.p.tblwidth + "px' role='grid' aria-labelledby='gbox_" + this.id + "' cellspacing='0' cellpadding='0' border='0'></table>").append(H); var T = a.p.caption && a.p.hiddengrid === true?true:false; H = b("<div class='ui-jqgrid-hbox" +
-                (m == "rtl"?"-rtl":"") + "'></div>"); g.hDiv = document.createElement("div"); b(g.hDiv).css({width:g.width + "px"}).addClass("ui-state-default ui-jqgrid-hdiv").append(H); b(H).append(q); T && b(g.hDiv).hide(); if (a.p.pager){if (typeof a.p.pager == "string"){if (a.p.pager.substr(0, 1) != "#")a.p.pager = "#" + a.p.pager} else a.p.pager = "#" + b(a.p.pager).attr("id"); b(a.p.pager).css({width:g.width + "px"}).appendTo(K).addClass("ui-state-default ui-jqgrid-pager ui-corner-bottom"); T && b(a.p.pager).hide(); t(a.p.pager, "")}a.p.cellEdit ===
-                false && a.p.hoverrows === true && b(a).bind("mouseover", function(c){A = b(c.target).closest("tr.jqgrow"); b(A).attr("class") !== "subgrid" && b(A).addClass("ui-state-hover"); return false}).bind("mouseout", function(c){A = b(c.target).closest("tr.jqgrow"); b(A).removeClass("ui-state-hover"); return false}); var Z, $; b(a).before(g.hDiv).click(function(c){I = c.target; var d = b(I).hasClass("cbox"); A = b(I, a.rows).closest("tr.jqgrow"); if (b(A).length === 0)return this; var e = true; if (b.isFunction(a.p.beforeSelectRow))e = a.p.beforeSelectRow.call(a,
-                A[0].id, c); if (I.tagName == "A" || (I.tagName == "INPUT" || I.tagName == "TEXTAREA" || I.tagName == "OPTION" || I.tagName == "SELECT") && !d)return this; if (e === true){if (a.p.cellEdit === true)if (a.p.multiselect && d)b(a).jqGrid("setSelection", A[0].id, true); else{Z = A[0].rowIndex; $ = b.jgrid.getCellIndex(I); try{b(a).jqGrid("editCell", Z, $, true)} catch (l){}} else if (a.p.multikey)if (c[a.p.multikey])b(a).jqGrid("setSelection", A[0].id, true); else{if (a.p.multiselect && d){d = b("[id^=jqg_]", A).attr("checked"); b("[id^=jqg_]", A).attr("checked",
-                !d)}} else{if (a.p.multiselect && a.p.multiboxonly)if (!d){b(a.p.selarrrow).each(function(n, o){n = a.rows.namedItem(o); b(n).removeClass("ui-state-highlight"); b("#jqg_" + b.jgrid.jqID(o), n).attr("checked", false)}); a.p.selarrrow = []; b("#cb_" + b.jgrid.jqID(a.p.id), a.grid.hDiv).attr("checked", false)}b(a).jqGrid("setSelection", A[0].id, true)}if (b.isFunction(a.p.onCellSelect)){Z = A[0].id; $ = b.jgrid.getCellIndex(I); a.p.onCellSelect.call(a, Z, $, b(I).html(), c)}c.stopPropagation()} else return this}).bind("reloadGrid", function(c,
-                d){if (a.p.treeGrid === true)a.p.datatype = a.p.treedatatype; d && d.current && a.grid.selectionPreserver(a); if (a.p.datatype == "local")b(a).jqGrid("resetSelection"); else if (!a.p.treeGrid){a.p.selrow = null; if (a.p.multiselect){a.p.selarrrow = []; b("#cb_" + b.jgrid.jqID(a.p.id), a.grid.hDiv).attr("checked", false)}a.p.savedRow = []; a.p.scroll && aa(a.grid.bDiv, true)}if (d && d.page){c = d.page; if (c > a.p.lastpage)c = a.p.lastpage; if (c < 1)c = 1; a.p.page = c; a.grid.bDiv.scrollTop = a.grid.prevRowHeight?(c - 1) * a.grid.prevRowHeight * a.p.rowNum:
-                0}if (a.grid.prevRowHeight && a.p.scroll){delete a.p.lastpage; a.grid.populateVisible()} else a.grid.populate(); return false}); b.isFunction(this.p.ondblClickRow) && b(this).dblclick(function(c){I = c.target; A = b(I, a.rows).closest("tr.jqgrow"); if (b(A).length === 0)return false; Z = A[0].rowIndex; $ = b.jgrid.getCellIndex(I); a.p.ondblClickRow.call(a, b(A).attr("id"), Z, $, c); return false}); b.isFunction(this.p.onRightClickRow) && b(this).bind("contextmenu", function(c){I = c.target; A = b(I, a.rows).closest("tr.jqgrow"); if (b(A).length ===
-                0)return false; a.p.multiselect || b(a).jqGrid("setSelection", A[0].id, true); Z = A[0].rowIndex; $ = b.jgrid.getCellIndex(I); a.p.onRightClickRow.call(a, b(A).attr("id"), Z, $, c); return false}); g.bDiv = document.createElement("div"); b(g.bDiv).append(b('<div style="position:relative;' + (x && b.browser.version < 8?"height:0.01%;":"") + '"></div>').append("<div></div>").append(this)).addClass("ui-jqgrid-bdiv").css({height:a.p.height + (isNaN(a.p.height)?"":"px"), width:g.width + "px"}).scroll(g.scrollGrid); b("table:first", g.bDiv).css({width:a.p.tblwidth +
-                "px"}); if (x){b("tbody", this).size() == 2 && b("tbody:first", this).remove(); a.p.multikey && b(g.bDiv).bind("selectstart", function(){return false})} else a.p.multikey && b(g.bDiv).bind("mousedown", function(){return false}); T && b(g.bDiv).hide(); g.cDiv = document.createElement("div"); var va = a.p.hidegrid === true?b("<a role='link' href='javascript:void(0)'/>").addClass("ui-jqgrid-titlebar-close HeaderButton").hover(function(){va.addClass("ui-state-hover")}, function(){va.removeClass("ui-state-hover")}).append("<span class='ui-icon ui-icon-circle-triangle-n'></span>").css(m ==
-                "rtl"?"left":"right", "0px"):""; b(g.cDiv).append(va).append("<span class='ui-jqgrid-title" + (m == "rtl"?"-rtl":"") + "'>" + a.p.caption + "</span>").addClass("ui-jqgrid-titlebar ui-widget-header ui-corner-top ui-helper-clearfix"); b(g.cDiv).insertBefore(g.hDiv); if (a.p.toolbar[0]){g.uDiv = document.createElement("div"); if (a.p.toolbar[1] == "top")b(g.uDiv).insertBefore(g.hDiv); else a.p.toolbar[1] == "bottom" && b(g.uDiv).insertAfter(g.hDiv); if (a.p.toolbar[1] == "both"){g.ubDiv = document.createElement("div"); b(g.uDiv).insertBefore(g.hDiv).addClass("ui-userdata ui-state-default").attr("id",
-                "t_" + this.id); b(g.ubDiv).insertAfter(g.hDiv).addClass("ui-userdata ui-state-default").attr("id", "tb_" + this.id); T && b(g.ubDiv).hide()} else b(g.uDiv).width(g.width).addClass("ui-userdata ui-state-default").attr("id", "t_" + this.id); T && b(g.uDiv).hide()}if (a.p.toppager){a.p.toppager = a.p.id + "_toppager"; g.topDiv = b("<div id='" + a.p.toppager + "'></div>")[0]; a.p.toppager = "#" + a.p.toppager; b(g.topDiv).insertBefore(g.hDiv).addClass("ui-state-default ui-jqgrid-toppager").width(g.width); t(a.p.toppager, "_t")}if (a.p.footerrow){g.sDiv =
-                b("<div class='ui-jqgrid-sdiv'></div>")[0]; H = b("<div class='ui-jqgrid-hbox" + (m == "rtl"?"-rtl":"") + "'></div>"); b(g.sDiv).append(H).insertAfter(g.hDiv).width(g.width); b(H).append(ua); g.footers = b(".ui-jqgrid-ftable", g.sDiv)[0].rows[0].cells; if (a.p.rownumbers)g.footers[0].className = "ui-state-default jqgrid-rownum"; T && b(g.sDiv).hide()}if (a.p.caption){var Ea = a.p.datatype; if (a.p.hidegrid === true){b(".ui-jqgrid-titlebar-close", g.cDiv).click(function(c){var d = b.isFunction(a.p.onHeaderClick); if (a.p.gridstate ==
-                "visible"){b(".ui-jqgrid-bdiv, .ui-jqgrid-hdiv", "#gview_" + a.p.id).slideUp("fast"); a.p.pager && b(a.p.pager).slideUp("fast"); a.p.toppager && b(a.p.toppager).slideUp("fast"); if (a.p.toolbar[0] === true){a.p.toolbar[1] == "both" && b(g.ubDiv).slideUp("fast"); b(g.uDiv).slideUp("fast")}a.p.footerrow && b(".ui-jqgrid-sdiv", "#gbox_" + a.p.id).slideUp("fast"); b("span", this).removeClass("ui-icon-circle-triangle-n").addClass("ui-icon-circle-triangle-s"); a.p.gridstate = "hidden"; b("#gbox_" + a.p.id).hasClass("ui-resizable") &&
-                b(".ui-resizable-handle", "#gbox_" + a.p.id).hide(); if (d)T || a.p.onHeaderClick.call(a, a.p.gridstate, c)} else if (a.p.gridstate == "hidden"){b(".ui-jqgrid-hdiv, .ui-jqgrid-bdiv", "#gview_" + a.p.id).slideDown("fast"); a.p.pager && b(a.p.pager).slideDown("fast"); a.p.toppager && b(a.p.toppager).slideDown("fast"); if (a.p.toolbar[0] === true){a.p.toolbar[1] == "both" && b(g.ubDiv).slideDown("fast"); b(g.uDiv).slideDown("fast")}a.p.footerrow && b(".ui-jqgrid-sdiv", "#gbox_" + a.p.id).slideDown("fast"); b("span", this).removeClass("ui-icon-circle-triangle-s").addClass("ui-icon-circle-triangle-n");
-                if (T){a.p.datatype = Ea; Y(); T = false}a.p.gridstate = "visible"; b("#gbox_" + a.p.id).hasClass("ui-resizable") && b(".ui-resizable-handle", "#gbox_" + a.p.id).show(); d && a.p.onHeaderClick.call(a, a.p.gridstate, c)}return false}); if (T){a.p.datatype = "local"; b(".ui-jqgrid-titlebar-close", g.cDiv).trigger("click")}}} else b(g.cDiv).hide(); b(g.hDiv).after(g.bDiv).mousemove(function(c){if (g.resizing){g.dragMove(c); return false}}); b(".ui-jqgrid-labels", g.hDiv).bind("selectstart", function(){return false}); b(document).mouseup(function(){if (g.resizing){g.dragEnd();
-                return false}return true}); this.updateColumns = function(){var c = this.rows[0], d = this; if (c){b("td", c).each(function(e){b(this).css("width", d.grid.headers[e].width + "px")}); this.grid.cols = c.cells}return this}; a.formatCol = F; a.sortData = xa; a.updatepager = na; a.formatter = function(c, d, e, l, n){return M(c, d, e, l, n)}; b.extend(g, {populate:Y, emptyRows:aa}); this.grid = g; a.addXmlData = function(c){ia(c, a.grid.bDiv)}; a.addJSONData = function(c){ra(c, a.grid.bDiv)}; Y(); a.p.hiddengrid = false; b(window).unload(function(){a = null})}}})};
-        b.jgrid.extend({getGridParam:function(f){var k = this[0]; if (k.grid)return f?typeof k.p[f] != "undefined"?k.p[f]:null:k.p}, setGridParam:function(f){return this.each(function(){this.grid && typeof f === "object" && b.extend(true, this.p, f)})}, getDataIDs:function(){var f = [], k = 0, i; this.each(function(){if ((i = this.rows.length) && i > 0)for (; k < i; ){f[k] = this.rows[k].id; k++}}); return f}, setSelection:function(f, k){return this.each(function(){function i(a){var q = b(h.grid.bDiv)[0].clientHeight, t = b(h.grid.bDiv)[0].scrollTop,
-                x = h.rows[a].offsetTop; a = h.rows[a].clientHeight; if (x + a >= q + t)b(h.grid.bDiv)[0].scrollTop = x - (q + t) + a + t; else if (x < q + t)if (x < t)b(h.grid.bDiv)[0].scrollTop = x}var h = this, g, j, m; if (f !== undefined){k = k === false?false:true; if (j = h.rows.namedItem(f + "")){if (h.p.scrollrows === true){g = h.rows.namedItem(f).rowIndex; g >= 0 && i(g)}if (h.p.multiselect){h.p.selrow = j.id; m = b.inArray(h.p.selrow, h.p.selarrrow); if (m === - 1){j.className !== "ui-subgrid" && b(j).addClass("ui-state-highlight").attr("aria-selected", "true"); g = true; b("#jqg_" + b.jgrid.jqID(h.p.selrow),
-                h.rows[j.rowIndex]).attr("checked", g); h.p.selarrrow.push(h.p.selrow); h.p.onSelectRow && k && h.p.onSelectRow.call(h, h.p.selrow, g)} else{j.className !== "ui-subgrid" && b(j).removeClass("ui-state-highlight").attr("aria-selected", "false"); g = false; b("#jqg_" + b.jgrid.jqID(h.p.selrow), h.rows[j.rowIndex]).attr("checked", g); h.p.selarrrow.splice(m, 1); h.p.onSelectRow && k && h.p.onSelectRow.call(h, h.p.selrow, g); j = h.p.selarrrow[0]; h.p.selrow = j === undefined?null:j}} else if (j.className !== "ui-subgrid"){h.p.selrow && b(h.rows.namedItem(h.p.selrow)).removeClass("ui-state-highlight").attr("aria-selected",
-                "false"); h.p.selrow = j.id; b(j).addClass("ui-state-highlight").attr("aria-selected", "true"); h.p.onSelectRow && k && h.p.onSelectRow.call(h, h.p.selrow, true)}}}})}, resetSelection:function(){return this.each(function(){var f = this, k; if (f.p.multiselect){b(f.p.selarrrow).each(function(i, h){k = f.rows.namedItem(h); b(k).removeClass("ui-state-highlight").attr("aria-selected", "false"); b("#jqg_" + b.jgrid.jqID(h), k).attr("checked", false)}); b("#cb_" + b.jgrid.jqID(f.p.id), f.grid.hDiv).attr("checked", false); f.p.selarrrow =
-                []} else if (f.p.selrow){b("tr#" + b.jgrid.jqID(f.p.selrow), f.grid.bDiv).removeClass("ui-state-highlight").attr("aria-selected", "false"); f.p.selrow = null}f.p.savedRow = []})}, getRowData:function(f){var k = {}, i, h = false, g, j = 0; this.each(function(){var m = this, a, q; if (typeof f == "undefined"){h = true; i = []; g = m.rows.length} else{q = m.rows.namedItem(f); if (!q)return k; g = 1}for (; j < g; ){if (h)q = m.rows[j]; b("td", q).each(function(t){a = m.p.colModel[t].name; if (a !== "cb" && a !== "subgrid")if (m.p.treeGrid === true && a == m.p.ExpandColumn)k[a] =
-                b.jgrid.htmlDecode(b("span:first", this).html()); else try{k[a] = b.unformat(this, {rowId:q.id, colModel:m.p.colModel[t]}, t)} catch (x){k[a] = b.jgrid.htmlDecode(b(this).html())}}); j++; if (h){i.push(k); k = {}}}}); return i?i:k}, delRowData:function(f){var k = false, i, h, g; this.each(function(){var j = this; if (i = j.rows.namedItem(f)){g = i.rowIndex; b(i).remove(); j.p.records--; j.p.reccount--; j.updatepager(true, false); k = true; if (j.p.multiselect){h = b.inArray(f, j.p.selarrrow); h != - 1 && j.p.selarrrow.splice(h, 1)}if (f == j.p.selrow)j.p.selrow =
-                null} else return false; g === 0 && k && j.updateColumns(); if (j.p.altRows === true && k){var m = j.p.altclass; b(j.rows).each(function(a){a % 2 == 1?b(this).addClass(m):b(this).removeClass(m)})}}); return k}, setRowData:function(f, k, i){var h, g = false, j; this.each(function(){var m = this, a, q, t = typeof i; if (!m.grid)return false; q = m.rows.namedItem(f); if (!q)return false; k && b(this.p.colModel).each(function(x){h = this.name; if (k[h] !== undefined){a = m.formatter(f, k[h], x, k, "edit"); j = this.title?{title:b.jgrid.stripHtml(a)}:{}; m.p.treeGrid ===
-                true && h == m.p.ExpandColumn?b("td:eq(" + x + ") > span:first", q).html(a).attr(j):b("td:eq(" + x + ")", q).html(a).attr(j); g = true}}); if (t === "string")b(q).addClass(i); else t === "object" && b(q).css(i)}); return g}, addRowData:function(f, k, i, h){i || (i = "last"); var g = false, j, m, a, q, t, x, C, K, J = "", F, Q, M, R; if (k){if (b.isArray(k)){F = true; i = "last"; Q = f} else{k = [k]; F = false}this.each(function(){var u = this, la = k.length; t = u.p.rownumbers === true?1:0; a = u.p.multiselect === true?1:0; q = u.p.subGrid === true?1:0; if (!F)if (typeof f != "undefined")f +=
-                ""; else{f = u.p.records + 1 + ""; if (u.p.keyIndex !== false){Q = u.p.colModel[u.p.keyIndex + a + q + t].name; if (typeof k[0][Q] != "undefined")f = k[0][Q]}}M = u.p.altclass; for (var ca = 0, fa = "", aa = b.isFunction(u.p.afterInsertRow)?true:false; ca < la; ){R = k[ca]; m = ""; if (F){try{f = R[Q]} catch (U){f = u.p.records + 1}fa = u.p.altRows === true?(u.rows.length - 1) % 2 === 0?M:"":""}if (t){J = u.formatCol(t, 1, ""); m += '<td role="gridcell" aria-describedby="' + u.p.id + '_rn" class="ui-state-default jqgrid-rownum" ' + J + ">0</td>"}if (a){K = '<input role="checkbox" type="checkbox" id="jqg_' +
-                f + '" class="cbox"/>'; J = u.formatCol(t, 1, ""); m += '<td role="gridcell" aria-describedby="' + u.p.id + '_cb" ' + J + ">" + K + "</td>"}if (q)m += b(u).jqGrid("addSubGridCell", a + t, 1); for (C = a + q + t; C < this.p.colModel.length; C++){j = this.p.colModel[C].name; K = u.formatter(f, R[j], C, R, "add"); J = u.formatCol(C, 1, K); m += '<td role="gridcell" aria-describedby="' + u.p.id + "_" + j + '" ' + J + ">" + K + "</td>"}m = '<tr id="' + f + '" role="row" class="ui-widget-content jqgrow ui-row-' + u.p.direction + " " + fa + '">' + m + "</tr>"; if (u.p.subGrid === true){m = b(m)[0]; b(u).jqGrid("addSubGrid",
-                m, a + t)}if (u.rows.length === 0)b("table:first", u.grid.bDiv).append(m); else switch (i){case "last":b(u.rows[u.rows.length - 1]).after(m); break; case "first":b(u.rows[0]).before(m); break; case "after":if (x = u.rows.namedItem(h))b(u.rows[x.rowIndex + 1]).hasClass("ui-subgrid")?b(u.rows[x.rowIndex + 1]).after(m):b(x).after(m); break; case "before":if (x = u.rows.namedItem(h)){b(x).before(m); x = x.rowIndex}break}u.p.records++; u.p.reccount++; if (!u.grid.cols || !u.grid.cols.length)u.grid.cols = u.rows[0].cells; if (i === "first" || i ===
-                "before" && x <= 1 || u.rows.length === 1)u.updateColumns(); aa && u.p.afterInsertRow.call(u, f, R, R); ca++}if (u.p.altRows === true && !F)if (i == "last")(u.rows.length - 1) % 2 == 1 && b(u.rows[u.rows.length - 1]).addClass(M); else b(u.rows).each(function(ia){ia % 2 == 1?b(this).addClass(M):b(this).removeClass(M)}); u.updatepager(true, true); g = true})}return g}, footerData:function(f, k, i){function h(q){for (var t in q)if (q.hasOwnProperty(t))return false; return true}var g, j = false, m = {}, a; if (typeof f == "undefined")f = "get"; if (typeof i != "boolean")i =
-                true; f = f.toLowerCase(); this.each(function(){var q = this, t; if (!q.grid || !q.p.footerrow)return false; if (f == "set")if (h(k))return false; j = true; b(this.p.colModel).each(function(x){g = this.name; if (f == "set"){if (k[g] !== undefined){t = i?q.formatter("", k[g], x, k, "edit"):k[g]; a = this.title?{title:b.jgrid.stripHtml(t)}:{}; b("tr.footrow td:eq(" + x + ")", q.grid.sDiv).html(t).attr(a); j = true}} else if (f == "get")m[g] = b("tr.footrow td:eq(" + x + ")", q.grid.sDiv).html()})}); return f == "get"?m:j}, ShowHideCol:function(f, k){return this.each(function(){var i =
-                this, h = false; if (i.grid){if (typeof f === "string")f = [f]; k = k != "none"?"":"none"; var g = k == ""?true:false; b(this.p.colModel).each(function(j){if (b.inArray(this.name, f) !== - 1 && this.hidden === g){b("tr", i.grid.hDiv).each(function(){b("th:eq(" + j + ")", this).css("display", k)}); b(i.rows).each(function(m){b("td:eq(" + j + ")", i.rows[m]).css("display", k)}); i.p.footerrow && b("td:eq(" + j + ")", i.grid.sDiv).css("display", k); if (k == "none")i.p.tblwidth -= this.width; else i.p.tblwidth += this.width; this.hidden = !g; h = true}}); if (h === true){b("table:first",
-                i.grid.hDiv).width(i.p.tblwidth); b("table:first", i.grid.bDiv).width(i.p.tblwidth); i.grid.hDiv.scrollLeft = i.grid.bDiv.scrollLeft; if (i.p.footerrow){b("table:first", i.grid.sDiv).width(i.p.tblwidth); i.grid.sDiv.scrollLeft = i.grid.bDiv.scrollLeft}}}})}, hideCol:function(f){return this.each(function(){b(this).jqGrid("ShowHideCol", f, "none")})}, showCol:function(f){return this.each(function(){b(this).jqGrid("ShowHideCol", f, "")})}, remapColumns:function(f, k, i){function h(m){var a; a = m.length?b.makeArray(m):b.extend({},
-                m); b.each(f, function(q){m[q] = a[this]})}function g(m, a){b(">tr" + (a || ""), m).each(function(){var q = this, t = b.makeArray(q.cells); b.each(f, function(){var x = t[this]; x && q.appendChild(x)})})}var j = this.get(0); h(j.p.colModel); h(j.p.colNames); h(j.grid.headers); g(b("thead:first", j.grid.hDiv), i && ":not(.ui-jqgrid-labels)"); k && g(b("tbody:first", j.grid.bDiv), ".jqgrow"); j.p.footerrow && g(b("tbody:first", j.grid.sDiv)); if (j.p.remapColumns)if (j.p.remapColumns.length)h(j.p.remapColumns); else j.p.remapColumns = b.makeArray(f);
-                j.p.lastsort = b.inArray(j.p.lastsort, f); if (j.p.treeGrid)j.p.expColInd = b.inArray(j.p.expColInd, f)}, setGridWidth:function(f, k){return this.each(function(){var i = this, h, g = 0, j = i.p.cellLayout, m, a = 0, q = false, t = i.p.scrollOffset, x, C = 0, K = 0, J = 0, F; if (i.grid){if (typeof k != "boolean")k = i.p.shrinkToFit; if (!isNaN(f)){f = parseInt(f, 10); i.grid.width = i.p.width = f; b("#gbox_" + i.p.id).css("width", f + "px"); b("#gview_" + i.p.id).css("width", f + "px"); b(i.grid.bDiv).css("width", f + "px"); b(i.grid.hDiv).css("width", f + "px"); i.p.pager &&
-                b(i.p.pager).css("width", f + "px"); i.p.toppager && b(i.p.toppager).css("width", f + "px"); if (i.p.toolbar[0] === true){b(i.grid.uDiv).css("width", f + "px"); i.p.toolbar[1] == "both" && b(i.grid.ubDiv).css("width", f + "px")}i.p.footerrow && b(i.grid.sDiv).css("width", f + "px"); if (k === false && i.p.forceFit === true)i.p.forceFit = false; if (k === true){if (b.browser.safari)j = 0; b.each(i.p.colModel, function(){if (this.hidden === false){g += parseInt(this.width, 10); if (this.fixed){K += this.width; C += this.width + j} else a++; J++}}); if (a !== 0){i.p.tblwidth =
-                g; x = f - j * a - C; if (!isNaN(i.p.height))q = true; x -= t; g = 0; var Q = i.grid.cols.length > 0; b.each(i.p.colModel, function(M){if (this.hidden === false && !this.fixed){h = Math.round(x * this.width / (i.p.tblwidth - K)); if (!(h < 0)){this.width = h; g += h; i.grid.headers[M].width = h; i.grid.headers[M].el.style.width = h + "px"; if (i.p.footerrow)i.grid.footers[M].style.width = h + "px"; if (Q)i.grid.cols[M].style.width = h + "px"; m = M}}}); F = 0; if (q){if (f - C - (g + j * a) !== t)F = f - C - (g + j * a) - t} else if (Math.abs(f -
-                C - (g + j * a)) !== 1)F = f - C - (g + j * a); i.p.colModel[m].width += F; i.p.tblwidth = g + F + K + j * J; if (i.p.tblwidth > f){q = i.p.tblwidth - parseInt(f, 10); i.p.tblwidth = f; h = i.p.colModel[m].width -= q} else h = i.p.colModel[m].width; i.grid.headers[m].width = h; i.grid.headers[m].el.style.width = h + "px"; if (Q)i.grid.cols[m].style.width = h + "px"; b("table:first", i.grid.bDiv).css("width", i.p.tblwidth + "px"); b("table:first", i.grid.hDiv).css("width", i.p.tblwidth + "px"); i.grid.hDiv.scrollLeft = i.grid.bDiv.scrollLeft; if (i.p.footerrow){i.grid.footers[m].style.width =
-                h + "px"; b("table:first", i.grid.sDiv).css("width", i.p.tblwidth + "px")}}}}}})}, setGridHeight:function(f){return this.each(function(){var k = this; if (k.grid){b(k.grid.bDiv).css({height:f + (isNaN(f)?"":"px")}); k.p.height = f; k.p.scroll && k.grid.populateVisible()}})}, setCaption:function(f){return this.each(function(){this.p.caption = f; b("span.ui-jqgrid-title", this.grid.cDiv).html(f); b(this.grid.cDiv).show()})}, setLabel:function(f, k, i, h){return this.each(function(){var g = this, j = - 1; if (g.grid){if (isNaN(f))b(g.p.colModel).each(function(q){if (this.name ==
-                f){j = q; return false}}); else j = parseInt(f, 10); if (j >= 0){var m = b("tr.ui-jqgrid-labels th:eq(" + j + ")", g.grid.hDiv); if (k){var a = b(".s-ico", m); b("[id^=jqgh_]", m).empty().html(k).append(a); g.p.colNames[j] = k}if (i)typeof i === "string"?b(m).addClass(i):b(m).css(i); typeof h === "object" && b(m).attr(h)}}})}, setCell:function(f, k, i, h, g, j){return this.each(function(){var m = this, a = - 1, q, t; if (m.grid){if (isNaN(k))b(m.p.colModel).each(function(C){if (this.name == k){a = C; return false}}); else a = parseInt(k, 10); if (a >= 0)if (q = m.rows.namedItem(f)){var x =
-                b("td:eq(" + a + ")", q); if (i !== "" || j === true){q = m.formatter(f, i, a, q, "edit"); t = m.p.colModel[a].title?{title:b.jgrid.stripHtml(q)}:{}; m.p.treeGrid && b(".tree-wrap", b(x)).length > 0?b("span", b(x)).html(q).attr(t):b(x).html(q).attr(t)}if (typeof h === "string")b(x).addClass(h); else h && b(x).css(h); typeof g === "object" && b(x).attr(g)}}})}, getCell:function(f, k){var i = false; this.each(function(){var h = this, g = - 1; if (h.grid){if (isNaN(k))b(h.p.colModel).each(function(a){if (this.name === k){g = a; return false}}); else g = parseInt(k,
-                10); if (g >= 0){var j = h.rows.namedItem(f); if (j)try{i = b.unformat(b("td:eq(" + g + ")", j), {rowId:j.id, colModel:h.p.colModel[g]}, g)} catch (m){i = b.jgrid.htmlDecode(b("td:eq(" + g + ")", j).html())}}}}); return i}, getCol:function(f, k, i){var h = [], g, j = 0; k = typeof k != "boolean"?false:k; if (typeof i == "undefined")i = false; this.each(function(){var m = this, a = - 1; if (m.grid){if (isNaN(f))b(m.p.colModel).each(function(C){if (this.name === f){a = C; return false}}); else a = parseInt(f, 10); if (a >= 0){var q = m.rows.length, t = 0; if (q && q > 0){for (; t < q; ){try{g =
-                b.unformat(b(m.rows[t].cells[a]), {rowId:m.rows[t].id, colModel:m.p.colModel[a]}, a)} catch (x){g = b.jgrid.htmlDecode(m.rows[t].cells[a].innerHTML)}if (i)j += parseFloat(g); else if (k)h.push({id:m.rows[t].id, value:g}); else h[t] = g; t++}if (i)switch (i.toLowerCase()){case "sum":h = j; break; case "avg":h = j / q; break; case "count":h = q; break}}}}}); return h}, clearGridData:function(f){return this.each(function(){var k = this; if (k.grid){if (typeof f != "boolean")f = false; b("tbody:first tr", k.grid.bDiv).remove(); k.p.footerrow && f &&
-                b(".ui-jqgrid-ftable td", k.grid.sDiv).html("&#160;"); k.p.selrow = null; k.p.selarrrow = []; k.p.savedRow = []; k.p.records = 0; k.p.page = "0"; k.p.lastpage = "0"; k.p.reccount = 0; k.updatepager(true, false)}})}, getInd:function(f, k){var i = false, h; this.each(function(){if (h = this.rows.namedItem(f))i = k === true?h:h.rowIndex}); return i}})})(jQuery);
-        (function(c){function u(a, b, d, e, g){var h = b; if (c.fn.fmatter[a])h = c.fn.fmatter[a](b, d, e, g); return h}c.fmatter = {}; c.fn.fmatter = function(a, b, d, e, g){d = c.extend({}, c.jgrid.formatter, d); return u(a, b, d, e, g)}; c.fmatter.util = {NumberFormat:function(a, b){isNumber(a) || (a *= 1); if (isNumber(a)){var d = a < 0, e = a + "", g = b.decimalSeparator?b.decimalSeparator:"."; if (isNumber(b.decimalPlaces)){var h = b.decimalPlaces; e = Math.pow(10, h); e = Math.round(a * e) / e + ""; a = e.lastIndexOf("."); if (h > 0){if (a < 0){e += g; a = e.length - 1} else if (g !== ".")e =
-                e.replace(".", g); for (; e.length - 1 - a < h; )e += "0"}}if (b.thousandsSeparator){h = b.thousandsSeparator; a = e.lastIndexOf(g); a = a > - 1?a:e.length; g = e.substring(a); for (var f = - 1, i = a; i > 0; i--){f++; if (f % 3 === 0 && i !== a && (!d || i > 1))g = h + g; g = e.charAt(i - 1) + g}e = g}e = b.prefix?b.prefix + e:e; return e = b.suffix?e + b.suffix:e} else return a}, DateFormat:function(a, b, d, e){var g = function(m, r){m = String(m); for (r = parseInt(r, 10) || 2; m.length < r; )m = "0" + m; return m}, h = {m:1, d:1, y:1970, h:0, i:0, s:0, u:0}, f = 0, i, k, j = ["i18n"]; j.i18n = {dayNames:e.dayNames,
-                monthNames:e.monthNames}; if (a in e.masks)a = e.masks[a]; if (b.constructor === Date)f = b; else{b = b.split(/[\\\/:_;.\t\T\s-]/); a = a.split(/[\\\/:_;.\t\T\s-]/); i = 0; for (k = a.length; i < k; i++){if (a[i] == "M"){f = c.inArray(b[i], j.i18n.monthNames); if (f !== - 1 && f < 12)b[i] = f + 1}if (a[i] == "F"){f = c.inArray(b[i], j.i18n.monthNames); if (f !== - 1 && f > 11)b[i] = f + 1 - 12}h[a[i].toLowerCase()] = parseInt(b[i], 10)}h.m = parseInt(h.m, 10) - 1; f = h.y; if (f >= 70 && f <= 99)h.y = 1900 + h.y; else if (f >= 0 && f <= 69)h.y = 2E3 + h.y; f = new Date(h.y, h.m, h.d, h.h, h.i, h.s, h.u)}if (d in
-                e.masks)d = e.masks[d]; else d || (d = "Y-m-d"); h = f.getHours(); a = f.getMinutes(); b = f.getDate(); i = f.getMonth() + 1; k = f.getTimezoneOffset(); var l = f.getSeconds(), o = f.getMilliseconds(), n = f.getDay(), p = f.getFullYear(), q = (n + 6) % 7 + 1, s = (new Date(p, i - 1, b) - new Date(p, 0, 1)) / 864E5, t = {d:g(b), D:j.i18n.dayNames[n], j:b, l:j.i18n.dayNames[n + 7], N:q, S:e.S(b), w:n, z:s, W:q < 5?Math.floor((s + q - 1) / 7) + 1:Math.floor((s + q - 1) / 7) || (((new Date(p - 1, 0, 1)).getDay() + 6) % 7 < 4?53:52), F:j.i18n.monthNames[i - 1 + 12], m:g(i), M:j.i18n.monthNames[i - 1], n:i, t:"?",
-                L:"?", o:"?", Y:p, y:String(p).substring(2), a:h < 12?e.AmPm[0]:e.AmPm[1], A:h < 12?e.AmPm[2]:e.AmPm[3], B:"?", g:h % 12 || 12, G:h, h:g(h % 12 || 12), H:g(h), i:g(a), s:g(l), u:o, e:"?", I:"?", O:(k > 0?"-":"+") + g(Math.floor(Math.abs(k) / 60) * 100 + Math.abs(k) % 60, 4), P:"?", T:(String(f).match(/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g) || [""]).pop().replace(/[^-+\dA-Z]/g, ""), Z:"?", c:"?", r:"?", U:Math.floor(f / 1E3)}; return d.replace(/\\.|[dDjlNSwzWFmMntLoYyaABgGhHisueIOPTZcrU]/g,
-                function(m){return m in t?t[m]:m.substring(1)})}}; c.fn.fmatter.defaultFormat = function(a, b){return isValue(a) && a !== ""?a:b.defaultValue?b.defaultValue:"&#160;"}; c.fn.fmatter.email = function(a, b){return isEmpty(a)?c.fn.fmatter.defaultFormat(a, b):'<a href="mailto:' + a + '">' + a + "</a>"}; c.fn.fmatter.checkbox = function(a, b){var d = c.extend({}, b.checkbox); isUndefined(b.colModel.formatoptions) || (d = c.extend({}, d, b.colModel.formatoptions)); b = d.disabled === true?"disabled":""; if (isEmpty(a) || isUndefined(a))a = c.fn.fmatter.defaultFormat(a,
-                d); a += ""; a = a.toLowerCase(); return'<input type="checkbox" ' + (a.search(/(false|0|no|off)/i) < 0?" checked='checked' ":"") + ' value="' + a + '" offval="no" ' + b + "/>"}; c.fn.fmatter.link = function(a, b){var d = {target:b.target}, e = ""; isUndefined(b.colModel.formatoptions) || (d = c.extend({}, d, b.colModel.formatoptions)); if (d.target)e = "target=" + d.target; return isEmpty(a)?c.fn.fmatter.defaultFormat(a, b):"<a " + e + ' href="' + a + '">' + a + "</a>"}; c.fn.fmatter.showlink = function(a, b){var d = {baseLinkUrl:b.baseLinkUrl, showAction:b.showAction,
-                addParam:b.addParam || "", target:b.target, idName:b.idName}, e = ""; isUndefined(b.colModel.formatoptions) || (d = c.extend({}, d, b.colModel.formatoptions)); if (d.target)e = "target=" + d.target; d = d.baseLinkUrl + d.showAction + "?" + d.idName + "=" + b.rowId + d.addParam; return isString(a)?"<a " + e + ' href="' + d + '">' + a + "</a>":c.fn.fmatter.defaultFormat(a, b)}; c.fn.fmatter.integer = function(a, b){var d = c.extend({}, b.integer); isUndefined(b.colModel.formatoptions) || (d = c.extend({}, d, b.colModel.formatoptions)); if (isEmpty(a))return d.defaultValue;
-                return c.fmatter.util.NumberFormat(a, d)}; c.fn.fmatter.number = function(a, b){var d = c.extend({}, b.number); isUndefined(b.colModel.formatoptions) || (d = c.extend({}, d, b.colModel.formatoptions)); if (isEmpty(a))return d.defaultValue; return c.fmatter.util.NumberFormat(a, d)}; c.fn.fmatter.currency = function(a, b){var d = c.extend({}, b.currency); isUndefined(b.colModel.formatoptions) || (d = c.extend({}, d, b.colModel.formatoptions)); if (isEmpty(a))return d.defaultValue; return c.fmatter.util.NumberFormat(a, d)}; c.fn.fmatter.date =
-                function(a, b, d, e){d = c.extend({}, b.date); isUndefined(b.colModel.formatoptions) || (d = c.extend({}, d, b.colModel.formatoptions)); return!d.reformatAfterEdit && e == "edit"?c.fn.fmatter.defaultFormat(a, b):isEmpty(a)?c.fn.fmatter.defaultFormat(a, b):c.fmatter.util.DateFormat(d.srcformat, a, d.newformat, d)}; c.fn.fmatter.select = function(a, b){a += ""; var d = false, e = []; if (!isUndefined(b.colModel.editoptions))d = b.colModel.editoptions.value; if (d){var g = b.colModel.editoptions.multiple === true?true:false, h = [], f; if (g){h = a.split(",");
-                h = c.map(h, function(l){return c.trim(l)})}if (isString(d))for (var i = d.split(";"), k = 0, j = 0; j < i.length; j++){f = i[j].split(":"); if (f.length > 2)f[1] = jQuery.map(f, function(l, o){if (o > 0)return l}).join(":"); if (g){if (jQuery.inArray(f[0], h) > - 1){e[k] = f[1]; k++}} else if (c.trim(f[0]) == c.trim(a)){e[0] = f[1]; break}} else if (isObject(d))if (g)e = jQuery.map(h, function(l){return d[l]}); else e[0] = d[a] || ""}a = e.join(", "); return a == ""?c.fn.fmatter.defaultFormat(a, b):a}; c.fn.fmatter.rowactions = function(a, b, d, e){switch (d){case "edit":d =
-                function(){c("tr#" + a + " div.ui-inline-edit, tr#" + a + " div.ui-inline-del", "#" + b).show(); c("tr#" + a + " div.ui-inline-save, tr#" + a + " div.ui-inline-cancel", "#" + b).hide()}; c("#" + b).jqGrid("editRow", a, e, null, null, null, {oper:"edit"}, d, null, d); c("tr#" + a + " div.ui-inline-edit, tr#" + a + " div.ui-inline-del", "#" + b).hide(); c("tr#" + a + " div.ui-inline-save, tr#" + a + " div.ui-inline-cancel", "#" + b).show(); break; case "save":c("#" + b).jqGrid("saveRow", a, null, null); c("tr#" + a + " div.ui-inline-edit, tr#" + a + " div.ui-inline-del", "#" +
-                b).show(); c("tr#" + a + " div.ui-inline-save, tr#" + a + " div.ui-inline-cancel", "#" + b).hide(); break; case "cancel":c("#" + b).jqGrid("restoreRow", a); c("tr#" + a + " div.ui-inline-edit, tr#" + a + " div.ui-inline-del", "#" + b).show(); c("tr#" + a + " div.ui-inline-save, tr#" + a + " div.ui-inline-cancel", "#" + b).hide(); break}}; c.fn.fmatter.actions = function(a, b){a = {keys:false, editbutton:true, delbutton:true}; isUndefined(b.colModel.formatoptions) || (a = c.extend(a, b.colModel.formatoptions)); var d = b.rowId, e = "", g; if (typeof d == "undefined" ||
-                isEmpty(d))return""; if (a.editbutton){g = "onclick=$.fn.fmatter.rowactions('" + d + "','" + b.gid + "','edit'," + a.keys + ");"; e = e + "<div style='margin-left:8px;'><div title='" + c.jgrid.nav.edittitle + "' style='float:left;cursor:pointer;' class='ui-pg-div ui-inline-edit' " + g + "><span class='ui-icon ui-icon-pencil'></span></div>"}if (a.delbutton){g = "onclick=jQuery('#" + b.gid + "').jqGrid('delGridRow','" + d + "');"; e = e + "<div title='" + c.jgrid.nav.deltitle + "' style='float:left;margin-left:5px;' class='ui-pg-div ui-inline-del' " +
-                g + "><span class='ui-icon ui-icon-trash'></span></div>"}g = "onclick=$.fn.fmatter.rowactions('" + d + "','" + b.gid + "','save',false);"; e = e + "<div title='" + c.jgrid.edit.bSubmit + "' style='float:left;display:none' class='ui-pg-div ui-inline-save'><span class='ui-icon ui-icon-disk' " + g + "></span></div>"; g = "onclick=$.fn.fmatter.rowactions('" + d + "','" + b.gid + "','cancel',false);"; return e = e + "<div title='" + c.jgrid.edit.bCancel + "' style='float:left;display:none;margin-left:5px;' class='ui-pg-div ui-inline-cancel'><span class='ui-icon ui-icon-cancel' " +
-                g + "></span></div></div>"}; c.unformat = function(a, b, d, e){var g, h = b.colModel.formatter, f = b.colModel.formatoptions || {}, i = /([\.\*\_\'\(\)\{\}\+\?\\])/g; unformatFunc = b.colModel.unformat || c.fn.fmatter[h] && c.fn.fmatter[h].unformat; if (typeof unformatFunc !== "undefined" && isFunction(unformatFunc))g = unformatFunc(c(a).text(), b, a); else if (typeof h !== "undefined" && isString(h)){g = c.jgrid.formatter || {}; switch (h){case "integer":f = c.extend({}, g.integer, f); b = f.thousandsSeparator.replace(i, "\\$1"); b = new RegExp(b, "g"); g =
-                c(a).text().replace(b, ""); break; case "number":f = c.extend({}, g.number, f); b = f.thousandsSeparator.replace(i, "\\$1"); b = new RegExp(b, "g"); g = c(a).text().replace(b, "").replace(f.decimalSeparator, "."); break; case "currency":f = c.extend({}, g.currency, f); b = f.thousandsSeparator.replace(i, "\\$1"); b = new RegExp(b, "g"); g = c(a).text().replace(b, "").replace(f.decimalSeparator, ".").replace(f.prefix, "").replace(f.suffix, ""); break; case "checkbox":f = b.colModel.editoptions?b.colModel.editoptions.value.split(":"):["Yes", "No"];
-                g = c("input", a).attr("checked")?f[0]:f[1]; break; case "select":g = c.unformat.select(a, b, d, e); break; case "actions":return""; default:g = c(a).text()}}return g?g:e === true?c(a).text():c.jgrid.htmlDecode(c(a).html())}; c.unformat.select = function(a, b, d, e){d = []; a = c(a).text(); if (e === true)return a; b = c.extend({}, b.colModel.editoptions); if (b.value){var g = b.value; b = b.multiple === true?true:false; e = []; var h; if (b){e = a.split(","); e = c.map(e, function(j){return c.trim(j)})}if (isString(g))for (var f = g.split(";"), i = 0, k = 0; k < f.length; k++){h =
-                f[k].split(":"); if (b){if (jQuery.inArray(h[1], e) > - 1){d[i] = h[0]; i++}} else if (c.trim(h[1]) == c.trim(a)){d[0] = h[0]; break}} else if (isObject(g)){b || (e[0] = a); d = jQuery.map(e, function(j){var l; c.each(g, function(o, n){if (n == j){l = o; return false}}); if (l)return l})}return d.join(", ")} else return a || ""}; isValue = function(a){return isObject(a) || isString(a) || isNumber(a) || isBoolean(a)}; isBoolean = function(a){return typeof a === "boolean"}; isNull = function(a){return a === null}; isNumber = function(a){return typeof a === "number" &&
-                isFinite(a)}; isString = function(a){return typeof a === "string"}; isEmpty = function(a){if (!isString(a) && isValue(a))return false; else if (!isValue(a))return true; a = c.trim(a).replace(/\&nbsp\;/ig, "").replace(/\&#160\;/ig, ""); return a === ""}; isUndefined = function(a){return typeof a === "undefined"}; isObject = function(a){return a && (typeof a === "object" || isFunction(a)) || false}; isFunction = function(a){return typeof a === "function"}})(jQuery);
-        (function(a){a.jgrid.extend({getColProp:function(g){var d = {}, b = this[0]; if (b.grid){b = b.p.colModel; for (var n = 0; n < b.length; n++)if (b[n].name == g){d = b[n]; break}return d}}, setColProp:function(g, d){return this.each(function(){if (this.grid)if (d)for (var b = this.p.colModel, n = 0; n < b.length; n++)if (b[n].name == g){a.extend(this.p.colModel[n], d); break}})}, sortGrid:function(g, d, b){return this.each(function(){var n = this, s = - 1; if (n.grid){if (!g)g = n.p.sortname; for (var q = 0; q < n.p.colModel.length; q++)if (n.p.colModel[q].index ==
-                g || n.p.colModel[q].name == g){s = q; break}if (s != - 1){q = n.p.colModel[s].sortable; if (typeof q !== "boolean")q = true; if (typeof d !== "boolean")d = false; q && n.sortData("jqgh_" + g, s, d, b)}}})}, GridDestroy:function(){return this.each(function(){if (this.grid){this.p.pager && a(this.p.pager).remove(); var g = this.id; try{a("#gbox_" + g).remove()} catch (d){}}})}, GridUnload:function(){return this.each(function(){if (this.grid){var g = {id:a(this).attr("id"), cl:a(this).attr("class")}; this.p.pager && a(this.p.pager).empty().removeClass("ui-state-default ui-jqgrid-pager corner-bottom");
-                var d = document.createElement("table"); a(d).attr({id:g.id}); d.className = g.cl; g = this.id; a(d).removeClass("ui-jqgrid-btable"); if (a(this.p.pager).parents("#gbox_" + g).length === 1){a(d).insertBefore("#gbox_" + g).show(); a(this.p.pager).insertBefore("#gbox_" + g)} else a(d).insertBefore("#gbox_" + g).show(); a("#gbox_" + g).remove()}})}, setGridState:function(g){return this.each(function(){if (this.grid){var d = this; if (g == "hidden"){a(".ui-jqgrid-bdiv, .ui-jqgrid-hdiv", "#gview_" + d.p.id).slideUp("fast"); d.p.pager && a(d.p.pager).slideUp("fast");
-                d.p.toppager && a(d.p.toppager).slideUp("fast"); if (d.p.toolbar[0] === true){d.p.toolbar[1] == "both" && a(d.grid.ubDiv).slideUp("fast"); a(d.grid.uDiv).slideUp("fast")}d.p.footerrow && a(".ui-jqgrid-sdiv", "#gbox_" + d.p.id).slideUp("fast"); a(".ui-jqgrid-titlebar-close span", d.grid.cDiv).removeClass("ui-icon-circle-triangle-n").addClass("ui-icon-circle-triangle-s"); d.p.gridstate = "hidden"} else if (g == "visible"){a(".ui-jqgrid-hdiv, .ui-jqgrid-bdiv", "#gview_" + d.p.id).slideDown("fast"); d.p.pager && a(d.p.pager).slideDown("fast");
-                d.p.toppager && a(d.p.toppager).slideDown("fast"); if (d.p.toolbar[0] === true){d.p.toolbar[1] == "both" && a(d.grid.ubDiv).slideDown("fast"); a(d.grid.uDiv).slideDown("fast")}d.p.footerrow && a(".ui-jqgrid-sdiv", "#gbox_" + d.p.id).slideDown("fast"); a(".ui-jqgrid-titlebar-close span", d.grid.cDiv).removeClass("ui-icon-circle-triangle-s").addClass("ui-icon-circle-triangle-n"); d.p.gridstate = "visible"}}})}, updateGridRows:function(g, d, b){var n, s = false, q; this.each(function(){var h = this, l, o, c, f; if (!h.grid)return false;
-                d || (d = "id"); g && g.length > 0 && a(g).each(function(){c = this; if (o = h.rows.namedItem(c[d])){f = c[d]; if (b === true)if (h.p.jsonReader.repeatitems === true){if (h.p.jsonReader.cell)c = c[h.p.jsonReader.cell]; for (var e = 0; e < c.length; e++){l = h.formatter(f, c[e], e, c, "edit"); q = h.p.colModel[e].title?{title:a.jgrid.stripHtml(l)}:{}; h.p.treeGrid === true && n == h.p.ExpandColumn?a("td:eq(" + e + ") > span:first", o).html(l).attr(q):a("td:eq(" + e + ")", o).html(l).attr(q)}return s = true}a(h.p.colModel).each(function(m){n = b === true?this.jsonmap ||
-                this.name:this.name; if (c[n] !== undefined){l = h.formatter(f, c[n], m, c, "edit"); q = this.title?{title:a.jgrid.stripHtml(l)}:{}; h.p.treeGrid === true && n == h.p.ExpandColumn?a("td:eq(" + m + ") > span:first", o).html(l).attr(q):a("td:eq(" + m + ")", o).html(l).attr(q); s = true}})}})}); return s}, filterGrid:function(g, d){d = a.extend({gridModel:false, gridNames:false, gridToolbar:false, filterModel:[], formtype:"horizontal", autosearch:true, formclass:"filterform", tableclass:"filtertable", buttonclass:"filterbutton", searchButton:"Search",
-                clearButton:"Clear", enableSearch:false, enableClear:false, beforeSearch:null, afterSearch:null, beforeClear:null, afterClear:null, url:"", marksearched:true}, d || {}); return this.each(function(){var b = this; this.p = d; if (this.p.filterModel.length === 0 && this.p.gridModel === false)alert("No filter is set"); else if (g){this.p.gridid = g.indexOf("#") != - 1?g:"#" + g; var n = a(this.p.gridid).jqGrid("getGridParam", "colModel"); if (n){if (this.p.gridModel === true){var s = a(this.p.gridid)[0], q; a.each(n, function(f){var e = []; this.search =
-                this.search === false?false:true; q = this.editrules && this.editrules.searchhidden === true?true:this.hidden === true?false:true; if (this.search === true && q === true){e.label = b.p.gridNames === true?s.p.colNames[f]:""; e.name = this.name; e.index = this.index || this.name; e.stype = this.edittype || "text"; if (e.stype != "select")e.stype = "text"; e.defval = this.defval || ""; e.surl = this.surl || ""; e.sopt = this.editoptions || {}; e.width = this.width; b.p.filterModel.push(e)}})} else a.each(b.p.filterModel, function(){for (var f = 0; f < n.length; f++)if (this.name ==
-                n[f].name){this.index = n[f].index || this.name; break}if (!this.index)this.index = this.name}); var h = function(){var f = {}, e = 0, m, i = a(b.p.gridid)[0], k; i.p.searchdata = {}; a.isFunction(b.p.beforeSearch) && b.p.beforeSearch(); a.each(b.p.filterModel, function(){k = this.index; switch (this.stype){case "select":if (m = a("select[name=" + k + "]", b).val()){f[k] = m; b.p.marksearched && a("#jqgh_" + this.name, i.grid.hDiv).addClass("dirty-cell"); e++} else{b.p.marksearched && a("#jqgh_" + this.name, i.grid.hDiv).removeClass("dirty-cell"); try{delete i.p.postData[this.index]} catch (r){}}break;
-                default:if (m = a("input[name=" + k + "]", b).val()){f[k] = m; b.p.marksearched && a("#jqgh_" + this.name, i.grid.hDiv).addClass("dirty-cell"); e++} else{b.p.marksearched && a("#jqgh_" + this.name, i.grid.hDiv).removeClass("dirty-cell"); try{delete i.p.postData[this.index]} catch (u){}}}}); var p = e > 0?true:false; a.extend(i.p.postData, f); var j; if (b.p.url){j = a(i).jqGrid("getGridParam", "url"); a(i).jqGrid("setGridParam", {url:b.p.url})}a(i).jqGrid("setGridParam", {search:p}).trigger("reloadGrid", [{page:1}]); j && a(i).jqGrid("setGridParam",
-        {url:j}); a.isFunction(b.p.afterSearch) && b.p.afterSearch()}, l = function(){var f = {}, e, m = 0, i = a(b.p.gridid)[0], k; a.isFunction(b.p.beforeClear) && b.p.beforeClear(); a.each(b.p.filterModel, function(){k = this.index; e = this.defval?this.defval:""; if (!this.stype)this.stype = "text"; switch (this.stype){case "select":var r; a("select[name=" + k + "] option", b).each(function(v){if (v === 0)this.selected = true; if (a(this).text() == e){this.selected = true; r = a(this).val(); return false}}); if (r){f[k] = r; b.p.marksearched && a("#jqgh_" + this.name,
-                i.grid.hDiv).addClass("dirty-cell"); m++} else{b.p.marksearched && a("#jqgh_" + this.name, i.grid.hDiv).removeClass("dirty-cell"); try{delete i.p.postData[this.index]} catch (u){}}break; case "text":a("input[name=" + k + "]", b).val(e); if (e){f[k] = e; b.p.marksearched && a("#jqgh_" + this.name, i.grid.hDiv).addClass("dirty-cell"); m++} else{b.p.marksearched && a("#jqgh_" + this.name, i.grid.hDiv).removeClass("dirty-cell"); try{delete i.p.postData[this.index]} catch (t){}}break}}); var p = m > 0?true:false; a.extend(i.p.postData, f); var j;
-                if (b.p.url){j = a(i).jqGrid("getGridParam", "url"); a(i).jqGrid("setGridParam", {url:b.p.url})}a(i).jqGrid("setGridParam", {search:p}).trigger("reloadGrid", [{page:1}]); j && a(i).jqGrid("setGridParam", {url:j}); a.isFunction(b.p.afterClear) && b.p.afterClear()}, o = a("<form name='SearchForm' style=display:inline;' class='" + this.p.formclass + "'></form>"), c = a("<table class='" + this.p.tableclass + "' cellspacing='0' cellpading='0' border='0'><tbody></tbody></table>"); a(o).append(c); (function(){var f = document.createElement("tr"),
-                e, m, i, k; b.p.formtype == "horizontal" && a(c).append(f); a.each(b.p.filterModel, function(p){i = document.createElement("td"); a(i).append("<label for='" + this.name + "'>" + this.label + "</label>"); k = document.createElement("td"); var j = this; if (!this.stype)this.stype = "text"; switch (this.stype){case "select":if (this.surl)a(k).load(this.surl, function(){j.defval && a("select", this).val(j.defval); a("select", this).attr({name:j.index || j.name, id:"sg_" + j.name}); j.sopt && a("select", this).attr(j.sopt); b.p.gridToolbar === true && j.width &&
-                a("select", this).width(j.width); b.p.autosearch === true && a("select", this).change(function(){h(); return false})}); else if (j.sopt.value){var r = j.sopt.value, u = document.createElement("select"); a(u).attr({name:j.index || j.name, id:"sg_" + j.name}).attr(j.sopt); var t; if (typeof r === "string"){p = r.split(";"); for (var v = 0; v < p.length; v++){r = p[v].split(":"); t = document.createElement("option"); t.value = r[0]; t.innerHTML = r[1]; if (r[1] == j.defval)t.selected = "selected"; u.appendChild(t)}} else if (typeof r === "object")for (v in r)if (r.hasOwnProperty(v)){p++;
-                t = document.createElement("option"); t.value = v; t.innerHTML = r[v]; if (r[v] == j.defval)t.selected = "selected"; u.appendChild(t)}b.p.gridToolbar === true && j.width && a(u).width(j.width); a(k).append(u); b.p.autosearch === true && a(u).change(function(){h(); return false})}break; case "text":u = this.defval?this.defval:""; a(k).append("<input type='text' name='" + (this.index || this.name) + "' id='sg_" + this.name + "' value='" + u + "'/>"); j.sopt && a("input", k).attr(j.sopt); if (b.p.gridToolbar === true && j.width)a.browser.msie?a("input", k).width(j.width -
-                4):a("input", k).width(j.width - 2); b.p.autosearch === true && a("input", k).keypress(function(w){if ((w.charCode?w.charCode:w.keyCode?w.keyCode:0) == 13){h(); return false}return this}); break}if (b.p.formtype == "horizontal"){b.p.gridToolbar === true && b.p.gridNames === false?a(f).append(k):a(f).append(i).append(k); a(f).append(k)} else{e = document.createElement("tr"); a(e).append(i).append(k); a(c).append(e)}}); k = document.createElement("td"); if (b.p.enableSearch === true){m = "<input type='button' id='sButton' class='" + b.p.buttonclass +
-                "' value='" + b.p.searchButton + "'/>"; a(k).append(m); a("input#sButton", k).click(function(){h(); return false})}if (b.p.enableClear === true){m = "<input type='button' id='cButton' class='" + b.p.buttonclass + "' value='" + b.p.clearButton + "'/>"; a(k).append(m); a("input#cButton", k).click(function(){l(); return false})}if (b.p.enableClear === true || b.p.enableSearch === true)if (b.p.formtype == "horizontal")a(f).append(k); else{e = document.createElement("tr"); a(e).append("<td>&#160;</td>").append(k); a(c).append(e)}})(); a(this).append(o);
-                this.triggerSearch = h; this.clearSearch = l} else alert("Could not get grid colModel")} else alert("No target grid is set!")})}, filterToolbar:function(g){g = a.extend({autosearch:true, searchOnEnter:true, beforeSearch:null, afterSearch:null, beforeClear:null, afterClear:null, searchurl:"", stringResult:false, groupOp:"AND"}, g || {}); return this.each(function(){function d(h, l){var o = a(h); o[0] && jQuery.each(l, function(){this.data !== undefined?o.bind(this.type, this.data, this.fn):o.bind(this.type, this.fn)})}var b = this, n =
-                function(){var h = {}, l = 0, o, c, f = {}; a.each(b.p.colModel, function(){c = this.index || this.name; var j = this.searchoptions && this.searchoptions.sopt?this.searchoptions.sopt[0]:"bw"; switch (this.stype){case "select":if (o = a("select[name=" + c + "]", b.grid.hDiv).val()){h[c] = o; f[c] = j; l++} else try{delete b.p.postData[c]} catch (r){}break; case "text":if (o = a("input[name=" + c + "]", b.grid.hDiv).val()){h[c] = o; f[c] = j; l++} else try{delete b.p.postD

<TRUNCATED>

[03/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of codemirror.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9180b7d4/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.js
deleted file mode 100755
index a085720..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.js
+++ /dev/null
@@ -1,8488 +0,0 @@
-// This is CodeMirror (http://codemirror.net), a code editor
-// implemented in JavaScript on top of the browser's DOM.
-//
-// You can find some technical background for some of the code below
-// at http://marijnhaverbeke.nl/blog/#cm-internals .
-
-(function (mod) {
-    if (typeof exports == "object" && typeof module == "object") // CommonJS
-        module.exports = mod();
-    else if (typeof define == "function" && define.amd) // AMD
-        return define([], mod);
-    else // Plain browser env
-        this.CodeMirror = mod();
-})(function () {
-    "use strict";
-
-    // BROWSER SNIFFING
-
-    // Kludges for bugs and behavior differences that can't be feature
-    // detected are enabled based on userAgent etc sniffing.
-
-    var gecko = /gecko\/\d/i.test(navigator.userAgent);
-    // ie_uptoN means Internet Explorer version N or lower
-    var ie_upto10 = /MSIE \d/.test(navigator.userAgent);
-    var ie_upto7 = ie_upto10 && (document.documentMode == null || document.documentMode < 8);
-    var ie_upto8 = ie_upto10 && (document.documentMode == null || document.documentMode < 9);
-    var ie_upto9 = ie_upto10 && (document.documentMode == null || document.documentMode < 10);
-    var ie_11up = /Trident\/([7-9]|\d{2,})\./.test(navigator.userAgent);
-    var ie = ie_upto10 || ie_11up;
-    var webkit = /WebKit\//.test(navigator.userAgent);
-    var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent);
-    var chrome = /Chrome\//.test(navigator.userAgent);
-    var presto = /Opera\//.test(navigator.userAgent);
-    var safari = /Apple Computer/.test(navigator.vendor);
-    var khtml = /KHTML\//.test(navigator.userAgent);
-    var mac_geLion = /Mac OS X 1\d\D([7-9]|\d\d)\D/.test(navigator.userAgent);
-    var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent);
-    var phantom = /PhantomJS/.test(navigator.userAgent);
-
-    var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent);
-    // This is woefully incomplete. Suggestions for alternative methods welcome.
-    var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent);
-    var mac = ios || /Mac/.test(navigator.platform);
-    var windows = /win/i.test(navigator.platform);
-
-    var presto_version = presto && navigator.userAgent.match(/Version\/(\d*\.\d*)/);
-    if (presto_version)
-        presto_version = Number(presto_version[1]);
-    if (presto_version && presto_version >= 15) {
-        presto = false;
-        webkit = true;
-    }
-    // Some browsers use the wrong event properties to signal cmd/ctrl on OS X
-    var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));
-    var captureRightClick = gecko || (ie && !ie_upto8);
-
-    // Optimize some code when these features are not used.
-    var sawReadOnlySpans = false, sawCollapsedSpans = false;
-
-    // EDITOR CONSTRUCTOR
-
-    // A CodeMirror instance represents an editor. This is the object
-    // that user code is usually dealing with.
-
-    function CodeMirror(place, options) {
-        if (!(this instanceof CodeMirror))
-            return new CodeMirror(place, options);
-
-        this.options = options = options || {};
-        // Determine effective options based on given values and defaults.
-        for (var opt in defaults)
-            if (!options.hasOwnProperty(opt))
-                options[opt] = defaults[opt];
-        setGuttersForLineNumbers(options);
-
-        var doc = options.value;
-        if (typeof doc == "string")
-            doc = new Doc(doc, options.mode);
-        this.doc = doc;
-
-        var display = this.display = new Display(place, doc);
-        display.wrapper.CodeMirror = this;
-        updateGutters(this);
-        themeChanged(this);
-        if (options.lineWrapping)
-            this.display.wrapper.className += " CodeMirror-wrap";
-        if (options.autofocus && !mobile)
-            focusInput(this);
-
-        this.state = {
-            keyMaps: [], // stores maps added by addKeyMap
-            overlays: [], // highlighting overlays, as added by addOverlay
-            modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info
-            overwrite: false, focused: false,
-            suppressEdits: false, // used to disable editing during key handlers when in readOnly mode
-            pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in readInput
-            draggingText: false,
-            highlight: new Delayed() // stores highlight worker timeout
-        };
-
-        // Override magic textarea content restore that IE sometimes does
-        // on our hidden textarea on reload
-        if (ie_upto10)
-            setTimeout(bind(resetInput, this, true), 20);
-
-        registerEventHandlers(this);
-
-        var cm = this;
-        runInOp(this, function () {
-            cm.curOp.forceUpdate = true;
-            attachDoc(cm, doc);
-
-            if ((options.autofocus && !mobile) || activeElt() == display.input)
-                setTimeout(bind(onFocus, cm), 20);
-            else
-                onBlur(cm);
-
-            for (var opt in optionHandlers)
-                if (optionHandlers.hasOwnProperty(opt))
-                    optionHandlers[opt](cm, options[opt], Init);
-            for (var i = 0; i < initHooks.length; ++i)
-                initHooks[i](cm);
-        });
-    }
-
-    // DISPLAY CONSTRUCTOR
-
-    // The display handles the DOM integration, both for input reading
-    // and content drawing. It holds references to DOM nodes and
-    // display-related state.
-
-    function Display(place, doc) {
-        var d = this;
-
-        // The semihidden textarea that is focused when the editor is
-        // focused, and receives input.
-        var input = d.input = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none");
-        // The textarea is kept positioned near the cursor to prevent the
-        // fact that it'll be scrolled into view on input from scrolling
-        // our fake cursor out of view. On webkit, when wrap=off, paste is
-        // very slow. So make the area wide instead.
-        if (webkit)
-            input.style.width = "1000px";
-        else
-            input.setAttribute("wrap", "off");
-        // If border: 0; -- iOS fails to open keyboard (issue #1287)
-        if (ios)
-            input.style.border = "1px solid black";
-        input.setAttribute("autocorrect", "off");
-        input.setAttribute("autocapitalize", "off");
-        input.setAttribute("spellcheck", "false");
-
-        // Wraps and hides input textarea
-        d.inputDiv = elt("div", [input], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
-        // The fake scrollbar elements.
-        d.scrollbarH = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar");
-        d.scrollbarV = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar");
-        // Covers bottom-right square when both scrollbars are present.
-        d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler");
-        // Covers bottom of gutter when coverGutterNextToScrollbar is on
-        // and h scrollbar is present.
-        d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler");
-        // Will contain the actual code, positioned to cover the viewport.
-        d.lineDiv = elt("div", null, "CodeMirror-code");
-        // Elements are added to these to represent selection and cursors.
-        d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1");
-        d.cursorDiv = elt("div", null, "CodeMirror-cursors");
-        // A visibility: hidden element used to find the size of things.
-        d.measure = elt("div", null, "CodeMirror-measure");
-        // When lines outside of the viewport are measured, they are drawn in this.
-        d.lineMeasure = elt("div", null, "CodeMirror-measure");
-        // Wraps everything that needs to exist inside the vertically-padded coordinate system
-        d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],
-                null, "position: relative; outline: none");
-        // Moved around its parent to cover visible view.
-        d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative");
-        // Set to the height of the document, allowing scrolling.
-        d.sizer = elt("div", [d.mover], "CodeMirror-sizer");
-        // Behavior of elts with overflow: auto and padding is
-        // inconsistent across browsers. This is used to ensure the
-        // scrollable area is big enough.
-        d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerCutOff + "px; width: 1px;");
-        // Will contain the gutters, if any.
-        d.gutters = elt("div", null, "CodeMirror-gutters");
-        d.lineGutter = null;
-        // Actual scrollable element.
-        d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll");
-        d.scroller.setAttribute("tabIndex", "-1");
-        // The element in which the editor lives.
-        d.wrapper = elt("div", [d.inputDiv, d.scrollbarH, d.scrollbarV,
-            d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror");
-
-        // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)
-        if (ie_upto7) {
-            d.gutters.style.zIndex = -1;
-            d.scroller.style.paddingRight = 0;
-        }
-        // Needed to hide big blue blinking cursor on Mobile Safari
-        if (ios)
-            input.style.width = "0px";
-        if (!webkit)
-            d.scroller.draggable = true;
-        // Needed to handle Tab key in KHTML
-        if (khtml) {
-            d.inputDiv.style.height = "1px";
-            d.inputDiv.style.position = "absolute";
-        }
-        // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
-        if (ie_upto7)
-            d.scrollbarH.style.minHeight = d.scrollbarV.style.minWidth = "18px";
-
-        if (place.appendChild)
-            place.appendChild(d.wrapper);
-        else
-            place(d.wrapper);
-
-        // Current rendered range (may be bigger than the view window).
-        d.viewFrom = d.viewTo = doc.first;
-        // Information about the rendered lines.
-        d.view = [];
-        // Holds info about a single rendered line when it was rendered
-        // for measurement, while not in view.
-        d.externalMeasured = null;
-        // Empty space (in pixels) above the view
-        d.viewOffset = 0;
-        d.lastSizeC = 0;
-        d.updateLineNumbers = null;
-
-        // Used to only resize the line number gutter when necessary (when
-        // the amount of lines crosses a boundary that makes its width change)
-        d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;
-        // See readInput and resetInput
-        d.prevInput = "";
-        // Set to true when a non-horizontal-scrolling line widget is
-        // added. As an optimization, line widget aligning is skipped when
-        // this is false.
-        d.alignWidgets = false;
-        // Flag that indicates whether we expect input to appear real soon
-        // now (after some event like 'keypress' or 'input') and are
-        // polling intensively.
-        d.pollingFast = false;
-        // Self-resetting timeout for the poller
-        d.poll = new Delayed();
-
-        d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
-
-        // Tracks when resetInput has punted to just putting a short
-        // string into the textarea instead of the full selection.
-        d.inaccurateSelection = false;
-
-        // Tracks the maximum line length so that the horizontal scrollbar
-        // can be kept static when scrolling.
-        d.maxLine = null;
-        d.maxLineLength = 0;
-        d.maxLineChanged = false;
-
-        // Used for measuring wheel scrolling granularity
-        d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;
-
-        // True when shift is held down.
-        d.shift = false;
-    }
-
-    // STATE UPDATES
-
-    // Used to get the editor into a consistent state again when options change.
-
-    function loadMode(cm) {
-        cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption);
-        resetModeState(cm);
-    }
-
-    function resetModeState(cm) {
-        cm.doc.iter(function (line) {
-            if (line.stateAfter)
-                line.stateAfter = null;
-            if (line.styles)
-                line.styles = null;
-        });
-        cm.doc.frontier = cm.doc.first;
-        startWorker(cm, 100);
-        cm.state.modeGen++;
-        if (cm.curOp)
-            regChange(cm);
-    }
-
-    function wrappingChanged(cm) {
-        if (cm.options.lineWrapping) {
-            cm.display.wrapper.className += " CodeMirror-wrap";
-            cm.display.sizer.style.minWidth = "";
-        } else {
-            cm.display.wrapper.className = cm.display.wrapper.className.replace(" CodeMirror-wrap", "");
-            findMaxLine(cm);
-        }
-        estimateLineHeights(cm);
-        regChange(cm);
-        clearCaches(cm);
-        setTimeout(function () {
-            updateScrollbars(cm);
-        }, 100);
-    }
-
-    // Returns a function that estimates the height of a line, to use as
-    // first approximation until the line becomes visible (and is thus
-    // properly measurable).
-    function estimateHeight(cm) {
-        var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;
-        var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);
-        return function (line) {
-            if (lineIsHidden(cm.doc, line))
-                return 0;
-
-            var widgetsHeight = 0;
-            if (line.widgets)
-                for (var i = 0; i < line.widgets.length; i++) {
-                    if (line.widgets[i].height)
-                        widgetsHeight += line.widgets[i].height;
-                }
-
-            if (wrapping)
-                return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th;
-            else
-                return widgetsHeight + th;
-        };
-    }
-
-    function estimateLineHeights(cm) {
-        var doc = cm.doc, est = estimateHeight(cm);
-        doc.iter(function (line) {
-            var estHeight = est(line);
-            if (estHeight != line.height)
-                updateLineHeight(line, estHeight);
-        });
-    }
-
-    function keyMapChanged(cm) {
-        var map = keyMap[cm.options.keyMap], style = map.style;
-        cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-keymap-\S+/g, "") +
-                (style ? " cm-keymap-" + style : "");
-    }
-
-    function themeChanged(cm) {
-        cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
-                cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-");
-        clearCaches(cm);
-    }
-
-    function guttersChanged(cm) {
-        updateGutters(cm);
-        regChange(cm);
-        setTimeout(function () {
-            alignHorizontally(cm);
-        }, 20);
-    }
-
-    // Rebuild the gutter elements, ensure the margin to the left of the
-    // code matches their width.
-    function updateGutters(cm) {
-        var gutters = cm.display.gutters, specs = cm.options.gutters;
-        removeChildren(gutters);
-        for (var i = 0; i < specs.length; ++i) {
-            var gutterClass = specs[i];
-            var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass));
-            if (gutterClass == "CodeMirror-linenumbers") {
-                cm.display.lineGutter = gElt;
-                gElt.style.width = (cm.display.lineNumWidth || 1) + "px";
-            }
-        }
-        gutters.style.display = i ? "" : "none";
-        var width = gutters.offsetWidth;
-        cm.display.sizer.style.marginLeft = width + "px";
-        if (i)
-            cm.display.scrollbarH.style.left = cm.options.fixedGutter ? width + "px" : 0;
-    }
-
-    // Compute the character length of a line, taking into account
-    // collapsed ranges (see markText) that might hide parts, and join
-    // other lines onto it.
-    function lineLength(line) {
-        if (line.height == 0)
-            return 0;
-        var len = line.text.length, merged, cur = line;
-        while (merged = collapsedSpanAtStart(cur)) {
-            var found = merged.find(0, true);
-            cur = found.from.line;
-            len += found.from.ch - found.to.ch;
-        }
-        cur = line;
-        while (merged = collapsedSpanAtEnd(cur)) {
-            var found = merged.find(0, true);
-            len -= cur.text.length - found.from.ch;
-            cur = found.to.line;
-            len += cur.text.length - found.to.ch;
-        }
-        return len;
-    }
-
-    // Find the longest line in the document.
-    function findMaxLine(cm) {
-        var d = cm.display, doc = cm.doc;
-        d.maxLine = getLine(doc, doc.first);
-        d.maxLineLength = lineLength(d.maxLine);
-        d.maxLineChanged = true;
-        doc.iter(function (line) {
-            var len = lineLength(line);
-            if (len > d.maxLineLength) {
-                d.maxLineLength = len;
-                d.maxLine = line;
-            }
-        });
-    }
-
-    // Make sure the gutters options contains the element
-    // "CodeMirror-linenumbers" when the lineNumbers option is true.
-    function setGuttersForLineNumbers(options) {
-        var found = indexOf(options.gutters, "CodeMirror-linenumbers");
-        if (found == -1 && options.lineNumbers) {
-            options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]);
-        } else if (found > -1 && !options.lineNumbers) {
-            options.gutters = options.gutters.slice(0);
-            options.gutters.splice(found, 1);
-        }
-    }
-
-    // SCROLLBARS
-
-    // Prepare DOM reads needed to update the scrollbars. Done in one
-    // shot to minimize update/measure roundtrips.
-    function measureForScrollbars(cm) {
-        var scroll = cm.display.scroller;
-        return {
-            clientHeight: scroll.clientHeight,
-            barHeight: cm.display.scrollbarV.clientHeight,
-            scrollWidth: scroll.scrollWidth, clientWidth: scroll.clientWidth,
-            barWidth: cm.display.scrollbarH.clientWidth,
-            docHeight: Math.round(cm.doc.height + paddingVert(cm.display))
-        };
-    }
-
-    // Re-synchronize the fake scrollbars with the actual size of the
-    // content.
-    function updateScrollbars(cm, measure) {
-        if (!measure)
-            measure = measureForScrollbars(cm);
-        var d = cm.display;
-        var scrollHeight = measure.docHeight + scrollerCutOff;
-        var needsH = measure.scrollWidth > measure.clientWidth;
-        var needsV = scrollHeight > measure.clientHeight;
-        if (needsV) {
-            d.scrollbarV.style.display = "block";
-            d.scrollbarV.style.bottom = needsH ? scrollbarWidth(d.measure) + "px" : "0";
-            // A bug in IE8 can cause this value to be negative, so guard it.
-            d.scrollbarV.firstChild.style.height =
-                    Math.max(0, scrollHeight - measure.clientHeight + (measure.barHeight || d.scrollbarV.clientHeight)) + "px";
-        } else {
-            d.scrollbarV.style.display = "";
-            d.scrollbarV.firstChild.style.height = "0";
-        }
-        if (needsH) {
-            d.scrollbarH.style.display = "block";
-            d.scrollbarH.style.right = needsV ? scrollbarWidth(d.measure) + "px" : "0";
-            d.scrollbarH.firstChild.style.width =
-                    (measure.scrollWidth - measure.clientWidth + (measure.barWidth || d.scrollbarH.clientWidth)) + "px";
-        } else {
-            d.scrollbarH.style.display = "";
-            d.scrollbarH.firstChild.style.width = "0";
-        }
-        if (needsH && needsV) {
-            d.scrollbarFiller.style.display = "block";
-            d.scrollbarFiller.style.height = d.scrollbarFiller.style.width = scrollbarWidth(d.measure) + "px";
-        } else
-            d.scrollbarFiller.style.display = "";
-        if (needsH && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
-            d.gutterFiller.style.display = "block";
-            d.gutterFiller.style.height = scrollbarWidth(d.measure) + "px";
-            d.gutterFiller.style.width = d.gutters.offsetWidth + "px";
-        } else
-            d.gutterFiller.style.display = "";
-
-        if (mac_geLion && scrollbarWidth(d.measure) === 0) {
-            d.scrollbarV.style.minWidth = d.scrollbarH.style.minHeight = mac_geMountainLion ? "18px" : "12px";
-            var barMouseDown = function (e) {
-                if (e_target(e) != d.scrollbarV && e_target(e) != d.scrollbarH)
-                    operation(cm, onMouseDown)(e);
-            };
-            on(d.scrollbarV, "mousedown", barMouseDown);
-            on(d.scrollbarH, "mousedown", barMouseDown);
-        }
-    }
-
-    // Compute the lines that are visible in a given viewport (defaults
-    // the the current scroll position). viewPort may contain top,
-    // height, and ensure (see op.scrollToPos) properties.
-    function visibleLines(display, doc, viewPort) {
-        var top = viewPort && viewPort.top != null ? viewPort.top : display.scroller.scrollTop;
-        top = Math.floor(top - paddingTop(display));
-        var bottom = viewPort && viewPort.bottom != null ? viewPort.bottom : top + display.wrapper.clientHeight;
-
-        var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);
-        // Ensure is a {from: {line, ch}, to: {line, ch}} object, and
-        // forces those lines into the viewport (if possible).
-        if (viewPort && viewPort.ensure) {
-            var ensureFrom = viewPort.ensure.from.line, ensureTo = viewPort.ensure.to.line;
-            if (ensureFrom < from)
-                return {from: ensureFrom,
-                    to: lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight)};
-            if (Math.min(ensureTo, doc.lastLine()) >= to)
-                return {from: lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight),
-                    to: ensureTo};
-        }
-        return {from: from, to: to};
-    }
-
-    // LINE NUMBERS
-
-    // Re-align line numbers and gutter marks to compensate for
-    // horizontal scrolling.
-    function alignHorizontally(cm) {
-        var display = cm.display, view = display.view;
-        if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter))
-            return;
-        var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;
-        var gutterW = display.gutters.offsetWidth, left = comp + "px";
-        for (var i = 0; i < view.length; i++)
-            if (!view[i].hidden) {
-                if (cm.options.fixedGutter && view[i].gutter)
-                    view[i].gutter.style.left = left;
-                var align = view[i].alignable;
-                if (align)
-                    for (var j = 0; j < align.length; j++)
-                        align[j].style.left = left;
-            }
-        if (cm.options.fixedGutter)
-            display.gutters.style.left = (comp + gutterW) + "px";
-    }
-
-    // Used to ensure that the line number gutter is still the right
-    // size for the current document size. Returns true when an update
-    // is needed.
-    function maybeUpdateLineNumberWidth(cm) {
-        if (!cm.options.lineNumbers)
-            return false;
-        var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;
-        if (last.length != display.lineNumChars) {
-            var test = display.measure.appendChild(elt("div", [elt("div", last)],
-                    "CodeMirror-linenumber CodeMirror-gutter-elt"));
-            var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;
-            display.lineGutter.style.width = "";
-            display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding);
-            display.lineNumWidth = display.lineNumInnerWidth + padding;
-            display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;
-            display.lineGutter.style.width = display.lineNumWidth + "px";
-            var width = display.gutters.offsetWidth;
-            display.scrollbarH.style.left = cm.options.fixedGutter ? width + "px" : 0;
-            display.sizer.style.marginLeft = width + "px";
-            return true;
-        }
-        return false;
-    }
-
-    function lineNumberFor(options, i) {
-        return String(options.lineNumberFormatter(i + options.firstLineNumber));
-    }
-
-    // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,
-    // but using getBoundingClientRect to get a sub-pixel-accurate
-    // result.
-    function compensateForHScroll(display) {
-        return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left;
-    }
-
-    // DISPLAY DRAWING
-
-    // Updates the display, selection, and scrollbars, using the
-    // information in display.view to find out which nodes are no longer
-    // up-to-date. Tries to bail out early when no changes are needed,
-    // unless forced is true.
-    // Returns true if an actual update happened, false otherwise.
-    function updateDisplay(cm, viewPort, forced) {
-        var oldFrom = cm.display.viewFrom, oldTo = cm.display.viewTo, updated;
-        var visible = visibleLines(cm.display, cm.doc, viewPort);
-        for (var first = true; ; first = false) {
-            var oldWidth = cm.display.scroller.clientWidth;
-            if (!updateDisplayInner(cm, visible, forced))
-                break;
-            updated = true;
-
-            // If the max line changed since it was last measured, measure it,
-            // and ensure the document's width matches it.
-            if (cm.display.maxLineChanged && !cm.options.lineWrapping)
-                adjustContentWidth(cm);
-
-            var barMeasure = measureForScrollbars(cm);
-            updateSelection(cm);
-            setDocumentHeight(cm, barMeasure);
-            updateScrollbars(cm, barMeasure);
-            if (first && cm.options.lineWrapping && oldWidth != cm.display.scroller.clientWidth) {
-                forced = true;
-                continue;
-            }
-            forced = false;
-
-            // Clip forced viewport to actual scrollable area.
-            if (viewPort && viewPort.top != null)
-                viewPort = {top: Math.min(barMeasure.docHeight - scrollerCutOff - barMeasure.clientHeight, viewPort.top)};
-            // Updated line heights might result in the drawn area not
-            // actually covering the viewport. Keep looping until it does.
-            visible = visibleLines(cm.display, cm.doc, viewPort);
-            if (visible.from >= cm.display.viewFrom && visible.to <= cm.display.viewTo)
-                break;
-        }
-
-        cm.display.updateLineNumbers = null;
-        if (updated) {
-            signalLater(cm, "update", cm);
-            if (cm.display.viewFrom != oldFrom || cm.display.viewTo != oldTo)
-                signalLater(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo);
-        }
-        return updated;
-    }
-
-    // Does the actual updating of the line display. Bails out
-    // (returning false) when there is nothing to be done and forced is
-    // false.
-    function updateDisplayInner(cm, visible, forced) {
-        var display = cm.display, doc = cm.doc;
-        if (!display.wrapper.offsetWidth) {
-            resetView(cm);
-            return;
-        }
-
-        // Bail out if the visible area is already rendered and nothing changed.
-        if (!forced && visible.from >= display.viewFrom && visible.to <= display.viewTo &&
-                countDirtyView(cm) == 0)
-            return;
-
-        if (maybeUpdateLineNumberWidth(cm))
-            resetView(cm);
-        var dims = getDimensions(cm);
-
-        // Compute a suitable new viewport (from & to)
-        var end = doc.first + doc.size;
-        var from = Math.max(visible.from - cm.options.viewportMargin, doc.first);
-        var to = Math.min(end, visible.to + cm.options.viewportMargin);
-        if (display.viewFrom < from && from - display.viewFrom < 20)
-            from = Math.max(doc.first, display.viewFrom);
-        if (display.viewTo > to && display.viewTo - to < 20)
-            to = Math.min(end, display.viewTo);
-        if (sawCollapsedSpans) {
-            from = visualLineNo(cm.doc, from);
-            to = visualLineEndNo(cm.doc, to);
-        }
-
-        var different = from != display.viewFrom || to != display.viewTo ||
-                display.lastSizeC != display.wrapper.clientHeight;
-        adjustView(cm, from, to);
-
-        display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));
-        // Position the mover div to align with the current scroll position
-        cm.display.mover.style.top = display.viewOffset + "px";
-
-        var toUpdate = countDirtyView(cm);
-        if (!different && toUpdate == 0 && !forced)
-            return;
-
-        // For big changes, we hide the enclosing element during the
-        // update, since that speeds up the operations on most browsers.
-        var focused = activeElt();
-        if (toUpdate > 4)
-            display.lineDiv.style.display = "none";
-        patchDisplay(cm, display.updateLineNumbers, dims);
-        if (toUpdate > 4)
-            display.lineDiv.style.display = "";
-        // There might have been a widget with a focused element that got
-        // hidden or updated, if so re-focus it.
-        if (focused && activeElt() != focused && focused.offsetHeight)
-            focused.focus();
-
-        // Prevent selection and cursors from interfering with the scroll
-        // width.
-        removeChildren(display.cursorDiv);
-        removeChildren(display.selectionDiv);
-
-        if (different) {
-            display.lastSizeC = display.wrapper.clientHeight;
-            startWorker(cm, 400);
-        }
-
-        updateHeightsInViewport(cm);
-
-        return true;
-    }
-
-    function adjustContentWidth(cm) {
-        var display = cm.display;
-        var width = measureChar(cm, display.maxLine, display.maxLine.text.length).left;
-        display.maxLineChanged = false;
-        var minWidth = Math.max(0, width + 3);
-        var maxScrollLeft = Math.max(0, display.sizer.offsetLeft + minWidth + scrollerCutOff - display.scroller.clientWidth);
-        display.sizer.style.minWidth = minWidth + "px";
-        if (maxScrollLeft < cm.doc.scrollLeft)
-            setScrollLeft(cm, Math.min(display.scroller.scrollLeft, maxScrollLeft), true);
-    }
-
-    function setDocumentHeight(cm, measure) {
-        cm.display.sizer.style.minHeight = cm.display.heightForcer.style.top = measure.docHeight + "px";
-        cm.display.gutters.style.height = Math.max(measure.docHeight, measure.clientHeight - scrollerCutOff) + "px";
-    }
-
-    // Read the actual heights of the rendered lines, and update their
-    // stored heights to match.
-    function updateHeightsInViewport(cm) {
-        var display = cm.display;
-        var prevBottom = display.lineDiv.offsetTop;
-        for (var i = 0; i < display.view.length; i++) {
-            var cur = display.view[i], height;
-            if (cur.hidden)
-                continue;
-            if (ie_upto7) {
-                var bot = cur.node.offsetTop + cur.node.offsetHeight;
-                height = bot - prevBottom;
-                prevBottom = bot;
-            } else {
-                var box = cur.node.getBoundingClientRect();
-                height = box.bottom - box.top;
-            }
-            var diff = cur.line.height - height;
-            if (height < 2)
-                height = textHeight(display);
-            if (diff > .001 || diff < -.001) {
-                updateLineHeight(cur.line, height);
-                updateWidgetHeight(cur.line);
-                if (cur.rest)
-                    for (var j = 0; j < cur.rest.length; j++)
-                        updateWidgetHeight(cur.rest[j]);
-            }
-        }
-    }
-
-    // Read and store the height of line widgets associated with the
-    // given line.
-    function updateWidgetHeight(line) {
-        if (line.widgets)
-            for (var i = 0; i < line.widgets.length; ++i)
-                line.widgets[i].height = line.widgets[i].node.offsetHeight;
-    }
-
-    // Do a bulk-read of the DOM positions and sizes needed to draw the
-    // view, so that we don't interleave reading and writing to the DOM.
-    function getDimensions(cm) {
-        var d = cm.display, left = {}, width = {};
-        for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {
-            left[cm.options.gutters[i]] = n.offsetLeft;
-            width[cm.options.gutters[i]] = n.offsetWidth;
-        }
-        return {fixedPos: compensateForHScroll(d),
-            gutterTotalWidth: d.gutters.offsetWidth,
-            gutterLeft: left,
-            gutterWidth: width,
-            wrapperWidth: d.wrapper.clientWidth};
-    }
-
-    // Sync the actual display DOM structure with display.view, removing
-    // nodes for lines that are no longer in view, and creating the ones
-    // that are not there yet, and updating the ones that are out of
-    // date.
-    function patchDisplay(cm, updateNumbersFrom, dims) {
-        var display = cm.display, lineNumbers = cm.options.lineNumbers;
-        var container = display.lineDiv, cur = container.firstChild;
-
-        function rm(node) {
-            var next = node.nextSibling;
-            // Works around a throw-scroll bug in OS X Webkit
-            if (webkit && mac && cm.display.currentWheelTarget == node)
-                node.style.display = "none";
-            else
-                node.parentNode.removeChild(node);
-            return next;
-        }
-
-        var view = display.view, lineN = display.viewFrom;
-        // Loop over the elements in the view, syncing cur (the DOM nodes
-        // in display.lineDiv) with the view as we go.
-        for (var i = 0; i < view.length; i++) {
-            var lineView = view[i];
-            if (lineView.hidden) {
-            } else if (!lineView.node) { // Not drawn yet
-                var node = buildLineElement(cm, lineView, lineN, dims);
-                container.insertBefore(node, cur);
-            } else { // Already drawn
-                while (cur != lineView.node)
-                    cur = rm(cur);
-                var updateNumber = lineNumbers && updateNumbersFrom != null &&
-                        updateNumbersFrom <= lineN && lineView.lineNumber;
-                if (lineView.changes) {
-                    if (indexOf(lineView.changes, "gutter") > -1)
-                        updateNumber = false;
-                    updateLineForChanges(cm, lineView, lineN, dims);
-                }
-                if (updateNumber) {
-                    removeChildren(lineView.lineNumber);
-                    lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));
-                }
-                cur = lineView.node.nextSibling;
-            }
-            lineN += lineView.size;
-        }
-        while (cur)
-            cur = rm(cur);
-    }
-
-    // When an aspect of a line changes, a string is added to
-    // lineView.changes. This updates the relevant part of the line's
-    // DOM structure.
-    function updateLineForChanges(cm, lineView, lineN, dims) {
-        for (var j = 0; j < lineView.changes.length; j++) {
-            var type = lineView.changes[j];
-            if (type == "text")
-                updateLineText(cm, lineView);
-            else if (type == "gutter")
-                updateLineGutter(cm, lineView, lineN, dims);
-            else if (type == "class")
-                updateLineClasses(lineView);
-            else if (type == "widget")
-                updateLineWidgets(lineView, dims);
-        }
-        lineView.changes = null;
-    }
-
-    // Lines with gutter elements, widgets or a background class need to
-    // be wrapped, and have the extra elements added to the wrapper div
-    function ensureLineWrapped(lineView) {
-        if (lineView.node == lineView.text) {
-            lineView.node = elt("div", null, null, "position: relative");
-            if (lineView.text.parentNode)
-                lineView.text.parentNode.replaceChild(lineView.node, lineView.text);
-            lineView.node.appendChild(lineView.text);
-            if (ie_upto7)
-                lineView.node.style.zIndex = 2;
-        }
-        return lineView.node;
-    }
-
-    function updateLineBackground(lineView) {
-        var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass;
-        if (cls)
-            cls += " CodeMirror-linebackground";
-        if (lineView.background) {
-            if (cls)
-                lineView.background.className = cls;
-            else {
-                lineView.background.parentNode.removeChild(lineView.background);
-                lineView.background = null;
-            }
-        } else if (cls) {
-            var wrap = ensureLineWrapped(lineView);
-            lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild);
-        }
-    }
-
-    // Wrapper around buildLineContent which will reuse the structure
-    // in display.externalMeasured when possible.
-    function getLineContent(cm, lineView) {
-        var ext = cm.display.externalMeasured;
-        if (ext && ext.line == lineView.line) {
-            cm.display.externalMeasured = null;
-            lineView.measure = ext.measure;
-            return ext.built;
-        }
-        return buildLineContent(cm, lineView);
-    }
-
-    // Redraw the line's text. Interacts with the background and text
-    // classes because the mode may output tokens that influence these
-    // classes.
-    function updateLineText(cm, lineView) {
-        var cls = lineView.text.className;
-        var built = getLineContent(cm, lineView);
-        if (lineView.text == lineView.node)
-            lineView.node = built.pre;
-        lineView.text.parentNode.replaceChild(built.pre, lineView.text);
-        lineView.text = built.pre;
-        if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {
-            lineView.bgClass = built.bgClass;
-            lineView.textClass = built.textClass;
-            updateLineClasses(lineView);
-        } else if (cls) {
-            lineView.text.className = cls;
-        }
-    }
-
-    function updateLineClasses(lineView) {
-        updateLineBackground(lineView);
-        if (lineView.line.wrapClass)
-            ensureLineWrapped(lineView).className = lineView.line.wrapClass;
-        else if (lineView.node != lineView.text)
-            lineView.node.className = "";
-        var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass;
-        lineView.text.className = textClass || "";
-    }
-
-    function updateLineGutter(cm, lineView, lineN, dims) {
-        if (lineView.gutter) {
-            lineView.node.removeChild(lineView.gutter);
-            lineView.gutter = null;
-        }
-        var markers = lineView.line.gutterMarkers;
-        if (cm.options.lineNumbers || markers) {
-            var wrap = ensureLineWrapped(lineView);
-            var gutterWrap = lineView.gutter =
-                    wrap.insertBefore(elt("div", null, "CodeMirror-gutter-wrapper", "position: absolute; left: " +
-                            (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"),
-                            lineView.text);
-            if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
-                lineView.lineNumber = gutterWrap.appendChild(
-                        elt("div", lineNumberFor(cm.options, lineN),
-                                "CodeMirror-linenumber CodeMirror-gutter-elt",
-                                "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: "
-                                + cm.display.lineNumInnerWidth + "px"));
-            if (markers)
-                for (var k = 0; k < cm.options.gutters.length; ++k) {
-                    var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];
-                    if (found)
-                        gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " +
-                                dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px"));
-                }
-        }
-    }
-
-    function updateLineWidgets(lineView, dims) {
-        if (lineView.alignable)
-            lineView.alignable = null;
-        for (var node = lineView.node.firstChild, next; node; node = next) {
-            var next = node.nextSibling;
-            if (node.className == "CodeMirror-linewidget")
-                lineView.node.removeChild(node);
-        }
-        insertLineWidgets(lineView, dims);
-    }
-
-    // Build a line's DOM representation from scratch
-    function buildLineElement(cm, lineView, lineN, dims) {
-        var built = getLineContent(cm, lineView);
-        lineView.text = lineView.node = built.pre;
-        if (built.bgClass)
-            lineView.bgClass = built.bgClass;
-        if (built.textClass)
-            lineView.textClass = built.textClass;
-
-        updateLineClasses(lineView);
-        updateLineGutter(cm, lineView, lineN, dims);
-        insertLineWidgets(lineView, dims);
-        return lineView.node;
-    }
-
-    // A lineView may contain multiple logical lines (when merged by
-    // collapsed spans). The widgets for all of them need to be drawn.
-    function insertLineWidgets(lineView, dims) {
-        insertLineWidgetsFor(lineView.line, lineView, dims, true);
-        if (lineView.rest)
-            for (var i = 0; i < lineView.rest.length; i++)
-                insertLineWidgetsFor(lineView.rest[i], lineView, dims, false);
-    }
-
-    function insertLineWidgetsFor(line, lineView, dims, allowAbove) {
-        if (!line.widgets)
-            return;
-        var wrap = ensureLineWrapped(lineView);
-        for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
-            var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget");
-            if (!widget.handleMouseEvents)
-                node.ignoreEvents = true;
-            positionLineWidget(widget, node, lineView, dims);
-            if (allowAbove && widget.above)
-                wrap.insertBefore(node, lineView.gutter || lineView.text);
-            else
-                wrap.appendChild(node);
-            signalLater(widget, "redraw");
-        }
-    }
-
-    function positionLineWidget(widget, node, lineView, dims) {
-        if (widget.noHScroll) {
-            (lineView.alignable || (lineView.alignable = [])).push(node);
-            var width = dims.wrapperWidth;
-            node.style.left = dims.fixedPos + "px";
-            if (!widget.coverGutter) {
-                width -= dims.gutterTotalWidth;
-                node.style.paddingLeft = dims.gutterTotalWidth + "px";
-            }
-            node.style.width = width + "px";
-        }
-        if (widget.coverGutter) {
-            node.style.zIndex = 5;
-            node.style.position = "relative";
-            if (!widget.noHScroll)
-                node.style.marginLeft = -dims.gutterTotalWidth + "px";
-        }
-    }
-
-    // POSITION OBJECT
-
-    // A Pos instance represents a position within the text.
-    var Pos = CodeMirror.Pos = function (line, ch) {
-        if (!(this instanceof Pos))
-            return new Pos(line, ch);
-        this.line = line;
-        this.ch = ch;
-    };
-
-    // Compare two positions, return 0 if they are the same, a negative
-    // number when a is less, and a positive number otherwise.
-    var cmp = CodeMirror.cmpPos = function (a, b) {
-        return a.line - b.line || a.ch - b.ch;
-    };
-
-    function copyPos(x) {
-        return Pos(x.line, x.ch);
-    }
-    function maxPos(a, b) {
-        return cmp(a, b) < 0 ? b : a;
-    }
-    function minPos(a, b) {
-        return cmp(a, b) < 0 ? a : b;
-    }
-
-    // SELECTION / CURSOR
-
-    // Selection objects are immutable. A new one is created every time
-    // the selection changes. A selection is one or more non-overlapping
-    // (and non-touching) ranges, sorted, and an integer that indicates
-    // which one is the primary selection (the one that's scrolled into
-    // view, that getCursor returns, etc).
-    function Selection(ranges, primIndex) {
-        this.ranges = ranges;
-        this.primIndex = primIndex;
-    }
-
-    Selection.prototype = {
-        primary: function () {
-            return this.ranges[this.primIndex];
-        },
-        equals: function (other) {
-            if (other == this)
-                return true;
-            if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length)
-                return false;
-            for (var i = 0; i < this.ranges.length; i++) {
-                var here = this.ranges[i], there = other.ranges[i];
-                if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0)
-                    return false;
-            }
-            return true;
-        },
-        deepCopy: function () {
-            for (var out = [], i = 0; i < this.ranges.length; i++)
-                out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head));
-            return new Selection(out, this.primIndex);
-        },
-        somethingSelected: function () {
-            for (var i = 0; i < this.ranges.length; i++)
-                if (!this.ranges[i].empty())
-                    return true;
-            return false;
-        },
-        contains: function (pos, end) {
-            if (!end)
-                end = pos;
-            for (var i = 0; i < this.ranges.length; i++) {
-                var range = this.ranges[i];
-                if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)
-                    return i;
-            }
-            return -1;
-        }
-    };
-
-    function Range(anchor, head) {
-        this.anchor = anchor;
-        this.head = head;
-    }
-
-    Range.prototype = {
-        from: function () {
-            return minPos(this.anchor, this.head);
-        },
-        to: function () {
-            return maxPos(this.anchor, this.head);
-        },
-        empty: function () {
-            return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch;
-        }
-    };
-
-    // Take an unsorted, potentially overlapping set of ranges, and
-    // build a selection out of it. 'Consumes' ranges array (modifying
-    // it).
-    function normalizeSelection(ranges, primIndex) {
-        var prim = ranges[primIndex];
-        ranges.sort(function (a, b) {
-            return cmp(a.from(), b.from());
-        });
-        primIndex = indexOf(ranges, prim);
-        for (var i = 1; i < ranges.length; i++) {
-            var cur = ranges[i], prev = ranges[i - 1];
-            if (cmp(prev.to(), cur.from()) >= 0) {
-                var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());
-                var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;
-                if (i <= primIndex)
-                    --primIndex;
-                ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));
-            }
-        }
-        return new Selection(ranges, primIndex);
-    }
-
-    function simpleSelection(anchor, head) {
-        return new Selection([new Range(anchor, head || anchor)], 0);
-    }
-
-    // Most of the external API clips given positions to make sure they
-    // actually exist within the document.
-    function clipLine(doc, n) {
-        return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));
-    }
-    function clipPos(doc, pos) {
-        if (pos.line < doc.first)
-            return Pos(doc.first, 0);
-        var last = doc.first + doc.size - 1;
-        if (pos.line > last)
-            return Pos(last, getLine(doc, last).text.length);
-        return clipToLen(pos, getLine(doc, pos.line).text.length);
-    }
-    function clipToLen(pos, linelen) {
-        var ch = pos.ch;
-        if (ch == null || ch > linelen)
-            return Pos(pos.line, linelen);
-        else if (ch < 0)
-            return Pos(pos.line, 0);
-        else
-            return pos;
-    }
-    function isLine(doc, l) {
-        return l >= doc.first && l < doc.first + doc.size;
-    }
-    function clipPosArray(doc, array) {
-        for (var out = [], i = 0; i < array.length; i++)
-            out[i] = clipPos(doc, array[i]);
-        return out;
-    }
-
-    // SELECTION UPDATES
-
-    // The 'scroll' parameter given to many of these indicated whether
-    // the new cursor position should be scrolled into view after
-    // modifying the selection.
-
-    // If shift is held or the extend flag is set, extends a range to
-    // include a given position (and optionally a second position).
-    // Otherwise, simply returns the range between the given positions.
-    // Used for cursor motion and such.
-    function extendRange(doc, range, head, other) {
-        if (doc.cm && doc.cm.display.shift || doc.extend) {
-            var anchor = range.anchor;
-            if (other) {
-                var posBefore = cmp(head, anchor) < 0;
-                if (posBefore != (cmp(other, anchor) < 0)) {
-                    anchor = head;
-                    head = other;
-                } else if (posBefore != (cmp(head, other) < 0)) {
-                    head = other;
-                }
-            }
-            return new Range(anchor, head);
-        } else {
-            return new Range(other || head, head);
-        }
-    }
-
-    // Extend the primary selection range, discard the rest.
-    function extendSelection(doc, head, other, options) {
-        setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options);
-    }
-
-    // Extend all selections (pos is an array of selections with length
-    // equal the number of selections)
-    function extendSelections(doc, heads, options) {
-        for (var out = [], i = 0; i < doc.sel.ranges.length; i++)
-            out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null);
-        var newSel = normalizeSelection(out, doc.sel.primIndex);
-        setSelection(doc, newSel, options);
-    }
-
-    // Updates a single range in the selection.
-    function replaceOneSelection(doc, i, range, options) {
-        var ranges = doc.sel.ranges.slice(0);
-        ranges[i] = range;
-        setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options);
-    }
-
-    // Reset the selection to a single range.
-    function setSimpleSelection(doc, anchor, head, options) {
-        setSelection(doc, simpleSelection(anchor, head), options);
-    }
-
-    // Give beforeSelectionChange handlers a change to influence a
-    // selection update.
-    function filterSelectionChange(doc, sel) {
-        var obj = {
-            ranges: sel.ranges,
-            update: function (ranges) {
-                this.ranges = [];
-                for (var i = 0; i < ranges.length; i++)
-                    this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),
-                            clipPos(doc, ranges[i].head));
-            }
-        };
-        signal(doc, "beforeSelectionChange", doc, obj);
-        if (doc.cm)
-            signal(doc.cm, "beforeSelectionChange", doc.cm, obj);
-        if (obj.ranges != sel.ranges)
-            return normalizeSelection(obj.ranges, obj.ranges.length - 1);
-        else
-            return sel;
-    }
-
-    function setSelectionReplaceHistory(doc, sel, options) {
-        var done = doc.history.done, last = lst(done);
-        if (last && last.ranges) {
-            done[done.length - 1] = sel;
-            setSelectionNoUndo(doc, sel, options);
-        } else {
-            setSelection(doc, sel, options);
-        }
-    }
-
-    // Set a new selection.
-    function setSelection(doc, sel, options) {
-        setSelectionNoUndo(doc, sel, options);
-        addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);
-    }
-
-    function setSelectionNoUndo(doc, sel, options) {
-        if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange"))
-            sel = filterSelectionChange(doc, sel);
-
-        var bias = cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1;
-        setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));
-
-        if (!(options && options.scroll === false) && doc.cm)
-            ensureCursorVisible(doc.cm);
-    }
-
-    function setSelectionInner(doc, sel) {
-        if (sel.equals(doc.sel))
-            return;
-
-        doc.sel = sel;
-
-        if (doc.cm)
-            doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged =
-                    doc.cm.curOp.cursorActivity = true;
-        signalLater(doc, "cursorActivity", doc);
-    }
-
-    // Verify that the selection does not partially select any atomic
-    // marked ranges.
-    function reCheckSelection(doc) {
-        setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll);
-    }
-
-    // Return a selection that does not partially select any atomic
-    // ranges.
-    function skipAtomicInSelection(doc, sel, bias, mayClear) {
-        var out;
-        for (var i = 0; i < sel.ranges.length; i++) {
-            var range = sel.ranges[i];
-            var newAnchor = skipAtomic(doc, range.anchor, bias, mayClear);
-            var newHead = skipAtomic(doc, range.head, bias, mayClear);
-            if (out || newAnchor != range.anchor || newHead != range.head) {
-                if (!out)
-                    out = sel.ranges.slice(0, i);
-                out[i] = new Range(newAnchor, newHead);
-            }
-        }
-        return out ? normalizeSelection(out, sel.primIndex) : sel;
-    }
-
-    // Ensure a given position is not inside an atomic range.
-    function skipAtomic(doc, pos, bias, mayClear) {
-        var flipped = false, curPos = pos;
-        var dir = bias || 1;
-        doc.cantEdit = false;
-        search: for (; ; ) {
-            var line = getLine(doc, curPos.line);
-            if (line.markedSpans) {
-                for (var i = 0; i < line.markedSpans.length; ++i) {
-                    var sp = line.markedSpans[i], m = sp.marker;
-                    if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) &&
-                            (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) {
-                        if (mayClear) {
-                            signal(m, "beforeCursorEnter");
-                            if (m.explicitlyCleared) {
-                                if (!line.markedSpans)
-                                    break;
-                                else {
-                                    --i;
-                                    continue;
-                                }
-                            }
-                        }
-                        if (!m.atomic)
-                            continue;
-                        var newPos = m.find(dir < 0 ? -1 : 1);
-                        if (cmp(newPos, curPos) == 0) {
-                            newPos.ch += dir;
-                            if (newPos.ch < 0) {
-                                if (newPos.line > doc.first)
-                                    newPos = clipPos(doc, Pos(newPos.line - 1));
-                                else
-                                    newPos = null;
-                            } else if (newPos.ch > line.text.length) {
-                                if (newPos.line < doc.first + doc.size - 1)
-                                    newPos = Pos(newPos.line + 1, 0);
-                                else
-                                    newPos = null;
-                            }
-                            if (!newPos) {
-                                if (flipped) {
-                                    // Driven in a corner -- no valid cursor position found at all
-                                    // -- try again *with* clearing, if we didn't already
-                                    if (!mayClear)
-                                        return skipAtomic(doc, pos, bias, true);
-                                    // Otherwise, turn off editing until further notice, and return the start of the doc
-                                    doc.cantEdit = true;
-                                    return Pos(doc.first, 0);
-                                }
-                                flipped = true;
-                                newPos = pos;
-                                dir = -dir;
-                            }
-                        }
-                        curPos = newPos;
-                        continue search;
-                    }
-                }
-            }
-            return curPos;
-        }
-    }
-
-    // SELECTION DRAWING
-
-    // Redraw the selection and/or cursor
-    function updateSelection(cm) {
-        var display = cm.display, doc = cm.doc;
-        var curFragment = document.createDocumentFragment();
-        var selFragment = document.createDocumentFragment();
-
-        for (var i = 0; i < doc.sel.ranges.length; i++) {
-            var range = doc.sel.ranges[i];
-            var collapsed = range.empty();
-            if (collapsed || cm.options.showCursorWhenSelecting)
-                updateSelectionCursor(cm, range, curFragment);
-            if (!collapsed)
-                updateSelectionRange(cm, range, selFragment);
-        }
-
-        // Move the hidden textarea near the cursor to prevent scrolling artifacts
-        if (cm.options.moveInputWithCursor) {
-            var headPos = cursorCoords(cm, doc.sel.primary().head, "div");
-            var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();
-            var top = Math.max(0, Math.min(display.wrapper.clientHeight - 10,
-                    headPos.top + lineOff.top - wrapOff.top));
-            var left = Math.max(0, Math.min(display.wrapper.clientWidth - 10,
-                    headPos.left + lineOff.left - wrapOff.left));
-            display.inputDiv.style.top = top + "px";
-            display.inputDiv.style.left = left + "px";
-        }
-
-        removeChildrenAndAdd(display.cursorDiv, curFragment);
-        removeChildrenAndAdd(display.selectionDiv, selFragment);
-    }
-
-    // Draws a cursor for the given range
-    function updateSelectionCursor(cm, range, output) {
-        var pos = cursorCoords(cm, range.head, "div");
-
-        var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"));
-        cursor.style.left = pos.left + "px";
-        cursor.style.top = pos.top + "px";
-        cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px";
-
-        if (pos.other) {
-            // Secondary cursor, shown when on a 'jump' in bi-directional text
-            var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"));
-            otherCursor.style.display = "";
-            otherCursor.style.left = pos.other.left + "px";
-            otherCursor.style.top = pos.other.top + "px";
-            otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px";
-        }
-    }
-
-    // Draws the given range as a highlighted selection
-    function updateSelectionRange(cm, range, output) {
-        var display = cm.display, doc = cm.doc;
-        var fragment = document.createDocumentFragment();
-        var padding = paddingH(cm.display), leftSide = padding.left, rightSide = display.lineSpace.offsetWidth - padding.right;
-
-        function add(left, top, width, bottom) {
-            if (top < 0)
-                top = 0;
-            fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left +
-                    "px; top: " + top + "px; width: " + (width == null ? rightSide - left : width) +
-                    "px; height: " + (bottom - top) + "px"));
-        }
-
-        function drawForLine(line, fromArg, toArg) {
-            var lineObj = getLine(doc, line);
-            var lineLen = lineObj.text.length;
-            var start, end;
-            function coords(ch, bias) {
-                return charCoords(cm, Pos(line, ch), "div", lineObj, bias);
-            }
-
-            iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir) {
-                var leftPos = coords(from, "left"), rightPos, left, right;
-                if (from == to) {
-                    rightPos = leftPos;
-                    left = right = leftPos.left;
-                } else {
-                    rightPos = coords(to - 1, "right");
-                    if (dir == "rtl") {
-                        var tmp = leftPos;
-                        leftPos = rightPos;
-                        rightPos = tmp;
-                    }
-                    left = leftPos.left;
-                    right = rightPos.right;
-                }
-                if (fromArg == null && from == 0)
-                    left = leftSide;
-                if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part
-                    add(left, leftPos.top, null, leftPos.bottom);
-                    left = leftSide;
-                    if (leftPos.bottom < rightPos.top)
-                        add(left, leftPos.bottom, null, rightPos.top);
-                }
-                if (toArg == null && to == lineLen)
-                    right = rightSide;
-                if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left)
-                    start = leftPos;
-                if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right)
-                    end = rightPos;
-                if (left < leftSide + 1)
-                    left = leftSide;
-                add(left, rightPos.top, right - left, rightPos.bottom);
-            });
-            return {start: start, end: end};
-        }
-
-        var sFrom = range.from(), sTo = range.to();
-        if (sFrom.line == sTo.line) {
-            drawForLine(sFrom.line, sFrom.ch, sTo.ch);
-        } else {
-            var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);
-            var singleVLine = visualLine(fromLine) == visualLine(toLine);
-            var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;
-            var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;
-            if (singleVLine) {
-                if (leftEnd.top < rightStart.top - 2) {
-                    add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);
-                    add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);
-                } else {
-                    add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);
-                }
-            }
-            if (leftEnd.bottom < rightStart.top)
-                add(leftSide, leftEnd.bottom, null, rightStart.top);
-        }
-
-        output.appendChild(fragment);
-    }
-
-    // Cursor-blinking
-    function restartBlink(cm) {
-        if (!cm.state.focused)
-            return;
-        var display = cm.display;
-        clearInterval(display.blinker);
-        var on = true;
-        display.cursorDiv.style.visibility = "";
-        if (cm.options.cursorBlinkRate > 0)
-            display.blinker = setInterval(function () {
-                display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden";
-            }, cm.options.cursorBlinkRate);
-    }
-
-    // HIGHLIGHT WORKER
-
-    function startWorker(cm, time) {
-        if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo)
-            cm.state.highlight.set(time, bind(highlightWorker, cm));
-    }
-
-    function highlightWorker(cm) {
-        var doc = cm.doc;
-        if (doc.frontier < doc.first)
-            doc.frontier = doc.first;
-        if (doc.frontier >= cm.display.viewTo)
-            return;
-        var end = +new Date + cm.options.workTime;
-        var state = copyState(doc.mode, getStateBefore(cm, doc.frontier));
-
-        runInOp(cm, function () {
-            doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {
-                if (doc.frontier >= cm.display.viewFrom) { // Visible
-                    var oldStyles = line.styles;
-                    line.styles = highlightLine(cm, line, state, true);
-                    var ischange = !oldStyles || oldStyles.length != line.styles.length;
-                    for (var i = 0; !ischange && i < oldStyles.length; ++i)
-                        ischange = oldStyles[i] != line.styles[i];
-                    if (ischange)
-                        regLineChange(cm, doc.frontier, "text");
-                    line.stateAfter = copyState(doc.mode, state);
-                } else {
-                    processLine(cm, line.text, state);
-                    line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null;
-                }
-                ++doc.frontier;
-                if (+new Date > end) {
-                    startWorker(cm, cm.options.workDelay);
-                    return true;
-                }
-            });
-        });
-    }
-
-    // Finds the line to start with when starting a parse. Tries to
-    // find a line with a stateAfter, so that it can start with a
-    // valid state. If that fails, it returns the line with the
-    // smallest indentation, which tends to need the least context to
-    // parse correctly.
-    function findStartLine(cm, n, precise) {
-        var minindent, minline, doc = cm.doc;
-        var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);
-        for (var search = n; search > lim; --search) {
-            if (search <= doc.first)
-                return doc.first;
-            var line = getLine(doc, search - 1);
-            if (line.stateAfter && (!precise || search <= doc.frontier))
-                return search;
-            var indented = countColumn(line.text, null, cm.options.tabSize);
-            if (minline == null || minindent > indented) {
-                minline = search - 1;
-                minindent = indented;
-            }
-        }
-        return minline;
-    }
-
-    function getStateBefore(cm, n, precise) {
-        var doc = cm.doc, display = cm.display;
-        if (!doc.mode.startState)
-            return true;
-        var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos - 1).stateAfter;
-        if (!state)
-            state = startState(doc.mode);
-        else
-            state = copyState(doc.mode, state);
-        doc.iter(pos, n, function (line) {
-            processLine(cm, line.text, state);
-            var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo;
-            line.stateAfter = save ? copyState(doc.mode, state) : null;
-            ++pos;
-        });
-        if (precise)
-            doc.frontier = pos;
-        return state;
-    }
-
-    // POSITION MEASUREMENT
-
-    function paddingTop(display) {
-        return display.lineSpace.offsetTop;
-    }
-    function paddingVert(display) {
-        return display.mover.offsetHeight - display.lineSpace.offsetHeight;
-    }
-    function paddingH(display) {
-        if (display.cachedPaddingH)
-            return display.cachedPaddingH;
-        var e = removeChildrenAndAdd(display.measure, elt("pre", "x"));
-        var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;
-        return display.cachedPaddingH = {left: parseInt(style.paddingLeft),
-            right: parseInt(style.paddingRight)};
-    }
-
-    // Ensure the lineView.wrapping.heights array is populated. This is
-    // an array of bottom offsets for the lines that make up a drawn
-    // line. When lineWrapping is on, there might be more than one
-    // height.
-    function ensureLineHeights(cm, lineView, rect) {
-        var wrapping = cm.options.lineWrapping;
-        var curWidth = wrapping && cm.display.scroller.clientWidth;
-        if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {
-            var heights = lineView.measure.heights = [];
-            if (wrapping) {
-                lineView.measure.width = curWidth;
-                var rects = lineView.text.firstChild.getClientRects();
-                for (var i = 0; i < rects.length - 1; i++) {
-                    var cur = rects[i], next = rects[i + 1];
-                    if (Math.abs(cur.bottom - next.bottom) > 2)
-                        heights.push((cur.bottom + next.top) / 2 - rect.top);
-                }
-            }
-            heights.push(rect.bottom - rect.top);
-        }
-    }
-
-    // Find a line map (mapping character offsets to text nodes) and a
-    // measurement cache for the given line number. (A line view might
-    // contain multiple lines when collapsed ranges are present.)
-    function mapFromLineView(lineView, line, lineN) {
-        if (lineView.line == line)
-            return {map: lineView.measure.map, cache: lineView.measure.cache};
-        for (var i = 0; i < lineView.rest.length; i++)
-            if (lineView.rest[i] == line)
-                return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]};
-        for (var i = 0; i < lineView.rest.length; i++)
-            if (lineNo(lineView.rest[i]) > lineN)
-                return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true};
-    }
-
-    // Render a line into the hidden node display.externalMeasured. Used
-    // when measurement is needed for a line that's not in the viewport.
-    function updateExternalMeasurement(cm, line) {
-        line = visualLine(line);
-        var lineN = lineNo(line);
-        var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);
-        view.lineN = lineN;
-        var built = view.built = buildLineContent(cm, view);
-        view.text = built.pre;
-        removeChildrenAndAdd(cm.display.lineMeasure, built.pre);
-        return view;
-    }
-
-    // Get a {top, bottom, left, right} box (in line-local coordinates)
-    // for a given character.
-    function measureChar(cm, line, ch, bias) {
-        return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias);
-    }
-
-    // Find a line view that corresponds to the given line number.
-    function findViewForLine(cm, lineN) {
-        if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)
-            return cm.display.view[findViewIndex(cm, lineN)];
-        var ext = cm.display.externalMeasured;
-        if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)
-            return ext;
-    }
-
-    // Measurement can be split in two steps, the set-up work that
-    // applies to the whole line, and the measurement of the actual
-    // character. Functions like coordsChar, that need to do a lot of
-    // measurements in a row, can thus ensure that the set-up work is
-    // only done once.
-    function prepareMeasureForLine(cm, line) {
-        var lineN = lineNo(line);
-        var view = findViewForLine(cm, lineN);
-        if (view && !view.text)
-            view = null;
-        else if (view && view.changes)
-            updateLineForChanges(cm, view, lineN, getDimensions(cm));
-        if (!view)
-            view = updateExternalMeasurement(cm, line);
-
-        var info = mapFromLineView(view, line, lineN);
-        return {
-            line: line, view: view, rect: null,
-            map: info.map, cache: info.cache, before: info.before,
-            hasHeights: false
-        };
-    }
-
-    // Given a prepared measurement object, measures the position of an
-    // actual character (or fetches it from the cache).
-    function measureCharPrepared(cm, prepared, ch, bias) {
-        if (prepared.before)
-            ch = -1;
-        var key = ch + (bias || ""), found;
-        if (prepared.cache.hasOwnProperty(key)) {
-            found = prepared.cache[key];
-        } else {
-            if (!prepared.rect)
-                prepared.rect = prepared.view.text.getBoundingClientRect();
-            if (!prepared.hasHeights) {
-                ensureLineHeights(cm, prepared.view, prepared.rect);
-                prepared.hasHeights = true;
-            }
-            found = measureCharInner(cm, prepared, ch, bias);
-            if (!found.bogus)
-                prepared.cache[key] = found;
-        }
-        return {left: found.left, right: found.right, top: found.top, bottom: found.bottom};
-    }
-
-    var nullRect = {left: 0, right: 0, top: 0, bottom: 0};
-
-    function measureCharInner(cm, prepared, ch, bias) {
-        var map = prepared.map;
-
-        var node, start, end, collapse;
-        // First, search the line map for the text node corresponding to,
-        // or closest to, the target character.
-        for (var i = 0; i < map.length; i += 3) {
-            var mStart = map[i], mEnd = map[i + 1];
-            if (ch < mStart) {
-                start = 0;
-                end = 1;
-                collapse = "left";
-            } else if (ch < mEnd) {
-                start = ch - mStart;
-                end = start + 1;
-            } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {
-                end = mEnd - mStart;
-                start = end - 1;
-                if (ch >= mEnd)
-                    collapse = "right";
-            }
-            if (start != null) {
-                node = map[i + 2];
-                if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right"))
-                    collapse = bias;
-                if (bias == "left" && start == 0)
-                    while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {
-                        node = map[(i -= 3) + 2];
-                        collapse = "left";
-                    }
-                if (bias == "right" && start == mEnd - mStart)
-                    while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {
-                        node = map[(i += 3) + 2];
-                        collapse = "right";
-                    }
-                break;
-            }
-        }
-
-        var rect;
-        if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.
-            while (start && isExtendingChar(prepared.line.text.charAt(mStart + start)))
-                --start;
-            while (mStart + end < mEnd && isExtendingChar(prepared.line.text.charAt(mStart + end)))
-                ++end;
-            if (ie_upto8 && start == 0 && end == mEnd - mStart) {
-                rect = node.parentNode.getBoundingClientRect();
-            } else if (ie && cm.options.lineWrapping) {
-                var rects = range(node, start, end).getClientRects();
-                if (rects.length)
-                    rect = rects[bias == "right" ? rects.length - 1 : 0];
-                else
-                    rect = nullRect;
-            } else {
-                rect = range(node, start, end).getBoundingClientRect();
-            }
-        } else { // If it is a widget, simply get the box for the whole widget.
-            if (start > 0)
-                collapse = bias = "right";
-            var rects;
-            if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)
-                rect = rects[bias == "right" ? rects.length - 1 : 0];
-            else
-                rect = node.getBoundingClientRect();
-        }
-        if (ie_upto8 && !start && (!rect || !rect.left && !rect.right)) {
-            var rSpan = node.parentNode.getClientRects()[0];
-            if (rSpan)
-                rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom};
-            else
-                rect = nullRect;
-        }
-
-        var top, bot = (rect.bottom + rect.top) / 2 - prepared.rect.top;
-        var heights = prepared.view.measure.heights;
-        for (var i = 0; i < heights.length - 1; i++)
-            if (bot < heights[i])
-                break;
-        top = i ? heights[i - 1] : 0;
-        bot = heights[i];
-        var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left,
-            right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left,
-            top: top, bottom: bot};
-        if (!rect.left && !rect.right)
-            result.bogus = true;
-        return result;
-    }
-
-    function clearLineMeasurementCacheFor(lineView) {
-        if (lineView.measure) {
-            lineView.measure.cache = {};
-            lineView.measure.heights = null;
-            if (lineView.rest)
-                for (var i = 0; i < lineView.rest.length; i++)
-                    lineView.measure.caches[i] = {};
-        }
-    }
-
-    function clearLineMeasurementCache(cm) {
-        cm.display.externalMeasure = null;
-        removeChildren(cm.display.lineMeasure);
-        for (var i = 0; i < cm.display.view.length; i++)
-            clearLineMeasurementCacheFor(cm.display.view[i]);
-    }
-
-    function clearCaches(cm) {
-        clearLineMeasurementCache(cm);
-        cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;
-        if (!cm.options.lineWrapping)
-            cm.display.maxLineChanged = true;
-        cm.display.lineNumChars = null;
-    }
-
-    function pageScrollX() {
-        return window.pageXOffset || (document.documentElement || document.body).scrollLeft;
-    }
-    function pageScrollY() {
-        return window.pageYOffset || (document.documentElement || document.body).scrollTop;
-    }
-
-    // Converts a {top, bottom, left, right} box from line-local
-    // coordinates into another coordinate system. Context may be one of
-    // "line", "div" (display.lineDiv), "local"/null (editor), or "page".
-    function intoCoordSystem(cm, lineObj, rect, context) {
-        if (lineObj.widgets)
-            for (var i = 0; i < lineObj.widgets.length; ++i)
-                if (lineObj.widgets[i].above) {
-                    var size = widgetHeight(lineObj.widgets[i]);
-                    rect.top += size;
-                    rect.bottom += size;
-                }
-        if (context == "line")
-            return rect;
-        if (!context)
-            context = "local";
-        var yOff = heightAtLine(lineObj);
-        if (context == "local")
-            yOff += paddingTop(cm.display);
-        else
-            yOff -= cm.display.viewOffset;
-        if (context == "page" || context == "window") {
-            var lOff = cm.display.lineSpace.getBoundingClientRect();
-            yOff += lOff.top + (context == "window" ? 0 : pageScrollY());
-            var xOff = lOff.left + (context == "window" ? 0 : pageScrollX());
-            rect.left += xOff;
-            rect.right += xOff;
-        }
-        rect.top += yOff;
-        rect.bottom += yOff;
-        return rect;
-    }
-
-    // Coverts a box from "div" coords to another coordinate system.
-    // Context may be "window", "page", "div", or "local"/null.
-    function fromCoordSystem(cm, coords, context) {
-        if (context == "div")
-            return coords;
-        var left = coords.left, top = coords.top;
-        // First move into "page" coordinate system
-        if (context == "page") {
-            left -= pageScrollX();
-            top -= pageScrollY();
-        } else if (context == "local" || !context) {
-            var localBox = cm.display.sizer.getBoundingClientRect();
-            left += localBox.left;
-            top += localBox.top;
-        }
-
-        var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();
-        return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top};
-    }
-
-    function charCoords(cm, pos, context, lineObj, bias) {
-        if (!lineObj)
-            lineObj = getLine(cm.doc, pos.line);
-        return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context);
-    }
-
-    // Returns a box for a given cursor position, which may have an
-    // 'other' property containing the position of the secondary cursor
-    // on a bidi boundary.
-    function cursorCoords(cm, pos, context, lineObj, preparedMeasure) {
-        lineObj = lineObj || getLine(cm.doc, pos.line);
-        if (!preparedMeasure)
-            preparedMeasure = prepareMeasureForLine(cm, lineObj);
-        function get(ch, right) {
-            var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left");
-            if (right)
-                m.left = m.right;
-            else
-                m.right = m.left;
-            return intoCoordSystem(cm, lineObj, m, context);
-        }
-        function getBidi(ch, partPos) {
-            var part = order[partPos], right = part.level % 2;
-            if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) {
-                part = order[--partPos];
-                ch = bidiRight(part) - (part.level % 2 ? 0 : 1);
-                right = true;
-            } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) {
-                part = order[++partPos];
-                ch = bidiLeft(part) - part.level % 2;
-                right = false;
-            }
-            if (right && ch == part.to && ch > part.from)
-                return get(ch - 1);
-            return get(ch, right);
-        }
-        var order = getOrder(lineObj), ch = pos.ch;
-        if (!order)
-            return get(ch);
-        var partPos = getBidiPartAt(order, ch);
-        var val = getBidi(ch, partPos);
-        if (bidiOther != null)
-            val.other = getBidi(ch, bidiOther);
-        return val;
-    }
-
-    // Used to cheaply estimate the coordinates for a position. Used for
-    // intermediate scroll updates.
-    function estimateCoords(cm, pos) {
-        var left = 0, pos = clipPos(cm.doc, pos);
-        if (!cm.options.lineWrapping)
-            left = charWidth(cm.display) * pos.ch;
-        var lineObj = getLine(cm.doc, pos.line);
-        var top = heightAtLine(lineObj) + paddingTop(cm.display);
-        return {left: left, right: left, top: top, bottom: top + lineObj.height};
-    }
-
-    // Positions returned by coordsChar contain some extra information.
-    // xRel is the relative x position of the input coordinates compared
-    // to the found position (so xRel > 0 means the coordinates are to
-    // the right of the character position, for example). When outside
-    // is true, that means the coordinates lie outside the line's
-    // vertical range.
-    function PosWithInfo(line, ch, outside, xRel) {
-        var pos = Pos(line, ch);
-        pos.xRel = xRel;
-        if (outside)
-            pos.outside = true;
-        return pos;
-    }
-
-    // Compute the character position closest to the given coordinates.
-    // Input must be lineSpace-local ("div" coordinate system).
-    function coordsChar(cm, x, y) {
-        var doc = cm.doc;
-        y += cm.display.viewOffset;
-        if (y < 0)
-            return PosWithInfo(doc.first, 0, true, -1);
-        var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;
-        if (lineN > last)
-            return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1);
-        if (x < 0)
-            x = 0;
-
-        var lineObj = getLine(doc, lineN);
-        for (; ; ) {
-            var found = coordsCharInner(cm, lineObj, lineN, x, y);
-            var merged = collapsedSpanAtEnd(lineObj);
-            var mergedPos = merged && merged.find(0, true);
-            if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))
-                lineN = lineNo(lineObj = mergedPos.to.line);
-            else
-                return found;
-        }
-    }
-
-    function coordsCharInner(cm, lineObj, lineNo, x, y) {
-        var innerOff = y - heightAtLine(lineObj);
-        var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth;
-        var preparedMeasure = prepareMeasureForLine(cm, lineObj);
-
-        function getX(ch) {
-            var sp = cursorCoords(cm, Pos(lineNo, ch), "line", lineObj, preparedMeasure);
-            wrongLine = true;
-            if (innerOff > sp.bottom)
-                return sp.left - adjust;
-            else if (innerOff < sp.top)
-                return sp.left + adjust;
-            else
-                wrongLine = false;
-            return sp.left;
-        }
-
-        var bidi = getOrder(lineObj), dist = lineObj.text.length;
-        var from = lineLeft(lineObj), to = lineRight(lineObj);
-        var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine;
-
-        if (x > toX)
-            return PosWithInfo(lineNo, to, toOutside, 1);
-        // Do a binary search between these bounds.
-        for (; ; ) {
-            if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) {
-                var ch = x < fromX || x - fromX <= toX - x ? from : to;
-                var xDiff = x - (ch == from ? fromX : toX);
-                while (isExtendingChar(lineObj.text.charAt(ch)))
-                    ++ch;
-                var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside,
-                        xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0);
-                return pos;
-            }
-            var step = Math.ceil(dist / 2), middle = from + step;
-            if (bidi) {
-                middle = from;
-                for (var i = 0; i < step; ++i)
-                    middle = moveVisually(lineObj, middle, 1);
-            }
-            var middleX = getX(middle);
-            if (middleX > x) {
-                to = middle;
-                toX = middleX;
-                if (toOutside = wrongLine)
-                    toX += 1000;
-                dist = step;
-            }
-            else {
-                from = middle;
-                fromX = middleX;
-                fromOutside = wrongLine;
-                dist -= step;
-            }
-        }
-    }
-
-    var measureText;
-    // Compute the default text height.
-    function textHeight(display) {
-        if (display.cachedTextHeight != null)
-            return display.cachedTextHeight;
-        if (measureText == null) {
-            measureText = elt("pre");
-            // Measure a bunch of lines, for browsers that compute
-            // fractional heights.
-            for (var i = 0; i < 49; ++i) {
-                measureText.appendChild(document.createTextNode("x"));
-                measureText.appendChild(elt("br"));
-            }
-            measureText.appendChild(document.createTextNode("x"));
-        }
-        removeChildrenAndAdd(display.measure, measureText);
-        var height = measureText.offsetHeight / 50;
-        if (height > 3)
-      

<TRUNCATED>

[15/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of D3.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/8a0e2cee/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-status-history.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-status-history.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-status-history.js
index f570082..178207e 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-status-history.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-status-history.js
@@ -60,13 +60,6 @@ nf.StatusHistory = (function () {
     };
 
     /**
-     * version 3.4+ of D3 provides a mechanism for specifying
-     * a number of custom formatters. this achieves similar function
-     * until we're able to upgrade.
-     */
-    var timeFormats = null;
-
-    /**
      * The time offset of the server.
      */
     var serverTimeOffset = null;
@@ -373,26 +366,21 @@ nf.StatusHistory = (function () {
                 visible: instances[instance.id] === true
             });
         });
-
+        
         // --------------------------
         // custom time axis formatter
         // --------------------------
 
-        // create the formatting function
-        var customTimeFormat = function (d) {
-            var formatter;
-
-            // identify the most appropriate formatter for this date
-            $.each(timeFormats, function (_, timeFormat) {
-                if (timeFormat[1](d)) {
-                    formatter = timeFormat;
-                    return false;
-                }
-            });
-
-            // return the formatter date
-            return formatter[0](d);
-        };
+        var customTimeFormat = d3.time.format.multi([
+            [':%S.%L', function (d) { return d.getMilliseconds(); }], 
+            [':%S', function (d) { return d.getSeconds(); }],
+            ['%H:%M', function (d) { return d.getMinutes(); }],
+            ['%H:%M', function (d) { return d.getHours(); }],
+            ['%a %d', function (d) { return d.getDay() && d.getDate() !== 1; }],
+            ['%b %d', function (d) { return d.getDate() !== 1; }],
+            ['%B', function (d) { return d.getMonth(); }],
+            ['%Y', function () { return true; }]
+        ]);
 
         // ----------
         // main chart
@@ -1136,34 +1124,6 @@ nf.StatusHistory = (function () {
         init: function (timeOffset) {
             serverTimeOffset = timeOffset;
 
-            // initialize the time formats
-            timeFormats = [
-                [d3.time.format(':%S.%L'), function (d) {
-                        return d.getMilliseconds();
-                    }],
-                [d3.time.format(':%S'), function (d) {
-                        return d.getSeconds();
-                    }],
-                [d3.time.format('%H:%M'), function (d) {
-                        return d.getMinutes();
-                    }],
-                [d3.time.format('%H:%M'), function (d) {
-                        return d.getHours();
-                    }],
-                [d3.time.format('%a %d'), function (d) {
-                        return d.getDay() && d.getDate() !== 1;
-                    }],
-                [d3.time.format('%b %d'), function (d) {
-                        return d.getDate() !== 1;
-                    }],
-                [d3.time.format('%B'), function (d) {
-                        return d.getMonth();
-                    }],
-                [d3.time.format('%Y'), function () {
-                        return true;
-                    }]
-            ];
-
             nf.Common.addHoverEffect('#status-history-refresh-button', 'button-refresh', 'button-refresh-hover').click(function () {
                 var statusHistory = $('#status-history-dialog').data('status-history');
                 if (statusHistory !== null) {


[45/50] [abbrv] incubator-nifi git commit: NIFI-27: - Reverting to a slightly old version of minicolors to do issues compressing the css in the latests version.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/a016bf47/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.min.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.min.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.min.js
index 938d85e..6b611fe 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.min.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.min.js
@@ -1,11 +1,9 @@
 /*
  * jQuery MiniColors: A tiny color picker built on jQuery
  *
- * Copyright: Cory LaViska for A Beautiful Site, LLC
+ * Copyright Cory LaViska for A Beautiful Site, LLC. (http://www.abeautifulsite.net/)
  *
- * Contributions and bug reports: https://github.com/claviska/jquery-minicolors
- *
- * @license: http://opensource.org/licenses/MIT
+ * Licensed under the MIT license: http://opensource.org/licenses/MIT
  *
  */
-jQuery&&function($){function i(i,t){var o=$('<div class="minicolors" />'),n=$.minicolors.defaults;i.data("minicolors-initialized")||(t=$.extend(!0,{},n,t),o.addClass("minicolors-theme-"+t.theme).toggleClass("minicolors-with-opacity",t.opacity).toggleClass("minicolors-no-data-uris",t.dataUris!==!0),void 0!==t.position&&$.each(t.position.split(" "),function(){o.addClass("minicolors-position-"+this)}),i.addClass("minicolors-input").data("minicolors-initialized",!1).data("minicolors-settings",t).prop("size",7).wrap(o).after('<div class="minicolors-panel minicolors-slider-'+t.control+'"><div class="minicolors-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-opacity-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-grid minicolors-sprite"><div class="minicolors-grid-inner"></div><div class="minicolors-picker"><div></div></div></div></div>'),t.inline||(i.after('<span class="minicolors-swatch minicolors-spr
 ite"><span class="minicolors-swatch-color"></span></span>'),i.next(".minicolors-swatch").on("click",function(t){t.preventDefault(),i.focus()})),i.parent().find(".minicolors-panel").on("selectstart",function(){return!1}).end(),t.inline&&i.parent().addClass("minicolors-inline"),e(i,!1),i.data("minicolors-initialized",!0))}function t(i){var t=i.parent();i.removeData("minicolors-initialized").removeData("minicolors-settings").removeProp("size").removeClass("minicolors-input"),t.before(i).remove()}function o(i){var t=i.parent(),o=t.find(".minicolors-panel"),s=i.data("minicolors-settings");!i.data("minicolors-initialized")||i.prop("disabled")||t.hasClass("minicolors-inline")||t.hasClass("minicolors-focus")||(n(),t.addClass("minicolors-focus"),o.stop(!0,!0).fadeIn(s.showSpeed,function(){s.show&&s.show.call(i.get(0))}))}function n(){$(".minicolors-focus").each(function(){var i=$(this),t=i.find(".minicolors-input"),o=i.find(".minicolors-panel"),n=t.data("minicolors-settings");o.fadeOut(n.hid
 eSpeed,function(){n.hide&&n.hide.call(t.get(0)),i.removeClass("minicolors-focus")})})}function s(i,t,o){var n=i.parents(".minicolors").find(".minicolors-input"),s=n.data("minicolors-settings"),e=i.find("[class$=-picker]"),r=i.offset().left,c=i.offset().top,l=Math.round(t.pageX-r),h=Math.round(t.pageY-c),d=o?s.animationSpeed:0,u,g,m,p;t.originalEvent.changedTouches&&(l=t.originalEvent.changedTouches[0].pageX-r,h=t.originalEvent.changedTouches[0].pageY-c),0>l&&(l=0),0>h&&(h=0),l>i.width()&&(l=i.width()),h>i.height()&&(h=i.height()),i.parent().is(".minicolors-slider-wheel")&&e.parent().is(".minicolors-grid")&&(u=75-l,g=75-h,m=Math.sqrt(u*u+g*g),p=Math.atan2(g,u),0>p&&(p+=2*Math.PI),m>75&&(m=75,l=75-75*Math.cos(p),h=75-75*Math.sin(p)),l=Math.round(l),h=Math.round(h)),i.is(".minicolors-grid")?e.stop(!0).animate({top:h+"px",left:l+"px"},d,s.animationEasing,function(){a(n,i)}):e.stop(!0).animate({top:h+"px"},d,s.animationEasing,function(){a(n,i)})}function a(i,t){function o(i,t){var o,n;re
 turn i.length&&t?(o=i.offset().left,n=i.offset().top,{x:o-t.offset().left+i.outerWidth()/2,y:n-t.offset().top+i.outerHeight()/2}):null}var n,s,a,e,c,l,d,g=i.val(),m=i.attr("data-opacity"),f=i.parent(),v=i.data("minicolors-settings"),b=f.find(".minicolors-swatch"),y=f.find(".minicolors-grid"),M=f.find(".minicolors-slider"),w=f.find(".minicolors-opacity-slider"),x=y.find("[class$=-picker]"),C=M.find("[class$=-picker]"),k=w.find("[class$=-picker]"),S=o(x,y),z=o(C,M),D=o(k,w);if(t.is(".minicolors-grid, .minicolors-slider")){switch(v.control){case"wheel":e=y.width()/2-S.x,c=y.height()/2-S.y,l=Math.sqrt(e*e+c*c),d=Math.atan2(c,e),0>d&&(d+=2*Math.PI),l>75&&(l=75,S.x=69-75*Math.cos(d),S.y=69-75*Math.sin(d)),s=u(l/.75,0,100),n=u(180*d/Math.PI,0,360),a=u(100-Math.floor(z.y*(100/M.height())),0,100),g=p({h:n,s:s,b:a}),M.css("backgroundColor",p({h:n,s:s,b:100}));break;case"saturation":n=u(parseInt(S.x*(360/y.width()),10),0,360),s=u(100-Math.floor(z.y*(100/M.height())),0,100),a=u(100-Math.floor(S
 .y*(100/y.height())),0,100),g=p({h:n,s:s,b:a}),M.css("backgroundColor",p({h:n,s:100,b:a})),f.find(".minicolors-grid-inner").css("opacity",s/100);break;case"brightness":n=u(parseInt(S.x*(360/y.width()),10),0,360),s=u(100-Math.floor(S.y*(100/y.height())),0,100),a=u(100-Math.floor(z.y*(100/M.height())),0,100),g=p({h:n,s:s,b:a}),M.css("backgroundColor",p({h:n,s:s,b:100})),f.find(".minicolors-grid-inner").css("opacity",1-a/100);break;default:n=u(360-parseInt(z.y*(360/M.height()),10),0,360),s=u(Math.floor(S.x*(100/y.width())),0,100),a=u(100-Math.floor(S.y*(100/y.height())),0,100),g=p({h:n,s:s,b:a}),y.css("backgroundColor",p({h:n,s:100,b:100}))}i.val(h(g,v.letterCase))}t.is(".minicolors-opacity-slider")&&(m=v.opacity?parseFloat(1-D.y/w.height()).toFixed(2):1,v.opacity&&i.attr("data-opacity",m)),b.find("SPAN").css({backgroundColor:g,opacity:m}),r(i,g,m)}function e(i,t){var o,n,s,a,e,c,l,g=i.parent(),m=i.data("minicolors-settings"),v=g.find(".minicolors-swatch"),b=g.find(".minicolors-grid"),
 y=g.find(".minicolors-slider"),M=g.find(".minicolors-opacity-slider"),w=b.find("[class$=-picker]"),x=y.find("[class$=-picker]"),C=M.find("[class$=-picker]");switch(o=h(d(i.val(),!0),m.letterCase),o||(o=h(d(m.defaultValue,!0),m.letterCase)),n=f(o),t||i.val(o),m.opacity&&(s=""===i.attr("data-opacity")?1:u(parseFloat(i.attr("data-opacity")).toFixed(2),0,1),isNaN(s)&&(s=1),i.attr("data-opacity",s),v.find("SPAN").css("opacity",s),e=u(M.height()-M.height()*s,0,M.height()),C.css("top",e+"px")),v.find("SPAN").css("backgroundColor",o),m.control){case"wheel":c=u(Math.ceil(.75*n.s),0,b.height()/2),l=n.h*Math.PI/180,a=u(75-Math.cos(l)*c,0,b.width()),e=u(75-Math.sin(l)*c,0,b.height()),w.css({top:e+"px",left:a+"px"}),e=150-n.b/(100/b.height()),""===o&&(e=0),x.css("top",e+"px"),y.css("backgroundColor",p({h:n.h,s:n.s,b:100}));break;case"saturation":a=u(5*n.h/12,0,150),e=u(b.height()-Math.ceil(n.b/(100/b.height())),0,b.height()),w.css({top:e+"px",left:a+"px"}),e=u(y.height()-n.s*(y.height()/100),0,y
 .height()),x.css("top",e+"px"),y.css("backgroundColor",p({h:n.h,s:100,b:n.b})),g.find(".minicolors-grid-inner").css("opacity",n.s/100);break;case"brightness":a=u(5*n.h/12,0,150),e=u(b.height()-Math.ceil(n.s/(100/b.height())),0,b.height()),w.css({top:e+"px",left:a+"px"}),e=u(y.height()-n.b*(y.height()/100),0,y.height()),x.css("top",e+"px"),y.css("backgroundColor",p({h:n.h,s:n.s,b:100})),g.find(".minicolors-grid-inner").css("opacity",1-n.b/100);break;default:a=u(Math.ceil(n.s/(100/b.width())),0,b.width()),e=u(b.height()-Math.ceil(n.b/(100/b.height())),0,b.height()),w.css({top:e+"px",left:a+"px"}),e=u(y.height()-n.h/(360/y.height()),0,y.height()),x.css("top",e+"px"),b.css("backgroundColor",p({h:n.h,s:100,b:100}))}i.data("minicolors-initialized")&&r(i,o,s)}function r(i,t,o){var n=i.data("minicolors-settings"),s=i.data("minicolors-lastChange");s&&s.hex===t&&s.opacity===o||(i.data("minicolors-lastChange",{hex:t,opacity:o}),n.change&&(n.changeDelay?(clearTimeout(i.data("minicolors-changeTi
 meout")),i.data("minicolors-changeTimeout",setTimeout(function(){n.change.call(i.get(0),t,o)},n.changeDelay))):n.change.call(i.get(0),t,o)),i.trigger("change").trigger("input"))}function c(i){var t=d($(i).val(),!0),o=b(t),n=$(i).attr("data-opacity");return o?(void 0!==n&&$.extend(o,{a:parseFloat(n)}),o):null}function l(i,t){var o=d($(i).val(),!0),n=b(o),s=$(i).attr("data-opacity");return n?(void 0===s&&(s=1),t?"rgba("+n.r+", "+n.g+", "+n.b+", "+parseFloat(s)+")":"rgb("+n.r+", "+n.g+", "+n.b+")"):null}function h(i,t){return"uppercase"===t?i.toUpperCase():i.toLowerCase()}function d(i,t){return i=i.replace(/[^A-F0-9]/gi,""),3!==i.length&&6!==i.length?"":(3===i.length&&t&&(i=i[0]+i[0]+i[1]+i[1]+i[2]+i[2]),"#"+i)}function u(i,t,o){return t>i&&(i=t),i>o&&(i=o),i}function g(i){var t={},o=Math.round(i.h),n=Math.round(255*i.s/100),s=Math.round(255*i.b/100);if(0===n)t.r=t.g=t.b=s;else{var a=s,e=(255-n)*s/255,r=(a-e)*(o%60)/60;360===o&&(o=0),60>o?(t.r=a,t.b=e,t.g=e+r):120>o?(t.g=a,t.b=e,t.r=a-
 r):180>o?(t.g=a,t.r=e,t.b=e+r):240>o?(t.b=a,t.r=e,t.g=a-r):300>o?(t.b=a,t.g=e,t.r=e+r):360>o?(t.r=a,t.g=e,t.b=a-r):(t.r=0,t.g=0,t.b=0)}return{r:Math.round(t.r),g:Math.round(t.g),b:Math.round(t.b)}}function m(i){var t=[i.r.toString(16),i.g.toString(16),i.b.toString(16)];return $.each(t,function(i,o){1===o.length&&(t[i]="0"+o)}),"#"+t.join("")}function p(i){return m(g(i))}function f(i){var t=v(b(i));return 0===t.s&&(t.h=360),t}function v(i){var t={h:0,s:0,b:0},o=Math.min(i.r,i.g,i.b),n=Math.max(i.r,i.g,i.b),s=n-o;return t.b=n,t.s=0!==n?255*s/n:0,t.h=0!==t.s?i.r===n?(i.g-i.b)/s:i.g===n?2+(i.b-i.r)/s:4+(i.r-i.g)/s:-1,t.h*=60,t.h<0&&(t.h+=360),t.s*=100/255,t.b*=100/255,t}function b(i){return i=parseInt(i.indexOf("#")>-1?i.substring(1):i,16),{r:i>>16,g:(65280&i)>>8,b:255&i}}$.minicolors={defaults:{animationSpeed:50,animationEasing:"swing",change:null,changeDelay:0,control:"hue",dataUris:!0,defaultValue:"",hide:null,hideSpeed:100,inline:!1,letterCase:"lowercase",opacity:!1,position:"bottom
  left",show:null,showSpeed:100,theme:"default"}},$.extend($.fn,{minicolors:function(s,a){switch(s){case"destroy":return $(this).each(function(){t($(this))}),$(this);case"hide":return n(),$(this);case"opacity":return void 0===a?$(this).attr("data-opacity"):($(this).each(function(){e($(this).attr("data-opacity",a))}),$(this));case"rgbObject":return c($(this),"rgbaObject"===s);case"rgbString":case"rgbaString":return l($(this),"rgbaString"===s);case"settings":return void 0===a?$(this).data("minicolors-settings"):($(this).each(function(){var i=$(this).data("minicolors-settings")||{};t($(this)),$(this).minicolors($.extend(!0,i,a))}),$(this));case"show":return o($(this).eq(0)),$(this);case"value":return void 0===a?$(this).val():($(this).each(function(){e($(this).val(a))}),$(this));default:return"create"!==s&&(a=s),$(this).each(function(){i($(this),a)}),$(this)}}}),$(document).on("mousedown.minicolors touchstart.minicolors",function(i){$(i.target).parents().add(i.target).hasClass("minicolor
 s")||n()}).on("mousedown.minicolors touchstart.minicolors",".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider",function(i){var t=$(this);i.preventDefault(),$(document).data("minicolors-target",t),s(t,i,!0)}).on("mousemove.minicolors touchmove.minicolors",function(i){var t=$(document).data("minicolors-target");t&&s(t,i)}).on("mouseup.minicolors touchend.minicolors",function(){$(this).removeData("minicolors-target")}).on("mousedown.minicolors touchstart.minicolors",".minicolors-swatch",function(i){var t=$(this).parent().find(".minicolors-input");i.preventDefault(),o(t)}).on("focus.minicolors",".minicolors-input",function(){var i=$(this);i.data("minicolors-initialized")&&o(i)}).on("blur.minicolors",".minicolors-input",function(){var i=$(this),t=i.data("minicolors-settings");i.data("minicolors-initialized")&&(i.val(d(i.val(),!0)),""===i.val()&&i.val(d(t.defaultValue,!0)),i.val(h(i.val(),t.letterCase)))}).on("keydown.minicolors",".minicolors-input",function(i){var t=$(this
 );if(t.data("minicolors-initialized"))switch(i.keyCode){case 9:n();break;case 13:case 27:n(),t.blur()}}).on("keyup.minicolors",".minicolors-input",function(){var i=$(this);i.data("minicolors-initialized")&&e(i,!0)}).on("paste.minicolors",".minicolors-input",function(){var i=$(this);i.data("minicolors-initialized")&&setTimeout(function(){e(i,!0)},1)})}(jQuery);
\ No newline at end of file
+jQuery&&function(a){function b(b,c){var d=a('<div class="minicolors" />'),e=a.minicolors.defaults;b.data("minicolors-initialized")||(c=a.extend(!0,{},e,c),d.addClass("minicolors-theme-"+c.theme).toggleClass("minicolors-with-opacity",c.opacity),void 0!==c.position&&a.each(c.position.split(" "),function(){d.addClass("minicolors-position-"+this)}),b.addClass("minicolors-input").data("minicolors-initialized",!1).data("minicolors-settings",c).prop("size",7).wrap(d).after('<div class="minicolors-panel minicolors-slider-'+c.control+'">'+'<div class="minicolors-slider">'+'<div class="minicolors-picker"></div>'+"</div>"+'<div class="minicolors-opacity-slider">'+'<div class="minicolors-picker"></div>'+"</div>"+'<div class="minicolors-grid">'+'<div class="minicolors-grid-inner"></div>'+'<div class="minicolors-picker"><div></div></div>'+"</div>"+"</div>"),c.inline||(b.after('<span class="minicolors-swatch"><span class="minicolors-swatch-color"></span></span>'),b.next(".minicolors-swatch").on("c
 lick",function(a){a.preventDefault(),b.focus()})),b.parent().find(".minicolors-panel").on("selectstart",function(){return!1}).end(),c.inline&&b.parent().addClass("minicolors-inline"),h(b,!1),b.data("minicolors-initialized",!0))}function c(a){var b=a.parent();a.removeData("minicolors-initialized").removeData("minicolors-settings").removeProp("size").removeClass("minicolors-input"),b.before(a).remove()}function d(a){var b=a.parent(),c=b.find(".minicolors-panel"),d=a.data("minicolors-settings");!a.data("minicolors-initialized")||a.prop("disabled")||b.hasClass("minicolors-inline")||b.hasClass("minicolors-focus")||(e(),b.addClass("minicolors-focus"),c.stop(!0,!0).fadeIn(d.showSpeed,function(){d.show&&d.show.call(a.get(0))}))}function e(){a(".minicolors-focus").each(function(){var b=a(this),c=b.find(".minicolors-input"),d=b.find(".minicolors-panel"),e=c.data("minicolors-settings");d.fadeOut(e.hideSpeed,function(){e.hide&&e.hide.call(c.get(0)),b.removeClass("minicolors-focus")})})}function
  f(a,b,c){var m,n,o,p,d=a.parents(".minicolors").find(".minicolors-input"),e=d.data("minicolors-settings"),f=a.find("[class$=-picker]"),h=a.offset().left,i=a.offset().top,j=Math.round(b.pageX-h),k=Math.round(b.pageY-i),l=c?e.animationSpeed:0;b.originalEvent.changedTouches&&(j=b.originalEvent.changedTouches[0].pageX-h,k=b.originalEvent.changedTouches[0].pageY-i),0>j&&(j=0),0>k&&(k=0),j>a.width()&&(j=a.width()),k>a.height()&&(k=a.height()),a.parent().is(".minicolors-slider-wheel")&&f.parent().is(".minicolors-grid")&&(m=75-j,n=75-k,o=Math.sqrt(m*m+n*n),p=Math.atan2(n,m),0>p&&(p+=2*Math.PI),o>75&&(o=75,j=75-75*Math.cos(p),k=75-75*Math.sin(p)),j=Math.round(j),k=Math.round(k)),a.is(".minicolors-grid")?f.stop(!0).animate({top:k+"px",left:j+"px"},l,e.animationEasing,function(){g(d,a)}):f.stop(!0).animate({top:k+"px"},l,e.animationEasing,function(){g(d,a)})}function g(a,b){function c(a,b){var c,d;return a.length&&b?(c=a.offset().left,d=a.offset().top,{x:c-b.offset().left+a.outerWidth()/2,y:d
 -b.offset().top+a.outerHeight()/2}):null}var d,e,f,g,h,j,k,m=a.val(),o=a.attr("data-opacity"),p=a.parent(),r=a.data("minicolors-settings"),s=p.find(".minicolors-swatch"),t=p.find(".minicolors-grid"),u=p.find(".minicolors-slider"),v=p.find(".minicolors-opacity-slider"),w=t.find("[class$=-picker]"),x=u.find("[class$=-picker]"),y=v.find("[class$=-picker]"),z=c(w,t),A=c(x,u),B=c(y,v);if(b.is(".minicolors-grid, .minicolors-slider")){switch(r.control){case"wheel":g=t.width()/2-z.x,h=t.height()/2-z.y,j=Math.sqrt(g*g+h*h),k=Math.atan2(h,g),0>k&&(k+=2*Math.PI),j>75&&(j=75,z.x=69-75*Math.cos(k),z.y=69-75*Math.sin(k)),e=n(j/.75,0,100),d=n(180*k/Math.PI,0,360),f=n(100-Math.floor(A.y*(100/u.height())),0,100),m=q({h:d,s:e,b:f}),u.css("backgroundColor",q({h:d,s:e,b:100}));break;case"saturation":d=n(parseInt(z.x*(360/t.width()),10),0,360),e=n(100-Math.floor(A.y*(100/u.height())),0,100),f=n(100-Math.floor(z.y*(100/t.height())),0,100),m=q({h:d,s:e,b:f}),u.css("backgroundColor",q({h:d,s:100,b:f})),p.f
 ind(".minicolors-grid-inner").css("opacity",e/100);break;case"brightness":d=n(parseInt(z.x*(360/t.width()),10),0,360),e=n(100-Math.floor(z.y*(100/t.height())),0,100),f=n(100-Math.floor(A.y*(100/u.height())),0,100),m=q({h:d,s:e,b:f}),u.css("backgroundColor",q({h:d,s:e,b:100})),p.find(".minicolors-grid-inner").css("opacity",1-f/100);break;default:d=n(360-parseInt(A.y*(360/u.height()),10),0,360),e=n(Math.floor(z.x*(100/t.width())),0,100),f=n(100-Math.floor(z.y*(100/t.height())),0,100),m=q({h:d,s:e,b:f}),t.css("backgroundColor",q({h:d,s:100,b:100}))}a.val(l(m,r.letterCase))}b.is(".minicolors-opacity-slider")&&(o=r.opacity?parseFloat(1-B.y/v.height()).toFixed(2):1,r.opacity&&a.attr("data-opacity",o)),s.find("SPAN").css({backgroundColor:m,opacity:o}),i(a,m,o)}function h(a,b){var c,d,e,f,g,h,j,k=a.parent(),o=a.data("minicolors-settings"),p=k.find(".minicolors-swatch"),s=k.find(".minicolors-grid"),t=k.find(".minicolors-slider"),u=k.find(".minicolors-opacity-slider"),v=s.find("[class$=-picke
 r]"),w=t.find("[class$=-picker]"),x=u.find("[class$=-picker]");switch(c=l(m(a.val(),!0),o.letterCase),c||(c=l(m(o.defaultValue,!0),o.letterCase)),d=r(c),b||a.val(c),o.opacity&&(e=""===a.attr("data-opacity")?1:n(parseFloat(a.attr("data-opacity")).toFixed(2),0,1),isNaN(e)&&(e=1),a.attr("data-opacity",e),p.find("SPAN").css("opacity",e),g=n(u.height()-u.height()*e,0,u.height()),x.css("top",g+"px")),p.find("SPAN").css("backgroundColor",c),o.control){case"wheel":h=n(Math.ceil(.75*d.s),0,s.height()/2),j=d.h*Math.PI/180,f=n(75-Math.cos(j)*h,0,s.width()),g=n(75-Math.sin(j)*h,0,s.height()),v.css({top:g+"px",left:f+"px"}),g=150-d.b/(100/s.height()),""===c&&(g=0),w.css("top",g+"px"),t.css("backgroundColor",q({h:d.h,s:d.s,b:100}));break;case"saturation":f=n(5*d.h/12,0,150),g=n(s.height()-Math.ceil(d.b/(100/s.height())),0,s.height()),v.css({top:g+"px",left:f+"px"}),g=n(t.height()-d.s*(t.height()/100),0,t.height()),w.css("top",g+"px"),t.css("backgroundColor",q({h:d.h,s:100,b:d.b})),k.find(".minico
 lors-grid-inner").css("opacity",d.s/100);break;case"brightness":f=n(5*d.h/12,0,150),g=n(s.height()-Math.ceil(d.s/(100/s.height())),0,s.height()),v.css({top:g+"px",left:f+"px"}),g=n(t.height()-d.b*(t.height()/100),0,t.height()),w.css("top",g+"px"),t.css("backgroundColor",q({h:d.h,s:d.s,b:100})),k.find(".minicolors-grid-inner").css("opacity",1-d.b/100);break;default:f=n(Math.ceil(d.s/(100/s.width())),0,s.width()),g=n(s.height()-Math.ceil(d.b/(100/s.height())),0,s.height()),v.css({top:g+"px",left:f+"px"}),g=n(t.height()-d.h/(360/t.height()),0,t.height()),w.css("top",g+"px"),s.css("backgroundColor",q({h:d.h,s:100,b:100}))}a.data("minicolors-initialized")&&i(a,c,e)}function i(a,b,c){var d=a.data("minicolors-settings"),e=a.data("minicolors-lastChange");e&&e.hex===b&&e.opacity===c||(a.data("minicolors-lastChange",{hex:b,opacity:c}),d.change&&(d.changeDelay?(clearTimeout(a.data("minicolors-changeTimeout")),a.data("minicolors-changeTimeout",setTimeout(function(){d.change.call(a.get(0),b,c)},
 d.changeDelay))):d.change.call(a.get(0),b,c)),a.trigger("change").trigger("input"))}function j(b){var c=m(a(b).val(),!0),d=t(c),e=a(b).attr("data-opacity");return d?(void 0!==e&&a.extend(d,{a:parseFloat(e)}),d):null}function k(b,c){var d=m(a(b).val(),!0),e=t(d),f=a(b).attr("data-opacity");return e?(void 0===f&&(f=1),c?"rgba("+e.r+", "+e.g+", "+e.b+", "+parseFloat(f)+")":"rgb("+e.r+", "+e.g+", "+e.b+")"):null}function l(a,b){return"uppercase"===b?a.toUpperCase():a.toLowerCase()}function m(a,b){return a=a.replace(/[^A-F0-9]/gi,""),3!==a.length&&6!==a.length?"":(3===a.length&&b&&(a=a[0]+a[0]+a[1]+a[1]+a[2]+a[2]),"#"+a)}function n(a,b,c){return b>a&&(a=b),a>c&&(a=c),a}function o(a){var b={},c=Math.round(a.h),d=Math.round(255*a.s/100),e=Math.round(255*a.b/100);if(0===d)b.r=b.g=b.b=e;else{var f=e,g=(255-d)*e/255,h=(f-g)*(c%60)/60;360===c&&(c=0),60>c?(b.r=f,b.b=g,b.g=g+h):120>c?(b.g=f,b.b=g,b.r=f-h):180>c?(b.g=f,b.r=g,b.b=g+h):240>c?(b.b=f,b.r=g,b.g=f-h):300>c?(b.b=f,b.g=g,b.r=g+h):360>c?(
 b.r=f,b.g=g,b.b=f-h):(b.r=0,b.g=0,b.b=0)}return{r:Math.round(b.r),g:Math.round(b.g),b:Math.round(b.b)}}function p(b){var c=[b.r.toString(16),b.g.toString(16),b.b.toString(16)];return a.each(c,function(a,b){1===b.length&&(c[a]="0"+b)}),"#"+c.join("")}function q(a){return p(o(a))}function r(a){var b=s(t(a));return 0===b.s&&(b.h=360),b}function s(a){var b={h:0,s:0,b:0},c=Math.min(a.r,a.g,a.b),d=Math.max(a.r,a.g,a.b),e=d-c;return b.b=d,b.s=0!==d?255*e/d:0,b.h=0!==b.s?a.r===d?(a.g-a.b)/e:a.g===d?2+(a.b-a.r)/e:4+(a.r-a.g)/e:-1,b.h*=60,b.h<0&&(b.h+=360),b.s*=100/255,b.b*=100/255,b}function t(a){return a=parseInt(a.indexOf("#")>-1?a.substring(1):a,16),{r:a>>16,g:(65280&a)>>8,b:255&a}}a.minicolors={defaults:{animationSpeed:50,animationEasing:"swing",change:null,changeDelay:0,control:"hue",defaultValue:"",hide:null,hideSpeed:100,inline:!1,letterCase:"lowercase",opacity:!1,position:"bottom left",show:null,showSpeed:100,theme:"default"}},a.extend(a.fn,{minicolors:function(f,g){switch(f){case"de
 stroy":return a(this).each(function(){c(a(this))}),a(this);case"hide":return e(),a(this);case"opacity":return void 0===g?a(this).attr("data-opacity"):(a(this).each(function(){h(a(this).attr("data-opacity",g))}),a(this));case"rgbObject":return j(a(this),"rgbaObject"===f);case"rgbString":case"rgbaString":return k(a(this),"rgbaString"===f);case"settings":return void 0===g?a(this).data("minicolors-settings"):(a(this).each(function(){var b=a(this).data("minicolors-settings")||{};c(a(this)),a(this).minicolors(a.extend(!0,b,g))}),a(this));case"show":return d(a(this).eq(0)),a(this);case"value":return void 0===g?a(this).val():(a(this).each(function(){h(a(this).val(g))}),a(this));default:return"create"!==f&&(g=f),a(this).each(function(){b(a(this),g)}),a(this)}}}),a(document).on("mousedown.minicolors touchstart.minicolors",function(b){a(b.target).parents().add(b.target).hasClass("minicolors")||e()}).on("mousedown.minicolors touchstart.minicolors",".minicolors-grid, .minicolors-slider, .minicol
 ors-opacity-slider",function(b){var c=a(this);b.preventDefault(),a(document).data("minicolors-target",c),f(c,b,!0)}).on("mousemove.minicolors touchmove.minicolors",function(b){var c=a(document).data("minicolors-target");c&&f(c,b)}).on("mouseup.minicolors touchend.minicolors",function(){a(this).removeData("minicolors-target")}).on("mousedown.minicolors touchstart.minicolors",".minicolors-swatch",function(b){var c=a(this).parent().find(".minicolors-input");b.preventDefault(),d(c)}).on("focus.minicolors",".minicolors-input",function(){var b=a(this);b.data("minicolors-initialized")&&d(b)}).on("blur.minicolors",".minicolors-input",function(){var b=a(this),c=b.data("minicolors-settings");b.data("minicolors-initialized")&&(b.val(m(b.val(),!0)),""===b.val()&&b.val(m(c.defaultValue,!0)),b.val(l(b.val(),c.letterCase)))}).on("keydown.minicolors",".minicolors-input",function(b){var c=a(this);if(c.data("minicolors-initialized"))switch(b.keyCode){case 9:e();break;case 13:case 27:e(),c.blur()}}).o
 n("keyup.minicolors",".minicolors-input",function(){var b=a(this);b.data("minicolors-initialized")&&h(b,!0)}).on("paste.minicolors",".minicolors-input",function(){var b=a(this);b.data("minicolors-initialized")&&setTimeout(function(){h(b,!0)},1)})}(jQuery);
\ No newline at end of file


[24/50] [abbrv] incubator-nifi git commit: NIFI-27: - Starting to upgrade jQuery and jQuery UI.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js
new file mode 100755
index 0000000..df6064c
--- /dev/null
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js
@@ -0,0 +1,7 @@
+/*! jQuery UI - v1.10.4 - 2014-12-08
+* http://jqueryui.com
+* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+(function(e,t){function i(t,i){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap=#"+a+"]")[0],!!o&&s(o)):!1):(/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var n=0,a=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.4",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;
 return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,n,a=e(this[0]);a.length&&a[0]!==document;){if(s=a.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(n=parseInt(a.css("zIndex"),10),!isNaN(n)&&0!==n))return n;a=a.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++n)})},removeUniqueId:function(){return this.each(function(){a.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.
 expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),n=isNaN(s);return(n||s>=0)&&i(t,!n)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function n(t,i,s,n){return e.each(a,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),n&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var a="Width"===s?["Left","Right"]:["Top","Bottom"],o=s.toLowerCase(),r={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?r["inner"+s].call(this):this.each(function(){e(this).css(o,n(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?r["outer"+s].call(this,t):this.each(function(){e(this).css(o,n(this,t,!0,i)+"px")})}}),e.f
 n.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i){var s,n=e.plugins[t];if(n&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;n.length>s;s++)e.options[n[s][0]]&&n[s][1].apply(e.element,i)}},hasScrol
 l:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)}})})(jQuery);(function(e,t){var i=0,s=Array.prototype.slice,n=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(a){}n(t)},e.widget=function(i,s,n){var a,o,r,h,l={},u=i.split(".")[0];i=i.split(".")[1],a=u+"-"+i,n||(n=s,s=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[u]=e[u]||{},o=e[u][i],r=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new r(e,i)},e.extend(r,o,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(n,function(i,n){return e.isFunction(n)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,a=this._superApply;r
 eturn this._super=e,this._superApply=t,i=n.apply(this,arguments),this._super=s,this._superApply=a,i}}(),t):(l[i]=n,t)}),r.prototype=e.widget.extend(h,{widgetEventPrefix:o?h.widgetEventPrefix||i:i},l,{constructor:r,namespace:u,widgetName:i,widgetFullName:a}),o?(e.each(o._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,r,i._proto)}),delete o._childConstructors):s._childConstructors.push(r),e.widget.bridge(i,r)},e.widget.extend=function(i){for(var n,a,o=s.call(arguments,1),r=0,h=o.length;h>r;r++)for(n in o[r])a=o[r][n],o[r].hasOwnProperty(n)&&a!==t&&(i[n]=e.isPlainObject(a)?e.isPlainObject(i[n])?e.widget.extend({},i[n],a):e.widget.extend({},a):a);return i},e.widget.bridge=function(i,n){var a=n.prototype.widgetFullName||i;e.fn[i]=function(o){var r="string"==typeof o,h=s.call(arguments,1),l=this;return o=!r&&h.length?e.widget.extend.apply(null,[o].concat(h)):o,r?this.each(function(){var s,n=e.data(this,a);return n?e.isFunction(n[o])&&"_"!==o.charAt
 (0)?(s=n[o].apply(n,h),s!==n&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+o+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+o+"'")}):this.each(function(){var t=e.data(this,a);t?t.option(o||{})._init():e.data(this,a,new n(o,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.docume
 nt[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var n,a,o,r=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(r={},n=i.split("."),i=n.shift(),n.length){for(a=r[i]=e.widget.extend({},this.options[i]),o=0;n.length-1>o;o++)a[n[o]]=a[n[o]]||{},a=a[n[o]];if(i=n.pop()
 ,1===arguments.length)return a[i]===t?null:a[i];a[i]=s}else{if(1===arguments.length)return this.options[i]===t?null:this.options[i];r[i]=s}return this._setOptions(r),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var a,o=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=a=e(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,a=this.widget()),e.each(n,function(n,r){function h(){return i||o.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof r?o[r]:r).apply(o,arguments):t}"string"!=typeof r&&(h.guid=r.guid=r.guid||h.guid|
 |e.guid++);var l=n.match(/^(\w+)\s*(.*)$/),u=l[1]+o.eventNamespace,c=l[2];c?a.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(
 i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}})})(jQuery);(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.4",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetN
 ame+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDele
 gate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(
 Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(e,t){function i(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function s(t,i){return parseInt(e.css(t,i),10)||0}function n(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,c=/[\+\-]\d+(\.[\d]+)?%?/,d=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(a!==
 t)return a;var i,s,n=e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=n.children()[0];return e("body").append(n),i=o.offsetWidth,n.css("overflow","scroll"),s=o.offsetWidth,i===s&&(s=n[0].clientWidth),n.remove(),a=i-s},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,a="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s?i.width():i.outerWidth(),height:s?i.height():i.outerHeight()}}},e.fn.position=function(t){if(!t||!t.of)r
 eturn f.apply(this,arguments);t=e.extend({},t);var a,p,m,g,v,y,b=e(t.of),_=e.position.getWithinInfo(t.within),x=e.position.getScrollInfo(_),w=(t.collision||"flip").split(" "),k={};return y=n(b),b[0].preventDefault&&(t.at="left top"),p=y.width,m=y.height,g=y.offset,v=e.extend({},g),e.each(["my","at"],function(){var e,i,s=(t[this]||"").split(" ");1===s.length&&(s=l.test(s[0])?s.concat(["center"]):u.test(s[0])?["center"].concat(s):["center","center"]),s[0]=l.test(s[0])?s[0]:"center",s[1]=u.test(s[1])?s[1]:"center",e=c.exec(s[0]),i=c.exec(s[1]),k[this]=[e?e[0]:0,i?i[0]:0],t[this]=[d.exec(s[0])[0],d.exec(s[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===t.at[0]?v.left+=p:"center"===t.at[0]&&(v.left+=p/2),"bottom"===t.at[1]?v.top+=m:"center"===t.at[1]&&(v.top+=m/2),a=i(k.at,p,m),v.left+=a[0],v.top+=a[1],this.each(function(){var n,l,u=e(this),c=u.outerWidth(),d=u.outerHeight(),f=s(this,"marginLeft"),y=s(this,"marginTop"),T=c+f+s(this,"marginRight")+x.width,D=d+y+s(this,"marginBottom")+x.heig
 ht,S=e.extend({},v),N=i(k.my,u.outerWidth(),u.outerHeight());"right"===t.my[0]?S.left-=c:"center"===t.my[0]&&(S.left-=c/2),"bottom"===t.my[1]?S.top-=d:"center"===t.my[1]&&(S.top-=d/2),S.left+=N[0],S.top+=N[1],e.support.offsetFractions||(S.left=h(S.left),S.top=h(S.top)),n={marginLeft:f,marginTop:y},e.each(["left","top"],function(i,s){e.ui.position[w[i]]&&e.ui.position[w[i]][s](S,{targetWidth:p,targetHeight:m,elemWidth:c,elemHeight:d,collisionPosition:n,collisionWidth:T,collisionHeight:D,offset:[a[0]+N[0],a[1]+N[1]],my:t.my,at:t.at,within:_,elem:u})}),t.using&&(l=function(e){var i=g.left-S.left,s=i+p-c,n=g.top-S.top,a=n+m-d,h={target:{element:b,left:g.left,top:g.top,width:p,height:m},element:{element:u,left:S.left,top:S.top,width:c,height:d},horizontal:0>s?"left":i>0?"right":"center",vertical:0>a?"top":n>0?"bottom":"middle"};c>p&&p>r(i+s)&&(h.horizontal="center"),d>m&&m>r(n+a)&&(h.vertical="middle"),h.important=o(r(i),r(s))>o(r(n),r(a))?"horizontal":"vertical",t.using.call(this,e,h)})
 ,u.offset(e.extend(S,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,c=l+t.collisionWidth-o-h,d="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0
 ]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+d+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=d+p+f)):c>0&&(s=e.left-t.collisionPosition.marginLeft+d+p+f-h,(s>0||c>r(s))&&(e.left+=d+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,c=l+t.collisionHeight-o-h,d="top"===t.my[1],p=d?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,e.top+p+f+m>u&&(0>s||r(u)>s)&&(e.top+=p+f+m)):c>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,e.top+p+f+m>c&&(i>0||c>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i
 ,s,n,a,o=document.getElementsByTagName("body")[0],r=document.createElement("div");t=document.createElement(o?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},o&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(a in s)t.style[a]=s[a];t.appendChild(r),i=o||document.documentElement,i.insertBefore(t,i.firstChild),r.style.cssText="position: absolute; left: 10.7432222px;",n=e(r).offset().left,e.support.offsetFractions=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()})(jQuery);(function(e){e.widget("ui.draggable",e.ui.mouse,{version:"1.10.4",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},
 _create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(t){var i=this.options;return this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(i.iframeFix===!0?"iframe":i.iframeFix).each(function(){e("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addCl
 ass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._m
 ouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"original"!==this.options.helper||e.contains(this.element[0].ownerDocument,this.element[0])?("invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isF
 unction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1):!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]
 ||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.lef
 t+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.element.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;return n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(wind
 ow).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):"document"===n.containment?(this.containment=[0,0,e(document).width()-this.helperProportions.width-this.margins.left,(e(document).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):n.containment.constructor===Array?(this.containment=n.containment,undefined):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.help
 erProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i),undefined):(this.containment=null,undefined)},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent;return this.offset.scroll||(this.offset.scroll={top:n.scrollTop(),left:n.scrollLeft()}),{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top)*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)*s}},_generatePosition:function(
 t){var i,s,n,a,o=this.options,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=t.pageX,l=t.pageY;return this.offset.scroll||(this.offset.scroll={top:r.scrollTop(),left:r.scrollLeft()}),this.originalPosition&&(this.containment&&(this.relative_container?(s=this.relative_container.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.cli
 ck.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s]),"drag"===t&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{
 },_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i){var s=e(this).data("ui-draggable"),n=s.options,a=e.extend({},i,{item:s.element});s.sortables=[],e(n.connectToSortable).each(function(){var i=e.data(this,"ui-sortable");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",t,a))})},stop:function(t,i){var s=e(this).data("ui-draggable"),n=e.extend({},i,{item:s.element});e.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.ca
 ncelHelperRemoval=!1,this.instance._trigger("deactivate",t,n))})},drag:function(t,i){var s=e(this).data("ui-draggable"),n=this;e.each(s.sortables,function(){var a=!1,o=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(a=!0,e.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(o.instance.element[0],this.instance.element[0])&&(a=!1),a})),a?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},t.target=this.instance.cu
 rrentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",t),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",t),s.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(
 ){var t=e("body"),i=e(this).data("ui-draggable").options;t.css("cursor")&&(i._cursor=t.css("cursor")),t.css("cursor",i.cursor)},stop:function(){var t=e(this).data("ui-draggable").options;t._cursor&&e("body").css("cursor",t._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("opacity")&&(n._opacity=s.css("opacity")),s.css("opacity",n.opacity)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._opacity&&e(i.helper).css("opacity",s._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(){var t=e(this).data("ui-draggable");t.scrollParent[0]!==document&&"HTML"!==t.scrollParent[0].tagName&&(t.overflowOffset=t.scrollParent.offset())},drag:function(t){var i=e(this).data("ui-draggable"),s=i.options,n=!1;i.scrollParent[0]!==document&&"HTML"!==i.scrollParent[0].tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+i.scrollParent[0].offsetHeight-t.pageY<s.scrollSensitivity?i.scrollParent[0]
 .scrollTop=n=i.scrollParent[0].scrollTop+s.scrollSpeed:t.pageY-i.overflowOffset.top<s.scrollSensitivity&&(i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop-s.scrollSpeed)),s.axis&&"y"===s.axis||(i.overflowOffset.left+i.scrollParent[0].offsetWidth-t.pageX<s.scrollSensitivity?i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft+s.scrollSpeed:t.pageX-i.overflowOffset.left<s.scrollSensitivity&&(i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft-s.scrollSpeed))):(s.axis&&"x"===s.axis||(t.pageY-e(document).scrollTop()<s.scrollSensitivity?n=e(document).scrollTop(e(document).scrollTop()-s.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<s.scrollSensitivity&&(n=e(document).scrollTop(e(document).scrollTop()+s.scrollSpeed))),s.axis&&"y"===s.axis||(t.pageX-e(document).scrollLeft()<s.scrollSensitivity?n=e(document).scrollLeft(e(document).scrollLeft()-s.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<s.scrollSensitivity&&(n=e(document).sc
 rollLeft(e(document).scrollLeft()+s.scrollSpeed)))),n!==!1&&e.ui.ddmanager&&!s.dropBehaviour&&e.ui.ddmanager.prepareOffsets(i,t)}}),e.ui.plugin.add("draggable","snap",{start:function(){var t=e(this).data("ui-draggable"),i=t.options;t.snapElements=[],e(i.snap.constructor!==String?i.snap.items||":data(ui-draggable)":i.snap).each(function(){var i=e(this),s=i.offset();this!==t.element[0]&&t.snapElements.push({item:this,width:i.outerWidth(),height:i.outerHeight(),top:s.top,left:s.left})})},drag:function(t,i){var s,n,a,o,r,h,l,u,c,d,p=e(this).data("ui-draggable"),f=p.options,m=f.snapTolerance,g=i.offset.left,v=g+p.helperProportions.width,y=i.offset.top,b=y+p.helperProportions.height;for(c=p.snapElements.length-1;c>=0;c--)r=p.snapElements[c].left,h=r+p.snapElements[c].width,l=p.snapElements[c].top,u=l+p.snapElements[c].height,r-m>v||g>h+m||l-m>b||y>u+m||!e.contains(p.snapElements[c].item.ownerDocument,p.snapElements[c].item)?(p.snapElements[c].snapping&&p.options.snap.release&&p.options.sn
 ap.release.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(s=m>=Math.abs(l-b),n=m>=Math.abs(u-y),a=m>=Math.abs(r-v),o=m>=Math.abs(h-g),s&&(i.position.top=p._convertPositionTo("relative",{top:l-p.helperProportions.height,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r-p.helperProportions.width}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h}).left-p.margins.left)),d=s||n||a||o,"outer"!==f.snapMode&&(s=m>=Math.abs(l-y),n=m>=Math.abs(u-b),a=m>=Math.abs(r-g),o=m>=Math.abs(h-v),s&&(i.position.top=p._convertPositionTo("relative",{top:l,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u-p.helperProportions.height,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r}
 ).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h-p.helperProportions.width}).left-p.margins.left)),!p.snapElements[c].snapping&&(s||n||a||o||d)&&p.options.snap.snap&&p.options.snap.snap.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=s||n||a||o||d)}}),e.ui.plugin.add("draggable","stack",{start:function(){var t,i=this.data("ui-draggable").options,s=e.makeArray(e(i.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});s.length&&(t=parseInt(e(s[0]).css("zIndex"),10)||0,e(s).each(function(i){e(this).css("zIndex",t+i)}),this.css("zIndex",t+s.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("zIndex")&&(n._zIndex=s.css("zIndex")),s.css("zIndex",n.zIndex)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._zIndex&&e(i.helper).css("zIndex",s._zIndex)
 }})})(jQuery);(function(e){function t(e,t,i){return e>t&&t+i>e}e.widget("ui.droppable",{version:"1.10.4",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],undefined):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},e.ui.ddmanager.droppables[i.scope]=e.ui.ddmanager.droppables[i.scope]||[],e.ui.ddmanager.droppables[i.scope].push(this),i.addClasses&&this.element.addClass("ui-droppable")},_destroy:function(){for(var t=0,i=e.ui.ddmanager.droppables[this.options.scope];i.length>t;t++)i[t]===this&&i.splice(t,1);this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){"accept"===t&&(t
 his.accept=e.isFunction(i)?i:function(e){return e.is(i)}),e.Widget.prototype._setOption.apply(this,arguments)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_dro
 p:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=e.data(this,"ui-droppable");return t.options.greedy&&!t.options.disabled&&t.options.scope===s.options.scope&&t.accept.call(t.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(t,{offset:t.element.offset()}),t.options.tolerance)?(n=!0,!1):undefined}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(e,i,s){if(!i.offset)return!1;var n,a,o=(e.positionAbs||e.position.absolute).left,r=(e.positionAbs||e.position.abs
 olute).top,h=o+e.helperProportions.width,l=r+e.helperProportions.height,u=i.offset.left,c=i.offset.top,d=u+i.proportions().width,p=c+i.proportions().height;switch(s){case"fit":return o>=u&&d>=h&&r>=c&&p>=l;case"intersect":return o+e.helperProportions.width/2>u&&d>h-e.helperProportions.width/2&&r+e.helperProportions.height/2>c&&p>l-e.helperProportions.height/2;case"pointer":return n=(e.positionAbs||e.position.absolute).left+(e.clickOffset||e.offset.click).left,a=(e.positionAbs||e.position.absolute).top+(e.clickOffset||e.offset.click).top,t(a,c,i.proportions().height)&&t(n,u,i.proportions().width);case"touch":return(r>=c&&p>=r||l>=c&&p>=l||c>r&&l>p)&&(o>=u&&d>=o||h>=u&&d>=h||u>o&&h>d);default:return!1}},e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].
 accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.d
 dmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e.data(this,"ui-droppable").options.scope===n}),a.length&&(s=e.data(a[0],"ui-droppable"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}}})(jQuery);(function(e){function t(e){return parseInt(e,10)||0}function i(e){return!isNaN(parseInt(e,10))}e.widget("ui.resizable"
 ,e.ui.mouse,{version:"1.10.4",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-re
 sizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&
 &(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=e(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(f
 unction(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalEle
 ment),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(i){var s,n,a,o=this.options,r=this.element.position(),h=this.element;return this.resizing=!0,/absolute/.test(h.css("position"))?h.css({position:"absolute",top:h.css("top"),left:h.css("left")}):h.is(".ui-draggable")&&h.css({position:"absolute",top:r.top,left:r.left}),this._renderProxy(),s=t(this.helper.css("left")),n=t(this.helper.css("top")),o.containment&&(s+=e(o.containment).scrollLeft()||0,n+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:n},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:h.width(),height:h.height()},this.originalSize=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalPosition={left:s,top:n},this.sizeDiff={width:h.outerWidth()-h.wi
 dth(),height:h.outerHeight()-h.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,a=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===a?this.axis+"-resize":a),h.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(t){var i,s=this.helper,n={},a=this.originalMousePosition,o=this.axis,r=this.position.top,h=this.position.left,l=this.size.width,u=this.size.height,c=t.pageX-a.left||0,d=t.pageY-a.top||0,p=this._change[o];return p?(i=p.apply(this,[t,c,d]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),this.position.top!==r&&(n.top=this.position.top+"px"),this.position.left!==h&&(n.left=this.position.left+"px"),this.size.width!==l&&(n.width=this.size.width+"px"),this.size.height!==u&
 &(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(n)||this._trigger("resize",t,this.ui()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&e.ui.hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_up
 dateVirtualBoundaries:function(e){var t,s,n,a,o,r=this.options;o={minWidth:i(r.minWidth)?r.minWidth:0,maxWidth:i(r.maxWidth)?r.maxWidth:1/0,minHeight:i(r.minHeight)?r.minHeight:0,maxHeight:i(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||e)&&(t=o.minHeight*this.aspectRatio,n=o.minWidth/this.aspectRatio,s=o.maxHeight*this.aspectRatio,a=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),n>o.minHeight&&(o.minHeight=n),o.maxWidth>s&&(o.maxWidth=s),o.maxHeight>a&&(o.maxHeight=a)),this._vBoundaries=o},_updateCache:function(e){this.offset=this.helper.offset(),i(e.left)&&(this.position.left=e.left),i(e.top)&&(this.position.top=e.top),i(e.height)&&(this.size.height=e.height),i(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,s=this.size,n=this.axis;return i(e.height)?e.width=e.height*this.aspectRatio:i(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===n&&(e.left=t.left+(s.width-e.width),e.top=null),"nw"===n&&(e.top=t.top+(s.height-e.height),e.left
 =t.left+(s.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,s=this.axis,n=i(e.width)&&t.maxWidth&&t.maxWidth<e.width,a=i(e.height)&&t.maxHeight&&t.maxHeight<e.height,o=i(e.width)&&t.minWidth&&t.minWidth>e.width,r=i(e.height)&&t.minHeight&&t.minHeight>e.height,h=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,u=/sw|nw|w/.test(s),c=/nw|ne|n/.test(s);return o&&(e.width=t.minWidth),r&&(e.height=t.minHeight),n&&(e.width=t.maxWidth),a&&(e.height=t.maxHeight),o&&u&&(e.left=h-t.minWidth),n&&u&&(e.left=h-t.maxWidth),r&&c&&(e.top=l-t.minHeight),a&&c&&(e.top=l-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var e,t,i,s,n,a=this.helper||this.element;for(e=0;this._proportionallyResizeElements.length>e;e++){if(n=this._proportionallyResizeElements[e],!this.borderDif)for(this.borderDif=[],i=[n.css("bor
 derTopWidth"),n.css("borderRightWidth"),n.css("borderBottomWidth"),n.css("borderLeftWidth")],s=[n.css("paddingTop"),n.css("paddingRight"),n.css("paddingBottom"),n.css("paddingLeft")],t=0;i.length>t;t++)this.borderDif[t]=(parseInt(i[t],10)||0)+(parseInt(s[t],10)||0);n.css({height:a.height()-this.borderDif[0]-this.borderDif[2]||0,width:a.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.lef
 t+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop
 :function(t){var i=e(this).data("ui-resizable"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&e.ui.hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var i,s,n,a,o,r,h,l=e(this).data("ui-resizable"),u=l.options,c=l.element,d=u.containment,p=d instanceof e?d.g
 et(0):/parent/.test(d)?c.parent().get(0):d;p&&(l.containerElement=e(p),/document/.test(d)||d===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(i=e(p),s=[],e(["Top","Right","Left","Bottom"]).each(function(e,n){s[e]=t(i.css("padding"+n))}),l.containerOffset=i.offset(),l.containerPosition=i.position(),l.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},n=l.containerOffset,a=l.containerSize.height,o=l.containerSize.width,r=e.ui.hasScroll(p,"left")?p.scrollWidth:o,h=e.ui.hasScroll(p)?p.scrollHeight:a,l.parentData={element:p,left:n.left,top:n.top,width:r,height:h}))},resize:function(t){var i,s,n,a,o=e(this).data("ui-resizable"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,c={top:0,left:0},d=o.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(c=h),l.lef
 t<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-c.left),u&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?h.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,i=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),s=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-h.top)+o.sizeDiff.height),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a&&(i-=Math.abs(o.parentData.left)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width
 =o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:functi
 on(t,i){var s=e(this).data("ui-resizable"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typ
 eof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size,n=t.originalSize,a=t.originalPosition,o=t.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=r[0]||1,l=r[1]||1,u=Math.round((s.width-n.width)/h)*h,c=Math.round((s.height-n.height)/l)*l,d=n.width+u,p=n.height+c,f=i.maxWidth&&d>i.maxWidth,m=i.maxHeight&&p>i.maxHeight,g=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=r,g&&(d+=h),v&&(p+=l),f&&(d-=h),m&&(p-=l),/^(se|s|e)$/.test(o)?(t.size.width=d,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.top=a.top-c):/^(sw)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.left=a.left-u):(p
 -l>0?(t.size.height=p,t.position.top=a.top-c):(t.size.height=l,t.position.top=a.top+n.height-l),d-h>0?(t.size.width=d,t.position.left=a.left-u):(t.size.width=h,t.position.left=a.left+n.width-h))}})})(jQuery);(function(e){e.widget("ui.selectable",e.ui.mouse,{version:"1.10.4",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(
 ),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$eleme
 nt.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):undefined}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i
 .selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.sele
 cting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}})})(jQuery);(function(e){function t(e,t,i){return e>t&&t+i>e}function i(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))}e.widget("ui.sortable",e.ui.mouse,{version:"1.10.4",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.l
 ength?"x"===e.axis||i(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_setOption:function(t,i){"disabled"===t?(this.options[t]=i,this.widget().toggleClass("ui-sortable-disabled",!!i)):e.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):undefined}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mou
 seStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&
 &(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,
 s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-e(document).scrollTop()<o.scrollSensitivity?r=e(document).scrollTop(e(document).scrollTop()-o.scrollSpeed):e(
 window).height()-(t.pageY-e(document).scrollTop())<o.scrollSensitivity&&(r=e(document).scrollTop(e(document).scrollTop()+o.scrollSpeed)),t.pageX-e(document).scrollLeft()<o.scrollSensitivity?r=e(document).scrollLeft(e(document).scrollLeft()-o.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<o.scrollSensitivity&&(r=e(document).scrollLeft(e(document).scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.ty
 pe?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:func
 tion(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attr
 ibute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,c="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||t+u>a&&o>t+u,p=c&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProport
 ions.height/2},_intersectsWithPointer:function(e){var i="x"===this.options.axis||t(this.positionAbs.top+this.offset.click.top,e.top,e.height),s="y"===this.options.axis||t(this.positionAbs.left+this.offset.click.left,e.left,e.width),n=i&&s,a=this._getDragVerticalDirection(),o=this._getDragHorizontalDirection();return n?this.floating?o&&"right"===o||"down"===a?2:1:a&&("down"===a?2:1):!1},_intersectsWithSides:function(e){var i=t(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),s=t(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return this.floating&&a?"right"===a&&s||"left"===a&&!s:n&&("down"===n&&i||"up"===n&&!i)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:fu
 nction(e){return this._refreshItems(e),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.item
 s,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,c=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=e(d[i]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(c.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=c.length-1;i>=0;i--)for(o=c[i][1],r=c[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],
 s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].classNam
 e+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?t.currentItem.children().each(function(){e("<td>&#160;</td>",t.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_contactContainers:function(s){var n,a,o,r,h,l,u,c,d,p,f=null,m=null;for(n=this.containers.length-1;n>=0;n--)if(!e.contains(this.currentItem[0],this.containers[n].element[0]))if(this._intersectsWith(this.c
 ontainers[n].containerCache)){if(f&&e.contains(this.containers[n].element[0],f.element[0]))continue;f=this.containers[n],m=n}else this.containers[n].containerCache.over&&(this.containers[n]._trigger("out",s,this._uiHash(this)),this.containers[n].containerCache.over=0);if(f)if(1===this.containers.length)this.containers[m].containerCache.over||(this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1);else{for(o=1e4,r=null,p=f.floating||i(this.currentItem),h=p?"left":"top",l=p?"width":"height",u=this.positionAbs[h]+this.offset.click[h],a=this.items.length-1;a>=0;a--)e.contains(this.containers[m].element[0],this.items[a].item[0])&&this.items[a].item[0]!==this.currentItem[0]&&(!p||t(this.positionAbs.top+this.offset.click.top,this.items[a].top,this.items[a].height))&&(c=this.items[a].item.offset()[h],d=!1,Math.abs(c-u)>Math.abs(c+this.items[a][l]-u)&&(d=!0,c+=this.items[a][l]),o>Math.abs(c-u)&&(o=Math.abs(c-u),r=this.items[a],this.direction=d?"up"
 :"down"));if(!r&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[m])return;r?this._rearrange(s,r,null,!0):this._rearrange(s,null,this.containers[m].element,!0),this._trigger("change",s,this._uiHash()),this.containers[m]._trigger("change",s,this._uiHash(this)),this.currentContainer=this.containers[m],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.c
 ss("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tag
 Name&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-
 this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,e("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(e("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(
 t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPositio
 n||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.l
 eft<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.curren
 tItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCach
 e.over&&(n.push(i("out",this,this.containers[s])),this.conta

<TRUNCATED>

[36/50] [abbrv] incubator-nifi git commit: NIFI-27: - Upgrading jQuery and jQuery UI. - Replacing all instances of Deferred.then with Deferred.done/fail due to API change introduced in 1.8. - Restoring line returns between public methods. - Upgrading jqu

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-common.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-common.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-common.js
index 9e2514c..cdc3ea7 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-common.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-common.js
@@ -72,14 +72,17 @@ nf.Common = {
             }
         }
     },
+    
     /**
      * Determines if the current broswer supports SVG.
      */
     SUPPORTS_SVG: !!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect,
+    
     /**
      * The authorities for the current user.
      */
     authorities: undefined,
+    
     /**
      * Sets the authorities for the current user.
      * 
@@ -88,6 +91,7 @@ nf.Common = {
     setAuthorities: function (roles) {
         nf.Common.authorities = roles;
     },
+    
     /**
      * Loads a script at the specified URL. Supports caching the script on the browser.
      * 
@@ -100,6 +104,7 @@ nf.Common = {
             url: url
         });
     },
+    
     /**
      * Determines whether the current user can access provenance.
      * 
@@ -117,6 +122,7 @@ nf.Common = {
         }
         return canAccessProvenance;
     },
+    
     /**
      * Returns whether or not the current user is a DFM.
      */
@@ -132,6 +138,7 @@ nf.Common = {
         }
         return dfm;
     },
+    
     /**
      * Returns whether or not the current user is a DFM.
      */
@@ -147,6 +154,7 @@ nf.Common = {
         }
         return admin;
     },
+    
     /**
      * Adds a mouse over effect for the specified selector using
      * the specified styles.
@@ -163,6 +171,7 @@ nf.Common = {
         });
         return $(selector).addClass(normalStyle);
     },
+    
     /**
      * Method for handling ajax errors.
      * 
@@ -237,6 +246,7 @@ nf.Common = {
             nf.Common.closeCanvas();
         }
     },
+    
     /**
      * Closes the canvas by removing the splash screen and stats poller.
      */
@@ -256,6 +266,7 @@ nf.Common = {
             nf.Canvas.stopStatusPolling();
         }
     },
+    
     /**
      * Populates the specified field with the specified value. If the value is 
      * undefined, the field will read 'No value set.' If the value is an empty
@@ -273,6 +284,7 @@ nf.Common = {
             return $('#' + target).text(value);
         }
     },
+    
     /**
      * Clears the specified field. Removes any style that may have been applied
      * by a preceeding call to populateField.
@@ -282,6 +294,7 @@ nf.Common = {
     clearField: function (target) {
         return $('#' + target).removeClass('unset blank').text('');
     },
+    
     /**
      * Formats the tooltip for the specified property.
      * 
@@ -321,6 +334,7 @@ nf.Common = {
             return null;
         }
     },
+    
     /**
      * Formats the specified property (name and value) accordingly.
      * 
@@ -330,6 +344,7 @@ nf.Common = {
     formatProperty: function (name, value) {
         return '<div><span class="label">' + nf.Common.formatValue(name) + ': </span>' + nf.Common.formatValue(value) + '</div>';
     },
+    
     /**
      * Formats the specified value accordingly.
      * 
@@ -346,6 +361,7 @@ nf.Common = {
             return '<span class="unset">No value set</span>';
         }
     },
+    
     /**
      * HTML escapes the specified string. If the string is null 
      * or undefined, an empty string is returned.
@@ -372,6 +388,7 @@ nf.Common = {
             }
         };
     }()),
+    
     /**
      * Creates a form inline in order to submit the specified params to the specified URL
      * using the specified method.
@@ -407,6 +424,7 @@ nf.Common = {
             window.onbeforeunload = previousBeforeUnload;
         }
     },
+    
     /**
      * Formats the specified array as an unordered list. If the array is not an 
      * array, null is returned.
@@ -429,6 +447,7 @@ nf.Common = {
             return null;
         }
     },
+    
     /**
      * Extracts the contents of the specified str after the strToFind. If the
      * strToFind is not found or the last part of the str, an empty string is
@@ -448,6 +467,7 @@ nf.Common = {
         }
         return result;
     },
+    
     /**
      * Updates the mouse pointer.
      * 
@@ -461,6 +481,7 @@ nf.Common = {
             $('#' + domId).removeClass('pointer');
         }
     },
+    
     /**
      * Constants for time duration formatting.
      */
@@ -468,6 +489,7 @@ nf.Common = {
     MILLIS_PER_HOUR: 3600000,
     MILLIS_PER_MINUTE: 60000,
     MILLIS_PER_SECOND: 1000,
+    
     /**
      * Formats the specified duration.
      * 
@@ -515,6 +537,7 @@ nf.Common = {
             return time;
         }
     },
+    
     /**
      * Constants for formatting data size.
      */
@@ -522,6 +545,7 @@ nf.Common = {
     BYTES_IN_MEGABYTE: 1048576,
     BYTES_IN_GIGABYTE: 1073741824,
     BYTES_IN_TERABYTE: 1099511627776,
+    
     /**
      * Formats the specified number of bytes into a human readable string.
      * 
@@ -556,6 +580,7 @@ nf.Common = {
         // default to bytes
         return parseFloat(dataSize).toFixed(2) + " bytes";
     },
+    
     /**
      * Formats the specified integer as a string (adding commas). At this
      * point this does not take into account any locales.
@@ -570,6 +595,7 @@ nf.Common = {
         }
         return string;
     },
+    
     /**
      * Formats the specified float using two demical places.
      * 
@@ -581,6 +607,7 @@ nf.Common = {
         }
         return f.toFixed(2) + '';
     },
+    
     /**
      * Pads the specified value to the specified width with the specified character.
      * If the specified value is already wider than the specified width, the original
@@ -601,6 +628,7 @@ nf.Common = {
 
         return s;
     },
+    
     /**
      * Formats the specified DateTime.
      * 
@@ -622,6 +650,7 @@ nf.Common = {
                 '.' +
                 nf.Common.pad(date.getMilliseconds(), 3, '0');
     },
+    
     /**
      * Parses the specified date time into a Date object. The resulting
      * object does not account for timezone and should only be used for
@@ -667,6 +696,7 @@ nf.Common = {
             return new Date(parseInt(date[2], 10), parseInt(date[0], 10), parseInt(date[1], 10), parseInt(time[0], 10), parseInt(time[1], 10), parseInt(time[2], 10), 0);
         }
     },
+    
     /**
      * Parses the specified duration and returns the total number of millis.
      * 
@@ -689,6 +719,7 @@ nf.Common = {
             return new Date(1970, 0, 1, parseInt(duration[0], 10), parseInt(duration[1], 10), parseInt(duration[2], 10), 0).getTime();
         }
     },
+    
     /**
      * Parses the specified size.
      * 
@@ -712,6 +743,7 @@ nf.Common = {
             return size;
         }
     },
+    
     /**
      * Parses the specified count.
      * 
@@ -736,6 +768,7 @@ nf.Common = {
         }
         return intCount;
     },
+    
     /**
      * Determines if the specified object is defined and not null.
      * 
@@ -744,6 +777,7 @@ nf.Common = {
     isDefinedAndNotNull: function (obj) {
         return !nf.Common.isUndefined(obj) && !nf.Common.isNull(obj);
     },
+    
     /**
      * Determines if the specified object is undefined or null.
      * 
@@ -752,6 +786,7 @@ nf.Common = {
     isUndefinedOrNull: function (obj) {
         return nf.Common.isUndefined(obj) || nf.Common.isNull(obj);
     },
+    
     /**
      * Determines if the specified object is undefined.
      * 
@@ -760,6 +795,7 @@ nf.Common = {
     isUndefined: function (obj) {
         return typeof obj === 'undefined';
     },
+    
     /**
      * Determines whether the specified string is blank (or null or undefined).
      * 
@@ -768,6 +804,7 @@ nf.Common = {
     isBlank: function (str) {
         return nf.Common.isUndefined(str) || nf.Common.isNull(str) || $.trim(str) === '';
     },
+    
     /**
      * Determines if the specified object is null.
      * 
@@ -776,6 +813,7 @@ nf.Common = {
     isNull: function (obj) {
         return obj === null;
     },
+    
     /**
      * Determines if the specified array is empty. If the specified arg is not an
      * array, then true is returned.
@@ -785,6 +823,7 @@ nf.Common = {
     isEmpty: function (arr) {
         return $.isArray(arr) ? arr.length === 0 : true;
     },
+    
     /**
      * Determines if these are the same bulletins. If both arguments are not
      * arrays, false is returned.
@@ -809,6 +848,7 @@ nf.Common = {
         }
         return false;
     },
+    
     /**
      * Formats the specified bulletin list.
      * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-connection-details.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-connection-details.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-connection-details.js
index bffcf5e..4ba2a1d 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-connection-details.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-connection-details.js
@@ -47,7 +47,7 @@ nf.ConnectionDetails = (function () {
             type: 'GET',
             url: '../nifi-api/controller/process-groups/' + encodeURIComponent(groupId) + '/processors/' + encodeURIComponent(source.id),
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             var processor = response.processor;
             var processorName = $('<div class="label"></div>').text(processor.name);
             var processorType = $('<div></div>').text(nf.Common.substringAfterLast(processor.type, '.'));
@@ -124,7 +124,7 @@ nf.ConnectionDetails = (function () {
                         verbose: true
                     },
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     var processGroup = response.processGroup;
 
                     // populate source port details
@@ -133,7 +133,7 @@ nf.ConnectionDetails = (function () {
                     $('#read-only-connection-source-group-name').text(processGroup.name);
 
                     deferred.resolve();
-                }, function () {
+                }).fail(function () {
                     deferred.reject();
                 });
             }
@@ -172,7 +172,7 @@ nf.ConnectionDetails = (function () {
                 type: 'GET',
                 url: '../nifi-api/controller/process-groups/' + encodeURIComponent(groupId) + '/processors/' + encodeURIComponent(destination.id),
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var processor = response.processor;
                 var processorName = $('<div class="label"></div>').text(processor.name);
                 var processorType = $('<div></div>').text(nf.Common.substringAfterLast(processor.type, '.'));
@@ -183,7 +183,7 @@ nf.ConnectionDetails = (function () {
                 $('#read-only-connection-target-group-name').text(groupName);
 
                 deferred.resolve();
-            }, function () {
+            }).fail(function () {
                 deferred.reject();
             });
         }).promise();
@@ -254,7 +254,7 @@ nf.ConnectionDetails = (function () {
                         verbose: true
                     },
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     var processGroup = response.processGroup;
 
                     // populate destination port details
@@ -263,7 +263,7 @@ nf.ConnectionDetails = (function () {
                     $('#read-only-connection-target-group-name').text(processGroup.name);
 
                     deferred.resolve();
-                }, function () {
+                }).fail(function () {
                     deferred.reject();
                 });
             }
@@ -346,6 +346,7 @@ nf.ConnectionDetails = (function () {
                 }
             });
         },
+        
         /**
          * Shows the details for the specified edge.
          * 
@@ -368,7 +369,7 @@ nf.ConnectionDetails = (function () {
             });
 
             // populate the dialog once get have all necessary details
-            $.when(groupXhr, connectionXhr).then(function (groupResult, connectionResult) {
+            $.when(groupXhr, connectionXhr).done(function (groupResult, connectionResult) {
                 var groupResponse = groupResult[0];
                 var connectionResponse = connectionResult[0];
 
@@ -453,7 +454,7 @@ nf.ConnectionDetails = (function () {
                         }
                     });
                 }
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         }
     };
 }());
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-dialog.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-dialog.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-dialog.js
index b474f2b..174f8bd 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-dialog.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-dialog.js
@@ -78,6 +78,7 @@ nf.Dialog = (function () {
             // show the dialog
             $('#nf-ok-dialog').modal('setHeaderText', options.headerText).modal('setOverlayBackground', options.overlayBackground).modal('show');
         },
+        
         /**
          * Shows an general dialog with Yes and No buttons populated with the
          * specified dialog content.

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-processor-details.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-processor-details.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-processor-details.js
index b4c1da9..480a380 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-processor-details.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-processor-details.js
@@ -381,6 +381,7 @@ nf.ProcessorDetails = (function () {
                 }
             });
         },
+        
         /**
          * Shows the details for the specified processor.
          * 
@@ -508,7 +509,7 @@ nf.ProcessorDetails = (function () {
             });
 
             // show the dialog once we have the processor and its history
-            $.when(getProcessor, getProcessorHistory).then(function (response) {
+            $.when(getProcessor, getProcessorHistory).done(function (response) {
                 var processorResponse = response[0];
                 var processor = processorResponse.processor;
 
@@ -549,7 +550,7 @@ nf.ProcessorDetails = (function () {
                 if (processorRelationships.is(':visible') && processorRelationships.get(0).scrollHeight > processorRelationships.innerHeight()) {
                     processorRelationships.css('border-width', '1px');
                 }
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 if (xhr.status === 400 || xhr.status === 404 || xhr.status === 409) {
                     nf.Dialog.showOkDialog({
                         dialogContent: nf.Common.escapeHtml(xhr.responseText),

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-shell.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-shell.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-shell.js
index 5c52f8f..b0793a9 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-shell.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-shell.js
@@ -100,6 +100,7 @@ nf.Shell = (function () {
                 });
             }).promise();
         },
+        
         /**
          * Shows the specified content in the shell. When the shell is closed, the content
          * will be hidden and returned to its previous location in the dom.

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-status-history.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-status-history.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-status-history.js
index 178207e..c75728b 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-status-history.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-status-history.js
@@ -1175,6 +1175,7 @@ nf.StatusHistory = (function () {
                 instances = null;
             });
         },
+        
         /**
          * Shows the status history for the specified connection across the cluster.
          * 
@@ -1187,10 +1188,11 @@ nf.StatusHistory = (function () {
                 type: 'GET',
                 url: config.urls.clusterConnection + encodeURIComponent(connectionId) + '/status/history',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 handleClusteredStatusHistoryResponse(groupId, connectionId, response.clusterStatusHistory, config.type.connection, selectedDescriptor);
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows the status history for the specified processor across the cluster.
          * 
@@ -1203,10 +1205,11 @@ nf.StatusHistory = (function () {
                 type: 'GET',
                 url: config.urls.clusterProcessor + encodeURIComponent(processorId) + '/status/history',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 handleClusteredStatusHistoryResponse(groupId, processorId, response.clusterStatusHistory, config.type.processor, selectedDescriptor);
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows the status history for the specified process group across the cluster.
          * 
@@ -1219,10 +1222,11 @@ nf.StatusHistory = (function () {
                 type: 'GET',
                 url: config.urls.clusterProcessGroup + encodeURIComponent(processGroupId) + '/status/history',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 handleClusteredStatusHistoryResponse(groupId, processGroupId, response.clusterStatusHistory, config.type.processGroup, selectedDescriptor);
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows the status history for the specified remote process group across the cluster.
          * 
@@ -1235,10 +1239,11 @@ nf.StatusHistory = (function () {
                 type: 'GET',
                 url: config.urls.clusterRemoteProcessGroup + encodeURIComponent(remoteProcessGroupId) + '/status/history',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 handleClusteredStatusHistoryResponse(groupId, remoteProcessGroupId, response.clusterStatusHistory, config.type.remoteProcessGroup, selectedDescriptor);
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows the status history for the specified connection in this instance.
          * 
@@ -1251,10 +1256,11 @@ nf.StatusHistory = (function () {
                 type: 'GET',
                 url: config.urls.processGroups + encodeURIComponent(groupId) + '/connections/' + encodeURIComponent(connectionId) + '/status/history',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 handleStandaloneStatusHistoryResponse(groupId, connectionId, response.statusHistory, config.type.connection, selectedDescriptor);
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows the status history for the specified processor in this instance.
          * 
@@ -1267,10 +1273,11 @@ nf.StatusHistory = (function () {
                 type: 'GET',
                 url: config.urls.processGroups + encodeURIComponent(groupId) + '/processors/' + encodeURIComponent(processorId) + '/status/history',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 handleStandaloneStatusHistoryResponse(groupId, processorId, response.statusHistory, config.type.processor, selectedDescriptor);
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows the status history for the specified process group in this instance.
          * 
@@ -1283,10 +1290,11 @@ nf.StatusHistory = (function () {
                 type: 'GET',
                 url: config.urls.processGroups + encodeURIComponent(processGroupId) + '/status/history',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 handleStandaloneStatusHistoryResponse(groupId, processGroupId, response.statusHistory, config.type.processGroup, selectedDescriptor);
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows the status history for the specified remote process group in this instance.
          * 
@@ -1299,9 +1307,9 @@ nf.StatusHistory = (function () {
                 type: 'GET',
                 url: config.urls.processGroups + encodeURIComponent(groupId) + '/remote-process-groups/' + encodeURIComponent(remoteProcessGroupId) + '/status/history',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 handleStandaloneStatusHistoryResponse(groupId, remoteProcessGroupId, response.statusHistory, config.type.remoteProcessGroup, selectedDescriptor);
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         }
     };
 }());
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-lineage.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-lineage.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-lineage.js
index 1a32514..1f05caa 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-lineage.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-lineage.js
@@ -864,12 +864,12 @@ nf.ProvenanceLineage = (function () {
 
                                 // polls for the event lineage
                                 var pollLineage = function (nextDelay) {
-                                    getLineage(lineage).then(function (response) {
+                                    getLineage(lineage).done(function (response) {
                                         lineage = response.lineage;
 
                                         // process the lineage, if its not done computing wait delay seconds before checking again
                                         processLineage(nextDelay);
-                                    }, closeDialog);
+                                    }).fail(closeDialog);
                                 };
 
                                 // processes the event lineage
@@ -929,12 +929,12 @@ nf.ProvenanceLineage = (function () {
                                 };
 
                                 // once the query is submitted wait until its finished
-                                submitLineage(lineageRequest).then(function (response) {
+                                submitLineage(lineageRequest).done(function (response) {
                                     lineage = response.lineage;
 
                                     // process the lineage, if its not done computing wait 1 second before checking again
                                     processLineage(1);
-                                }, closeDialog);
+                                }).fail(closeDialog);
                             };
 
                             // handles updating the lineage graph
@@ -1284,6 +1284,7 @@ nf.ProvenanceLineage = (function () {
 
             initLineageQueryDialog();
         },
+        
         /**
          * Shows the lineage for the specified flowfile uuid.
          * 
@@ -1347,12 +1348,12 @@ nf.ProvenanceLineage = (function () {
             // polls the server for the status of the lineage, if the lineage is not
             // done wait nextDelay seconds before trying again
             var pollLineage = function (nextDelay) {
-                getLineage(lineage).then(function (response) {
+                getLineage(lineage).done(function (response) {
                     lineage = response.lineage;
 
                     // process the lineage, if its not done computing wait delay seconds before checking again
                     processLineage(nextDelay);
-                }, closeDialog);
+                }).fail(closeDialog);
             };
 
             var processLineage = function (delay) {
@@ -1401,12 +1402,12 @@ nf.ProvenanceLineage = (function () {
             };
 
             // once the query is submitted wait until its finished
-            submitLineage(lineageRequest).then(function (response) {
+            submitLineage(lineageRequest).done(function (response) {
                 lineage = response.lineage;
 
                 // process the results, if they are not done wait 1 second before trying again
                 processLineage(1);
-            }, closeDialog);
+            }).fail(closeDialog);
         }
     };
 }());
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-table.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-table.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-table.js
index 9b4dc96..bcd0fce 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-table.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-table.js
@@ -49,15 +49,15 @@ nf.ProvenanceTable = (function () {
     var loadLineageCapabilities = function () {
         return $.Deferred(function (deferred) {
             if (nf.Common.SUPPORTS_SVG) {
-                nf.Common.cachedScript(config.urls.d3Script).then(function () {
-                    nf.Common.cachedScript(config.urls.lineageScript).then(function () {
+                nf.Common.cachedScript(config.urls.d3Script).done(function () {
+                    nf.Common.cachedScript(config.urls.lineageScript).done(function () {
                         // initialize the lineage graph
                         nf.ProvenanceLineage.init();
                         deferred.resolve();
-                    }, function () {
+                    }).fail(function () {
                         deferred.reject();
                     });
-                }, function () {
+                }).fail(function () {
                     deferred.reject();
                 });
             } else {
@@ -210,12 +210,12 @@ nf.ProvenanceTable = (function () {
                     url: config.urls.replays,
                     data: parameters,
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     nf.Dialog.showOkDialog({
                         dialogContent: 'Successfully submitted replay request.',
                         overlayBackground: false
                     });
-                }, nf.Common.handleAjaxError);
+                }).fail(nf.Common.handleAjaxError);
 
                 $('#event-details-dialog').modal('hide');
             });
@@ -294,7 +294,7 @@ nf.ProvenanceTable = (function () {
                 type: 'GET',
                 url: config.urls.cluster,
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var cluster = response.cluster;
                 var nodes = cluster.nodes;
 
@@ -323,7 +323,7 @@ nf.ProvenanceTable = (function () {
                 $('#provenance-search-location').combo({
                     options: searchableOptions
                 });
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
 
             // show the node search combo
             $('#provenance-search-location-container').show();
@@ -888,23 +888,26 @@ nf.ProvenanceTable = (function () {
          * The max delay between requests.
          */
         MAX_DELAY: 4,
+        
         /**
          * The server time offset
          */
         serverTimeOffset: null,
+        
         /**
          * Initializes the provenance table. Returns a deferred that will indicate when/if the table has initialized successfully.
          * 
          * @param {boolean} isClustered     Whether or not this instance is clustered
          */
         init: function (isClustered) {
-            return loadLineageCapabilities().then(function () {
+            return loadLineageCapabilities().done(function () {
                 initDetailsDialog();
                 initProvenanceQueryDialog();
                 initSearchDialog(isClustered);
                 initProvenanceTable(isClustered);
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Goes to the specified component if possible.
          * 
@@ -929,6 +932,7 @@ nf.ProvenanceTable = (function () {
                 }
             }
         },
+        
         /**
          * Update the size of the grid based on its container's current size.
          */
@@ -938,6 +942,7 @@ nf.ProvenanceTable = (function () {
                 provenanceGrid.resizeCanvas();
             }
         },
+        
         /**
          * Updates the value of the specified progress bar.
          * 
@@ -953,6 +958,7 @@ nf.ProvenanceTable = (function () {
             var label = $('<div class="progress-label"></div>').text(value + '%');
             progressBar.progressbar('value', value).append(label);
         },
+        
         /**
          * Loads the provenance table with events according to the specified optional 
          * query. If not query is specified or it is empty, the most recent entries will
@@ -1025,13 +1031,13 @@ nf.ProvenanceTable = (function () {
             // polls the server for the status of the provenance, if the provenance is not
             // done wait nextDelay seconds before trying again
             var pollProvenance = function (nextDelay) {
-                getProvenance(provenance).then(function (response) {
+                getProvenance(provenance).done(function (response) {
                     // update the provenance
                     provenance = response.provenance;
 
                     // process the provenance
                     processProvenanceResponse(nextDelay);
-                }, closeDialog);
+                }).fail(closeDialog);
             };
 
             // processes the provenance, if the provenance is not done wait delay 
@@ -1079,14 +1085,15 @@ nf.ProvenanceTable = (function () {
             };
 
             // once the query is submitted wait until its finished
-            submitProvenance(query).then(function (response) {
+            submitProvenance(query).done(function (response) {
                 // update the provenance
                 provenance = response.provenance;
 
                 // process the results, if they are not done wait 1 second before trying again
                 processProvenanceResponse(1);
-            }, closeDialog);
+            }).fail(closeDialog);
         },
+        
         /**
          * Shows the lineage for the event in the specified row.
          * 
@@ -1100,6 +1107,7 @@ nf.ProvenanceTable = (function () {
                 nf.ProvenanceLineage.showLineage(item.flowFileUuid, item.eventId.toString(), item.clusterNodeId);
             }
         },
+        
         /**
          * Gets the event details and shows the details dialog.
          * 
@@ -1115,6 +1123,7 @@ nf.ProvenanceTable = (function () {
                 nf.ProvenanceTable.showEventDetails(event);
             }
         },
+        
         /**
          * Shows the details for the specified action.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance.js
index 6d61829..33338a5 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance.js
@@ -47,10 +47,10 @@ nf.Provenance = (function () {
             $.ajax({
                 type: 'HEAD',
                 url: config.urls.cluster
-            }).then(function () {
+            }).done(function () {
                 isClustered = true;
                 deferred.resolve();
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 if (xhr.status === 404) {
                     isClustered = false;
                     deferred.resolve();
@@ -70,7 +70,7 @@ nf.Provenance = (function () {
             type: 'GET',
             url: config.urls.config,
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             var config = response.config;
 
             // store the controller name
@@ -80,7 +80,7 @@ nf.Provenance = (function () {
             if (!nf.Common.isBlank(config.contentViewerUrl)) {
                 $('#nifi-content-viewer-url').text(config.contentViewerUrl);
             }
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -92,7 +92,7 @@ nf.Provenance = (function () {
                 type: 'GET',
                 url: config.urls.authorities,
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 if (nf.Common.isDefinedAndNotNull(response.authorities)) {
                     // record the users authorities
                     nf.Common.setAuthorities(response.authorities);
@@ -100,7 +100,7 @@ nf.Provenance = (function () {
                 } else {
                     deferred.reject();
                 }
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 nf.Common.handleAjaxError(xhr, status, error);
                 deferred.reject();
             });
@@ -124,7 +124,7 @@ nf.Provenance = (function () {
                     type: 'GET',
                     url: config.urls.banners,
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     // ensure the banners response is specified
                     if (nf.Common.isDefinedAndNotNull(response.banners)) {
                         if (nf.Common.isDefinedAndNotNull(response.banners.headerText) && response.banners.headerText !== '') {
@@ -156,7 +156,7 @@ nf.Provenance = (function () {
                     }
 
                     deferred.resolve();
-                }, function (xhr, status, error) {
+                }).fail(function (xhr, status, error) {
                     nf.Common.handleAjaxError(xhr, status, error);
                     deferred.reject();
                 });
@@ -188,14 +188,14 @@ nf.Provenance = (function () {
                             type: 'GET',
                             url: config.urls.controllerAbout,
                             dataType: 'json'
-                        }).then(function (response) {
+                        }).done(function (response) {
                             var aboutDetails = response.about;
                             var provenanceTitle = aboutDetails.title + ' Data Provenance';
 
                             // set the document title and the about title
                             document.title = provenanceTitle;
                             $('#provenance-header-text').text(provenanceTitle);
-                        }, nf.Common.handleAjaxError);
+                        }).fail(nf.Common.handleAjaxError);
                     });
                 });
             });

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js
index c47d790..f3150b0 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js
@@ -45,7 +45,7 @@ nf.SummaryTable = (function () {
     var loadChartCapabilities = function () {
         return $.Deferred(function (deferred) {
             if (nf.Common.SUPPORTS_SVG) {
-                nf.Common.cachedScript(config.urls.d3Script).then(function () {
+                nf.Common.cachedScript(config.urls.d3Script).done(function () {
                     // get the controller config to get the server offset
                     var configRequest = $.ajax({
                         type: 'GET',
@@ -54,17 +54,17 @@ nf.SummaryTable = (function () {
                     });
 
                     // get the config details and load the chart script
-                    $.when(configRequest, nf.Common.cachedScript(config.urls.statusHistory)).then(function (response) {
+                    $.when(configRequest, nf.Common.cachedScript(config.urls.statusHistory)).done(function (response) {
                         var configResponse = response[0];
                         var configDetails = configResponse.config;
 
                         // initialize the chart
                         nf.StatusHistory.init(configDetails.timeOffset);
                         deferred.resolve();
-                    }, function () {
+                    }).fail(function () {
                         deferred.reject();
                     });
-                }, function () {
+                }).fail(function () {
                     deferred.reject();
                 });
             } else {
@@ -1549,7 +1549,7 @@ nf.SummaryTable = (function () {
             type: 'GET',
             url: nf.SummaryTable.systemDiagnosticsUrl,
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             var systemDiagnostics = response.systemDiagnostics;
 
             // heap
@@ -1588,7 +1588,7 @@ nf.SummaryTable = (function () {
 
             // update the stats last refreshed timestamp
             $('#system-diagnostics-last-refreshed').text(systemDiagnostics.statsLastRefreshed);
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -1717,7 +1717,7 @@ nf.SummaryTable = (function () {
                 verbose: true
             },
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.clusterProcessorStatus)) {
                 var clusterProcessorStatus = response.clusterProcessorStatus;
 
@@ -1755,7 +1755,7 @@ nf.SummaryTable = (function () {
                 // update the stats last refreshed timestamp
                 $('#cluster-processor-summary-last-refreshed').text(clusterProcessorStatus.statsLastRefreshed);
             }
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -1772,7 +1772,7 @@ nf.SummaryTable = (function () {
                 verbose: true
             },
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.clusterConnectionStatus)) {
                 var clusterConnectionStatus = response.clusterConnectionStatus;
 
@@ -1807,7 +1807,7 @@ nf.SummaryTable = (function () {
                 // update the stats last refreshed timestamp
                 $('#cluster-connection-summary-last-refreshed').text(clusterConnectionStatus.statsLastRefreshed);
             }
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -1824,7 +1824,7 @@ nf.SummaryTable = (function () {
                 verbose: true
             },
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.clusterPortStatus)) {
                 var clusterInputPortStatus = response.clusterPortStatus;
 
@@ -1856,7 +1856,7 @@ nf.SummaryTable = (function () {
                 // update the stats last refreshed timestamp
                 $('#cluster-input-port-summary-last-refreshed').text(clusterInputPortStatus.statsLastRefreshed);
             }
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -1873,7 +1873,7 @@ nf.SummaryTable = (function () {
                 verbose: true
             },
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.clusterPortStatus)) {
                 var clusterOutputPortStatus = response.clusterPortStatus;
 
@@ -1905,7 +1905,7 @@ nf.SummaryTable = (function () {
                 // update the stats last refreshed timestamp
                 $('#cluster-output-port-summary-last-refreshed').text(clusterOutputPortStatus.statsLastRefreshed);
             }
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -1922,7 +1922,7 @@ nf.SummaryTable = (function () {
                 verbose: true
             },
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.clusterRemoteProcessGroupStatus)) {
                 var clusterRemoteProcessGroupStatus = response.clusterRemoteProcessGroupStatus;
 
@@ -1957,7 +1957,7 @@ nf.SummaryTable = (function () {
                 // update the stats last refreshed timestamp
                 $('#cluster-remote-process-group-summary-last-refreshed').text(clusterRemoteProcessGroupStatus.statsLastRefreshed);
             }
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     return {
@@ -1965,10 +1965,12 @@ nf.SummaryTable = (function () {
          * URL for loading system diagnostics.
          */
         systemDiagnosticsUrl: null,
+        
         /**
          * URL for loading the summary.
          */
         url: null,
+        
         /**
          * Initializes the status table.
          * 
@@ -1980,18 +1982,19 @@ nf.SummaryTable = (function () {
             nf.SummaryTable.systemDiagnosticsUrl = config.urls.systemDiagnostics;
 
             return $.Deferred(function (deferred) {
-                loadChartCapabilities().then(function () {
+                loadChartCapabilities().done(function () {
                     // initialize the processor/connection details dialog
                     nf.ProcessorDetails.init(false);
                     nf.ConnectionDetails.init(false);
                     initSummaryTable(isClustered);
 
                     deferred.resolve();
-                }, function () {
+                }).fail(function () {
                     deferred.reject();
                 });
             }).promise();
         },
+        
         /**
          * Update the size of the grid based on its container's current size.
          */
@@ -2021,6 +2024,7 @@ nf.SummaryTable = (function () {
                 remoteProcessGroupGrid.resizeCanvas();
             }
         },
+        
         /**
          * Load the processor status table.
          */
@@ -2032,7 +2036,7 @@ nf.SummaryTable = (function () {
                     recursive: true
                 },
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var processGroupStatus = response.processGroupStatus;
 
                 if (nf.Common.isDefinedAndNotNull(processGroupStatus)) {
@@ -2103,8 +2107,9 @@ nf.SummaryTable = (function () {
                 } else {
                     $('#total-items').text('0');
                 }
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         // processor actions
 
         /**
@@ -2120,6 +2125,7 @@ nf.SummaryTable = (function () {
                 nf.ProcessorDetails.showDetails(item.groupId, item.id);
             }
         },
+        
         /**
          * Goes to the specified processor.
          * 
@@ -2133,6 +2139,7 @@ nf.SummaryTable = (function () {
                 goTo(item.groupId, item.id);
             }
         },
+        
         /**
          * Shows the processor status history for a cluster.
          * 
@@ -2146,6 +2153,7 @@ nf.SummaryTable = (function () {
                 nf.StatusHistory.showClusterProcessorChart(item.groupId, item.id);
             }
         },
+        
         /**
          * Shows the processor status history.
          * 
@@ -2159,6 +2167,7 @@ nf.SummaryTable = (function () {
                 nf.StatusHistory.showStandaloneProcessorChart(item.groupId, item.id);
             }
         },
+        
         /**
          * Shows the cluster processor details dialog for the specified processor.
          * 
@@ -2180,6 +2189,7 @@ nf.SummaryTable = (function () {
                 $('#cluster-processor-summary-dialog').modal('show');
             }
         },
+        
         // connection actions
 
         /**
@@ -2195,6 +2205,7 @@ nf.SummaryTable = (function () {
                 nf.ConnectionDetails.showDetails(item.groupId, item.id);
             }
         },
+        
         /**
          * Goes to the specified connection.
          * 
@@ -2208,6 +2219,7 @@ nf.SummaryTable = (function () {
                 goTo(item.groupId, item.id);
             }
         },
+        
         /**
          * Shows the connection status history for a cluster.
          * 
@@ -2221,6 +2233,7 @@ nf.SummaryTable = (function () {
                 nf.StatusHistory.showClusterConnectionChart(item.groupId, item.id);
             }
         },
+        
         /**
          * Shows the connection status history.
          * 
@@ -2234,6 +2247,7 @@ nf.SummaryTable = (function () {
                 nf.StatusHistory.showStandaloneConnectionChart(item.groupId, item.id);
             }
         },
+        
         /**
          * Shows the cluster connection details dialog for the specified connection.
          * 
@@ -2255,6 +2269,7 @@ nf.SummaryTable = (function () {
                 $('#cluster-connection-summary-dialog').modal('show');
             }
         },
+        
         // input actions
 
         /**
@@ -2270,6 +2285,7 @@ nf.SummaryTable = (function () {
                 goTo(item.groupId, item.id);
             }
         },
+        
         /**
          * Shows the cluster input port details dialog for the specified connection.
          * 
@@ -2291,6 +2307,7 @@ nf.SummaryTable = (function () {
                 $('#cluster-input-port-summary-dialog').modal('show');
             }
         },
+        
         // output actions
 
         /**
@@ -2306,6 +2323,7 @@ nf.SummaryTable = (function () {
                 goTo(item.groupId, item.id);
             }
         },
+        
         /**
          * Shows the cluster output port details dialog for the specified connection.
          * 
@@ -2327,6 +2345,7 @@ nf.SummaryTable = (function () {
                 $('#cluster-output-port-summary-dialog').modal('show');
             }
         },
+        
         // remote process group actions
 
         /**
@@ -2342,6 +2361,7 @@ nf.SummaryTable = (function () {
                 goTo(item.groupId, item.id);
             }
         },
+        
         /**
          * Shows the remote process group status history for a cluster.
          * 
@@ -2355,6 +2375,7 @@ nf.SummaryTable = (function () {
                 nf.StatusHistory.showClusterRemoteProcessGroupChart(item.groupId, item.id);
             }
         },
+        
         /**
          * Shows the remote process group status history.
          * 
@@ -2368,6 +2389,7 @@ nf.SummaryTable = (function () {
                 nf.StatusHistory.showStandaloneRemoteProcessGroupChart(item.groupId, item.id);
             }
         },
+        
         /**
          * Shows the cluster remote process group details dialog for the specified connection.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary.js
index d28f751..7b90a0f 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary.js
@@ -40,17 +40,17 @@ nf.Summary = (function () {
             $.ajax({
                 type: 'HEAD',
                 url: config.urls.cluster
-            }).then(function () {
-                nf.SummaryTable.init(true).then(function () {
+            }).done(function () {
+                nf.SummaryTable.init(true).done(function () {
                     deferred.resolve();
-                }, function () {
+                }).fail(function () {
                     deferred.reject();
                 });
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 if (xhr.status === 404) {
-                    nf.SummaryTable.init(false).then(function () {
+                    nf.SummaryTable.init(false).done(function () {
                         deferred.resolve();
-                    }, function () {
+                    }).fail(function () {
                         deferred.reject();
                     });
                 } else {
@@ -84,7 +84,7 @@ nf.Summary = (function () {
                     type: 'GET',
                     url: config.urls.banners,
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     // ensure the banners response is specified
                     if (nf.Common.isDefinedAndNotNull(response.banners)) {
                         if (nf.Common.isDefinedAndNotNull(response.banners.headerText) && response.banners.headerText !== '') {
@@ -116,7 +116,7 @@ nf.Summary = (function () {
                     }
 
                     deferred.resolve();
-                }, function (xhr, status, error) {
+                }).fail(function (xhr, status, error) {
                     nf.Common.handleAjaxError(xhr, status, error);
                     deferred.reject();
                 });
@@ -145,14 +145,14 @@ nf.Summary = (function () {
                             type: 'GET',
                             url: config.urls.controllerAbout,
                             dataType: 'json'
-                        }).then(function (response) {
+                        }).done(function (response) {
                             var aboutDetails = response.about;
                             var statusTitle = aboutDetails.title + ' Summary';
 
                             // set the document title and the about title
                             document.title = statusTitle;
                             $('#status-header-text').text(statusTitle);
-                        }, nf.Common.handleAjaxError);
+                        }).fail(nf.Common.handleAjaxError);
 
                         var setBodySize = function () {
                             $('body').css({

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates-table.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates-table.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates-table.js
index da40002..7f486de 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates-table.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates-table.js
@@ -63,11 +63,11 @@ nf.TemplatesTable = (function () {
             type: 'DELETE',
             url: config.urls.templates + '/' + encodeURIComponent(templateId),
             dataType: 'json'
-        }).then(function () {
+        }).done(function () {
             var templatesGrid = $('#templates-table').data('gridInstance');
             var templatesData = templatesGrid.getData();
             templatesData.deleteItem(templateId);
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -249,6 +249,7 @@ nf.TemplatesTable = (function () {
             // initialize the number of displayed items
             $('#displayed-templates').text('0');
         },
+        
         /**
          * Update the size of the grid based on its container's current size.
          */
@@ -258,6 +259,7 @@ nf.TemplatesTable = (function () {
                 templateGrid.resizeCanvas();
             }
         },
+        
         /**
          * Exports the specified template.
          * 
@@ -271,6 +273,7 @@ nf.TemplatesTable = (function () {
                 nf.Common.submit('GET', config.urls.templates + '/' + encodeURIComponent(item.id));
             }
         },
+        
         /**
          * Prompts the user before attempting to delete the specified template.
          * 
@@ -292,6 +295,7 @@ nf.TemplatesTable = (function () {
                 });
             }
         },
+        
         /**
          * Load the processor templates table.
          */
@@ -303,7 +307,7 @@ nf.TemplatesTable = (function () {
                     verbose: false
                 },
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 // ensure there are groups specified
                 if (nf.Common.isDefinedAndNotNull(response.templates)) {
                     var templatesGrid = $('#templates-table').data('gridInstance');
@@ -322,7 +326,7 @@ nf.TemplatesTable = (function () {
                 } else {
                     $('#total-templates').text('0');
                 }
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         }
     };
 }());
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates.js
index 9fff79a..0602c37 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates.js
@@ -41,7 +41,7 @@ nf.Templates = (function () {
                 type: 'GET',
                 url: config.urls.authorities,
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 if (nf.Common.isDefinedAndNotNull(response.authorities)) {
                     // record the users authorities
                     nf.Common.setAuthorities(response.authorities);
@@ -49,7 +49,7 @@ nf.Templates = (function () {
                 } else {
                     deferred.reject();
                 }
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 nf.Common.handleAjaxError(xhr, status, error);
                 deferred.reject();
             });
@@ -154,7 +154,7 @@ nf.Templates = (function () {
                     type: 'GET',
                     url: config.urls.banners,
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     // ensure the banners response is specified
                     if (nf.Common.isDefinedAndNotNull(response.banners)) {
                         if (nf.Common.isDefinedAndNotNull(response.banners.headerText) && response.banners.headerText !== '') {
@@ -186,7 +186,7 @@ nf.Templates = (function () {
                     }
 
                     deferred.resolve();
-                }, function (xhr, status, error) {
+                }).fail(function (xhr, status, error) {
                     nf.Common.handleAjaxError(xhr, status, error);
                     deferred.reject();
                 });
@@ -219,14 +219,14 @@ nf.Templates = (function () {
                             type: 'GET',
                             url: config.urls.controllerAbout,
                             dataType: 'json'
-                        }).then(function (response) {
+                        }).done(function (response) {
                             var aboutDetails = response.about;
                             var templatesTitle = aboutDetails.title + ' Templates';
 
                             // set the document title and the about title
                             document.title = templatesTitle;
                             $('#templates-header-text').text(templatesTitle);
-                        }, nf.Common.handleAjaxError);
+                        }).fail(nf.Common.handleAjaxError);
                     });
                 });
             });

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users-table.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users-table.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users-table.js
index dd78eb5..996544f 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users-table.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users-table.js
@@ -114,7 +114,7 @@ nf.UsersTable = (function () {
                                 data: JSON.stringify(userEntity),
                                 contentType: 'application/json',
                                 dataType: 'json'
-                            }).then(function (response) {
+                            }).done(function (response) {
                                 if (nf.Common.isDefinedAndNotNull(response.user)) {
                                     var user = response.user;
 
@@ -123,7 +123,7 @@ nf.UsersTable = (function () {
                                     var usersData = usersGrid.getData();
                                     usersData.updateItem(user.id, user);
                                 }
-                            }, nf.Common.handleAjaxError);
+                            }).fail(nf.Common.handleAjaxError);
 
                             // hide the dialog
                             $('#user-roles-dialog').modal('hide');
@@ -203,9 +203,9 @@ nf.UsersTable = (function () {
                                 data: JSON.stringify(userGroupEntity),
                                 contentType: 'application/json',
                                 dataType: 'json'
-                            }).then(function () {
+                            }).done(function () {
                                 nf.UsersTable.loadUsersTable();
-                            }, nf.Common.handleAjaxError);
+                            }).fail(nf.Common.handleAjaxError);
 
                             // hide the dialog
                             $('#group-roles-dialog').modal('hide');
@@ -244,9 +244,9 @@ nf.UsersTable = (function () {
                                 type: 'DELETE',
                                 url: config.urls.users + '/' + encodeURIComponent(userId),
                                 dataType: 'json'
-                            }).then(function () {
+                            }).done(function () {
                                 nf.UsersTable.loadUsersTable();
-                            }, nf.Common.handleAjaxError);
+                            }).fail(nf.Common.handleAjaxError);
 
                             // hide the dialog
                             $('#user-delete-dialog').modal('hide');
@@ -291,7 +291,7 @@ nf.UsersTable = (function () {
                                     'status': 'DISABLED'
                                 },
                                 dataType: 'json'
-                            }).then(function (response) {
+                            }).done(function (response) {
                                 if (nf.Common.isDefinedAndNotNull(response.user)) {
                                     var user = response.user;
 
@@ -300,7 +300,7 @@ nf.UsersTable = (function () {
                                     var usersData = usersGrid.getData();
                                     usersData.updateItem(user.id, user);
                                 }
-                            }, nf.Common.handleAjaxError);
+                            }).fail(nf.Common.handleAjaxError);
 
                             // hide the dialog
                             $('#user-revoke-dialog').modal('hide');
@@ -345,9 +345,9 @@ nf.UsersTable = (function () {
                                     'status': 'DISABLED'
                                 },
                                 dataType: 'json'
-                            }).then(function () {
+                            }).done(function () {
                                 nf.UsersTable.loadUsersTable();
-                            }, nf.Common.handleAjaxError);
+                            }).fail(nf.Common.handleAjaxError);
 
                             // hide the dialog
                             $('#group-revoke-dialog').modal('hide');
@@ -407,9 +407,9 @@ nf.UsersTable = (function () {
                                     data: JSON.stringify(userGroupEntity),
                                     contentType: 'application/json',
                                     dataType: 'json'
-                                }).then(function () {
+                                }).done(function () {
                                     nf.UsersTable.loadUsersTable();
-                                }, nf.Common.handleAjaxError);
+                                }).fail(nf.Common.handleAjaxError);
                             }
 
                             // hide the dialog
@@ -815,6 +815,7 @@ nf.UsersTable = (function () {
             initGroupRevokeDialog();
             initUsersTable();
         },
+        
         /**
          * Disables the specified user's account.
          * 
@@ -834,6 +835,7 @@ nf.UsersTable = (function () {
                 $('#user-revoke-dialog').modal('show');
             }
         },
+        
         /**
          * Delete's the specified user's account.
          * 
@@ -853,6 +855,7 @@ nf.UsersTable = (function () {
                 $('#user-delete-dialog').modal('show');
             }
         },
+        
         /**
          * Disables the specified group's account.
          * 
@@ -871,6 +874,7 @@ nf.UsersTable = (function () {
                 $('#group-revoke-dialog').modal('show');
             }
         },
+        
         /**
          * Updates the specified users's level of access.
          * 
@@ -913,6 +917,7 @@ nf.UsersTable = (function () {
                 $('#user-roles-dialog').modal('show');
             }
         },
+        
         /**
          * Updates the specified groups level of access.
          * 
@@ -931,6 +936,7 @@ nf.UsersTable = (function () {
                 $('#group-roles-dialog').modal('show');
             }
         },
+        
         /**
          * Prompts to verify group removal.
          * 
@@ -951,13 +957,14 @@ nf.UsersTable = (function () {
                             type: 'DELETE',
                             url: config.urls.userGroups + '/' + encodeURIComponent(item.userGroup) + '/users/' + encodeURIComponent(item.id),
                             dataType: 'json'
-                        }).then(function (response) {
+                        }).done(function (response) {
                             nf.UsersTable.loadUsersTable();
-                        }, nf.Common.handleAjaxError);
+                        }).fail(nf.Common.handleAjaxError);
                     }
                 });
             }
         },
+        
         /**
          * Ungroups the specified group.
          * 
@@ -978,13 +985,14 @@ nf.UsersTable = (function () {
                             type: 'DELETE',
                             url: config.urls.userGroups + '/' + encodeURIComponent(item.userGroup),
                             dataType: 'json'
-                        }).then(function (response) {
+                        }).done(function (response) {
                             nf.UsersTable.loadUsersTable();
-                        }, nf.Common.handleAjaxError);
+                        }).fail(nf.Common.handleAjaxError);
                     }
                 });
             }
         },
+        
         /**
          * Update the size of the grid based on its container's current size.
          */
@@ -994,6 +1002,7 @@ nf.UsersTable = (function () {
                 grid.resizeCanvas();
             }
         },
+        
         /**
          * Load the processor status table.
          */
@@ -1005,7 +1014,7 @@ nf.UsersTable = (function () {
                     'grouped': $('#group-collaspe-checkbox').hasClass('checkbox-checked')
                 },
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 // ensure there are users
                 if (nf.Common.isDefinedAndNotNull(response.users)) {
                     var usersGrid = $('#users-table').data('gridInstance');
@@ -1027,8 +1036,9 @@ nf.UsersTable = (function () {
                 } else {
                     $('#total-users').text('0');
                 }
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows details for the specified user.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users.js
index c1fac39..96f73a5 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users.js
@@ -41,7 +41,7 @@ nf.Users = (function () {
                 type: 'GET',
                 url: config.urls.authorities,
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 if (nf.Common.isDefinedAndNotNull(response.authorities)) {
                     // record the users authorities
                     nf.Common.setAuthorities(response.authorities);
@@ -49,7 +49,7 @@ nf.Users = (function () {
                 } else {
                     deferred.reject();
                 }
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 nf.Common.handleAjaxError(xhr, status, error);
                 deferred.reject();
             });
@@ -69,7 +69,7 @@ nf.Users = (function () {
                     type: 'GET',
                     url: config.urls.banners,
                     dataType: 'json'
-                }).then(function (bannerResponse) {
+                }).done(function (bannerResponse) {
                     // ensure the banners response is specified
                     if (nf.Common.isDefinedAndNotNull(bannerResponse.banners)) {
                         if (nf.Common.isDefinedAndNotNull(bannerResponse.banners.headerText) && bannerResponse.banners.headerText !== '') {
@@ -101,7 +101,7 @@ nf.Users = (function () {
                     }
 
                     deferred.resolve();
-                }, function (xhr, status, error) {
+                }).fail(function (xhr, status, error) {
                     nf.Common.handleAjaxError(xhr, status, error);
                     deferred.reject();
                 });
@@ -133,14 +133,14 @@ nf.Users = (function () {
                             type: 'GET',
                             url: config.urls.controllerAbout,
                             dataType: 'json'
-                        }).then(function (response) {
+                        }).done(function (response) {
                             var aboutDetails = response.about;
                             var countersTitle = aboutDetails.title + ' Users';
 
                             // set the document title and the about title
                             document.title = countersTitle;
                             $('#users-header-text').text(countersTitle);
-                        }, nf.Common.handleAjaxError);
+                        }).fail(nf.Common.handleAjaxError);
                     });
                 });
             });


[16/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of D3.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/8a0e2cee/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/d3.min.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/d3.min.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/d3.min.js
old mode 100755
new mode 100644
index 862fcb2..ddaf546
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/d3.min.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/d3.min.js
@@ -1,5385 +1,5 @@
-d3 = function () {
-    function n(n) {
-        return null != n && !isNaN(n)
-    }
-    function t(n) {
-        return n.length
-    }
-    function e(n) {
-        for (var t = 1; n * t % 1; )
-            t *= 10;
-        return t
-    }
-    function r(n, t) {
-        try {
-            for (var e in t)
-                Object.defineProperty(n.prototype, e, {value: t[e], enumerable: !1})
-        } catch (r) {
-            n.prototype = t
-        }
-    }
-    function u() {
-    }
-    function i() {
-    }
-    function o(n, t, e) {
-        return function () {
-            var r = e.apply(t, arguments);
-            return r === t ? n : r
-        }
-    }
-    function a(n, t) {
-        if (t in n)
-            return t;
-        t = t.charAt(0).toUpperCase() + t.substring(1);
-        for (var e = 0, r = Co.length; r > e; ++e) {
-            var u = Co[e] + t;
-            if (u in n)
-                return u
-        }
-    }
-    function c() {
-    }
-    function l() {
-    }
-    function s(n) {
-        function t() {
-            for (var t, r = e, u = -1, i = r.length; ++u < i; )
-                (t = r[u].on) && t.apply(this, arguments);
-            return n
-        }
-        var e = [], r = new u;
-        return t.on = function (t, u) {
-            var i, o = r.get(t);
-            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {on: u})), n)
-        }, t
-    }
-    function f() {
-        vo.event.preventDefault()
-    }
-    function h() {
-        for (var n, t = vo.event; n = t.sourceEvent; )
-            t = n;
-        return t
-    }
-    function g(n) {
-        for (var t = new l, e = 0, r = arguments.length; ++e < r; )
-            t[arguments[e]] = s(t);
-        return t.of = function (e, r) {
-            return function (u) {
-                try {
-                    var i = u.sourceEvent = vo.event;
-                    u.target = n, vo.event = u, t[u.type].apply(e, r)
-                } finally {
-                    vo.event = i
-                }
-            }
-        }, t
-    }
-    function p(n) {
-        return jo(n, Oo), n
-    }
-    function d(n) {
-        return"function" == typeof n ? n : function () {
-            return Lo(n, this)
-        }
-    }
-    function v(n) {
-        return"function" == typeof n ? n : function () {
-            return Ho(n, this)
-        }
-    }
-    function m(n, t) {
-        function e() {
-            this.removeAttribute(n)
-        }
-        function r() {
-            this.removeAttributeNS(n.space, n.local)
-        }
-        function u() {
-            this.setAttribute(n, t)
-        }
-        function i() {
-            this.setAttributeNS(n.space, n.local, t)
-        }
-        function o() {
-            var e = t.apply(this, arguments);
-            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)
-        }
-        function a() {
-            var e = t.apply(this, arguments);
-            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)
-        }
-        return n = vo.ns.qualify(n), null == t ? n.local ? r : e : "function" == typeof t ? n.local ? a : o : n.local ? i : u
-    }
-    function y(n) {
-        return n.trim().replace(/\s+/g, " ")
-    }
-    function M(n) {
-        return new RegExp("(?:^|\\s+)" + vo.requote(n) + "(?:\\s+|$)", "g")
-    }
-    function x(n, t) {
-        function e() {
-            for (var e = -1; ++e < u; )
-                n[e](this, t)
-        }
-        function r() {
-            for (var e = -1, r = t.apply(this, arguments); ++e < u; )
-                n[e](this, r)
-        }
-        n = n.trim().split(/\s+/).map(b);
-        var u = n.length;
-        return"function" == typeof t ? r : e
-    }
-    function b(n) {
-        var t = M(n);
-        return function (e, r) {
-            if (u = e.classList)
-                return r ? u.add(n) : u.remove(n);
-            var u = e.getAttribute("class") || "";
-            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute("class", y(u + " " + n))) : e.setAttribute("class", y(u.replace(t, " ")))
-        }
-    }
-    function _(n, t, e) {
-        function r() {
-            this.style.removeProperty(n)
-        }
-        function u() {
-            this.style.setProperty(n, t, e)
-        }
-        function i() {
-            var r = t.apply(this, arguments);
-            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)
-        }
-        return null == t ? r : "function" == typeof t ? i : u
-    }
-    function w(n, t) {
-        function e() {
-            delete this[n]
-        }
-        function r() {
-            this[n] = t
-        }
-        function u() {
-            var e = t.apply(this, arguments);
-            null == e ? delete this[n] : this[n] = e
-        }
-        return null == t ? e : "function" == typeof t ? u : r
-    }
-    function S(n) {
-        return"function" == typeof n ? n : (n = vo.ns.qualify(n)).local ? function () {
-            return Mo.createElementNS(n.space, n.local)
-        } : function () {
-            return Mo.createElementNS(this.namespaceURI, n)
-        }
-    }
-    function E(n) {
-        return{__data__: n}
-    }
-    function k(n) {
-        return function () {
-            return Po(this, n)
-        }
-    }
-    function A(n) {
-        return arguments.length || (n = vo.ascending), function (t, e) {
-            return t && e ? n(t.__data__, e.__data__) : !t - !e
-        }
-    }
-    function N(n, t) {
-        for (var e = 0, r = n.length; r > e; e++)
-            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)
-                (u = i[o]) && t(u, o, e);
-        return n
-    }
-    function q(n) {
-        return jo(n, Yo), n
-    }
-    function T(n) {
-        var t, e;
-        return function (r, u, i) {
-            var o, a = n[i].update, c = a.length;
-            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c; )
-                ;
-            return o
-        }
-    }
-    function z() {
-        var n = this.__transition__;
-        n && ++n.active
-    }
-    function C(n, t, e) {
-        function r() {
-            var t = this[o];
-            t && (this.removeEventListener(n, t, t.$), delete this[o])
-        }
-        function u() {
-            var u = l(t, yo(arguments));
-            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t
-        }
-        function i() {
-            var t, e = new RegExp("^__on([^.]+)" + vo.requote(n) + "$");
-            for (var r in this)
-                if (t = r.match(e)) {
-                    var u = this[r];
-                    this.removeEventListener(t[1], u, u.$), delete this[r]
-                }
-        }
-        var o = "__on" + n, a = n.indexOf("."), l = D;
-        a > 0 && (n = n.substring(0, a));
-        var s = Uo.get(n);
-        return s && (n = s, l = j), a ? t ? u : r : t ? c : i
-    }
-    function D(n, t) {
-        return function (e) {
-            var r = vo.event;
-            vo.event = e, t[0] = this.__data__;
-            try {
-                n.apply(this, t)
-            } finally {
-                vo.event = r
-            }
-        }
-    }
-    function j(n, t) {
-        var e = D(n, t);
-        return function (n) {
-            var t = this, r = n.relatedTarget;
-            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)
-        }
-    }
-    function L() {
-        var n = ".dragsuppress-" + ++Zo, t = "touchmove" + n, e = "selectstart" + n, r = "dragstart" + n, u = "click" + n, i = vo.select(bo).on(t, f).on(e, f).on(r, f), o = xo.style, a = o[Vo];
-        return o[Vo] = "none", function (t) {
-            function e() {
-                i.on(u, null)
-            }
-            i.on(n, null), o[Vo] = a, t && (i.on(u, function () {
-                f(), e()
-            }, !0), setTimeout(e, 0))
-        }
-    }
-    function H(n, t) {
-        var e = n.ownerSVGElement || n;
-        if (e.createSVGPoint) {
-            var r = e.createSVGPoint();
-            if (0 > Xo && (bo.scrollX || bo.scrollY)) {
-                e = vo.select("body").append("svg").style({position: "absolute", top: 0, left: 0, margin: 0, padding: 0, border: "none"}, "important");
-                var u = e[0][0].getScreenCTM();
-                Xo = !(u.f || u.e), e.remove()
-            }
-            return Xo ? (r.x = t.pageX, r.y = t.pageY) : (r.x = t.clientX, r.y = t.clientY), r = r.matrixTransform(n.getScreenCTM().inverse()), [r.x, r.y]
-        }
-        var i = n.getBoundingClientRect();
-        return[t.clientX - i.left - n.clientLeft, t.clientY - i.top - n.clientTop]
-    }
-    function F(n) {
-        return n > 0 ? 1 : 0 > n ? -1 : 0
-    }
-    function P(n) {
-        return n > 1 ? 0 : -1 > n ? Bo : Math.acos(n)
-    }
-    function O(n) {
-        return n > 1 ? Bo / 2 : -1 > n ? -Bo / 2 : Math.asin(n)
-    }
-    function R(n) {
-        return(Math.exp(n) - Math.exp(-n)) / 2
-    }
-    function Y(n) {
-        return(Math.exp(n) + Math.exp(-n)) / 2
-    }
-    function I(n) {
-        return R(n) / Y(n)
-    }
-    function U(n) {
-        return(n = Math.sin(n / 2)) * n
-    }
-    function V() {
-    }
-    function Z(n, t, e) {
-        return new X(n, t, e)
-    }
-    function X(n, t, e) {
-        this.h = n, this.s = t, this.l = e
-    }
-    function B(n, t, e) {
-        function r(n) {
-            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i
-        }
-        function u(n) {
-            return Math.round(255 * r(n))
-        }
-        var i, o;
-        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, ot(u(n + 120), u(n), u(n - 120))
-    }
-    function $(n, t, e) {
-        return new W(n, t, e)
-    }
-    function W(n, t, e) {
-        this.h = n, this.c = t, this.l = e
-    }
-    function J(n, t, e) {
-        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), G(e, Math.cos(n *= Jo) * t, Math.sin(n) * t)
-    }
-    function G(n, t, e) {
-        return new K(n, t, e)
-    }
-    function K(n, t, e) {
-        this.l = n, this.a = t, this.b = e
-    }
-    function Q(n, t, e) {
-        var r = (n + 16) / 116, u = r + t / 500, i = r - e / 200;
-        return u = tt(u) * aa, r = tt(r) * ca, i = tt(i) * la, ot(rt(3.2404542 * u - 1.5371385 * r - .4985314 * i), rt(-.969266 * u + 1.8760108 * r + .041556 * i), rt(.0556434 * u - .2040259 * r + 1.0572252 * i))
-    }
-    function nt(n, t, e) {
-        return n > 0 ? $(Math.atan2(e, t) * Go, Math.sqrt(t * t + e * e), n) : $(0 / 0, 0 / 0, n)
-    }
-    function tt(n) {
-        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037
-    }
-    function et(n) {
-        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29
-    }
-    function rt(n) {
-        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))
-    }
-    function ut(n) {
-        return ot(n >> 16, 255 & n >> 8, 255 & n)
-    }
-    function it(n) {
-        return ut(n) + ""
-    }
-    function ot(n, t, e) {
-        return new at(n, t, e)
-    }
-    function at(n, t, e) {
-        this.r = n, this.g = t, this.b = e
-    }
-    function ct(n) {
-        return 16 > n ? "0" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)
-    }
-    function lt(n, t, e) {
-        var r, u, i, o = 0, a = 0, c = 0;
-        if (r = /([a-z]+)\((.*)\)/i.exec(n))
-            switch (u = r[2].split(","), r[1]) {
-                case"hsl":
-                    return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);
-                case"rgb":
-                    return t(gt(u[0]), gt(u[1]), gt(u[2]))
-            }
-        return(i = ha.get(n)) ? t(i.r, i.g, i.b) : (null != n && "#" === n.charAt(0) && (4 === n.length ? (o = n.charAt(1), o += o, a = n.charAt(2), a += a, c = n.charAt(3), c += c) : 7 === n.length && (o = n.substring(1, 3), a = n.substring(3, 5), c = n.substring(5, 7)), o = parseInt(o, 16), a = parseInt(a, 16), c = parseInt(c, 16)), t(o, a, c))
-    }
-    function st(n, t, e) {
-        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255), o = Math.max(n, t, e), a = o - i, c = (o + i) / 2;
-        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), Z(r, u, c)
-    }
-    function ft(n, t, e) {
-        n = ht(n), t = ht(t), e = ht(e);
-        var r = et((.4124564 * n + .3575761 * t + .1804375 * e) / aa), u = et((.2126729 * n + .7151522 * t + .072175 * e) / ca), i = et((.0193339 * n + .119192 * t + .9503041 * e) / la);
-        return G(116 * u - 16, 500 * (r - u), 200 * (u - i))
-    }
-    function ht(n) {
-        return(n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)
-    }
-    function gt(n) {
-        var t = parseFloat(n);
-        return"%" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t
-    }
-    function pt(n) {
-        return"function" == typeof n ? n : function () {
-            return n
-        }
-    }
-    function dt(n) {
-        return n
-    }
-    function vt(n) {
-        return function (t, e, r) {
-            return 2 === arguments.length && "function" == typeof e && (r = e, e = null), mt(t, e, n, r)
-        }
-    }
-    function mt(n, t, e, r) {
-        function u() {
-            var n, t = c.status;
-            if (!t && c.responseText || t >= 200 && 300 > t || 304 === t) {
-                try {
-                    n = e.call(i, c)
-                } catch (r) {
-                    return o.error.call(i, r), void 0
-                }
-                o.load.call(i, n)
-            } else
-                o.error.call(i, c)
-        }
-        var i = {}, o = vo.dispatch("beforesend", "progress", "load", "error"), a = {}, c = new XMLHttpRequest, l = null;
-        return!bo.XDomainRequest || "withCredentials"in c || !/^(http(s)?:)?\/\//.test(n) || (c = new XDomainRequest), "onload"in c ? c.onload = c.onerror = u : c.onreadystatechange = function () {
-            c.readyState > 3 && u()
-        }, c.onprogress = function (n) {
-            var t = vo.event;
-            vo.event = n;
-            try {
-                o.progress.call(i, c)
-            } finally {
-                vo.event = t
-            }
-        }, i.header = function (n, t) {
-            return n = (n + "").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + "", i)
-        }, i.mimeType = function (n) {
-            return arguments.length ? (t = null == n ? null : n + "", i) : t
-        }, i.responseType = function (n) {
-            return arguments.length ? (l = n, i) : l
-        }, i.response = function (n) {
-            return e = n, i
-        }, ["get", "post"].forEach(function (n) {
-            i[n] = function () {
-                return i.send.apply(i, [n].concat(yo(arguments)))
-            }
-        }), i.send = function (e, r, u) {
-            if (2 === arguments.length && "function" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || "accept"in a || (a.accept = t + ",*/*"), c.setRequestHeader)
-                for (var s in a)
-                    c.setRequestHeader(s, a[s]);
-            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on("error", u).on("load", function (n) {
-                u(null, n)
-            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i
-        }, i.abort = function () {
-            return c.abort(), i
-        }, vo.rebind(i, o, "on"), null == r ? i : i.get(yt(r))
-    }
-    function yt(n) {
-        return 1 === n.length ? function (t, e) {
-            n(null == t ? e : null)
-        } : n
-    }
-    function Mt() {
-        var n = bt(), t = _t() - n;
-        t > 24 ? (isFinite(t) && (clearTimeout(va), va = setTimeout(Mt, t)), da = 0) : (da = 1, ya(Mt))
-    }
-    function xt(n, t, e) {
-        var r = arguments.length;
-        2 > r && (t = 0), 3 > r && (e = Date.now()), ma.callback = n, ma.time = e + t
-    }
-    function bt() {
-        var n = Date.now();
-        for (ma = ga; ma; )
-            n >= ma.time && (ma.flush = ma.callback(n - ma.time)), ma = ma.next;
-        return n
-    }
-    function _t() {
-        for (var n, t = ga, e = 1 / 0; t; )
-            t.flush ? t = n ? n.next = t.next : ga = t.next : (t.time < e && (e = t.time), t = (n = t).next);
-        return pa = n, e
-    }
-    function wt(n, t) {
-        var e = Math.pow(10, 3 * Math.abs(8 - t));
-        return{scale: t > 8 ? function (n) {
-                return n / e
-            } : function (n) {
-                return n * e
-            }, symbol: n}
-    }
-    function St(n, t) {
-        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)
-    }
-    function Et(n) {
-        return n + ""
-    }
-    function kt() {
-    }
-    function At(n, t, e) {
-        var r = e.s = n + t, u = r - n, i = r - u;
-        e.t = n - i + (t - u)
-    }
-    function Nt(n, t) {
-        n && Ta.hasOwnProperty(n.type) && Ta[n.type](n, t)
-    }
-    function qt(n, t, e) {
-        var r, u = -1, i = n.length - e;
-        for (t.lineStart(); ++u < i; )
-            r = n[u], t.point(r[0], r[1], r[2]);
-        t.lineEnd()
-    }
-    function Tt(n, t) {
-        var e = -1, r = n.length;
-        for (t.polygonStart(); ++e < r; )
-            qt(n[e], t, 1);
-        t.polygonEnd()
-    }
-    function zt() {
-        function n(n, t) {
-            n *= Jo, t = t * Jo / 2 + Bo / 4;
-            var e = n - r, o = Math.cos(t), a = Math.sin(t), c = i * a, l = u * o + c * Math.cos(e), s = c * Math.sin(e);
-            Ca.add(Math.atan2(s, l)), r = n, u = o, i = a
-        }
-        var t, e, r, u, i;
-        Da.point = function (o, a) {
-            Da.point = n, r = (t = o) * Jo, u = Math.cos(a = (e = a) * Jo / 2 + Bo / 4), i = Math.sin(a)
-        }, Da.lineEnd = function () {
-            n(t, e)
-        }
-    }
-    function Ct(n) {
-        var t = n[0], e = n[1], r = Math.cos(e);
-        return[r * Math.cos(t), r * Math.sin(t), Math.sin(e)]
-    }
-    function Dt(n, t) {
-        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]
-    }
-    function jt(n, t) {
-        return[n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]
-    }
-    function Lt(n, t) {
-        n[0] += t[0], n[1] += t[1], n[2] += t[2]
-    }
-    function Ht(n, t) {
-        return[n[0] * t, n[1] * t, n[2] * t]
-    }
-    function Ft(n) {
-        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);
-        n[0] /= t, n[1] /= t, n[2] /= t
-    }
-    function Pt(n) {
-        return[Math.atan2(n[1], n[0]), O(n[2])]
-    }
-    function Ot(n, t) {
-        return Math.abs(n[0] - t[0]) < $o && Math.abs(n[1] - t[1]) < $o
-    }
-    function Rt(n, t) {
-        n *= Jo;
-        var e = Math.cos(t *= Jo);
-        Yt(e * Math.cos(n), e * Math.sin(n), Math.sin(t))
-    }
-    function Yt(n, t, e) {
-        ++ja, Ha += (n - Ha) / ja, Fa += (t - Fa) / ja, Pa += (e - Pa) / ja
-    }
-    function It() {
-        function n(n, u) {
-            n *= Jo;
-            var i = Math.cos(u *= Jo), o = i * Math.cos(n), a = i * Math.sin(n), c = Math.sin(u), l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);
-            La += l, Oa += l * (t + (t = o)), Ra += l * (e + (e = a)), Ya += l * (r + (r = c)), Yt(t, e, r)
-        }
-        var t, e, r;
-        Za.point = function (u, i) {
-            u *= Jo;
-            var o = Math.cos(i *= Jo);
-            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), Za.point = n, Yt(t, e, r)
-        }
-    }
-    function Ut() {
-        Za.point = Rt
-    }
-    function Vt() {
-        function n(n, t) {
-            n *= Jo;
-            var e = Math.cos(t *= Jo), o = e * Math.cos(n), a = e * Math.sin(n), c = Math.sin(t), l = u * c - i * a, s = i * o - r * c, f = r * a - u * o, h = Math.sqrt(l * l + s * s + f * f), g = r * o + u * a + i * c, p = h && -P(g) / h, d = Math.atan2(h, g);
-            Ia += p * l, Ua += p * s, Va += p * f, La += d, Oa += d * (r + (r = o)), Ra += d * (u + (u = a)), Ya += d * (i + (i = c)), Yt(r, u, i)
-        }
-        var t, e, r, u, i;
-        Za.point = function (o, a) {
-            t = o, e = a, Za.point = n, o *= Jo;
-            var c = Math.cos(a *= Jo);
-            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), Yt(r, u, i)
-        }, Za.lineEnd = function () {
-            n(t, e), Za.lineEnd = Ut, Za.point = Rt
-        }
-    }
-    function Zt() {
-        return!0
-    }
-    function Xt(n, t, e, r, u) {
-        var i = [], o = [];
-        if (n.forEach(function (n) {
-            if (!((t = n.length - 1) <= 0)) {
-                var t, e = n[0], r = n[t];
-                if (Ot(e, r)) {
-                    u.lineStart();
-                    for (var a = 0; t > a; ++a)
-                        u.point((e = n[a])[0], e[1]);
-                    return u.lineEnd(), void 0
-                }
-                var c = {point: e, points: n, other: null, visited: !1, entry: !0, subject: !0}, l = {point: e, points: [e], other: c, visited: !1, entry: !1, subject: !1};
-                c.other = l, i.push(c), o.push(l), c = {point: r, points: [r], other: null, visited: !1, entry: !1, subject: !0}, l = {point: r, points: [r], other: c, visited: !1, entry: !0, subject: !1}, c.other = l, i.push(c), o.push(l)
-            }
-        }), o.sort(t), Bt(i), Bt(o), i.length) {
-            if (e)
-                for (var a = 1, c = !e(o[0].point), l = o.length; l > a; ++a)
-                    o[a].entry = c = !c;
-            for (var s, f, h, g = i[0]; ; ) {
-                for (s = g; s.visited; )
-                    if ((s = s.next) === g)
-                        return;
-                f = s.points, u.lineStart();
-                do {
-                    if (s.visited = s.other.visited = !0, s.entry) {
-                        if (s.subject)
-                            for (var a = 0; a < f.length; a++)
-                                u.point((h = f[a])[0], h[1]);
-                        else
-                            r(s.point, s.next.point, 1, u);
-                        s = s.next
-                    } else {
-                        if (s.subject) {
-                            f = s.prev.points;
-                            for (var a = f.length; --a >= 0; )
-                                u.point((h = f[a])[0], h[1])
-                        } else
-                            r(s.point, s.prev.point, -1, u);
-                        s = s.prev
-                    }
-                    s = s.other, f = s.points
-                } while (!s.visited);
-                u.lineEnd()
-            }
-        }
-    }
-    function Bt(n) {
-        if (t = n.length) {
-            for (var t, e, r = 0, u = n[0]; ++r < t; )
-                u.next = e = n[r], e.prev = u, u = e;
-            u.next = e = n[0], e.prev = u
-        }
-    }
-    function $t(n, t, e, r) {
-        return function (u) {
-            function i(t, e) {
-                n(t, e) && u.point(t, e)
-            }
-            function o(n, t) {
-                d.point(n, t)
-            }
-            function a() {
-                v.point = o, d.lineStart()
-            }
-            function c() {
-                v.point = i, d.lineEnd()
-            }
-            function l(n, t) {
-                y.point(n, t), p.push([n, t])
-            }
-            function s() {
-                y.lineStart(), p = []
-            }
-            function f() {
-                l(p[0][0], p[0][1]), y.lineEnd();
-                var n, t = y.clean(), e = m.buffer(), r = e.length;
-                if (p.pop(), g.push(p), p = null, r) {
-                    if (1 & t) {
-                        n = e[0];
-                        var i, r = n.length - 1, o = -1;
-                        for (u.lineStart(); ++o < r; )
-                            u.point((i = n[o])[0], i[1]);
-                        return u.lineEnd(), void 0
-                    }
-                    r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), h.push(e.filter(Wt))
-                }
-            }
-            var h, g, p, d = t(u), v = {point: i, lineStart: a, lineEnd: c, polygonStart: function () {
-                    v.point = l, v.lineStart = s, v.lineEnd = f, h = [], g = [], u.polygonStart()
-                }, polygonEnd: function () {
-                    v.point = i, v.lineStart = a, v.lineEnd = c, h = vo.merge(h), h.length ? Xt(h, Gt, null, e, u) : r(g) && (u.lineStart(), e(null, null, 1, u), u.lineEnd()), u.polygonEnd(), h = g = null
-                }, sphere: function () {
-                    u.polygonStart(), u.lineStart(), e(null, null, 1, u), u.lineEnd(), u.polygonEnd()
-                }}, m = Jt(), y = t(m);
-            return v
-        }
-    }
-    function Wt(n) {
-        return n.length > 1
-    }
-    function Jt() {
-        var n, t = [];
-        return{lineStart: function () {
-                t.push(n = [])
-            }, point: function (t, e) {
-                n.push([t, e])
-            }, lineEnd: c, buffer: function () {
-                var e = t;
-                return t = [], n = null, e
-            }, rejoin: function () {
-                t.length > 1 && t.push(t.pop().concat(t.shift()))
-            }}
-    }
-    function Gt(n, t) {
-        return((n = n.point)[0] < 0 ? n[1] - Bo / 2 - $o : Bo / 2 - n[1]) - ((t = t.point)[0] < 0 ? t[1] - Bo / 2 - $o : Bo / 2 - t[1])
-    }
-    function Kt(n, t) {
-        var e = n[0], r = n[1], u = [Math.sin(e), -Math.cos(e), 0], i = 0, o = !1, a = !1, c = 0;
-        Ca.reset();
-        for (var l = 0, s = t.length; s > l; ++l) {
-            var f = t[l], h = f.length;
-            if (h) {
-                for (var g = f[0], p = g[0], d = g[1] / 2 + Bo / 4, v = Math.sin(d), m = Math.cos(d), y = 1; ; ) {
-                    y === h && (y = 0), n = f[y];
-                    var M = n[0], x = n[1] / 2 + Bo / 4, b = Math.sin(x), _ = Math.cos(x), w = M - p, S = Math.abs(w) > Bo, E = v * b;
-                    if (Ca.add(Math.atan2(E * Math.sin(w), m * _ + E * Math.cos(w))), Math.abs(x) < $o && (a = !0), i += S ? w + (w >= 0 ? 2 : -2) * Bo : w, S ^ p >= e ^ M >= e) {
-                        var k = jt(Ct(g), Ct(n));
-                        Ft(k);
-                        var A = jt(u, k);
-                        Ft(A);
-                        var N = (S ^ w >= 0 ? -1 : 1) * O(A[2]);
-                        r > N && (c += S ^ w >= 0 ? 1 : -1)
-                    }
-                    if (!y++)
-                        break;
-                    p = M, v = b, m = _, g = n
-                }
-                Math.abs(i) > $o && (o = !0)
-            }
-        }
-        return(!a && !o && 0 > Ca || -$o > i) ^ 1 & c
-    }
-    function Qt(n) {
-        var t, e = 0 / 0, r = 0 / 0, u = 0 / 0;
-        return{lineStart: function () {
-                n.lineStart(), t = 1
-            }, point: function (i, o) {
-                var a = i > 0 ? Bo : -Bo, c = Math.abs(i - e);
-                Math.abs(c - Bo) < $o ? (n.point(e, r = (r + o) / 2 > 0 ? Bo / 2 : -Bo / 2), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= Bo && (Math.abs(e - u) < $o && (e -= u * $o), Math.abs(i - a) < $o && (i -= a * $o), r = ne(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a
-            }, lineEnd: function () {
-                n.lineEnd(), e = r = 0 / 0
-            }, clean: function () {
-                return 2 - t
-            }}
-    }
-    function ne(n, t, e, r) {
-        var u, i, o = Math.sin(n - e);
-        return Math.abs(o) > $o ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2
-    }
-    function te(n, t, e, r) {
-        var u;
-        if (null == n)
-            u = e * Bo / 2, r.point(-Bo, u), r.point(0, u), r.point(Bo, u), r.point(Bo, 0), r.point(Bo, -u), r.point(0, -u), r.point(-Bo, -u), r.point(-Bo, 0), r.point(-Bo, u);
-        else if (Math.abs(n[0] - t[0]) > $o) {
-            var i = (n[0] < t[0] ? 1 : -1) * Bo;
-            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)
-        } else
-            r.point(t[0], t[1])
-    }
-    function ee(n) {
-        return Kt(Ba, n)
-    }
-    function re(n) {
-        function t(n, t) {
-            return Math.cos(n) * Math.cos(t) > o
-        }
-        function e(n) {
-            var e, i, o, c, s;
-            return{lineStart: function () {
-                    c = o = !1, s = 1
-                }, point: function (f, h) {
-                    var g, p = [f, h], d = t(f, h), v = a ? d ? 0 : u(f, h) : d ? u(f + (0 > f ? Bo : -Bo), h) : 0;
-                    if (!e && (c = o = d) && n.lineStart(), d !== o && (g = r(e, p), (Ot(e, g) || Ot(p, g)) && (p[0] += $o, p[1] += $o, d = t(p[0], p[1]))), d !== o)
-                        s = 0, d ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;
-                    else if (l && e && a ^ d) {
-                        var m;
-                        v & i || !(m = r(p, e, !0)) || (s = 0, a ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))
-                    }
-                    !d || e && Ot(e, p) || n.point(p[0], p[1]), e = p, o = d, i = v
-                }, lineEnd: function () {
-                    o && n.lineEnd(), e = null
-                }, clean: function () {
-                    return s | (c && o) << 1
-                }}
-        }
-        function r(n, t, e) {
-            var r = Ct(n), u = Ct(t), i = [1, 0, 0], a = jt(r, u), c = Dt(a, a), l = a[0], s = c - l * l;
-            if (!s)
-                return!e && n;
-            var f = o * c / s, h = -o * l / s, g = jt(i, a), p = Ht(i, f), d = Ht(a, h);
-            Lt(p, d);
-            var v = g, m = Dt(p, v), y = Dt(v, v), M = m * m - y * (Dt(p, p) - 1);
-            if (!(0 > M)) {
-                var x = Math.sqrt(M), b = Ht(v, (-m - x) / y);
-                if (Lt(b, p), b = Pt(b), !e)
-                    return b;
-                var _, w = n[0], S = t[0], E = n[1], k = t[1];
-                w > S && (_ = w, w = S, S = _);
-                var A = S - w, N = Math.abs(A - Bo) < $o, q = N || $o > A;
-                if (!N && E > k && (_ = E, E = k, k = _), q ? N ? E + k > 0 ^ b[1] < (Math.abs(b[0] - w) < $o ? E : k) : E <= b[1] && b[1] <= k : A > Bo ^ (w <= b[0] && b[0] <= S)) {
-                    var T = Ht(v, (-m + x) / y);
-                    return Lt(T, p), [b, Pt(T)]
-                }
-            }
-        }
-        function u(t, e) {
-            var r = a ? n : Bo - n, u = 0;
-            return-r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u
-        }
-        function i(n) {
-            return Kt(c, n)
-        }
-        var o = Math.cos(n), a = o > 0, c = [n, 0], l = Math.abs(o) > $o, s = qe(n, 6 * Jo);
-        return $t(t, e, s, i)
-    }
-    function ue(n, t, e, r) {
-        function u(r, u) {
-            return Math.abs(r[0] - n) < $o ? u > 0 ? 0 : 3 : Math.abs(r[0] - e) < $o ? u > 0 ? 2 : 1 : Math.abs(r[1] - t) < $o ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2
-        }
-        function i(n, t) {
-            return o(n.point, t.point)
-        }
-        function o(n, t) {
-            var e = u(n, 1), r = u(t, 1);
-            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]
-        }
-        function a(u, i) {
-            var o = i[0] - u[0], a = i[1] - u[1], c = [0, 1];
-            return Math.abs(o) < $o && Math.abs(a) < $o ? n <= u[0] && u[0] <= e && t <= u[1] && u[1] <= r : ie(n - u[0], o, c) && ie(u[0] - e, -o, c) && ie(t - u[1], a, c) && ie(u[1] - r, -a, c) ? (c[1] < 1 && (i[0] = u[0] + c[1] * o, i[1] = u[1] + c[1] * a), c[0] > 0 && (u[0] += c[0] * o, u[1] += c[0] * a), !0) : !1
-        }
-        return function (c) {
-            function l(i) {
-                var o = u(i, -1), a = s([0 === o || 3 === o ? n : e, o > 1 ? r : t]);
-                return a
-            }
-            function s(n) {
-                for (var t = 0, e = M.length, r = n[1], u = 0; e > u; ++u)
-                    for (var i, o = 1, a = M[u], c = a.length, l = a[0]; c > o; ++o)
-                        i = a[o], l[1] <= r ? i[1] > r && f(l, i, n) > 0 && ++t : i[1] <= r && f(l, i, n) < 0 && --t, l = i;
-                return 0 !== t
-            }
-            function f(n, t, e) {
-                return(t[0] - n[0]) * (e[1] - n[1]) - (e[0] - n[0]) * (t[1] - n[1])
-            }
-            function h(i, a, c, l) {
-                var s = 0, f = 0;
-                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {
-                    do
-                        l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t);
-                    while ((s = (s + c + 4) % 4) !== f)
-                } else
-                    l.point(a[0], a[1])
-            }
-            function g(u, i) {
-                return u >= n && e >= u && i >= t && r >= i
-            }
-            function p(n, t) {
-                g(n, t) && c.point(n, t)
-            }
-            function d() {
-                T.point = m, M && M.push(x = []), A = !0, k = !1, S = E = 0 / 0
-            }
-            function v() {
-                y && (m(b, _), w && k && q.rejoin(), y.push(q.buffer())), T.point = p, k && c.lineEnd()
-            }
-            function m(n, t) {
-                n = Math.max(-$a, Math.min($a, n)), t = Math.max(-$a, Math.min($a, t));
-                var e = g(n, t);
-                if (M && x.push([n, t]), A)
-                    b = n, _ = t, w = e, A = !1, e && (c.lineStart(), c.point(n, t));
-                else if (e && k)
-                    c.point(n, t);
-                else {
-                    var r = [S, E], u = [n, t];
-                    a(r, u) ? (k || (c.lineStart(), c.point(r[0], r[1])), c.point(u[0], u[1]), e || c.lineEnd()) : e && (c.lineStart(), c.point(n, t))
-                }
-                S = n, E = t, k = e
-            }
-            var y, M, x, b, _, w, S, E, k, A, N = c, q = Jt(), T = {point: p, lineStart: d, lineEnd: v, polygonStart: function () {
-                    c = q, y = [], M = []
-                }, polygonEnd: function () {
-                    c = N, (y = vo.merge(y)).length ? (c.polygonStart(), Xt(y, i, l, h, c), c.polygonEnd()) : s([n, t]) && (c.polygonStart(), c.lineStart(), h(null, null, 1, c), c.lineEnd(), c.polygonEnd()), y = M = x = null
-                }};
-            return T
-        }
-    }
-    function ie(n, t, e) {
-        if (Math.abs(t) < $o)
-            return 0 >= n;
-        var r = n / t;
-        if (t > 0) {
-            if (r > e[1])
-                return!1;
-            r > e[0] && (e[0] = r)
-        } else {
-            if (r < e[0])
-                return!1;
-            r < e[1] && (e[1] = r)
-        }
-        return!0
-    }
-    function oe(n, t) {
-        function e(e, r) {
-            return e = n(e, r), t(e[0], e[1])
-        }
-        return n.invert && t.invert && (e.invert = function (e, r) {
-            return e = t.invert(e, r), e && n.invert(e[0], e[1])
-        }), e
-    }
-    function ae(n) {
-        var t = 0, e = Bo / 3, r = _e(n), u = r(t, e);
-        return u.parallels = function (n) {
-            return arguments.length ? r(t = n[0] * Bo / 180, e = n[1] * Bo / 180) : [180 * (t / Bo), 180 * (e / Bo)]
-        }, u
-    }
-    function ce(n, t) {
-        function e(n, t) {
-            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;
-            return[e * Math.sin(n *= u), o - e * Math.cos(n)]
-        }
-        var r = Math.sin(n), u = (r + Math.sin(t)) / 2, i = 1 + r * (2 * u - r), o = Math.sqrt(i) / u;
-        return e.invert = function (n, t) {
-            var e = o - t;
-            return[Math.atan2(n, e) / u, O((i - (n * n + e * e) * u * u) / (2 * u))]
-        }, e
-    }
-    function le() {
-        function n(n, t) {
-            Ja += u * n - r * t, r = n, u = t
-        }
-        var t, e, r, u;
-        tc.point = function (i, o) {
-            tc.point = n, t = r = i, e = u = o
-        }, tc.lineEnd = function () {
-            n(t, e)
-        }
-    }
-    function se(n, t) {
-        Ga > n && (Ga = n), n > Qa && (Qa = n), Ka > t && (Ka = t), t > nc && (nc = t)
-    }
-    function fe() {
-        function n(n, t) {
-            o.push("M", n, ",", t, i)
-        }
-        function t(n, t) {
-            o.push("M", n, ",", t), a.point = e
-        }
-        function e(n, t) {
-            o.push("L", n, ",", t)
-        }
-        function r() {
-            a.point = n
-        }
-        function u() {
-            o.push("Z")
-        }
-        var i = he(4.5), o = [], a = {point: n, lineStart: function () {
-                a.point = t
-            }, lineEnd: r, polygonStart: function () {
-                a.lineEnd = u
-            }, polygonEnd: function () {
-                a.lineEnd = r, a.point = n
-            }, pointRadius: function (n) {
-                return i = he(n), a
-            }, result: function () {
-                if (o.length) {
-                    var n = o.join("");
-                    return o = [], n
-                }
-            }};
-        return a
-    }
-    function he(n) {
-        return"m0," + n + "a" + n + "," + n + " 0 1,1 0," + -2 * n + "a" + n + "," + n + " 0 1,1 0," + 2 * n + "z"
-    }
-    function ge(n, t) {
-        Ha += n, Fa += t, ++Pa
-    }
-    function pe() {
-        function n(n, r) {
-            var u = n - t, i = r - e, o = Math.sqrt(u * u + i * i);
-            Oa += o * (t + n) / 2, Ra += o * (e + r) / 2, Ya += o, ge(t = n, e = r)
-        }
-        var t, e;
-        rc.point = function (r, u) {
-            rc.point = n, ge(t = r, e = u)
-        }
-    }
-    function de() {
-        rc.point = ge
-    }
-    function ve() {
-        function n(n, t) {
-            var e = n - r, i = t - u, o = Math.sqrt(e * e + i * i);
-            Oa += o * (r + n) / 2, Ra += o * (u + t) / 2, Ya += o, o = u * n - r * t, Ia += o * (r + n), Ua += o * (u + t), Va += 3 * o, ge(r = n, u = t)
-        }
-        var t, e, r, u;
-        rc.point = function (i, o) {
-            rc.point = n, ge(t = r = i, e = u = o)
-        }, rc.lineEnd = function () {
-            n(t, e)
-        }
-    }
-    function me(n) {
-        function t(t, e) {
-            n.moveTo(t, e), n.arc(t, e, o, 0, 2 * Bo)
-        }
-        function e(t, e) {
-            n.moveTo(t, e), a.point = r
-        }
-        function r(t, e) {
-            n.lineTo(t, e)
-        }
-        function u() {
-            a.point = t
-        }
-        function i() {
-            n.closePath()
-        }
-        var o = 4.5, a = {point: t, lineStart: function () {
-                a.point = e
-            }, lineEnd: u, polygonStart: function () {
-                a.lineEnd = i
-            }, polygonEnd: function () {
-                a.lineEnd = u, a.point = t
-            }, pointRadius: function (n) {
-                return o = n, a
-            }, result: c};
-        return a
-    }
-    function ye(n) {
-        function t(t) {
-            function r(e, r) {
-                e = n(e, r), t.point(e[0], e[1])
-            }
-            function u() {
-                M = 0 / 0, S.point = o, t.lineStart()
-            }
-            function o(r, u) {
-                var o = Ct([r, u]), a = n(r, u);
-                e(M, x, y, b, _, w, M = a[0], x = a[1], y = r, b = o[0], _ = o[1], w = o[2], i, t), t.point(M, x)
-            }
-            function a() {
-                S.point = r, t.lineEnd()
-            }
-            function c() {
-                u(), S.point = l, S.lineEnd = s
-            }
-            function l(n, t) {
-                o(f = n, h = t), g = M, p = x, d = b, v = _, m = w, S.point = o
-            }
-            function s() {
-                e(M, x, y, b, _, w, g, p, f, d, v, m, i, t), S.lineEnd = a, a()
-            }
-            var f, h, g, p, d, v, m, y, M, x, b, _, w, S = {point: r, lineStart: u, lineEnd: a, polygonStart: function () {
-                    t.polygonStart(), S.lineStart = c
-                }, polygonEnd: function () {
-                    t.polygonEnd(), S.lineStart = u
-                }};
-            return S
-        }
-        function e(t, i, o, a, c, l, s, f, h, g, p, d, v, m) {
-            var y = s - t, M = f - i, x = y * y + M * M;
-            if (x > 4 * r && v--) {
-                var b = a + g, _ = c + p, w = l + d, S = Math.sqrt(b * b + _ * _ + w * w), E = Math.asin(w /= S), k = Math.abs(Math.abs(w) - 1) < $o ? (o + h) / 2 : Math.atan2(_, b), A = n(k, E), N = A[0], q = A[1], T = N - t, z = q - i, C = M * T - y * z;
-                (C * C / x > r || Math.abs((y * T + M * z) / x - .5) > .3 || u > a * g + c * p + l * d) && (e(t, i, o, a, c, l, N, q, k, b /= S, _ /= S, w, v, m), m.point(N, q), e(N, q, k, b, _, w, s, f, h, g, p, d, v, m))
-            }
-        }
-        var r = .5, u = Math.cos(30 * Jo), i = 16;
-        return t.precision = function (n) {
-            return arguments.length ? (i = (r = n * n) > 0 && 16, t) : Math.sqrt(r)
-        }, t
-    }
-    function Me(n) {
-        this.stream = n
-    }
-    function xe(n) {
-        var t = ye(function (t, e) {
-            return n([t * Go, e * Go])
-        });
-        return function (n) {
-            var e = new Me(n = t(n));
-            return e.point = function (t, e) {
-                n.point(t * Jo, e * Jo)
-            }, e
-        }
-    }
-    function be(n) {
-        return _e(function () {
-            return n
-        })()
-    }
-    function _e(n) {
-        function t(n) {
-            return n = a(n[0] * Jo, n[1] * Jo), [n[0] * h + c, l - n[1] * h]
-        }
-        function e(n) {
-            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Go, n[1] * Go]
-        }
-        function r() {
-            a = oe(o = Ee(m, y, M), i);
-            var n = i(d, v);
-            return c = g - n[0] * h, l = p + n[1] * h, u()
-        }
-        function u() {
-            return s && (s.valid = !1, s = null), t
-        }
-        var i, o, a, c, l, s, f = ye(function (n, t) {
-            return n = i(n, t), [n[0] * h + c, l - n[1] * h]
-        }), h = 150, g = 480, p = 250, d = 0, v = 0, m = 0, y = 0, M = 0, x = Xa, b = dt, _ = null, w = null;
-        return t.stream = function (n) {
-            return s && (s.valid = !1), s = we(o, x(f(b(n)))), s.valid = !0, s
-        }, t.clipAngle = function (n) {
-            return arguments.length ? (x = null == n ? (_ = n, Xa) : re((_ = +n) * Jo), u()) : _
-        }, t.clipExtent = function (n) {
-            return arguments.length ? (w = n, b = n ? ue(n[0][0], n[0][1], n[1][0], n[1][1]) : dt, u()) : w
-        }, t.scale = function (n) {
-            return arguments.length ? (h = +n, r()) : h
-        }, t.translate = function (n) {
-            return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]
-        }, t.center = function (n) {
-            return arguments.length ? (d = n[0] % 360 * Jo, v = n[1] % 360 * Jo, r()) : [d * Go, v * Go]
-        }, t.rotate = function (n) {
-            return arguments.length ? (m = n[0] % 360 * Jo, y = n[1] % 360 * Jo, M = n.length > 2 ? n[2] % 360 * Jo : 0, r()) : [m * Go, y * Go, M * Go]
-        }, vo.rebind(t, f, "precision"), function () {
-            return i = n.apply(this, arguments), t.invert = i.invert && e, r()
-        }
-    }
-    function we(n, t) {
-        var e = new Me(t);
-        return e.point = function (e, r) {
-            r = n(e * Jo, r * Jo), e = r[0], t.point(e > Bo ? e - 2 * Bo : -Bo > e ? e + 2 * Bo : e, r[1])
-        }, e
-    }
-    function Se(n, t) {
-        return[n, t]
-    }
-    function Ee(n, t, e) {
-        return n ? t || e ? oe(Ae(n), Ne(t, e)) : Ae(n) : t || e ? Ne(t, e) : Se
-    }
-    function ke(n) {
-        return function (t, e) {
-            return t += n, [t > Bo ? t - 2 * Bo : -Bo > t ? t + 2 * Bo : t, e]
-        }
-    }
-    function Ae(n) {
-        var t = ke(n);
-        return t.invert = ke(-n), t
-    }
-    function Ne(n, t) {
-        function e(n, t) {
-            var e = Math.cos(t), a = Math.cos(n) * e, c = Math.sin(n) * e, l = Math.sin(t), s = l * r + a * u;
-            return[Math.atan2(c * i - s * o, a * r - l * u), O(s * i + c * o)]
-        }
-        var r = Math.cos(n), u = Math.sin(n), i = Math.cos(t), o = Math.sin(t);
-        return e.invert = function (n, t) {
-            var e = Math.cos(t), a = Math.cos(n) * e, c = Math.sin(n) * e, l = Math.sin(t), s = l * i - c * o;
-            return[Math.atan2(c * i + l * o, a * r + s * u), O(s * r - a * u)]
-        }, e
-    }
-    function qe(n, t) {
-        var e = Math.cos(n), r = Math.sin(n);
-        return function (u, i, o, a) {
-            var c = o * t;
-            null != u ? (u = Te(e, u), i = Te(e, i), (o > 0 ? i > u : u > i) && (u += 2 * o * Bo)) : (u = n + 2 * o * Bo, i = n - .5 * c);
-            for (var l, s = u; o > 0?s > i:i > s; s -= c)
-                a.point((l = Pt([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])
-        }
-    }
-    function Te(n, t) {
-        var e = Ct(t);
-        e[0] -= n, Ft(e);
-        var r = P(-e[1]);
-        return((-e[2] < 0 ? -r : r) + 2 * Math.PI - $o) % (2 * Math.PI)
-    }
-    function ze(n, t, e) {
-        var r = vo.range(n, t - $o, e).concat(t);
-        return function (n) {
-            return r.map(function (t) {
-                return[n, t]
-            })
-        }
-    }
-    function Ce(n, t, e) {
-        var r = vo.range(n, t - $o, e).concat(t);
-        return function (n) {
-            return r.map(function (t) {
-                return[t, n]
-            })
-        }
-    }
-    function De(n) {
-        return n.source
-    }
-    function je(n) {
-        return n.target
-    }
-    function Le(n, t, e, r) {
-        var u = Math.cos(t), i = Math.sin(t), o = Math.cos(r), a = Math.sin(r), c = u * Math.cos(n), l = u * Math.sin(n), s = o * Math.cos(e), f = o * Math.sin(e), h = 2 * Math.asin(Math.sqrt(U(r - t) + u * o * U(e - n))), g = 1 / Math.sin(h), p = h ? function (n) {
-            var t = Math.sin(n *= h) * g, e = Math.sin(h - n) * g, r = e * c + t * s, u = e * l + t * f, o = e * i + t * a;
-            return[Math.atan2(u, r) * Go, Math.atan2(o, Math.sqrt(r * r + u * u)) * Go]
-        } : function () {
-            return[n * Go, t * Go]
-        };
-        return p.distance = h, p
-    }
-    function He() {
-        function n(n, u) {
-            var i = Math.sin(u *= Jo), o = Math.cos(u), a = Math.abs((n *= Jo) - t), c = Math.cos(a);
-            uc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o
-        }
-        var t, e, r;
-        ic.point = function (u, i) {
-            t = u * Jo, e = Math.sin(i *= Jo), r = Math.cos(i), ic.point = n
-        }, ic.lineEnd = function () {
-            ic.point = ic.lineEnd = c
-        }
-    }
-    function Fe(n, t) {
-        function e(t, e) {
-            var r = Math.cos(t), u = Math.cos(e), i = n(r * u);
-            return[i * u * Math.sin(t), i * Math.sin(e)]
-        }
-        return e.invert = function (n, e) {
-            var r = Math.sqrt(n * n + e * e), u = t(r), i = Math.sin(u), o = Math.cos(u);
-            return[Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]
-        }, e
-    }
-    function Pe(n, t) {
-        function e(n, t) {
-            var e = Math.abs(Math.abs(t) - Bo / 2) < $o ? 0 : o / Math.pow(u(t), i);
-            return[e * Math.sin(i * n), o - e * Math.cos(i * n)]
-        }
-        var r = Math.cos(n), u = function (n) {
-            return Math.tan(Bo / 4 + n / 2)
-        }, i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)), o = r * Math.pow(u(n), i) / i;
-        return i ? (e.invert = function (n, t) {
-            var e = o - t, r = F(i) * Math.sqrt(n * n + e * e);
-            return[Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Bo / 2]
-        }, e) : Re
-    }
-    function Oe(n, t) {
-        function e(n, t) {
-            var e = i - t;
-            return[e * Math.sin(u * n), i - e * Math.cos(u * n)]
-        }
-        var r = Math.cos(n), u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n), i = r / u + n;
-        return Math.abs(u) < $o ? Se : (e.invert = function (n, t) {
-            var e = i - t;
-            return[Math.atan2(n, e) / u, i - F(u) * Math.sqrt(n * n + e * e)]
-        }, e)
-    }
-    function Re(n, t) {
-        return[n, Math.log(Math.tan(Bo / 4 + t / 2))]
-    }
-    function Ye(n) {
-        var t, e = be(n), r = e.scale, u = e.translate, i = e.clipExtent;
-        return e.scale = function () {
-            var n = r.apply(e, arguments);
-            return n === e ? t ? e.clipExtent(null) : e : n
-        }, e.translate = function () {
-            var n = u.apply(e, arguments);
-            return n === e ? t ? e.clipExtent(null) : e : n
-        }, e.clipExtent = function (n) {
-            var o = i.apply(e, arguments);
-            if (o === e) {
-                if (t = null == n) {
-                    var a = Bo * r(), c = u();
-                    i([[c[0] - a, c[1] - a], [c[0] + a, c[1] + a]])
-                }
-            } else
-                t && (o = null);
-            return o
-        }, e.clipExtent(null)
-    }
-    function Ie(n, t) {
-        var e = Math.cos(t) * Math.sin(n);
-        return[Math.log((1 + e) / (1 - e)) / 2, Math.atan2(Math.tan(t), Math.cos(n))]
-    }
-    function Ue(n) {
-        function t(t) {
-            function o() {
-                l.push("M", i(n(s), a))
-            }
-            for (var c, l = [], s = [], f = -1, h = t.length, g = pt(e), p = pt(r); ++f < h; )
-                u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);
-            return s.length && o(), l.length ? l.join("") : null
-        }
-        var e = Ve, r = Ze, u = Zt, i = Xe, o = i.key, a = .7;
-        return t.x = function (n) {
-            return arguments.length ? (e = n, t) : e
-        }, t.y = function (n) {
-            return arguments.length ? (r = n, t) : r
-        }, t.defined = function (n) {
-            return arguments.length ? (u = n, t) : u
-        }, t.interpolate = function (n) {
-            return arguments.length ? (o = "function" == typeof n ? i = n : (i = fc.get(n) || Xe).key, t) : o
-        }, t.tension = function (n) {
-            return arguments.length ? (a = n, t) : a
-        }, t
-    }
-    function Ve(n) {
-        return n[0]
-    }
-    function Ze(n) {
-        return n[1]
-    }
-    function Xe(n) {
-        return n.join("L")
-    }
-    function Be(n) {
-        return Xe(n) + "Z"
-    }
-    function $e(n) {
-        for (var t = 0, e = n.length, r = n[0], u = [r[0], ",", r[1]]; ++t < e; )
-            u.push("H", (r[0] + (r = n[t])[0]) / 2, "V", r[1]);
-        return e > 1 && u.push("H", r[0]), u.join("")
-    }
-    function We(n) {
-        for (var t = 0, e = n.length, r = n[0], u = [r[0], ",", r[1]]; ++t < e; )
-            u.push("V", (r = n[t])[1], "H", r[0]);
-        return u.join("")
-    }
-    function Je(n) {
-        for (var t = 0, e = n.length, r = n[0], u = [r[0], ",", r[1]]; ++t < e; )
-            u.push("H", (r = n[t])[0], "V", r[1]);
-        return u.join("")
-    }
-    function Ge(n, t) {
-        return n.length < 4 ? Xe(n) : n[1] + nr(n.slice(1, n.length - 1), tr(n, t))
-    }
-    function Ke(n, t) {
-        return n.length < 3 ? Xe(n) : n[0] + nr((n.push(n[0]), n), tr([n[n.length - 2]].concat(n, [n[1]]), t))
-    }
-    function Qe(n, t) {
-        return n.length < 3 ? Xe(n) : n[0] + nr(n, tr(n, t))
-    }
-    function nr(n, t) {
-        if (t.length < 1 || n.length != t.length && n.length != t.length + 2)
-            return Xe(n);
-        var e = n.length != t.length, r = "", u = n[0], i = n[1], o = t[0], a = o, c = 1;
-        if (e && (r += "Q" + (i[0] - 2 * o[0] / 3) + "," + (i[1] - 2 * o[1] / 3) + "," + i[0] + "," + i[1], u = n[1], c = 2), t.length > 1) {
-            a = t[1], i = n[c], c++, r += "C" + (u[0] + o[0]) + "," + (u[1] + o[1]) + "," + (i[0] - a[0]) + "," + (i[1] - a[1]) + "," + i[0] + "," + i[1];
-            for (var l = 2; l < t.length; l++, c++)
-                i = n[c], a = t[l], r += "S" + (i[0] - a[0]) + "," + (i[1] - a[1]) + "," + i[0] + "," + i[1]
-        }
-        if (e) {
-            var s = n[c];
-            r += "Q" + (i[0] + 2 * a[0] / 3) + "," + (i[1] + 2 * a[1] / 3) + "," + s[0] + "," + s[1]
-        }
-        return r
-    }
-    function tr(n, t) {
-        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c; )
-            e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);
-        return r
-    }
-    function er(n) {
-        if (n.length < 3)
-            return Xe(n);
-        var t = 1, e = n.length, r = n[0], u = r[0], i = r[1], o = [u, u, u, (r = n[1])[0]], a = [i, i, i, r[1]], c = [u, ",", i, "L", or(pc, o), ",", or(pc, a)];
-        for (n.push(n[e - 1]); ++t <= e; )
-            r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), ar(c, o, a);
-        return n.pop(), c.push("L", r), c.join("")
-    }
-    function rr(n) {
-        if (n.length < 4)
-            return Xe(n);
-        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3; )
-            t = n[r], i.push(t[0]), o.push(t[1]);
-        for (e.push(or(pc, i) + "," + or(pc, o)), --r; ++r < u; )
-            t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), ar(e, i, o);
-        return e.join("")
-    }
-    function ur(n) {
-        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4; )
-            e = n[r % u], o.push(e[0]), a.push(e[1]);
-        for (t = [or(pc, o), ",", or(pc, a)], --r; ++r < i; )
-            e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), ar(t, o, a);
-        return t.join("")
-    }
-    function ir(n, t) {
-        var e = n.length - 1;
-        if (e)
-            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e; )
-                r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);
-        return er(n)
-    }
-    function or(n, t) {
-        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]
-    }
-    function ar(n, t, e) {
-        n.push("C", or(hc, t), ",", or(hc, e), ",", or(gc, t), ",", or(gc, e), ",", or(pc, t), ",", or(pc, e))
-    }
-    function cr(n, t) {
-        return(t[1] - n[1]) / (t[0] - n[0])
-    }
-    function lr(n) {
-        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = cr(u, i); ++t < e; )
-            r[t] = (o + (o = cr(u = i, i = n[t + 1]))) / 2;
-        return r[t] = o, r
-    }
-    function sr(n) {
-        for (var t, e, r, u, i = [], o = lr(n), a = -1, c = n.length - 1; ++a < c; )
-            t = cr(n[a], n[a + 1]), Math.abs(t) < 1e-6 ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));
-        for (a = - 1; ++a <= c; )
-            u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);
-        return i
-    }
-    function fr(n) {
-        return n.length < 3 ? Xe(n) : n[0] + nr(n, sr(n))
-    }
-    function hr(n, t, e, r) {
-        var u, i, o, a, c, l, s;
-        return u = r[n], i = u[0], o = u[1], u = r[t], a = u[0], c = u[1], u = r[e], l = u[0], s = u[1], (s - o) * (a - i) - (c - o) * (l - i) > 0
-    }
-    function gr(n, t, e) {
-        return(e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])
-    }
-    function pr(n, t, e, r) {
-        var u = n[0], i = e[0], o = t[0] - u, a = r[0] - i, c = n[1], l = e[1], s = t[1] - c, f = r[1] - l, h = (a * (c - l) - f * (u - i)) / (f * o - a * s);
-        return[u + h * o, c + h * s]
-    }
-    function dr(n) {
-        var t = n[0], e = n[n.length - 1];
-        return!(t[0] - e[0] || t[1] - e[1])
-    }
-    function vr(n, t) {
-        var e = {list: n.map(function (n, t) {
-                return{index: t, x: n[0], y: n[1]}
-            }).sort(function (n, t) {
-                return n.y < t.y ? -1 : n.y > t.y ? 1 : n.x < t.x ? -1 : n.x > t.x ? 1 : 0
-            }), bottomSite: null}, r = {list: [], leftEnd: null, rightEnd: null, init: function () {
-                r.leftEnd = r.createHalfEdge(null, "l"), r.rightEnd = r.createHalfEdge(null, "l"), r.leftEnd.r = r.rightEnd, r.rightEnd.l = r.leftEnd, r.list.unshift(r.leftEnd, r.rightEnd)
-            }, createHalfEdge: function (n, t) {
-                return{edge: n, side: t, vertex: null, l: null, r: null}
-            }, insert: function (n, t) {
-                t.l = n, t.r = n.r, n.r.l = t, n.r = t
-            }, leftBound: function (n) {
-                var t = r.leftEnd;
-                do
-                    t = t.r;
-                while (t != r.rightEnd && u.rightOf(t, n));
-                return t = t.l
-            }, del: function (n) {
-                n.l.r = n.r, n.r.l = n.l, n.edge = null
-            }, right: function (n) {
-                return n.r
-            }, left: function (n) {
-                return n.l
-            }, leftRegion: function (n) {
-                return null == n.edge ? e.bottomSite : n.edge.region[n.side]
-            }, rightRegion: function (n) {
-                return null == n.edge ? e.bottomSite : n.edge.region[vc[n.side]]
-            }}, u = {bisect: function (n, t) {
-                var e = {region: {l: n, r: t}, ep: {l: null, r: null}}, r = t.x - n.x, u = t.y - n.y, i = r > 0 ? r : -r, o = u > 0 ? u : -u;
-                return e.c = n.x * r + n.y * u + .5 * (r * r + u * u), i > o ? (e.a = 1, e.b = u / r, e.c /= r) : (e.b = 1, e.a = r / u, e.c /= u), e
-            }, intersect: function (n, t) {
-                var e = n.edge, r = t.edge;
-                if (!e || !r || e.region.r == r.region.r)
-                    return null;
-                var u = e.a * r.b - e.b * r.a;
-                if (Math.abs(u) < 1e-10)
-                    return null;
-                var i, o, a = (e.c * r.b - r.c * e.b) / u, c = (r.c * e.a - e.c * r.a) / u, l = e.region.r, s = r.region.r;
-                l.y < s.y || l.y == s.y && l.x < s.x ? (i = n, o = e) : (i = t, o = r);
-                var f = a >= o.region.r.x;
-                return f && "l" === i.side || !f && "r" === i.side ? null : {x: a, y: c}
-            }, rightOf: function (n, t) {
-                var e = n.edge, r = e.region.r, u = t.x > r.x;
-                if (u && "l" === n.side)
-                    return 1;
-                if (!u && "r" === n.side)
-                    return 0;
-                if (1 === e.a) {
-                    var i = t.y - r.y, o = t.x - r.x, a = 0, c = 0;
-                    if (!u && e.b < 0 || u && e.b >= 0 ? c = a = i >= e.b * o : (c = t.x + t.y * e.b > e.c, e.b < 0 && (c = !c), c || (a = 1)), !a) {
-                        var l = r.x - e.region.l.x;
-                        c = e.b * (o * o - i * i) < l * i * (1 + 2 * o / l + e.b * e.b), e.b < 0 && (c = !c)
-                    }
-                } else {
-                    var s = e.c - e.a * t.x, f = t.y - s, h = t.x - r.x, g = s - r.y;
-                    c = f * f > h * h + g * g
-                }
-                return"l" === n.side ? c : !c
-            }, endPoint: function (n, e, r) {
-                n.ep[e] = r, n.ep[vc[e]] && t(n)
-            }, distance: function (n, t) {
-                var e = n.x - t.x, r = n.y - t.y;
-                return Math.sqrt(e * e + r * r)
-            }}, i = {list: [], insert: function (n, t, e) {
-                n.vertex = t, n.ystar = t.y + e;
-                for (var r = 0, u = i.list, o = u.length; o > r; r++) {
-                    var a = u[r];
-                    if (!(n.ystar > a.ystar || n.ystar == a.ystar && t.x > a.vertex.x))
-                        break
-                }
-                u.splice(r, 0, n)
-            }, del: function (n) {
-                for (var t = 0, e = i.list, r = e.length; r > t && e[t] != n; ++t)
-                    ;
-                e.splice(t, 1)
-            }, empty: function () {
-                return 0 === i.list.length
-            }, nextEvent: function (n) {
-                for (var t = 0, e = i.list, r = e.length; r > t; ++t)
-                    if (e[t] == n)
-                        return e[t + 1];
-                return null
-            }, min: function () {
-                var n = i.list[0];
-                return{x: n.vertex.x, y: n.ystar}
-            }, extractMin: function () {
-                return i.list.shift()
-            }};
-        r.init(), e.bottomSite = e.list.shift();
-        for (var o, a, c, l, s, f, h, g, p, d, v, m, y, M = e.list.shift(); ; )
-            if (i.empty() || (o = i.min()), M && (i.empty() || M.y < o.y || M.y == o.y && M.x < o.x))
-                a = r.leftBound(M), c = r.right(a), h = r.rightRegion(a), m = u.bisect(h, M), f = r.createHalfEdge(m, "l"), r.insert(a, f), d = u.intersect(a, f), d && (i.del(a), i.insert(a, d, u.distance(d, M))), a = f, f = r.createHalfEdge(m, "r"), r.insert(a, f), d = u.intersect(f, c), d && i.insert(f, d, u.distance(d, M)), M = e.list.shift();
-            else {
-                if (i.empty())
-                    break;
-                a = i.extractMin(), l = r.left(a), c = r.right(a), s = r.right(c), h = r.leftRegion(a), g = r.rightRegion(c), v = a.vertex, u.endPoint(a.edge, a.side, v), u.endPoint(c.edge, c.side, v), r.del(a), i.del(c), r.del(c), y = "l", h.y > g.y && (p = h, h = g, g = p, y = "r"), m = u.bisect(h, g), f = r.createHalfEdge(m, y), r.insert(l, f), u.endPoint(m, vc[y], v), d = u.intersect(l, f), d && (i.del(l), i.insert(l, d, u.distance(d, h))), d = u.intersect(f, s), d && i.insert(f, d, u.distance(d, h))
-            }
-        for (a = r.right(r.leftEnd); a != r.rightEnd; a = r.right(a))
-            t(a.edge)
-    }
-    function mr(n) {
-        return n.x
-    }
-    function yr(n) {
-        return n.y
-    }
-    function Mr() {
-        return{leaf: !0, nodes: [], point: null, x: null, y: null}
-    }
-    function xr(n, t, e, r, u, i) {
-        if (!n(t, e, r, u, i)) {
-            var o = .5 * (e + u), a = .5 * (r + i), c = t.nodes;
-            c[0] && xr(n, c[0], e, r, o, a), c[1] && xr(n, c[1], o, r, u, a), c[2] && xr(n, c[2], e, a, o, i), c[3] && xr(n, c[3], o, a, u, i)
-        }
-    }
-    function br(n, t) {
-        n = vo.rgb(n), t = vo.rgb(t);
-        var e = n.r, r = n.g, u = n.b, i = t.r - e, o = t.g - r, a = t.b - u;
-        return function (n) {
-            return"#" + ct(Math.round(e + i * n)) + ct(Math.round(r + o * n)) + ct(Math.round(u + a * n))
-        }
-    }
-    function _r(n, t) {
-        var e, r = {}, u = {};
-        for (e in n)
-            e in t ? r[e] = Er(n[e], t[e]) : u[e] = n[e];
-        for (e in t)
-            e in n || (u[e] = t[e]);
-        return function (n) {
-            for (e in r)
-                u[e] = r[e](n);
-            return u
-        }
-    }
-    function wr(n, t) {
-        return t -= n = +n, function (e) {
-            return n + t * e
-        }
-    }
-    function Sr(n, t) {
-        var e, r, u, i, o, a = 0, c = 0, l = [], s = [];
-        for (n += "", t += "", mc.lastIndex = 0, r = 0; e = mc.exec(t); ++r)
-            e.index && l.push(t.substring(a, c = e.index)), s.push({i: l.length, x: e[0]}), l.push(null), a = mc.lastIndex;
-        for (a < t.length && l.push(t.substring(a)), r = 0, i = s.length; (e = mc.exec(n)) && i > r; ++r)
-            if (o = s[r], o.x == e[0]) {
-                if (o.i)
-                    if (null == l[o.i + 1])
-                        for (l[o.i - 1] += o.x, l.splice(o.i, 1), u = r + 1; i > u; ++u)
-                            s[u].i--;
-                    else
-                        for (l[o.i - 1] += o.x + l[o.i + 1], l.splice(o.i, 2), u = r + 1; i > u; ++u)
-                            s[u].i -= 2;
-                else if (null == l[o.i + 1])
-                    l[o.i] = o.x;
-                else
-                    for (l[o.i] = o.x + l[o.i + 1], l.splice(o.i + 1, 1), u = r + 1; i > u; ++u)
-                        s[u].i--;
-                s.splice(r, 1), i--, r--
-            } else
-                o.x = wr(parseFloat(e[0]), parseFloat(o.x));
-        for (; i > r; )
-            o = s.pop(), null == l[o.i + 1] ? l[o.i] = o.x : (l[o.i] = o.x + l[o.i + 1], l.splice(o.i + 1, 1)), i--;
-        return 1 === l.length ? null == l[0] ? (o = s[0].x, function (n) {
-            return o(n) + ""
-        }) : function () {
-            return t
-        } : function (n) {
-            for (r = 0; i > r; ++r)
-                l[(o = s[r]).i] = o.x(n);
-            return l.join("")
-        }
-    }
-    function Er(n, t) {
-        for (var e, r = vo.interpolators.length; --r >= 0 && !(e = vo.interpolators[r](n, t)); )
-            ;
-        return e
-    }
-    function kr(n, t) {
-        var e, r = [], u = [], i = n.length, o = t.length, a = Math.min(n.length, t.length);
-        for (e = 0; a > e; ++e)
-            r.push(Er(n[e], t[e]));
-        for (; i > e; ++e)
-            u[e] = n[e];
-        for (; o > e; ++e)
-            u[e] = t[e];
-        return function (n) {
-            for (e = 0; a > e; ++e)
-                u[e] = r[e](n);
-            return u
-        }
-    }
-    function Ar(n) {
-        return function (t) {
-            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)
-        }
-    }
-    function Nr(n) {
-        return function (t) {
-            return 1 - n(1 - t)
-        }
-    }
-    function qr(n) {
-        return function (t) {
-            return.5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))
-        }
-    }
-    function Tr(n) {
-        return n * n
-    }
-    function zr(n) {
-        return n * n * n
-    }
-    function Cr(n) {
-        if (0 >= n)
-            return 0;
-        if (n >= 1)
-            return 1;
-        var t = n * n, e = t * n;
-        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)
-    }
-    function Dr(n) {
-        return function (t) {
-            return Math.pow(t, n)
-        }
-    }
-    function jr(n) {
-        return 1 - Math.cos(n * Bo / 2)
-    }
-    function Lr(n) {
-        return Math.pow(2, 10 * (n - 1))
-    }
-    function Hr(n) {
-        return 1 - Math.sqrt(1 - n * n)
-    }
-    function Fr(n, t) {
-        var e;
-        return arguments.length < 2 && (t = .45), arguments.length ? e = t / (2 * Bo) * Math.asin(1 / n) : (n = 1, e = t / 4), function (r) {
-            return 1 + n * Math.pow(2, 10 * -r) * Math.sin(2 * (r - e) * Bo / t)
-        }
-    }
-    function Pr(n) {
-        return n || (n = 1.70158), function (t) {
-            return t * t * ((n + 1) * t - n)
-        }
-    }
-    function Or(n) {
-        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375
-    }
-    function Rr(n, t) {
-        n = vo.hcl(n), t = vo.hcl(t);
-        var e = n.h, r = n.c, u = n.l, i = t.h - e, o = t.c - r, a = t.l - u;
-        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360), function (n) {
-            return J(e + i * n, r + o * n, u + a * n) + ""
-        }
-    }
-    function Yr(n, t) {
-        n = vo.hsl(n), t = vo.hsl(t);
-        var e = n.h, r = n.s, u = n.l, i = t.h - e, o = t.s - r, a = t.l - u;
-        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360), function (n) {
-            return B(e + i * n, r + o * n, u + a * n) + ""
-        }
-    }
-    function Ir(n, t) {
-        n = vo.lab(n), t = vo.lab(t);
-        var e = n.l, r = n.a, u = n.b, i = t.l - e, o = t.a - r, a = t.b - u;
-        return function (n) {
-            return Q(e + i * n, r + o * n, u + a * n) + ""
-        }
-    }
-    function Ur(n, t) {
-        return t -= n, function (e) {
-            return Math.round(n + t * e)
-        }
-    }
-    function Vr(n) {
-        var t = [n.a, n.b], e = [n.c, n.d], r = Xr(t), u = Zr(t, e), i = Xr(Br(e, t, -u)) || 0;
-        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Go, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Go : 0
-    }
-    function Zr(n, t) {
-        return n[0] * t[0] + n[1] * t[1]
-    }
-    function Xr(n) {
-        var t = Math.sqrt(Zr(n, n));
-        return t && (n[0] /= t, n[1] /= t), t
-    }
-    function Br(n, t, e) {
-        return n[0] += e * t[0], n[1] += e * t[1], n
-    }
-    function $r(n, t) {
-        var e, r = [], u = [], i = vo.transform(n), o = vo.transform(t), a = i.translate, c = o.translate, l = i.rotate, s = o.rotate, f = i.skew, h = o.skew, g = i.scale, p = o.scale;
-        return a[0] != c[0] || a[1] != c[1] ? (r.push("translate(", null, ",", null, ")"), u.push({i: 1, x: wr(a[0], c[0])}, {i: 3, x: wr(a[1], c[1])})) : c[0] || c[1] ? r.push("translate(" + c + ")") : r.push(""), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({i: r.push(r.pop() + "rotate(", null, ")") - 2, x: wr(l, s)})) : s && r.push(r.pop() + "rotate(" + s + ")"), f != h ? u.push({i: r.push(r.pop() + "skewX(", null, ")") - 2, x: wr(f, h)}) : h && r.push(r.pop() + "skewX(" + h + ")"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + "scale(", null, ",", null, ")"), u.push({i: e - 4, x: wr(g[0], p[0])}, {i: e - 2, x: wr(g[1], p[1])})) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + "scale(" + p + ")"), e = u.length, function (n) {
-            for (var t, i = -1; ++i < e; )
-                r[(t = u[i]).i] = t.x(n);
-            return r.join("")
-        }
-    }
-    function Wr(n, t) {
-        return t = t - (n = +n) ? 1 / (t - n) : 0, function (e) {
-            return(e - n) * t
-        }
-    }
-    function Jr(n, t) {
-        return t = t - (n = +n) ? 1 / (t - n) : 0, function (e) {
-            return Math.max(0, Math.min(1, (e - n) * t))
-        }
-    }
-    function Gr(n) {
-        for (var t = n.source, e = n.target, r = Qr(t, e), u = [t]; t !== r; )
-            t = t.parent, u.push(t);
-        for (var i = u.length; e !== r; )
-            u.splice(i, 0, e), e = e.parent;
-        return u
-    }
-    function Kr(n) {
-        for (var t = [], e = n.parent; null != e; )
-            t.push(n), n = e, e = e.parent;
-        return t.push(n), t
-    }
-    function Qr(n, t) {
-        if (n === t)
-            return n;
-        for (var e = Kr(n), r = Kr(t), u = e.pop(), i = r.pop(), o = null; u === i; )
-            o = u, u = e.pop(), i = r.pop();
-        return o
-    }
-    function nu(n) {
-        n.fixed |= 2
-    }
-    function tu(n) {
-        n.fixed &= -7
-    }
-    function eu(n) {
-        n.fixed |= 4, n.px = n.x, n.py = n.y
-    }
-    function ru(n) {
-        n.fixed &= -5
-    }
-    function uu(n, t, e) {
-        var r = 0, u = 0;
-        if (n.charge = 0, !n.leaf)
-            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a; )
-                i = o[c], null != i && (uu(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);
-        if (n.point) {
-            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);
-            var l = t * e[n.point.index];
-            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y
-        }
-        n.cx = r / n.charge, n.cy = u / n.charge
-    }
-    function iu(n, t) {
-        return vo.rebind(n, t, "sort", "children", "value"), n.nodes = n, n.links = lu, n
-    }
-    function ou(n) {
-        return n.children
-    }
-    function au(n) {
-        return n.value
-    }
-    function cu(n, t) {
-        return t.value - n.value
-    }
-    function lu(n) {
-        return vo.merge(n.map(function (n) {
-            return(n.children || []).map(function (t) {
-                return{source: n, target: t}
-            })
-        }))
-    }
-    function su(n) {
-        return n.x
-    }
-    function fu(n) {
-        return n.y
-    }
-    function hu(n, t, e) {
-        n.y0 = t, n.y = e
-    }
-    function gu(n) {
-        return vo.range(n.length)
-    }
-    function pu(n) {
-        for (var t = -1, e = n[0].length, r = []; ++t < e; )
-            r[t] = 0;
-        return r
-    }
-    function du(n) {
-        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)
-            (t = n[e][1]) > u && (r = e, u = t);
-        return r
-    }
-    function vu(n) {
-        return n.reduce(mu, 0)
-    }
-    function mu(n, t) {
-        return n + t[1]
-    }
-    function yu(n, t) {
-        return Mu(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))
-    }
-    function Mu(n, t) {
-        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t; )
-            i[e] = u * e + r;
-        return i
-    }
-    function xu(n) {
-        return[vo.min(n), vo.max(n)]
-    }
-    function bu(n, t) {
-        return n.parent == t.parent ? 1 : 2
-    }
-    function _u(n) {
-        var t = n.children;
-        return t && t.length ? t[0] : n._tree.thread
-    }
-    function wu(n) {
-        var t, e = n.children;
-        return e && (t = e.length) ? e[t - 1] : n._tree.thread
-    }
-    function Su(n, t) {
-        var e = n.children;
-        if (e && (u = e.length))
-            for (var r, u, i = -1; ++i < u; )
-                t(r = Su(e[i], t), n) > 0 && (n = r);
-        return n
-    }
-    function Eu(n, t) {
-        return n.x - t.x
-    }
-    function ku(n, t) {
-        return t.x - n.x
-    }
-    function Au(n, t) {
-        return n.depth - t.depth
-    }
-    function Nu(n, t) {
-        function e(n, r) {
-            var u = n.children;
-            if (u && (o = u.length))
-                for (var i, o, a = null, c = -1; ++c < o; )
-                    i = u[c], e(i, a), a = i;
-            t(n, r)
-        }
-        e(n, null)
-    }
-    function qu(n) {
-        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0; )
-            t = u[i]._tree, t.prelim += e, t.mod += e, e += t.shift + (r += t.change)
-    }
-    function Tu(n, t, e) {
-        n = n._tree, t = t._tree;
-        var r = e / (t.number - n.number);
-        n.change += r, t.change -= r, t.shift += e, t.prelim += e, t.mod += e
-    }
-    function zu(n, t, e) {
-        return n._tree.ancestor.parent == t.parent ? n._tree.ancestor : e
-    }
-    function Cu(n, t) {
-        return n.value - t.value
-    }
-    function Du(n, t) {
-        var e = n._pack_next;
-        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t
-    }
-    function ju(n, t) {
-        n._pack_next = t, t._pack_prev = n
-    }
-    function Lu(n, t) {
-        var e = t.x - n.x, r = t.y - n.y, u = n.r + t.r;
-        return.999 * u * u > e * e + r * r
-    }
-    function Hu(n) {
-        function t(n) {
-            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)
-        }
-        if ((e = n.children) && (l = e.length)) {
-            var e, r, u, i, o, a, c, l, s = 1 / 0, f = -1 / 0, h = 1 / 0, g = -1 / 0;
-            if (e.forEach(Fu), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))
-                for (i = e[2], Ru(r, u, i), t(i), Du(r, i), r._pack_prev = i, Du(i, u), u = r._pack_next, o = 3; l > o; o++) {
-                    Ru(r, u, i = e[o]);
-                    var p = 0, d = 1, v = 1;
-                    for (a = u._pack_next; a !== u; a = a._pack_next, d++)
-                        if (Lu(a, i)) {
-                            p = 1;
-                            break
-                        }
-                    if (1 == p)
-                        for (c = r._pack_prev; c !== a._pack_prev && !Lu(c, i); c = c._pack_prev, v++)
-                            ;
-                    p ? (v > d || d == v && u.r < r.r ? ju(r, u = a) : ju(r = c, u), o--) : (Du(r, i), u = i, t(i))
-                }
-            var m = (s + f) / 2, y = (h + g) / 2, M = 0;
-            for (o = 0; l > o; o++)
-                i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));
-            n.r = M, e.forEach(Pu)
-        }
-    }
-    function Fu(n) {
-        n._pack_next = n._pack_prev = n
-    }
-    function Pu(n) {
-        delete n._pack_next, delete n._pack_prev
-    }
-    function Ou(n, t, e, r) {
-        var u = n.children;
-        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)
-            for (var i = -1, o = u.length; ++i < o; )
-                Ou(u[i], t, e, r)
-    }
-    function Ru(n, t, e) {
-        var r = n.r + e.r, u = t.x - n.x, i = t.y - n.y;
-        if (r && (u || i)) {
-            var o = t.r + e.r, a = u * u + i * i;
-            o *= o, r *= r;
-            var c = .5 + (r - o) / (2 * a), l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);
-            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u
-        } else
-            e.x = n.x + r, e.y = n.y
-    }
-    function Yu(n) {
-        return 1 + vo.max(n, function (n) {
-            return n.y
-        })
-    }
-    function Iu(n) {
-        return n.reduce(function (n, t) {
-            return n + t.x
-        }, 0) / n.length
-    }
-    function Uu(n) {
-        var t = n.children;
-        return t && t.length ? Uu(t[0]) : n
-    }
-    function Vu(n) {
-        var t, e = n.children;
-        return e && (t = e.length) ? Vu(e[t - 1]) : n
-    }
-    function Zu(n) {
-        return{x: n.x, y: n.y, dx: n.dx, dy: n.dy}
-    }
-    function Xu(n, t) {
-        var e = n.x + t[3], r = n.y + t[0], u = n.dx - t[1] - t[3], i = n.dy - t[0] - t[2];
-        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {x: e, y: r, dx: u, dy: i}
-    }
-    function Bu(n) {
-        var t = n[0], e = n[n.length - 1];
-        return e > t ? [t, e] : [e, t]
-    }
-    function $u(n) {
-        return n.rangeExtent ? n.rangeExtent() : Bu(n.range())
-    }
-    function Wu(n, t, e, r) {
-        var u = e(n[0], n[1]), i = r(t[0], t[1]);
-        return function (n) {
-            return i(u(n))
-        }
-    }
-    function Ju(n, t) {
-        var e, r = 0, u = n.length - 1, i = n[r], o = n[u];
-        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n
-    }
-    function Gu(n) {
-        return n ? {floor: function (t) {
-                return Math.floor(t / n) * n
-            }, ceil: function (t) {
-                return Math.ceil(t / n) * n
-            }} : Ac
-    }
-    function Ku(n, t, e, r) {
-        var u = [], i = [], o = 0, a = Math.min(n.length, t.length) - 1;
-        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a; )
-            u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));
-        return function (t) {
-            var e = vo.bisect(n, t, 1, a) - 1;
-            return i[e](u[e](t))
-        }
-    }
-    function Qu(n, t, e, r) {
-        function u() {
-            var u = Math.min(n.length, t.length) > 2 ? Ku : Wu, c = r ? Jr : Wr;
-            return o = u(n, t, c, e), a = u(t, n, c, Er), i
-        }
-        function i(n) {
-            return o(n)
-        }
-        var o, a;
-        return i.invert = function (n) {
-            return a(n)
-        }, i.domain = function (t) {
-            return arguments.length ? (n = t.map(Number), u()) : n
-        }, i.range = function (n) {
-            return arguments.length ? (t = n, u()) : t
-        }, i.rangeRound = function (n) {
-            return i.range(n).interpolate(Ur)
-        }, i.clamp = function (n) {
-            return arguments.length ? (r = n, u()) : r
-        }, i.interpolate = function (n) {
-            return arguments.length ? (e = n, u()) : e
-        }, i.ticks = function (t) {
-            return ri(n, t)
-        }, i.tickFormat = function (t, e) {
-            return ui(n, t, e)
-        }, i.nice = function (t) {
-            return ti(n, t), u()
-        }, i.copy = function () {
-            return Qu(n, t, e, r)
-        }, u()
-    }
-    function ni(n, t) {
-        return vo.rebind(n, t, "range", "rangeRound", "interpolate", "clamp")
-    }
-    function ti(n, t) {
-        return Ju(n, Gu(ei(n, t)[2]))
-    }
-    function ei(n, t) {
-        null == t && (t = 10);
-        var e = Bu(n), r = e[1] - e[0], u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)), i = t / r * u;
-        return.15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e
-    }
-    function ri(n, t) {
-        return vo.range.apply(vo, ei(n, t))
-    }
-    function ui(n, t, e) {
-        var r = -Math.floor(Math.log(ei(n, t)[2]) / Math.LN10 + .01);
-        return vo.format(e ? e.replace(Sa, function (n, t, e, u, i, o, a, c, l, s) {
-            return[t, e, u, i, o, a, c, l || "." + (r - 2 * ("%" === s)), s].join("")
-        }) : ",." + r + "f")
-    }
-    function ii(n, t, e, r) {
-        function u(n) {
-            return(e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)
-        }
-        function i(n) {
-            return e ? Math.pow(t, n) : -Math.pow(t, -n)
-        }
-        function o(t) {
-            return n(u(t))
-        }
-        return o.invert = function (t) {
-            return i(n.invert(t))
-        }, o.domain = function (t) {
-            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r
-        }, o.base = function (e) {
-            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t
-        }, o.nice = function () {
-            var t = Ju(r.map(u), e ? Math : qc);
-            return n.domain(t), r = t.map(i), o
-        }, o.ticks = function () {
-            var n = Bu(r), o = [], a = n[0], c = n[1], l = Math.floor(u(a)), s = Math.ceil(u(c)), f = t % 1 ? 2 : t;
-            if (isFinite(s - l)) {
-                if (e) {
-                    for (; s > l; l++)
-                        for (var h = 1; f > h; h++)
-                            o.push(i(l) * h);
-                    o.push(i(l))
-                } else
-                    for (o.push(i(l)); l++ < s; )
-                        for (var h = f - 1; h > 0; h--)
-                            o.push(i(l) * h);
-                for (l = 0; o[l] < a; l++)
-                    ;
-                for (s = o.length; o[s - 1] > c; s--)
-                    ;
-                o = o.slice(l, s)
-            }
-            return o
-        }, o.tickFormat = function (n, t) {
-            if (!arguments.length)
-                return Nc;
-            arguments.length < 2 ? t = Nc : "function" != typeof t && (t = vo.format(t));
-            var r, a = Math.max(.1, n / o.ticks().length), c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);
-            return function (n) {
-                return n / i(c(u(n) + r)) <= a ? t(n) : ""
-            }
-        }, o.copy = function () {
-            return ii(n.copy(), t, e, r)
-        }, ni(o, n)
-    }
-    function oi(n, t, e) {
-        function r(t) {
-            return n(u(t))
-        }
-        var u = ai(t), i = ai(1 / t);
-        return r.invert = function (t) {
-            return i(n.invert(t))
-        }, r.domain = function (t) {
-            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e
-        }, r.ticks = function (n) {
-            return ri(e, n)
-        }, r.tickFormat = function (n, t) {
-            return ui(e, n, t)
-        }, r.nice = function (n) {
-            return r.domain(ti(e, n))
-        }, r.exponent = function (o) {
-            return arguments.length ? (u = ai(t = o), i = ai(1 / t), n.domain(e.map(u)), r) : t
-        }, r.copy = function () {
-            return oi(n.copy(), t, e)
-        }, ni(r, n)
-    }
-    function ai(n) {
-        return function (t) {
-            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)
-        }
-    }
-    function ci(n, t) {
-        function e(t) {
-            return o[((i.get(t) || i.set(t, n.push(t))) - 1) % o.length]
-        }
-        function r(t, e) {
-            return vo.range(n.length).map(function (n) {
-                return t + e * n
-            })
-        }
-        var i, o, a;
-        return e.domain = function (r) {
-            if (!arguments.length)
-                return n;
-            n = [], i = new u;
-            for (var o, a = -1, c = r.length; ++a < c; )
-                i.has(o = r[a]) || i.set(o, n.push(o));
-            return e[t.t].apply(e, t.a)
-        }, e.range = function (n) {
-            return arguments.length ? (o = n, a = 0, t = {t: "range", a: arguments}, e) : o
-        }, e.rangePoints = function (u, i) {
-            arguments.length < 2 && (i = 0);
-            var c = u[0], l = u[1], s = (l - c) / (Math.max(1, n.length - 1) + i);
-            return o = r(n.length < 2 ? (c + l) / 2 : c + s * i / 2, s), a = 0, t = {t: "rangePoints", a: arguments}, e
-        }, e.rangeBands = function (u, i, c) {
-            arguments.length < 2 && (i = 0), arguments.length < 3 && (c = i);
-            var l = u[1] < u[0], s = u[l - 0], f = u[1 - l], h = (f - s) / (n.length - i + 2 * c);
-            return o = r(s + h * c, h), l && o.reverse(), a = h * (1 - i), t = {t: "rangeBands", a: arguments}, e
-        }, e.rangeRoundBands = function (u, i, c) {
-            arguments.length < 2 && (i = 0), arguments.length < 3 && (c = i);
-            var l = u[1] < u[0], s = u[l - 0], f = u[1 - l], h = Math.floor((f - s) / (n.length - i + 2 * c)), g = f - s - (n.length - i) * h;
-            return o = r(s + Math.round(g / 2), h), l && o.reverse(), a = Math.round(h * (1 - i)), t = {t: "rangeRoundBands", a: arguments}, e
-        }, e.rangeBand = function () {
-            return a
-        }, e.rangeExtent = function () {
-            return Bu(t.a[0])
-        }, e.copy = function () {
-            return ci(n, t)
-        }, e.domain(n)
-    }
-    function li(n, t) {
-        function e() {
-            var e = 0, i = t.length;
-            for (u = []; ++e < i; )
-                u[e - 1] = vo.quantile(n, e / i);
-            return r
-        }
-        function r(n) {
-            return isNaN(n = +n) ? void 0 : t[vo.bisect(u, n)]
-        }
-        var u;
-        return r.domain = function (t) {
-            return arguments.length ? (n = t.filter(function (n) {
-                return!isNaN(n)
-            }).sort(vo.ascending), e()) : n
-        }, r.range = function (n) {
-            return arguments.length ? (t = n, e()) : t
-        }, r.quantiles = function () {
-            return u
-        }, r.invertExtent = function (e) {
-            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? u[e - 1] : n[0], e < u.length ? u[e] : n[n.length - 1]]
-        }, r.copy = function () {
-            return li(n, t)
-        }, e()
-    }
-    function si(n, t, e) {
-        function r(t) {
-          

<TRUNCATED>

[44/50] [abbrv] incubator-nifi git commit: Merge branch 'develop' into nifi-27

Posted by mc...@apache.org.
Merge branch 'develop' into nifi-27


Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/f10bb3cc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/f10bb3cc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/f10bb3cc

Branch: refs/heads/develop
Commit: f10bb3ccade86247b44fe3a1905af94754ab54eb
Parents: 888d1ba 1cc3ce5
Author: Matt Gilman <ma...@gmail.com>
Authored: Tue Dec 16 09:44:24 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Tue Dec 16 09:44:24 2014 -0500

----------------------------------------------------------------------
 .gitignore                                      |   1 +
 .../nifi/src/main/assembly/dependencies.xml     |  12 +
 misc/build-order.sh                             |   4 +-
 misc/nar-maven-plugin/pom.xml                   |  21 +-
 .../src/main/java/nifi/NarMojo.java             |   4 +-
 .../nifi/controller/FileSystemSwapManager.java  |  33 ++-
 .../apache/nifi/controller/FlowController.java  |  24 +-
 .../repository/FileSystemRepository.java        |   6 +
 .../repository/StandardProcessSession.java      | 134 ++++++++-
 .../repository/StandardProvenanceReporter.java  |   4 +-
 .../repository/VolatileContentRepository.java   |   5 +
 .../nifi/remote/StandardRemoteProcessGroup.java | 100 +++----
 .../org/apache/nifi/util/ReflectionUtils.java   |  72 ++---
 .../repository/TestStandardProcessSession.java  | 283 +++++++++++++++----
 .../src/main/resources/bin/nifi-status.bat      |   8 +-
 .../resources/src/main/resources/bin/nifi.sh    |   4 +-
 .../src/main/resources/bin/run-nifi.bat         |   6 +-
 .../src/main/resources/bin/start-nifi.bat       |   7 +-
 .../src/main/resources/bin/stop-nifi.bat        |   8 +-
 .../web/nifi-web-api/nb-configuration.xml       |  18 --
 .../nifi/processors/standard/EvaluateXPath.java |  31 +-
 .../processors/standard/TestScanContent.java    |   2 +-
 .../VolatileProvenanceRepository.java           |   2 +
 .../nifi/components/PropertyDescriptor.java     |   2 +-
 .../repository/ContentRepository.java           |   6 +
 .../repository/FlowFileSwapManager.java         |   5 +-
 .../nifi/components/TestPropertyDescriptor.java |  59 ++++
 27 files changed, 651 insertions(+), 210 deletions(-)
----------------------------------------------------------------------



[13/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of slickgrid.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.core.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.core.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.core.js
index aea3567..2f097b1 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.core.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.core.js
@@ -5,419 +5,463 @@
  */
 
 (function ($) {
-    // register namespace
-    $.extend(true, window, {
-        "Slick": {
-            "Event": Event,
-            "EventData": EventData,
-            "EventHandler": EventHandler,
-            "Range": Range,
-            "NonDataRow": NonDataItem,
-            "Group": Group,
-            "GroupTotals": GroupTotals,
-            "EditorLock": EditorLock,
-            /***
-             * A global singleton editor lock.
-             * @class GlobalEditorLock
-             * @static
-             * @constructor
-             */
-            "GlobalEditorLock": new EditorLock()
-        }
-    });
+  // register namespace
+  $.extend(true, window, {
+    "Slick": {
+      "Event": Event,
+      "EventData": EventData,
+      "EventHandler": EventHandler,
+      "Range": Range,
+      "NonDataRow": NonDataItem,
+      "Group": Group,
+      "GroupTotals": GroupTotals,
+      "EditorLock": EditorLock,
+
+      /***
+       * A global singleton editor lock.
+       * @class GlobalEditorLock
+       * @static
+       * @constructor
+       */
+      "GlobalEditorLock": new EditorLock()
+    }
+  });
+
+  /***
+   * An event object for passing data to event handlers and letting them control propagation.
+   * <p>This is pretty much identical to how W3C and jQuery implement events.</p>
+   * @class EventData
+   * @constructor
+   */
+  function EventData() {
+    var isPropagationStopped = false;
+    var isImmediatePropagationStopped = false;
 
     /***
-     * An event object for passing data to event handlers and letting them control propagation.
-     * <p>This is pretty much identical to how W3C and jQuery implement events.</p>
-     * @class EventData
-     * @constructor
+     * Stops event from propagating up the DOM tree.
+     * @method stopPropagation
      */
-    function EventData() {
-        var isPropagationStopped = false;
-        var isImmediatePropagationStopped = false;
-
-        /***
-         * Stops event from propagating up the DOM tree.
-         * @method stopPropagation
-         */
-        this.stopPropagation = function () {
-            isPropagationStopped = true;
-        };
-
-        /***
-         * Returns whether stopPropagation was called on this event object.
-         * @method isPropagationStopped
-         * @return {Boolean}
-         */
-        this.isPropagationStopped = function () {
-            return isPropagationStopped;
-        };
-
-        /***
-         * Prevents the rest of the handlers from being executed.
-         * @method stopImmediatePropagation
-         */
-        this.stopImmediatePropagation = function () {
-            isImmediatePropagationStopped = true;
-        };
-
-        /***
-         * Returns whether stopImmediatePropagation was called on this event object.\
-         * @method isImmediatePropagationStopped
-         * @return {Boolean}
-         */
-        this.isImmediatePropagationStopped = function () {
-            return isImmediatePropagationStopped;
-        }
-    }
+    this.stopPropagation = function () {
+      isPropagationStopped = true;
+    };
 
     /***
-     * A simple publisher-subscriber implementation.
-     * @class Event
-     * @constructor
+     * Returns whether stopPropagation was called on this event object.
+     * @method isPropagationStopped
+     * @return {Boolean}
      */
-    function Event() {
-        var handlers = [];
-
-        /***
-         * Adds an event handler to be called when the event is fired.
-         * <p>Event handler will receive two arguments - an <code>EventData</code> and the <code>data</code>
-         * object the event was fired with.<p>
-         * @method subscribe
-         * @param fn {Function} Event handler.
-         */
-        this.subscribe = function (fn) {
-            handlers.push(fn);
-        };
-
-        /***
-         * Removes an event handler added with <code>subscribe(fn)</code>.
-         * @method unsubscribe
-         * @param fn {Function} Event handler to be removed.
-         */
-        this.unsubscribe = function (fn) {
-            for (var i = handlers.length - 1; i >= 0; i--) {
-                if (handlers[i] === fn) {
-                    handlers.splice(i, 1);
-                }
-            }
-        };
-
-        /***
-         * Fires an event notifying all subscribers.
-         * @method notify
-         * @param args {Object} Additional data object to be passed to all handlers.
-         * @param e {EventData}
-         *      Optional.
-         *      An <code>EventData</code> object to be passed to all handlers.
-         *      For DOM events, an existing W3C/jQuery event object can be passed in.
-         * @param scope {Object}
-         *      Optional.
-         *      The scope ("this") within which the handler will be executed.
-         *      If not specified, the scope will be set to the <code>Event</code> instance.
-         */
-        this.notify = function (args, e, scope) {
-            e = e || new EventData();
-            scope = scope || this;
-
-            var returnValue;
-            for (var i = 0; i < handlers.length && !(e.isPropagationStopped() || e.isImmediatePropagationStopped()); i++) {
-                returnValue = handlers[i].call(scope, e, args);
-            }
-
-            return returnValue;
-        };
-    }
+    this.isPropagationStopped = function () {
+      return isPropagationStopped;
+    };
 
-    function EventHandler() {
-        var handlers = [];
-
-        this.subscribe = function (event, handler) {
-            handlers.push({
-                event: event,
-                handler: handler
-            });
-            event.subscribe(handler);
-        };
-
-        this.unsubscribe = function (event, handler) {
-            var i = handlers.length;
-            while (i--) {
-                if (handlers[i].event === event &&
-                        handlers[i].handler === handler) {
-                    handlers.splice(i, 1);
-                    event.unsubscribe(handler);
-                    return;
-                }
-            }
-        };
-
-        this.unsubscribeAll = function () {
-            var i = handlers.length;
-            while (i--) {
-                handlers[i].event.unsubscribe(handlers[i].handler);
-            }
-            handlers = [];
-        }
+    /***
+     * Prevents the rest of the handlers from being executed.
+     * @method stopImmediatePropagation
+     */
+    this.stopImmediatePropagation = function () {
+      isImmediatePropagationStopped = true;
+    };
+
+    /***
+     * Returns whether stopImmediatePropagation was called on this event object.\
+     * @method isImmediatePropagationStopped
+     * @return {Boolean}
+     */
+    this.isImmediatePropagationStopped = function () {
+      return isImmediatePropagationStopped;
     }
+  }
+
+  /***
+   * A simple publisher-subscriber implementation.
+   * @class Event
+   * @constructor
+   */
+  function Event() {
+    var handlers = [];
+
+    /***
+     * Adds an event handler to be called when the event is fired.
+     * <p>Event handler will receive two arguments - an <code>EventData</code> and the <code>data</code>
+     * object the event was fired with.<p>
+     * @method subscribe
+     * @param fn {Function} Event handler.
+     */
+    this.subscribe = function (fn) {
+      handlers.push(fn);
+    };
 
     /***
-     * A structure containing a range of cells.
-     * @class Range
-     * @constructor
-     * @param fromRow {Integer} Starting row.
-     * @param fromCell {Integer} Starting cell.
-     * @param toRow {Integer} Optional. Ending row. Defaults to <code>fromRow</code>.
-     * @param toCell {Integer} Optional. Ending cell. Defaults to <code>fromCell</code>.
+     * Removes an event handler added with <code>subscribe(fn)</code>.
+     * @method unsubscribe
+     * @param fn {Function} Event handler to be removed.
      */
-    function Range(fromRow, fromCell, toRow, toCell) {
-        if (toRow === undefined && toCell === undefined) {
-            toRow = fromRow;
-            toCell = fromCell;
+    this.unsubscribe = function (fn) {
+      for (var i = handlers.length - 1; i >= 0; i--) {
+        if (handlers[i] === fn) {
+          handlers.splice(i, 1);
         }
+      }
+    };
+
+    /***
+     * Fires an event notifying all subscribers.
+     * @method notify
+     * @param args {Object} Additional data object to be passed to all handlers.
+     * @param e {EventData}
+     *      Optional.
+     *      An <code>EventData</code> object to be passed to all handlers.
+     *      For DOM events, an existing W3C/jQuery event object can be passed in.
+     * @param scope {Object}
+     *      Optional.
+     *      The scope ("this") within which the handler will be executed.
+     *      If not specified, the scope will be set to the <code>Event</code> instance.
+     */
+    this.notify = function (args, e, scope) {
+      e = e || new EventData();
+      scope = scope || this;
 
-        /***
-         * @property fromRow
-         * @type {Integer}
-         */
-        this.fromRow = Math.min(fromRow, toRow);
-
-        /***
-         * @property fromCell
-         * @type {Integer}
-         */
-        this.fromCell = Math.min(fromCell, toCell);
-
-        /***
-         * @property toRow
-         * @type {Integer}
-         */
-        this.toRow = Math.max(fromRow, toRow);
-
-        /***
-         * @property toCell
-         * @type {Integer}
-         */
-        this.toCell = Math.max(fromCell, toCell);
-
-        /***
-         * Returns whether a range represents a single row.
-         * @method isSingleRow
-         * @return {Boolean}
-         */
-        this.isSingleRow = function () {
-            return this.fromRow == this.toRow;
-        };
-
-        /***
-         * Returns whether a range represents a single cell.
-         * @method isSingleCell
-         * @return {Boolean}
-         */
-        this.isSingleCell = function () {
-            return this.fromRow == this.toRow && this.fromCell == this.toCell;
-        };
-
-        /***
-         * Returns whether a range contains a given cell.
-         * @method contains
-         * @param row {Integer}
-         * @param cell {Integer}
-         * @return {Boolean}
-         */
-        this.contains = function (row, cell) {
-            return row >= this.fromRow && row <= this.toRow &&
-                    cell >= this.fromCell && cell <= this.toCell;
-        };
-
-        /***
-         * Returns a readable representation of a range.
-         * @method toString
-         * @return {String}
-         */
-        this.toString = function () {
-            if (this.isSingleCell()) {
-                return "(" + this.fromRow + ":" + this.fromCell + ")";
-            }
-            else {
-                return "(" + this.fromRow + ":" + this.fromCell + " - " + this.toRow + ":" + this.toCell + ")";
-            }
+      var returnValue;
+      for (var i = 0; i < handlers.length && !(e.isPropagationStopped() || e.isImmediatePropagationStopped()); i++) {
+        returnValue = handlers[i].call(scope, e, args);
+      }
+
+      return returnValue;
+    };
+  }
+
+  function EventHandler() {
+    var handlers = [];
+
+    this.subscribe = function (event, handler) {
+      handlers.push({
+        event: event,
+        handler: handler
+      });
+      event.subscribe(handler);
+
+      return this;  // allow chaining
+    };
+
+    this.unsubscribe = function (event, handler) {
+      var i = handlers.length;
+      while (i--) {
+        if (handlers[i].event === event &&
+            handlers[i].handler === handler) {
+          handlers.splice(i, 1);
+          event.unsubscribe(handler);
+          return;
         }
+      }
+
+      return this;  // allow chaining
+    };
+
+    this.unsubscribeAll = function () {
+      var i = handlers.length;
+      while (i--) {
+        handlers[i].event.unsubscribe(handlers[i].handler);
+      }
+      handlers = [];
+
+      return this;  // allow chaining
+    }
+  }
+
+  /***
+   * A structure containing a range of cells.
+   * @class Range
+   * @constructor
+   * @param fromRow {Integer} Starting row.
+   * @param fromCell {Integer} Starting cell.
+   * @param toRow {Integer} Optional. Ending row. Defaults to <code>fromRow</code>.
+   * @param toCell {Integer} Optional. Ending cell. Defaults to <code>fromCell</code>.
+   */
+  function Range(fromRow, fromCell, toRow, toCell) {
+    if (toRow === undefined && toCell === undefined) {
+      toRow = fromRow;
+      toCell = fromCell;
     }
 
+    /***
+     * @property fromRow
+     * @type {Integer}
+     */
+    this.fromRow = Math.min(fromRow, toRow);
 
     /***
-     * A base class that all special / non-data rows (like Group and GroupTotals) derive from.
-     * @class NonDataItem
-     * @constructor
+     * @property fromCell
+     * @type {Integer}
      */
-    function NonDataItem() {
-        this.__nonDataRow = true;
-    }
+    this.fromCell = Math.min(fromCell, toCell);
 
+    /***
+     * @property toRow
+     * @type {Integer}
+     */
+    this.toRow = Math.max(fromRow, toRow);
 
     /***
-     * Information about a group of rows.
-     * @class Group
-     * @extends Slick.NonDataItem
-     * @constructor
+     * @property toCell
+     * @type {Integer}
      */
-    function Group() {
-        this.__group = true;
-        this.__updated = false;
-
-        /***
-         * Number of rows in the group.
-         * @property count
-         * @type {Integer}
-         */
-        this.count = 0;
-
-        /***
-         * Grouping value.
-         * @property value
-         * @type {Object}
-         */
-        this.value = null;
-
-        /***
-         * Formatted display value of the group.
-         * @property title
-         * @type {String}
-         */
-        this.title = null;
-
-        /***
-         * Whether a group is collapsed.
-         * @property collapsed
-         * @type {Boolean}
-         */
-        this.collapsed = false;
-
-        /***
-         * GroupTotals, if any.
-         * @property totals
-         * @type {GroupTotals}
-         */
-        this.totals = null;
-    }
+    this.toCell = Math.max(fromCell, toCell);
+
+    /***
+     * Returns whether a range represents a single row.
+     * @method isSingleRow
+     * @return {Boolean}
+     */
+    this.isSingleRow = function () {
+      return this.fromRow == this.toRow;
+    };
 
-    Group.prototype = new NonDataItem();
+    /***
+     * Returns whether a range represents a single cell.
+     * @method isSingleCell
+     * @return {Boolean}
+     */
+    this.isSingleCell = function () {
+      return this.fromRow == this.toRow && this.fromCell == this.toCell;
+    };
 
     /***
-     * Compares two Group instances.
-     * @method equals
+     * Returns whether a range contains a given cell.
+     * @method contains
+     * @param row {Integer}
+     * @param cell {Integer}
      * @return {Boolean}
-     * @param group {Group} Group instance to compare to.
      */
-    Group.prototype.equals = function (group) {
-        return this.value === group.value &&
-                this.count === group.count &&
-                this.collapsed === group.collapsed;
+    this.contains = function (row, cell) {
+      return row >= this.fromRow && row <= this.toRow &&
+          cell >= this.fromCell && cell <= this.toCell;
     };
 
     /***
-     * Information about group totals.
-     * An instance of GroupTotals will be created for each totals row and passed to the aggregators
-     * so that they can store arbitrary data in it.  That data can later be accessed by group totals
-     * formatters during the display.
-     * @class GroupTotals
-     * @extends Slick.NonDataItem
-     * @constructor
+     * Returns a readable representation of a range.
+     * @method toString
+     * @return {String}
      */
-    function GroupTotals() {
-        this.__groupTotals = true;
-
-        /***
-         * Parent Group.
-         * @param group
-         * @type {Group}
-         */
-        this.group = null;
+    this.toString = function () {
+      if (this.isSingleCell()) {
+        return "(" + this.fromRow + ":" + this.fromCell + ")";
+      }
+      else {
+        return "(" + this.fromRow + ":" + this.fromCell + " - " + this.toRow + ":" + this.toCell + ")";
+      }
     }
+  }
+
+
+  /***
+   * A base class that all special / non-data rows (like Group and GroupTotals) derive from.
+   * @class NonDataItem
+   * @constructor
+   */
+  function NonDataItem() {
+    this.__nonDataRow = true;
+  }
+
+
+  /***
+   * Information about a group of rows.
+   * @class Group
+   * @extends Slick.NonDataItem
+   * @constructor
+   */
+  function Group() {
+    this.__group = true;
+
+    /**
+     * Grouping level, starting with 0.
+     * @property level
+     * @type {Number}
+     */
+    this.level = 0;
 
-    GroupTotals.prototype = new NonDataItem();
+    /***
+     * Number of rows in the group.
+     * @property count
+     * @type {Integer}
+     */
+    this.count = 0;
 
     /***
-     * A locking helper to track the active edit controller and ensure that only a single controller
-     * can be active at a time.  This prevents a whole class of state and validation synchronization
-     * issues.  An edit controller (such as SlickGrid) can query if an active edit is in progress
-     * and attempt a commit or cancel before proceeding.
-     * @class EditorLock
-     * @constructor
+     * Grouping value.
+     * @property value
+     * @type {Object}
      */
-    function EditorLock() {
-        var activeEditController = null;
-
-        /***
-         * Returns true if a specified edit controller is active (has the edit lock).
-         * If the parameter is not specified, returns true if any edit controller is active.
-         * @method isActive
-         * @param editController {EditController}
-         * @return {Boolean}
-         */
-        this.isActive = function (editController) {
-            return (editController ? activeEditController === editController : activeEditController !== null);
-        };
-
-        /***
-         * Sets the specified edit controller as the active edit controller (acquire edit lock).
-         * If another edit controller is already active, and exception will be thrown.
-         * @method activate
-         * @param editController {EditController} edit controller acquiring the lock
-         */
-        this.activate = function (editController) {
-            if (editController === activeEditController) { // already activated?
-                return;
-            }
-            if (activeEditController !== null) {
-                throw "SlickGrid.EditorLock.activate: an editController is still active, can't activate another editController";
-            }
-            if (!editController.commitCurrentEdit) {
-                throw "SlickGrid.EditorLock.activate: editController must implement .commitCurrentEdit()";
-            }
-            if (!editController.cancelCurrentEdit) {
-                throw "SlickGrid.EditorLock.activate: editController must implement .cancelCurrentEdit()";
-            }
-            activeEditController = editController;
-        };
-
-        /***
-         * Unsets the specified edit controller as the active edit controller (release edit lock).
-         * If the specified edit controller is not the active one, an exception will be thrown.
-         * @method deactivate
-         * @param editController {EditController} edit controller releasing the lock
-         */
-        this.deactivate = function (editController) {
-            if (activeEditController !== editController) {
-                throw "SlickGrid.EditorLock.deactivate: specified editController is not the currently active one";
-            }
-            activeEditController = null;
-        };
-
-        /***
-         * Attempts to commit the current edit by calling "commitCurrentEdit" method on the active edit
-         * controller and returns whether the commit attempt was successful (commit may fail due to validation
-         * errors, etc.).  Edit controller's "commitCurrentEdit" must return true if the commit has succeeded
-         * and false otherwise.  If no edit controller is active, returns true.
-         * @method commitCurrentEdit
-         * @return {Boolean}
-         */
-        this.commitCurrentEdit = function () {
-            return (activeEditController ? activeEditController.commitCurrentEdit() : true);
-        };
-
-        /***
-         * Attempts to cancel the current edit by calling "cancelCurrentEdit" method on the active edit
-         * controller and returns whether the edit was successfully cancelled.  If no edit controller is
-         * active, returns true.
-         * @method cancelCurrentEdit
-         * @return {Boolean}
-         */
-        this.cancelCurrentEdit = function cancelCurrentEdit() {
-            return (activeEditController ? activeEditController.cancelCurrentEdit() : true);
-        };
-    }
+    this.value = null;
+
+    /***
+     * Formatted display value of the group.
+     * @property title
+     * @type {String}
+     */
+    this.title = null;
+
+    /***
+     * Whether a group is collapsed.
+     * @property collapsed
+     * @type {Boolean}
+     */
+    this.collapsed = false;
+
+    /***
+     * GroupTotals, if any.
+     * @property totals
+     * @type {GroupTotals}
+     */
+    this.totals = null;
+
+    /**
+     * Rows that are part of the group.
+     * @property rows
+     * @type {Array}
+     */
+    this.rows = [];
+
+    /**
+     * Sub-groups that are part of the group.
+     * @property groups
+     * @type {Array}
+     */
+    this.groups = null;
+
+    /**
+     * A unique key used to identify the group.  This key can be used in calls to DataView
+     * collapseGroup() or expandGroup().
+     * @property groupingKey
+     * @type {Object}
+     */
+    this.groupingKey = null;
+  }
+
+  Group.prototype = new NonDataItem();
+
+  /***
+   * Compares two Group instances.
+   * @method equals
+   * @return {Boolean}
+   * @param group {Group} Group instance to compare to.
+   */
+  Group.prototype.equals = function (group) {
+    return this.value === group.value &&
+        this.count === group.count &&
+        this.collapsed === group.collapsed &&
+        this.title === group.title;
+  };
+
+  /***
+   * Information about group totals.
+   * An instance of GroupTotals will be created for each totals row and passed to the aggregators
+   * so that they can store arbitrary data in it.  That data can later be accessed by group totals
+   * formatters during the display.
+   * @class GroupTotals
+   * @extends Slick.NonDataItem
+   * @constructor
+   */
+  function GroupTotals() {
+    this.__groupTotals = true;
+
+    /***
+     * Parent Group.
+     * @param group
+     * @type {Group}
+     */
+    this.group = null;
+
+    /***
+     * Whether the totals have been fully initialized / calculated.
+     * Will be set to false for lazy-calculated group totals.
+     * @param initialized
+     * @type {Boolean}
+     */
+    this.initialized = false;
+  }
+
+  GroupTotals.prototype = new NonDataItem();
+
+  /***
+   * A locking helper to track the active edit controller and ensure that only a single controller
+   * can be active at a time.  This prevents a whole class of state and validation synchronization
+   * issues.  An edit controller (such as SlickGrid) can query if an active edit is in progress
+   * and attempt a commit or cancel before proceeding.
+   * @class EditorLock
+   * @constructor
+   */
+  function EditorLock() {
+    var activeEditController = null;
+
+    /***
+     * Returns true if a specified edit controller is active (has the edit lock).
+     * If the parameter is not specified, returns true if any edit controller is active.
+     * @method isActive
+     * @param editController {EditController}
+     * @return {Boolean}
+     */
+    this.isActive = function (editController) {
+      return (editController ? activeEditController === editController : activeEditController !== null);
+    };
+
+    /***
+     * Sets the specified edit controller as the active edit controller (acquire edit lock).
+     * If another edit controller is already active, and exception will be thrown.
+     * @method activate
+     * @param editController {EditController} edit controller acquiring the lock
+     */
+    this.activate = function (editController) {
+      if (editController === activeEditController) { // already activated?
+        return;
+      }
+      if (activeEditController !== null) {
+        throw "SlickGrid.EditorLock.activate: an editController is still active, can't activate another editController";
+      }
+      if (!editController.commitCurrentEdit) {
+        throw "SlickGrid.EditorLock.activate: editController must implement .commitCurrentEdit()";
+      }
+      if (!editController.cancelCurrentEdit) {
+        throw "SlickGrid.EditorLock.activate: editController must implement .cancelCurrentEdit()";
+      }
+      activeEditController = editController;
+    };
+
+    /***
+     * Unsets the specified edit controller as the active edit controller (release edit lock).
+     * If the specified edit controller is not the active one, an exception will be thrown.
+     * @method deactivate
+     * @param editController {EditController} edit controller releasing the lock
+     */
+    this.deactivate = function (editController) {
+      if (activeEditController !== editController) {
+        throw "SlickGrid.EditorLock.deactivate: specified editController is not the currently active one";
+      }
+      activeEditController = null;
+    };
+
+    /***
+     * Attempts to commit the current edit by calling "commitCurrentEdit" method on the active edit
+     * controller and returns whether the commit attempt was successful (commit may fail due to validation
+     * errors, etc.).  Edit controller's "commitCurrentEdit" must return true if the commit has succeeded
+     * and false otherwise.  If no edit controller is active, returns true.
+     * @method commitCurrentEdit
+     * @return {Boolean}
+     */
+    this.commitCurrentEdit = function () {
+      return (activeEditController ? activeEditController.commitCurrentEdit() : true);
+    };
+
+    /***
+     * Attempts to cancel the current edit by calling "cancelCurrentEdit" method on the active edit
+     * controller and returns whether the edit was successfully cancelled.  If no edit controller is
+     * active, returns true.
+     * @method cancelCurrentEdit
+     * @return {Boolean}
+     */
+    this.cancelCurrentEdit = function cancelCurrentEdit() {
+      return (activeEditController ? activeEditController.cancelCurrentEdit() : true);
+    };
+  }
 })(jQuery);
 
 


[20/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of codemirror.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/1d23e6e1/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror-compressed.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror-compressed.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror-compressed.js
new file mode 100644
index 0000000..11b3fbc
--- /dev/null
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror-compressed.js
@@ -0,0 +1,16 @@
+/* CodeMirror - Minified & Bundled
+   Generated on 12/10/2014 with http://codemirror.net/doc/compress.html
+   Version: 4.8
+
+   CodeMirror Library:
+   - codemirror.js
+   Add-ons:
+   - matchbrackets.js
+   - show-hint.js
+ */
+
+!function(a){if("object"==typeof exports&&"object"==typeof module)module.exports=a();else{if("function"==typeof define&&define.amd)return define([],a);this.CodeMirror=a()}}(function(){"use strict";function w(a,b){if(!(this instanceof w))return new w(a,b);this.options=b=b?Qg(b):{},Qg(ie,b,!1),J(b);var c=b.value;"string"==typeof c&&(c=new Lf(c,b.mode)),this.doc=c;var f=this.display=new x(a,c);f.wrapper.CodeMirror=this,F(this),D(this),b.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),b.autofocus&&!o&&_c(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,draggingText:!1,highlight:new Gg,keySeq:null},d&&11>e&&setTimeout(Rg($c,this,!0),20),cd(this),ih(),Ac(this),this.curOp.forceUpdate=!0,Pf(this,c),b.autofocus&&!o||bh()==f.input?setTimeout(Rg(Hd,this),20):Id(this);for(var g in je)je.hasOwnProperty(g)&&je[g](this,b[g],le);P(this);for(var h=0;h<pe.length;++h)pe[h](this);Cc(this)}function x(a,b){var c
 =this,g=c.input=Yg("textarea",null,null,"position: absolute; padding: 0; width: 1px; height: 1em; outline: none");f?g.style.width="1000px":g.setAttribute("wrap","off"),n&&(g.style.border="1px solid black"),g.setAttribute("autocorrect","off"),g.setAttribute("autocapitalize","off"),g.setAttribute("spellcheck","false"),c.inputDiv=Yg("div",[g],null,"overflow: hidden; position: relative; width: 3px; height: 0px;"),c.scrollbarH=Yg("div",[Yg("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar"),c.scrollbarV=Yg("div",[Yg("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),c.scrollbarFiller=Yg("div",null,"CodeMirror-scrollbar-filler"),c.gutterFiller=Yg("div",null,"CodeMirror-gutter-filler"),c.lineDiv=Yg("div",null,"CodeMirror-code"),c.selectionDiv=Yg("div",null,null,"position: relative; z-index: 1"),c.cursorDiv=Yg("div",null,"CodeMirror-cursors"),c.measure=Yg("div",null,"CodeMirror-measure"),c.lineMeasure=Yg("div",null,"CodeMirror-measure"),c.lineSpace=Yg("div",[
 c.measure,c.lineMeasure,c.selectionDiv,c.cursorDiv,c.lineDiv],null,"position: relative; outline: none"),c.mover=Yg("div",[Yg("div",[c.lineSpace],"CodeMirror-lines")],null,"position: relative"),c.sizer=Yg("div",[c.mover],"CodeMirror-sizer"),c.heightForcer=Yg("div",null,null,"position: absolute; height: "+Bg+"px; width: 1px;"),c.gutters=Yg("div",null,"CodeMirror-gutters"),c.lineGutter=null,c.scroller=Yg("div",[c.sizer,c.heightForcer,c.gutters],"CodeMirror-scroll"),c.scroller.setAttribute("tabIndex","-1"),c.wrapper=Yg("div",[c.inputDiv,c.scrollbarH,c.scrollbarV,c.scrollbarFiller,c.gutterFiller,c.scroller],"CodeMirror"),d&&8>e&&(c.gutters.style.zIndex=-1,c.scroller.style.paddingRight=0),n&&(g.style.width="0px"),f||(c.scroller.draggable=!0),k&&(c.inputDiv.style.height="1px",c.inputDiv.style.position="absolute"),d&&8>e&&(c.scrollbarH.style.minHeight=c.scrollbarV.style.minWidth="18px"),a&&(a.appendChild?a.appendChild(c.wrapper):a(c.wrapper)),c.viewFrom=c.viewTo=b.first,c.view=[],c.external
 Measured=null,c.viewOffset=0,c.lastWrapHeight=c.lastWrapWidth=0,c.updateLineNumbers=null,c.lineNumWidth=c.lineNumInnerWidth=c.lineNumChars=null,c.prevInput="",c.alignWidgets=!1,c.pollingFast=!1,c.poll=new Gg,c.cachedCharWidth=c.cachedTextHeight=c.cachedPaddingH=null,c.inaccurateSelection=!1,c.maxLine=null,c.maxLineLength=0,c.maxLineChanged=!1,c.wheelDX=c.wheelDY=c.wheelStartX=c.wheelStartY=null,c.shift=!1,c.selForContextMenu=null}function y(a){a.doc.mode=w.getMode(a.options,a.doc.modeOption),z(a)}function z(a){a.doc.iter(function(a){a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null)}),a.doc.frontier=a.doc.first,Tb(a,100),a.state.modeGen++,a.curOp&&Pc(a)}function A(a){a.options.lineWrapping?(eh(a.display.wrapper,"CodeMirror-wrap"),a.display.sizer.style.minWidth=""):(dh(a.display.wrapper,"CodeMirror-wrap"),I(a)),C(a),Pc(a),kc(a),setTimeout(function(){M(a)},100)}function B(a){var b=wc(a.display),c=a.options.lineWrapping,d=c&&Math.max(5,a.display.scroller.clientWidth/xc(a.displ
 ay)-3);return function(e){if(ef(a.doc,e))return 0;var f=0;if(e.widgets)for(var g=0;g<e.widgets.length;g++)e.widgets[g].height&&(f+=e.widgets[g].height);return c?f+(Math.ceil(e.text.length/d)||1)*b:f+b}}function C(a){var b=a.doc,c=B(a);b.iter(function(a){var b=c(a);b!=a.height&&Tf(a,b)})}function D(a){a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+a.options.theme.replace(/(^|\s)\s*/g," cm-s-"),kc(a)}function E(a){F(a),Pc(a),setTimeout(function(){O(a)},20)}function F(a){var b=a.display.gutters,c=a.options.gutters;$g(b);for(var d=0;d<c.length;++d){var e=c[d],f=b.appendChild(Yg("div",null,"CodeMirror-gutter "+e));"CodeMirror-linenumbers"==e&&(a.display.lineGutter=f,f.style.width=(a.display.lineNumWidth||1)+"px")}b.style.display=d?"":"none",G(a)}function G(a){var b=a.display.gutters.offsetWidth;a.display.sizer.style.marginLeft=b+"px",a.display.scrollbarH.style.left=a.options.fixedGutter?b+"px":0}function H(a){if(0==a.height)return 0;for(var c,b=a.text.
 length,d=a;c=Ze(d);){var e=c.find(0,!0);d=e.from.line,b+=e.from.ch-e.to.ch}for(d=a;c=$e(d);){var e=c.find(0,!0);b-=d.text.length-e.from.ch,d=e.to.line,b+=d.text.length-e.to.ch}return b}function I(a){var b=a.display,c=a.doc;b.maxLine=Qf(c,c.first),b.maxLineLength=H(b.maxLine),b.maxLineChanged=!0,c.iter(function(a){var c=H(a);c>b.maxLineLength&&(b.maxLineLength=c,b.maxLine=a)})}function J(a){var b=Ng(a.gutters,"CodeMirror-linenumbers");-1==b&&a.lineNumbers?a.gutters=a.gutters.concat(["CodeMirror-linenumbers"]):b>-1&&!a.lineNumbers&&(a.gutters=a.gutters.slice(0),a.gutters.splice(b,1))}function K(a){return a.display.scroller.clientHeight-a.display.wrapper.clientHeight<Bg-3}function L(a){var b=a.display.scroller;return{clientHeight:b.clientHeight,barHeight:a.display.scrollbarV.clientHeight,scrollWidth:b.scrollWidth,clientWidth:b.clientWidth,hScrollbarTakesSpace:K(a),barWidth:a.display.scrollbarH.clientWidth,docHeight:Math.round(a.doc.height+Yb(a.display))}}function M(a,b){b||(b=L(a));var
  c=a.display,d=mh(c.measure),e=b.docHeight+Bg,f=b.scrollWidth>b.clientWidth;f&&b.scrollWidth<=b.clientWidth+1&&d>0&&!b.hScrollbarTakesSpace&&(f=!1);var g=e>b.clientHeight;if(g?(c.scrollbarV.style.display="block",c.scrollbarV.style.bottom=f?d+"px":"0",c.scrollbarV.firstChild.style.height=Math.max(0,e-b.clientHeight+(b.barHeight||c.scrollbarV.clientHeight))+"px"):(c.scrollbarV.style.display="",c.scrollbarV.firstChild.style.height="0"),f?(c.scrollbarH.style.display="block",c.scrollbarH.style.right=g?d+"px":"0",c.scrollbarH.firstChild.style.width=b.scrollWidth-b.clientWidth+(b.barWidth||c.scrollbarH.clientWidth)+"px"):(c.scrollbarH.style.display="",c.scrollbarH.firstChild.style.width="0"),f&&g?(c.scrollbarFiller.style.display="block",c.scrollbarFiller.style.height=c.scrollbarFiller.style.width=d+"px"):c.scrollbarFiller.style.display="",f&&a.options.coverGutterNextToScrollbar&&a.options.fixedGutter?(c.gutterFiller.style.display="block",c.gutterFiller.style.height=d+"px",c.gutterFiller.st
 yle.width=c.gutters.offsetWidth+"px"):c.gutterFiller.style.display="",!a.state.checkedOverlayScrollbar&&b.clientHeight>0){if(0===d){var h=p&&!l?"12px":"18px";c.scrollbarV.style.minWidth=c.scrollbarH.style.minHeight=h;var i=function(b){pg(b)!=c.scrollbarV&&pg(b)!=c.scrollbarH&&Kc(a,gd)(b)};rg(c.scrollbarV,"mousedown",i),rg(c.scrollbarH,"mousedown",i)}a.state.checkedOverlayScrollbar=!0}}function N(a,b,c){var d=c&&null!=c.top?Math.max(0,c.top):a.scroller.scrollTop;d=Math.floor(d-Xb(a));var e=c&&null!=c.bottom?c.bottom:d+a.wrapper.clientHeight,f=Vf(b,d),g=Vf(b,e);if(c&&c.ensure){var h=c.ensure.from.line,i=c.ensure.to.line;if(f>h)return{from:h,to:Vf(b,Wf(Qf(b,h))+a.wrapper.clientHeight)};if(Math.min(i,b.lastLine())>=g)return{from:Vf(b,Wf(Qf(b,i))-a.wrapper.clientHeight),to:i}}return{from:f,to:Math.max(g,f+1)}}function O(a){var b=a.display,c=b.view;if(b.alignWidgets||b.gutters.firstChild&&a.options.fixedGutter){for(var d=R(b)-b.scroller.scrollLeft+a.doc.scrollLeft,e=b.gutters.offsetWidth,
 f=d+"px",g=0;g<c.length;g++)if(!c[g].hidden){a.options.fixedGutter&&c[g].gutter&&(c[g].gutter.style.left=f);var h=c[g].alignable;if(h)for(var i=0;i<h.length;i++)h[i].style.left=f}a.options.fixedGutter&&(b.gutters.style.left=d+e+"px")}}function P(a){if(!a.options.lineNumbers)return!1;var b=a.doc,c=Q(a.options,b.first+b.size-1),d=a.display;if(c.length!=d.lineNumChars){var e=d.measure.appendChild(Yg("div",[Yg("div",c)],"CodeMirror-linenumber CodeMirror-gutter-elt")),f=e.firstChild.offsetWidth,g=e.offsetWidth-f;return d.lineGutter.style.width="",d.lineNumInnerWidth=Math.max(f,d.lineGutter.offsetWidth-g),d.lineNumWidth=d.lineNumInnerWidth+g,d.lineNumChars=d.lineNumInnerWidth?c.length:-1,d.lineGutter.style.width=d.lineNumWidth+"px",G(a),!0}return!1}function Q(a,b){return String(a.lineNumberFormatter(b+a.firstLineNumber))}function R(a){return a.scroller.getBoundingClientRect().left-a.sizer.getBoundingClientRect().left}function S(a,b,c){var d=a.display;this.viewport=b,this.visible=N(d,a.doc
 ,b),this.editorIsHidden=!d.wrapper.offsetWidth,this.wrapperHeight=d.wrapper.clientHeight,this.wrapperWidth=d.wrapper.clientWidth,this.oldViewFrom=d.viewFrom,this.oldViewTo=d.viewTo,this.oldScrollerWidth=d.scroller.clientWidth,this.force=c,this.dims=$(a)}function T(a,b){var c=a.display,d=a.doc;if(b.editorIsHidden)return Rc(a),!1;if(!b.force&&b.visible.from>=c.viewFrom&&b.visible.to<=c.viewTo&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo)&&0==Vc(a))return!1;P(a)&&(Rc(a),b.dims=$(a));var e=d.first+d.size,f=Math.max(b.visible.from-a.options.viewportMargin,d.first),g=Math.min(e,b.visible.to+a.options.viewportMargin);c.viewFrom<f&&f-c.viewFrom<20&&(f=Math.max(d.first,c.viewFrom)),c.viewTo>g&&c.viewTo-g<20&&(g=Math.min(e,c.viewTo)),v&&(f=cf(a.doc,f),g=df(a.doc,g));var h=f!=c.viewFrom||g!=c.viewTo||c.lastWrapHeight!=b.wrapperHeight||c.lastWrapWidth!=b.wrapperWidth;Uc(a,f,g),c.viewOffset=Wf(Qf(a.doc,c.viewFrom)),a.display.mover.style.top=c.viewOffset+"px";var i=Vc(a);if(!h&&0==i
 &&!b.force&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo))return!1;var j=bh();return i>4&&(c.lineDiv.style.display="none"),_(a,c.updateLineNumbers,b.dims),i>4&&(c.lineDiv.style.display=""),j&&bh()!=j&&j.offsetHeight&&j.focus(),$g(c.cursorDiv),$g(c.selectionDiv),h&&(c.lastWrapHeight=b.wrapperHeight,c.lastWrapWidth=b.wrapperWidth,Tb(a,400)),c.updateLineNumbers=null,!0}function U(a,b){for(var c=b.force,d=b.viewport,e=!0;;e=!1){if(e&&a.options.lineWrapping&&b.oldScrollerWidth!=a.display.scroller.clientWidth)c=!0;else if(c=!1,d&&null!=d.top&&(d={top:Math.min(a.doc.height+Yb(a.display)-Bg-a.display.scroller.clientHeight,d.top)}),b.visible=N(a.display,a.doc,d),b.visible.from>=a.display.viewFrom&&b.visible.to<=a.display.viewTo)break;if(!T(a,b))break;Y(a);var f=L(a);Pb(a),W(a,f),M(a,f)}vg(a,"update",a),(a.display.viewFrom!=b.oldViewFrom||a.display.viewTo!=b.oldViewTo)&&vg(a,"viewportChange",a,a.display.viewFrom,a.display.viewTo)}function V(a,b){var c=new S(a,b);if(T(a,c)){Y(a),U
 (a,c);var d=L(a);Pb(a),W(a,d),M(a,d)}}function W(a,b){a.display.sizer.style.minHeight=a.display.heightForcer.style.top=b.docHeight+"px",a.display.gutters.style.height=Math.max(b.docHeight,b.clientHeight-Bg)+"px"}function X(a,b){a.display.sizer.offsetWidth+a.display.gutters.offsetWidth<a.display.scroller.clientWidth-1&&(a.display.sizer.style.minHeight=a.display.heightForcer.style.top="0px",a.display.gutters.style.height=b.docHeight+"px")}function Y(a){for(var b=a.display,c=b.lineDiv.offsetTop,f=0;f<b.view.length;f++){var h,g=b.view[f];if(!g.hidden){if(d&&8>e){var i=g.node.offsetTop+g.node.offsetHeight;h=i-c,c=i}else{var j=g.node.getBoundingClientRect();h=j.bottom-j.top}var k=g.line.height-h;if(2>h&&(h=wc(b)),(k>.001||-.001>k)&&(Tf(g.line,h),Z(g.line),g.rest))for(var l=0;l<g.rest.length;l++)Z(g.rest[l])}}}function Z(a){if(a.widgets)for(var b=0;b<a.widgets.length;++b)a.widgets[b].height=a.widgets[b].node.offsetHeight}function $(a){for(var b=a.display,c={},d={},e=b.gutters.clientLeft,f=
 b.gutters.firstChild,g=0;f;f=f.nextSibling,++g)c[a.options.gutters[g]]=f.offsetLeft+f.clientLeft+e,d[a.options.gutters[g]]=f.clientWidth;return{fixedPos:R(b),gutterTotalWidth:b.gutters.offsetWidth,gutterLeft:c,gutterWidth:d,wrapperWidth:b.wrapper.clientWidth}}function _(a,b,c){function i(b){var c=b.nextSibling;return f&&p&&a.display.currentWheelTarget==b?b.style.display="none":b.parentNode.removeChild(b),c}for(var d=a.display,e=a.options.lineNumbers,g=d.lineDiv,h=g.firstChild,j=d.view,k=d.viewFrom,l=0;l<j.length;l++){var m=j[l];if(m.hidden);else if(m.node){for(;h!=m.node;)h=i(h);var o=e&&null!=b&&k>=b&&m.lineNumber;m.changes&&(Ng(m.changes,"gutter")>-1&&(o=!1),ab(a,m,k,c)),o&&($g(m.lineNumber),m.lineNumber.appendChild(document.createTextNode(Q(a.options,k)))),h=m.node.nextSibling}else{var n=ib(a,m,k,c);g.insertBefore(n,h)}k+=m.size}for(;h;)h=i(h)}function ab(a,b,c,d){for(var e=0;e<b.changes.length;e++){var f=b.changes[e];"text"==f?eb(a,b):"gutter"==f?gb(a,b,c,d):"class"==f?fb(b):"wi
 dget"==f&&hb(b,d)}b.changes=null}function bb(a){return a.node==a.text&&(a.node=Yg("div",null,null,"position: relative"),a.text.parentNode&&a.text.parentNode.replaceChild(a.node,a.text),a.node.appendChild(a.text),d&&8>e&&(a.node.style.zIndex=2)),a.node}function cb(a){var b=a.bgClass?a.bgClass+" "+(a.line.bgClass||""):a.line.bgClass;if(b&&(b+=" CodeMirror-linebackground"),a.background)b?a.background.className=b:(a.background.parentNode.removeChild(a.background),a.background=null);else if(b){var c=bb(a);a.background=c.insertBefore(Yg("div",null,b),c.firstChild)}}function db(a,b){var c=a.display.externalMeasured;return c&&c.line==b.line?(a.display.externalMeasured=null,b.measure=c.measure,c.built):zf(a,b)}function eb(a,b){var c=b.text.className,d=db(a,b);b.text==b.node&&(b.node=d.pre),b.text.parentNode.replaceChild(d.pre,b.text),b.text=d.pre,d.bgClass!=b.bgClass||d.textClass!=b.textClass?(b.bgClass=d.bgClass,b.textClass=d.textClass,fb(b)):c&&(b.text.className=c)}function fb(a){cb(a),a.l
 ine.wrapClass?bb(a).className=a.line.wrapClass:a.node!=a.text&&(a.node.className="");var b=a.textClass?a.textClass+" "+(a.line.textClass||""):a.line.textClass;a.text.className=b||""}function gb(a,b,c,d){b.gutter&&(b.node.removeChild(b.gutter),b.gutter=null);var e=b.line.gutterMarkers;if(a.options.lineNumbers||e){var f=bb(b),g=b.gutter=f.insertBefore(Yg("div",null,"CodeMirror-gutter-wrapper","left: "+(a.options.fixedGutter?d.fixedPos:-d.gutterTotalWidth)+"px; width: "+d.gutterTotalWidth+"px"),b.text);if(b.line.gutterClass&&(g.className+=" "+b.line.gutterClass),!a.options.lineNumbers||e&&e["CodeMirror-linenumbers"]||(b.lineNumber=g.appendChild(Yg("div",Q(a.options,c),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+d.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+a.display.lineNumInnerWidth+"px"))),e)for(var h=0;h<a.options.gutters.length;++h){var i=a.options.gutters[h],j=e.hasOwnProperty(i)&&e[i];j&&g.appendChild(Yg("div",[j],"CodeMirror-gutter-elt","left: "+d.gutterLeft[i]
 +"px; width: "+d.gutterWidth[i]+"px"))}}}function hb(a,b){a.alignable&&(a.alignable=null);for(var d,c=a.node.firstChild;c;c=d){var d=c.nextSibling;"CodeMirror-linewidget"==c.className&&a.node.removeChild(c)}jb(a,b)}function ib(a,b,c,d){var e=db(a,b);return b.text=b.node=e.pre,e.bgClass&&(b.bgClass=e.bgClass),e.textClass&&(b.textClass=e.textClass),fb(b),gb(a,b,c,d),jb(b,d),b.node}function jb(a,b){if(kb(a.line,a,b,!0),a.rest)for(var c=0;c<a.rest.length;c++)kb(a.rest[c],a,b,!1)}function kb(a,b,c,d){if(a.widgets)for(var e=bb(b),f=0,g=a.widgets;f<g.length;++f){var h=g[f],i=Yg("div",[h.node],"CodeMirror-linewidget");h.handleMouseEvents||(i.ignoreEvents=!0),lb(h,i,b,c),d&&h.above?e.insertBefore(i,b.gutter||b.text):e.appendChild(i),vg(h,"redraw")}}function lb(a,b,c,d){if(a.noHScroll){(c.alignable||(c.alignable=[])).push(b);var e=d.wrapperWidth;b.style.left=d.fixedPos+"px",a.coverGutter||(e-=d.gutterTotalWidth,b.style.paddingLeft=d.gutterTotalWidth+"px"),b.style.width=e+"px"}a.coverGutter&&(
 b.style.zIndex=5,b.style.position="relative",a.noHScroll||(b.style.marginLeft=-d.gutterTotalWidth+"px"))}function ob(a){return mb(a.line,a.ch)}function pb(a,b){return nb(a,b)<0?b:a}function qb(a,b){return nb(a,b)<0?a:b}function rb(a,b){this.ranges=a,this.primIndex=b}function sb(a,b){this.anchor=a,this.head=b}function tb(a,b){var c=a[b];a.sort(function(a,b){return nb(a.from(),b.from())}),b=Ng(a,c);for(var d=1;d<a.length;d++){var e=a[d],f=a[d-1];if(nb(f.to(),e.from())>=0){var g=qb(f.from(),e.from()),h=pb(f.to(),e.to()),i=f.empty()?e.from()==e.head:f.from()==f.head;b>=d&&--b,a.splice(--d,2,new sb(i?h:g,i?g:h))}}return new rb(a,b)}function ub(a,b){return new rb([new sb(a,b||a)],0)}function vb(a,b){return Math.max(a.first,Math.min(b,a.first+a.size-1))}function wb(a,b){if(b.line<a.first)return mb(a.first,0);var c=a.first+a.size-1;return b.line>c?mb(c,Qf(a,c).text.length):xb(b,Qf(a,b.line).text.length)}function xb(a,b){var c=a.ch;return null==c||c>b?mb(a.line,b):0>c?mb(a.line,0):a}function
  yb(a,b){return b>=a.first&&b<a.first+a.size}function zb(a,b){for(var c=[],d=0;d<b.length;d++)c[d]=wb(a,b[d]);return c}function Ab(a,b,c,d){if(a.cm&&a.cm.display.shift||a.extend){var e=b.anchor;if(d){var f=nb(c,e)<0;f!=nb(d,e)<0?(e=c,c=d):f!=nb(c,d)<0&&(c=d)}return new sb(e,c)}return new sb(d||c,c)}function Bb(a,b,c,d){Hb(a,new rb([Ab(a,a.sel.primary(),b,c)],0),d)}function Cb(a,b,c){for(var d=[],e=0;e<a.sel.ranges.length;e++)d[e]=Ab(a,a.sel.ranges[e],b[e],null);var f=tb(d,a.sel.primIndex);Hb(a,f,c)}function Db(a,b,c,d){var e=a.sel.ranges.slice(0);e[b]=c,Hb(a,tb(e,a.sel.primIndex),d)}function Eb(a,b,c,d){Hb(a,ub(b,c),d)}function Fb(a,b){var c={ranges:b.ranges,update:function(b){this.ranges=[];for(var c=0;c<b.length;c++)this.ranges[c]=new sb(wb(a,b[c].anchor),wb(a,b[c].head))}};return tg(a,"beforeSelectionChange",a,c),a.cm&&tg(a.cm,"beforeSelectionChange",a.cm,c),c.ranges!=b.ranges?tb(c.ranges,c.ranges.length-1):b}function Gb(a,b,c){var d=a.history.done,e=Lg(d);e&&e.ranges?(d[d.length
 -1]=b,Ib(a,b,c)):Hb(a,b,c)}function Hb(a,b,c){Ib(a,b,c),cg(a,a.sel,a.cm?a.cm.curOp.id:0/0,c)}function Ib(a,b,c){(zg(a,"beforeSelectionChange")||a.cm&&zg(a.cm,"beforeSelectionChange"))&&(b=Fb(a,b));var d=c&&c.bias||(nb(b.primary().head,a.sel.primary().head)<0?-1:1);Jb(a,Lb(a,b,d,!0)),c&&c.scroll===!1||!a.cm||be(a.cm)}function Jb(a,b){b.equals(a.sel)||(a.sel=b,a.cm&&(a.cm.curOp.updateInput=a.cm.curOp.selectionChanged=!0,yg(a.cm)),vg(a,"cursorActivity",a))}function Kb(a){Jb(a,Lb(a,a.sel,null,!1),Dg)}function Lb(a,b,c,d){for(var e,f=0;f<b.ranges.length;f++){var g=b.ranges[f],h=Mb(a,g.anchor,c,d),i=Mb(a,g.head,c,d);(e||h!=g.anchor||i!=g.head)&&(e||(e=b.ranges.slice(0,f)),e[f]=new sb(h,i))}return e?tb(e,b.primIndex):b}function Mb(a,b,c,d){var e=!1,f=b,g=c||1;a.cantEdit=!1;a:for(;;){var h=Qf(a,f.line);if(h.markedSpans)for(var i=0;i<h.markedSpans.length;++i){var j=h.markedSpans[i],k=j.marker;if((null==j.from||(k.inclusiveLeft?j.from<=f.ch:j.from<f.ch))&&(null==j.to||(k.inclusiveRight?j.to>=
 f.ch:j.to>f.ch))){if(d&&(tg(k,"beforeCursorEnter"),k.explicitlyCleared)){if(h.markedSpans){--i;continue}break}if(!k.atomic)continue;var l=k.find(0>g?-1:1);if(0==nb(l,f)&&(l.ch+=g,l.ch<0?l=l.line>a.first?wb(a,mb(l.line-1)):null:l.ch>h.text.length&&(l=l.line<a.first+a.size-1?mb(l.line+1,0):null),!l)){if(e)return d?(a.cantEdit=!0,mb(a.first,0)):Mb(a,b,c,!0);e=!0,l=b,g=-g}f=l;continue a}}return f}}function Nb(a){for(var b=a.display,c=a.doc,d={},e=d.cursors=document.createDocumentFragment(),f=d.selection=document.createDocumentFragment(),g=0;g<c.sel.ranges.length;g++){var h=c.sel.ranges[g],i=h.empty();(i||a.options.showCursorWhenSelecting)&&Qb(a,h,e),i||Rb(a,h,f)}if(a.options.moveInputWithCursor){var j=qc(a,c.sel.primary().head,"div"),k=b.wrapper.getBoundingClientRect(),l=b.lineDiv.getBoundingClientRect();d.teTop=Math.max(0,Math.min(b.wrapper.clientHeight-10,j.top+l.top-k.top)),d.teLeft=Math.max(0,Math.min(b.wrapper.clientWidth-10,j.left+l.left-k.left))}return d}function Ob(a,b){_g(a.dis
 play.cursorDiv,b.cursors),_g(a.display.selectionDiv,b.selection),null!=b.teTop&&(a.display.inputDiv.style.top=b.teTop+"px",a.display.inputDiv.style.left=b.teLeft+"px")}function Pb(a){Ob(a,Nb(a))}function Qb(a,b,c){var d=qc(a,b.head,"div",null,null,!a.options.singleCursorHeightPerLine),e=c.appendChild(Yg("div","\xa0","CodeMirror-cursor"));if(e.style.left=d.left+"px",e.style.top=d.top+"px",e.style.height=Math.max(0,d.bottom-d.top)*a.options.cursorHeight+"px",d.other){var f=c.appendChild(Yg("div","\xa0","CodeMirror-cursor CodeMirror-secondarycursor"));f.style.display="",f.style.left=d.other.left+"px",f.style.top=d.other.top+"px",f.style.height=.85*(d.other.bottom-d.other.top)+"px"}}function Rb(a,b,c){function j(a,b,c,d){0>b&&(b=0),b=Math.round(b),d=Math.round(d),f.appendChild(Yg("div",null,"CodeMirror-selected","position: absolute; left: "+a+"px; top: "+b+"px; width: "+(null==c?i-a:c)+"px; height: "+(d-b)+"px"))}function k(b,c,d){function m(c,d){return pc(a,mb(b,c),"div",f,d)}var k,l,f
 =Qf(e,b),g=f.text.length;return xh(Xf(f),c||0,null==d?g:d,function(a,b,e){var n,o,p,f=m(a,"left");if(a==b)n=f,o=p=f.left;else{if(n=m(b-1,"right"),"rtl"==e){var q=f;f=n,n=q}o=f.left,p=n.right}null==c&&0==a&&(o=h),n.top-f.top>3&&(j(o,f.top,null,f.bottom),o=h,f.bottom<n.top&&j(o,f.bottom,null,n.top)),null==d&&b==g&&(p=i),(!k||f.top<k.top||f.top==k.top&&f.left<k.left)&&(k=f),(!l||n.bottom>l.bottom||n.bottom==l.bottom&&n.right>l.right)&&(l=n),h+1>o&&(o=h),j(o,n.top,p-o,n.bottom)}),{start:k,end:l}}var d=a.display,e=a.doc,f=document.createDocumentFragment(),g=Zb(a.display),h=g.left,i=d.lineSpace.offsetWidth-g.right,l=b.from(),m=b.to();if(l.line==m.line)k(l.line,l.ch,m.ch);else{var n=Qf(e,l.line),o=Qf(e,m.line),p=af(n)==af(o),q=k(l.line,l.ch,p?n.text.length+1:null).end,r=k(m.line,p?0:null,m.ch).start;p&&(q.top<r.top-2?(j(q.right,q.top,null,q.bottom),j(h,r.top,r.left,r.bottom)):j(q.right,q.top,r.left-q.right,q.bottom)),q.bottom<r.top&&j(h,q.bottom,null,r.top)}c.appendChild(f)}function Sb(a){
 if(a.state.focused){var b=a.display;clearInterval(b.blinker);var c=!0;b.cursorDiv.style.visibility="",a.options.cursorBlinkRate>0?b.blinker=setInterval(function(){b.cursorDiv.style.visibility=(c=!c)?"":"hidden"},a.options.cursorBlinkRate):a.options.cursorBlinkRate<0&&(b.cursorDiv.style.visibility="hidden")}}function Tb(a,b){a.doc.mode.startState&&a.doc.frontier<a.display.viewTo&&a.state.highlight.set(b,Rg(Ub,a))}function Ub(a){var b=a.doc;if(b.frontier<b.first&&(b.frontier=b.first),!(b.frontier>=a.display.viewTo)){var c=+new Date+a.options.workTime,d=re(b.mode,Wb(a,b.frontier)),e=[];b.iter(b.frontier,Math.min(b.first+b.size,a.display.viewTo+500),function(f){if(b.frontier>=a.display.viewFrom){var g=f.styles,h=tf(a,f,d,!0);f.styles=h.styles;var i=f.styleClasses,j=h.classes;j?f.styleClasses=j:i&&(f.styleClasses=null);for(var k=!g||g.length!=f.styles.length||i!=j&&(!i||!j||i.bgClass!=j.bgClass||i.textClass!=j.textClass),l=0;!k&&l<g.length;++l)k=g[l]!=f.styles[l];k&&e.push(b.frontier),f.
 stateAfter=re(b.mode,d)}else vf(a,f.text,d),f.stateAfter=0==b.frontier%5?re(b.mode,d):null;return++b.frontier,+new Date>c?(Tb(a,a.options.workDelay),!0):void 0}),e.length&&Jc(a,function(){for(var b=0;b<e.length;b++)Qc(a,e[b],"text")})}}function Vb(a,b,c){for(var d,e,f=a.doc,g=c?-1:b-(a.doc.mode.innerMode?1e3:100),h=b;h>g;--h){if(h<=f.first)return f.first;var i=Qf(f,h-1);if(i.stateAfter&&(!c||h<=f.frontier))return h;var j=Hg(i.text,null,a.options.tabSize);(null==e||d>j)&&(e=h-1,d=j)}return e}function Wb(a,b,c){var d=a.doc,e=a.display;if(!d.mode.startState)return!0;var f=Vb(a,b,c),g=f>d.first&&Qf(d,f-1).stateAfter;return g=g?re(d.mode,g):se(d.mode),d.iter(f,b,function(c){vf(a,c.text,g);var h=f==b-1||0==f%5||f>=e.viewFrom&&f<e.viewTo;c.stateAfter=h?re(d.mode,g):null,++f}),c&&(d.frontier=f),g}function Xb(a){return a.lineSpace.offsetTop}function Yb(a){return a.mover.offsetHeight-a.lineSpace.offsetHeight}function Zb(a){if(a.cachedPaddingH)return a.cachedPaddingH;var b=_g(a.measure,Yg("pre
 ","x")),c=window.getComputedStyle?window.getComputedStyle(b):b.currentStyle,d={left:parseInt(c.paddingLeft),right:parseInt(c.paddingRight)};return isNaN(d.left)||isNaN(d.right)||(a.cachedPaddingH=d),d}function $b(a,b,c){var d=a.options.lineWrapping,e=d&&a.display.scroller.clientWidth;if(!b.measure.heights||d&&b.measure.width!=e){var f=b.measure.heights=[];if(d){b.measure.width=e;for(var g=b.text.firstChild.getClientRects(),h=0;h<g.length-1;h++){var i=g[h],j=g[h+1];Math.abs(i.bottom-j.bottom)>2&&f.push((i.bottom+j.top)/2-c.top)}}f.push(c.bottom-c.top)}}function _b(a,b,c){if(a.line==b)return{map:a.measure.map,cache:a.measure.cache};for(var d=0;d<a.rest.length;d++)if(a.rest[d]==b)return{map:a.measure.maps[d],cache:a.measure.caches[d]};for(var d=0;d<a.rest.length;d++)if(Uf(a.rest[d])>c)return{map:a.measure.maps[d],cache:a.measure.caches[d],before:!0}}function ac(a,b){b=af(b);var c=Uf(b),d=a.display.externalMeasured=new Nc(a.doc,b,c);d.lineN=c;var e=d.built=zf(a,d);return d.text=e.pre,_g
 (a.display.lineMeasure,e.pre),d}function bc(a,b,c,d){return ec(a,dc(a,b),c,d)}function cc(a,b){if(b>=a.display.viewFrom&&b<a.display.viewTo)return a.display.view[Sc(a,b)];var c=a.display.externalMeasured;return c&&b>=c.lineN&&b<c.lineN+c.size?c:void 0}function dc(a,b){var c=Uf(b),d=cc(a,c);d&&!d.text?d=null:d&&d.changes&&ab(a,d,c,$(a)),d||(d=ac(a,b));var e=_b(d,b,c);return{line:b,view:d,rect:null,map:e.map,cache:e.cache,before:e.before,hasHeights:!1}}function ec(a,b,c,d,e){b.before&&(c=-1);var g,f=c+(d||"");return b.cache.hasOwnProperty(f)?g=b.cache[f]:(b.rect||(b.rect=b.view.text.getBoundingClientRect()),b.hasHeights||($b(a,b.view,b.rect),b.hasHeights=!0),g=gc(a,b,c,d),g.bogus||(b.cache[f]=g)),{left:g.left,right:g.right,top:e?g.rtop:g.top,bottom:e?g.rbottom:g.bottom}}function gc(a,b,c,f){for(var h,i,j,k,g=b.map,l=0;l<g.length;l+=3){var m=g[l],n=g[l+1];if(m>c?(i=0,j=1,k="left"):n>c?(i=c-m,j=i+1):(l==g.length-3||c==n&&g[l+3]>c)&&(j=n-m,i=j-1,c>=n&&(k="right")),null!=i){if(h=g[l+2],m=
 =n&&f==(h.insertLeft?"left":"right")&&(k=f),"left"==f&&0==i)for(;l&&g[l-2]==g[l-3]&&g[l-1].insertLeft;)h=g[(l-=3)+2],k="left";if("right"==f&&i==n-m)for(;l<g.length-3&&g[l+3]==g[l+4]&&!g[l+5].insertLeft;)h=g[(l+=3)+2],k="right";break}}var o;if(3==h.nodeType){for(var l=0;4>l;l++){for(;i&&Xg(b.line.text.charAt(m+i));)--i;for(;n>m+j&&Xg(b.line.text.charAt(m+j));)++j;if(d&&9>e&&0==i&&j==n-m)o=h.parentNode.getBoundingClientRect();else if(d&&a.options.lineWrapping){var p=Zg(h,i,j).getClientRects();o=p.length?p["right"==f?p.length-1:0]:fc}else o=Zg(h,i,j).getBoundingClientRect()||fc;if(o.left||o.right||0==i)break;j=i,i-=1,k="right"}d&&11>e&&(o=hc(a.display.measure,o))}else{i>0&&(k=f="right");var p;o=a.options.lineWrapping&&(p=h.getClientRects()).length>1?p["right"==f?p.length-1:0]:h.getBoundingClientRect()}if(d&&9>e&&!i&&(!o||!o.left&&!o.right)){var q=h.parentNode.getClientRects()[0];o=q?{left:q.left,right:q.left+xc(a.display),top:q.top,bottom:q.bottom}:fc}for(var r=o.top-b.rect.top,s=o.bot
 tom-b.rect.top,t=(r+s)/2,u=b.view.measure.heights,l=0;l<u.length-1&&!(t<u[l]);l++);var v=l?u[l-1]:0,w=u[l],x={left:("right"==k?o.right:o.left)-b.rect.left,right:("left"==k?o.left:o.right)-b.rect.left,top:v,bottom:w};return o.left||o.right||(x.bogus=!0),a.options.singleCursorHeightPerLine||(x.rtop=r,x.rbottom=s),x}function hc(a,b){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!vh(a))return b;var c=screen.logicalXDPI/screen.deviceXDPI,d=screen.logicalYDPI/screen.deviceYDPI;return{left:b.left*c,right:b.right*c,top:b.top*d,bottom:b.bottom*d}}function ic(a){if(a.measure&&(a.measure.cache={},a.measure.heights=null,a.rest))for(var b=0;b<a.rest.length;b++)a.measure.caches[b]={}}function jc(a){a.display.externalMeasure=null,$g(a.display.lineMeasure);for(var b=0;b<a.display.view.length;b++)ic(a.display.view[b])}function kc(a){jc(a),a.display.cachedCharWidth=a.display.cachedTextHeight=a.display.cachedPaddingH=null,a.options.lineWrapping||(a.display.maxLine
 Changed=!0),a.display.lineNumChars=null}function lc(){return window.pageXOffset||(document.documentElement||document.body).scrollLeft}function mc(){return window.pageYOffset||(document.documentElement||document.body).scrollTop}function nc(a,b,c,d){if(b.widgets)for(var e=0;e<b.widgets.length;++e)if(b.widgets[e].above){var f=jf(b.widgets[e]);c.top+=f,c.bottom+=f}if("line"==d)return c;d||(d="local");var g=Wf(b);if("local"==d?g+=Xb(a.display):g-=a.display.viewOffset,"page"==d||"window"==d){var h=a.display.lineSpace.getBoundingClientRect();g+=h.top+("window"==d?0:mc());var i=h.left+("window"==d?0:lc());c.left+=i,c.right+=i}return c.top+=g,c.bottom+=g,c}function oc(a,b,c){if("div"==c)return b;var d=b.left,e=b.top;if("page"==c)d-=lc(),e-=mc();else if("local"==c||!c){var f=a.display.sizer.getBoundingClientRect();d+=f.left,e+=f.top}var g=a.display.lineSpace.getBoundingClientRect();return{left:d-g.left,top:e-g.top}}function pc(a,b,c,d,e){return d||(d=Qf(a.doc,b.line)),nc(a,d,bc(a,d,b.ch,e),c)
 }function qc(a,b,c,d,e,f){function g(b,g){var h=ec(a,e,b,g?"right":"left",f);return g?h.left=h.right:h.right=h.left,nc(a,d,h,c)}function h(a,b){var c=i[b],d=c.level%2;return a==yh(c)&&b&&c.level<i[b-1].level?(c=i[--b],a=zh(c)-(c.level%2?0:1),d=!0):a==zh(c)&&b<i.length-1&&c.level<i[b+1].level&&(c=i[++b],a=yh(c)-c.level%2,d=!1),d&&a==c.to&&a>c.from?g(a-1):g(a,d)}d=d||Qf(a.doc,b.line),e||(e=dc(a,d));var i=Xf(d),j=b.ch;if(!i)return g(j);var k=Hh(i,j),l=h(j,k);return null!=Gh&&(l.other=h(j,Gh)),l}function rc(a,b){var c=0,b=wb(a.doc,b);a.options.lineWrapping||(c=xc(a.display)*b.ch);var d=Qf(a.doc,b.line),e=Wf(d)+Xb(a.display);return{left:c,right:c,top:e,bottom:e+d.height}}function sc(a,b,c,d){var e=mb(a,b);return e.xRel=d,c&&(e.outside=!0),e}function tc(a,b,c){var d=a.doc;if(c+=a.display.viewOffset,0>c)return sc(d.first,0,!0,-1);var e=Vf(d,c),f=d.first+d.size-1;if(e>f)return sc(d.first+d.size-1,Qf(d,f).text.length,!0,1);0>b&&(b=0);for(var g=Qf(d,e);;){var h=uc(a,g,e,b,c),i=$e(g),j=i&&i.fi
 nd(0,!0);if(!i||!(h.ch>j.from.ch||h.ch==j.from.ch&&h.xRel>0))return h;e=Uf(g=j.to.line)}}function uc(a,b,c,d,e){function j(d){var e=qc(a,mb(c,d),"line",b,i);return g=!0,f>e.bottom?e.left-h:f<e.top?e.left+h:(g=!1,e.left)}var f=e-Wf(b),g=!1,h=2*a.display.wrapper.clientWidth,i=dc(a,b),k=Xf(b),l=b.text.length,m=Ah(b),n=Bh(b),o=j(m),p=g,q=j(n),r=g;if(d>q)return sc(c,n,r,1);for(;;){if(k?n==m||n==Jh(b,m,1):1>=n-m){for(var s=o>d||q-d>=d-o?m:n,t=d-(s==m?o:q);Xg(b.text.charAt(s));)++s;var u=sc(c,s,s==m?p:r,-1>t?-1:t>1?1:0);return u}var v=Math.ceil(l/2),w=m+v;if(k){w=m;for(var x=0;v>x;++x)w=Jh(b,w,1)}var y=j(w);y>d?(n=w,q=y,(r=g)&&(q+=1e3),l=v):(m=w,o=y,p=g,l-=v)}}function wc(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(null==vc){vc=Yg("pre");for(var b=0;49>b;++b)vc.appendChild(document.createTextNode("x")),vc.appendChild(Yg("br"));vc.appendChild(document.createTextNode("x"))}_g(a.measure,vc);var c=vc.offsetHeight/50;return c>3&&(a.cachedTextHeight=c),$g(a.measure),c||1}function
  xc(a){if(null!=a.cachedCharWidth)return a.cachedCharWidth;var b=Yg("span","xxxxxxxxxx"),c=Yg("pre",[b]);_g(a.measure,c);var d=b.getBoundingClientRect(),e=(d.right-d.left)/10;return e>2&&(a.cachedCharWidth=e),e||10}function Ac(a){a.curOp={cm:a,viewChanged:!1,startHeight:a.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,id:++zc},yc?yc.ops.push(a.curOp):a.curOp.ownsGroup=yc={ops:[a.curOp],delayedCallbacks:[]}}function Bc(a){var b=a.delayedCallbacks,c=0;do{for(;c<b.length;c++)b[c]();for(var d=0;d<a.ops.length;d++){var e=a.ops[d];if(e.cursorActivityHandlers)for(;e.cursorActivityCalled<e.cursorActivityHandlers.length;)e.cursorActivityHandlers[e.cursorActivityCalled++](e.cm)}}while(c<b.length)}function Cc(a){var b=a.curOp,c=b.ownsGroup;if(c)try{Bc(c)}finally{yc=null;for(var d=0;d<c.ops.length;d++)c.ops[d].cm.curOp=null;Dc(c)}}function
  Dc(a){for(var b=a.ops,c=0;c<b.length;c++)Ec(b[c]);for(var c=0;c<b.length;c++)Fc(b[c]);for(var c=0;c<b.length;c++)Gc(b[c]);
+for(var c=0;c<b.length;c++)Hc(b[c]);for(var c=0;c<b.length;c++)Ic(b[c])}function Ec(a){var b=a.cm,c=b.display;a.updateMaxLine&&I(b),a.mustUpdate=a.viewChanged||a.forceUpdate||null!=a.scrollTop||a.scrollToPos&&(a.scrollToPos.from.line<c.viewFrom||a.scrollToPos.to.line>=c.viewTo)||c.maxLineChanged&&b.options.lineWrapping,a.update=a.mustUpdate&&new S(b,a.mustUpdate&&{top:a.scrollTop,ensure:a.scrollToPos},a.forceUpdate)}function Fc(a){a.updatedDisplay=a.mustUpdate&&T(a.cm,a.update)}function Gc(a){var b=a.cm,c=b.display;a.updatedDisplay&&Y(b),a.barMeasure=L(b),c.maxLineChanged&&!b.options.lineWrapping&&(a.adjustWidthTo=bc(b,c.maxLine,c.maxLine.text.length).left+3,a.maxScrollLeft=Math.max(0,c.sizer.offsetLeft+a.adjustWidthTo+Bg-c.scroller.clientWidth)),(a.updatedDisplay||a.selectionChanged)&&(a.newSelectionNodes=Nb(b))}function Hc(a){var b=a.cm;null!=a.adjustWidthTo&&(b.display.sizer.style.minWidth=a.adjustWidthTo+"px",a.maxScrollLeft<b.doc.scrollLeft&&sd(b,Math.min(b.display.scroller.scr
 ollLeft,a.maxScrollLeft),!0),b.display.maxLineChanged=!1),a.newSelectionNodes&&Ob(b,a.newSelectionNodes),a.updatedDisplay&&W(b,a.barMeasure),(a.updatedDisplay||a.startHeight!=b.doc.height)&&M(b,a.barMeasure),a.selectionChanged&&Sb(b),b.state.focused&&a.updateInput&&$c(b,a.typing)}function Ic(a){var b=a.cm,c=b.display,d=b.doc;if(null!=a.adjustWidthTo&&Math.abs(a.barMeasure.scrollWidth-b.display.scroller.scrollWidth)>1&&M(b),a.updatedDisplay&&U(b,a.update),null==c.wheelStartX||null==a.scrollTop&&null==a.scrollLeft&&!a.scrollToPos||(c.wheelStartX=c.wheelStartY=null),null!=a.scrollTop&&(c.scroller.scrollTop!=a.scrollTop||a.forceScroll)){var e=Math.max(0,Math.min(c.scroller.scrollHeight-c.scroller.clientHeight,a.scrollTop));c.scroller.scrollTop=c.scrollbarV.scrollTop=d.scrollTop=e}if(null!=a.scrollLeft&&(c.scroller.scrollLeft!=a.scrollLeft||a.forceScroll)){var g=Math.max(0,Math.min(c.scroller.scrollWidth-c.scroller.clientWidth,a.scrollLeft));c.scroller.scrollLeft=c.scrollbarH.scrollLeft=
 d.scrollLeft=g,O(b)}if(a.scrollToPos){var h=Zd(b,wb(d,a.scrollToPos.from),wb(d,a.scrollToPos.to),a.scrollToPos.margin);a.scrollToPos.isCursor&&b.state.focused&&Yd(b,h)}var i=a.maybeHiddenMarkers,j=a.maybeUnhiddenMarkers;if(i)for(var k=0;k<i.length;++k)i[k].lines.length||tg(i[k],"hide");if(j)for(var k=0;k<j.length;++k)j[k].lines.length&&tg(j[k],"unhide");c.wrapper.offsetHeight&&(d.scrollTop=b.display.scroller.scrollTop),a.updatedDisplay&&f&&(b.options.lineWrapping&&X(b,a.barMeasure),a.barMeasure.scrollWidth>a.barMeasure.clientWidth&&a.barMeasure.scrollWidth<a.barMeasure.clientWidth+1&&!K(b)&&M(b)),a.changeObjs&&tg(b,"changes",b,a.changeObjs)}function Jc(a,b){if(a.curOp)return b();Ac(a);try{return b()}finally{Cc(a)}}function Kc(a,b){return function(){if(a.curOp)return b.apply(a,arguments);Ac(a);try{return b.apply(a,arguments)}finally{Cc(a)}}}function Lc(a){return function(){if(this.curOp)return a.apply(this,arguments);Ac(this);try{return a.apply(this,arguments)}finally{Cc(this)}}}func
 tion Mc(a){return function(){var b=this.cm;if(!b||b.curOp)return a.apply(this,arguments);Ac(b);try{return a.apply(this,arguments)}finally{Cc(b)}}}function Nc(a,b,c){this.line=b,this.rest=bf(b),this.size=this.rest?Uf(Lg(this.rest))-c+1:1,this.node=this.text=null,this.hidden=ef(a,b)}function Oc(a,b,c){for(var e,d=[],f=b;c>f;f=e){var g=new Nc(a.doc,Qf(a.doc,f),f);e=f+g.size,d.push(g)}return d}function Pc(a,b,c,d){null==b&&(b=a.doc.first),null==c&&(c=a.doc.first+a.doc.size),d||(d=0);var e=a.display;if(d&&c<e.viewTo&&(null==e.updateLineNumbers||e.updateLineNumbers>b)&&(e.updateLineNumbers=b),a.curOp.viewChanged=!0,b>=e.viewTo)v&&cf(a.doc,b)<e.viewTo&&Rc(a);else if(c<=e.viewFrom)v&&df(a.doc,c+d)>e.viewFrom?Rc(a):(e.viewFrom+=d,e.viewTo+=d);else if(b<=e.viewFrom&&c>=e.viewTo)Rc(a);else if(b<=e.viewFrom){var f=Tc(a,c,c+d,1);f?(e.view=e.view.slice(f.index),e.viewFrom=f.lineN,e.viewTo+=d):Rc(a)}else if(c>=e.viewTo){var f=Tc(a,b,b,-1);f?(e.view=e.view.slice(0,f.index),e.viewTo=f.lineN):Rc(a)}e
 lse{var g=Tc(a,b,b,-1),h=Tc(a,c,c+d,1);g&&h?(e.view=e.view.slice(0,g.index).concat(Oc(a,g.lineN,h.lineN)).concat(e.view.slice(h.index)),e.viewTo+=d):Rc(a)}var i=e.externalMeasured;i&&(c<i.lineN?i.lineN+=d:b<i.lineN+i.size&&(e.externalMeasured=null))}function Qc(a,b,c){a.curOp.viewChanged=!0;var d=a.display,e=a.display.externalMeasured;if(e&&b>=e.lineN&&b<e.lineN+e.size&&(d.externalMeasured=null),!(b<d.viewFrom||b>=d.viewTo)){var f=d.view[Sc(a,b)];if(null!=f.node){var g=f.changes||(f.changes=[]);-1==Ng(g,c)&&g.push(c)}}}function Rc(a){a.display.viewFrom=a.display.viewTo=a.doc.first,a.display.view=[],a.display.viewOffset=0}function Sc(a,b){if(b>=a.display.viewTo)return null;if(b-=a.display.viewFrom,0>b)return null;for(var c=a.display.view,d=0;d<c.length;d++)if(b-=c[d].size,0>b)return d}function Tc(a,b,c,d){var f,e=Sc(a,b),g=a.display.view;if(!v||c==a.doc.first+a.doc.size)return{index:e,lineN:c};for(var h=0,i=a.display.viewFrom;e>h;h++)i+=g[h].size;if(i!=b){if(d>0){if(e==g.length-1)ret
 urn null;f=i+g[e].size-b,e++}else f=i-b;b+=f,c+=f}for(;cf(a.doc,c)!=c;){if(e==(0>d?0:g.length-1))return null;c+=d*g[e-(0>d?1:0)].size,e+=d}return{index:e,lineN:c}}function Uc(a,b,c){var d=a.display,e=d.view;0==e.length||b>=d.viewTo||c<=d.viewFrom?(d.view=Oc(a,b,c),d.viewFrom=b):(d.viewFrom>b?d.view=Oc(a,b,d.viewFrom).concat(d.view):d.viewFrom<b&&(d.view=d.view.slice(Sc(a,b))),d.viewFrom=b,d.viewTo<c?d.view=d.view.concat(Oc(a,d.viewTo,c)):d.viewTo>c&&(d.view=d.view.slice(0,Sc(a,c)))),d.viewTo=c}function Vc(a){for(var b=a.display.view,c=0,d=0;d<b.length;d++){var e=b[d];e.hidden||e.node&&!e.changes||++c}return c}function Wc(a){a.display.pollingFast||a.display.poll.set(a.options.pollInterval,function(){Zc(a),a.state.focused&&Wc(a)})}function Xc(a){function c(){var d=Zc(a);d||b?(a.display.pollingFast=!1,Wc(a)):(b=!0,a.display.poll.set(60,c))}var b=!1;a.display.pollingFast=!0,a.display.poll.set(20,c)}function Zc(a){var b=a.display.input,c=a.display.prevInput,f=a.doc;if(!a.state.focused||s
 h(b)&&!c||bd(a)||a.options.disableInput||a.state.keySeq)return!1;a.state.pasteIncoming&&a.state.fakedLastChar&&(b.value=b.value.substring(0,b.value.length-1),a.state.fakedLastChar=!1);var g=b.value;if(g==c&&!a.somethingSelected())return!1;if(d&&e>=9&&a.display.inputHasSelection===g||p&&/[\uf700-\uf7ff]/.test(g))return $c(a),!1;var h=!a.curOp;h&&Ac(a),a.display.shift=!1,8203!=g.charCodeAt(0)||f.sel!=a.display.selForContextMenu||c||(c="\u200b");for(var i=0,j=Math.min(c.length,g.length);j>i&&c.charCodeAt(i)==g.charCodeAt(i);)++i;var k=g.slice(i),l=rh(k),m=null;a.state.pasteIncoming&&f.sel.ranges.length>1&&(Yc&&Yc.join("\n")==k?m=0==f.sel.ranges.length%Yc.length&&Og(Yc,rh):l.length==f.sel.ranges.length&&(m=Og(l,function(a){return[a]})));for(var n=f.sel.ranges.length-1;n>=0;n--){var o=f.sel.ranges[n],q=o.from(),r=o.to();i<c.length?q=mb(q.line,q.ch-(c.length-i)):a.state.overwrite&&o.empty()&&!a.state.pasteIncoming&&(r=mb(r.line,Math.min(Qf(f,r.line).text.length,r.ch+Lg(l).length)));var s=
 a.curOp.updateInput,t={from:q,to:r,text:m?m[n%m.length]:l,origin:a.state.pasteIncoming?"paste":a.state.cutIncoming?"cut":"+input"};if(Rd(a.doc,t),vg(a,"inputRead",a,t),k&&!a.state.pasteIncoming&&a.options.electricChars&&a.options.smartIndent&&o.head.ch<100&&(!n||f.sel.ranges[n-1].head.line!=o.head.line)){var u=a.getModeAt(o.head),v=Ld(t);if(u.electricChars){for(var w=0;w<u.electricChars.length;w++)if(k.indexOf(u.electricChars.charAt(w))>-1){de(a,v.line,"smart");break}}else u.electricInput&&u.electricInput.test(Qf(f,v.line).text.slice(0,v.ch))&&de(a,v.line,"smart")}}return be(a),a.curOp.updateInput=s,a.curOp.typing=!0,g.length>1e3||g.indexOf("\n")>-1?b.value=a.display.prevInput="":a.display.prevInput=g,h&&Cc(a),a.state.pasteIncoming=a.state.cutIncoming=!1,!0}function $c(a,b){var c,f,g=a.doc;if(a.somethingSelected()){a.display.prevInput="";var h=g.sel.primary();c=th&&(h.to().line-h.from().line>100||(f=a.getSelection()).length>1e3);var i=c?"-":f||a.getSelection();a.display.input.value=
 i,a.state.focused&&Mg(a.display.input),d&&e>=9&&(a.display.inputHasSelection=i)}else b||(a.display.prevInput=a.display.input.value="",d&&e>=9&&(a.display.inputHasSelection=null));a.display.inaccurateSelection=c}function _c(a){"nocursor"==a.options.readOnly||o&&bh()==a.display.input||a.display.input.focus()}function ad(a){a.state.focused||(_c(a),Hd(a))}function bd(a){return a.options.readOnly||a.doc.cantEdit}function cd(a){function c(){a.state.focused&&setTimeout(Rg(_c,a),0)}function g(b){xg(a,b)||og(b)}function h(c){if(a.somethingSelected())Yc=a.getSelections(),b.inaccurateSelection&&(b.prevInput="",b.inaccurateSelection=!1,b.input.value=Yc.join("\n"),Mg(b.input));else{for(var d=[],e=[],f=0;f<a.doc.sel.ranges.length;f++){var g=a.doc.sel.ranges[f].head.line,h={anchor:mb(g,0),head:mb(g+1,0)};e.push(h),d.push(a.getRange(h.anchor,h.head))}"cut"==c.type?a.setSelections(e,null,Dg):(b.prevInput="",b.input.value=d.join("\n"),Mg(b.input)),Yc=d}"cut"==c.type&&(a.state.cutIncoming=!0)}var b=a.
 display;rg(b.scroller,"mousedown",Kc(a,gd)),d&&11>e?rg(b.scroller,"dblclick",Kc(a,function(b){if(!xg(a,b)){var c=fd(a,b);if(c&&!nd(a,b)&&!ed(a.display,b)){lg(b);var d=a.findWordAt(c);Bb(a.doc,d.anchor,d.head)}}})):rg(b.scroller,"dblclick",function(b){xg(a,b)||lg(b)}),rg(b.lineSpace,"selectstart",function(a){ed(b,a)||lg(a)}),t||rg(b.scroller,"contextmenu",function(b){Jd(a,b)}),rg(b.scroller,"scroll",function(){b.scroller.clientHeight&&(rd(a,b.scroller.scrollTop),sd(a,b.scroller.scrollLeft,!0),tg(a,"scroll",a))}),rg(b.scrollbarV,"scroll",function(){b.scroller.clientHeight&&rd(a,b.scrollbarV.scrollTop)}),rg(b.scrollbarH,"scroll",function(){b.scroller.clientHeight&&sd(a,b.scrollbarH.scrollLeft)}),rg(b.scroller,"mousewheel",function(b){vd(a,b)}),rg(b.scroller,"DOMMouseScroll",function(b){vd(a,b)}),rg(b.scrollbarH,"mousedown",c),rg(b.scrollbarV,"mousedown",c),rg(b.wrapper,"scroll",function(){b.wrapper.scrollTop=b.wrapper.scrollLeft=0}),rg(b.input,"keyup",function(b){Fd.call(a,b)}),rg(b.in
 put,"input",function(){d&&e>=9&&a.display.inputHasSelection&&(a.display.inputHasSelection=null),Xc(a)}),rg(b.input,"keydown",Kc(a,Dd)),rg(b.input,"keypress",Kc(a,Gd)),rg(b.input,"focus",Rg(Hd,a)),rg(b.input,"blur",Rg(Id,a)),a.options.dragDrop&&(rg(b.scroller,"dragstart",function(b){qd(a,b)}),rg(b.scroller,"dragenter",g),rg(b.scroller,"dragover",g),rg(b.scroller,"drop",Kc(a,pd))),rg(b.scroller,"paste",function(c){ed(b,c)||(a.state.pasteIncoming=!0,_c(a),Xc(a))}),rg(b.input,"paste",function(){if(f&&!a.state.fakedLastChar&&!(new Date-a.state.lastMiddleDown<200)){var c=b.input.selectionStart,d=b.input.selectionEnd;b.input.value+="$",b.input.selectionEnd=d,b.input.selectionStart=c,a.state.fakedLastChar=!0}a.state.pasteIncoming=!0,Xc(a)}),rg(b.input,"cut",h),rg(b.input,"copy",h),k&&rg(b.sizer,"mouseup",function(){bh()==b.input&&b.input.blur(),_c(a)})}function dd(a){var b=a.display;(b.lastWrapHeight!=b.wrapper.clientHeight||b.lastWrapWidth!=b.wrapper.clientWidth)&&(b.cachedCharWidth=b.cach
 edTextHeight=b.cachedPaddingH=null,a.setSize())}function ed(a,b){for(var c=pg(b);c!=a.wrapper;c=c.parentNode)if(!c||c.ignoreEvents||c.parentNode==a.sizer&&c!=a.mover)return!0}function fd(a,b,c,d){var e=a.display;if(!c){var f=pg(b);if(f==e.scrollbarH||f==e.scrollbarV||f==e.scrollbarFiller||f==e.gutterFiller)return null}var g,h,i=e.lineSpace.getBoundingClientRect();try{g=b.clientX-i.left,h=b.clientY-i.top}catch(b){return null}var k,j=tc(a,g,h);if(d&&1==j.xRel&&(k=Qf(a.doc,j.line).text).length==j.ch){var l=Hg(k,k.length,a.options.tabSize)-k.length;j=mb(j.line,Math.max(0,Math.round((g-Zb(a.display).left)/xc(a.display))-l))}return j}function gd(a){if(!xg(this,a)){var b=this,c=b.display;if(c.shift=a.shiftKey,ed(c,a))return f||(c.scroller.draggable=!1,setTimeout(function(){c.scroller.draggable=!0},100)),void 0;if(!nd(b,a)){var d=fd(b,a);switch(window.focus(),qg(a)){case 1:d?jd(b,a,d):pg(a)==c.scroller&&lg(a);break;case 2:f&&(b.state.lastMiddleDown=+new Date),d&&Bb(b.doc,d),setTimeout(Rg(_c
 ,b),20),lg(a);break;case 3:t&&Jd(b,a)}}}}function jd(a,b,c){setTimeout(Rg(ad,a),0);var e,d=+new Date;id&&id.time>d-400&&0==nb(id.pos,c)?e="triple":hd&&hd.time>d-400&&0==nb(hd.pos,c)?(e="double",id={time:d,pos:c}):(e="single",hd={time:d,pos:c});var f=a.doc.sel,g=p?b.metaKey:b.ctrlKey;a.options.dragDrop&&kh&&!bd(a)&&"single"==e&&f.contains(c)>-1&&f.somethingSelected()?kd(a,b,c,g):ld(a,b,c,e,g)}function kd(a,b,c,g){var h=a.display,i=Kc(a,function(j){f&&(h.scroller.draggable=!1),a.state.draggingText=!1,sg(document,"mouseup",i),sg(h.scroller,"drop",i),Math.abs(b.clientX-j.clientX)+Math.abs(b.clientY-j.clientY)<10&&(lg(j),g||Bb(a.doc,c),_c(a),d&&9==e&&setTimeout(function(){document.body.focus(),_c(a)},20))});f&&(h.scroller.draggable=!0),a.state.draggingText=i,h.scroller.dragDrop&&h.scroller.dragDrop(),rg(document,"mouseup",i),rg(h.scroller,"drop",i)}function ld(a,b,c,d,e){function n(b){if(0!=nb(m,b))if(m=b,"rect"==d){for(var e=[],f=a.options.tabSize,k=Hg(Qf(g,c.line).text,c.ch,f),l=Hg(Qf(
 g,b.line).text,b.ch,f),n=Math.min(k,l),o=Math.max(k,l),p=Math.min(c.line,b.line),q=Math.min(a.lastLine(),Math.max(c.line,b.line));q>=p;p++){var r=Qf(g,p).text,s=Ig(r,n,f);n==o?e.push(new sb(mb(p,s),mb(p,s))):r.length>s&&e.push(new sb(mb(p,s),mb(p,Ig(r,o,f))))}e.length||e.push(new sb(c,c)),Hb(g,tb(j.ranges.slice(0,i).concat(e),i),{origin:"*mouse",scroll:!1}),a.scrollIntoView(b)}else{var t=h,u=t.anchor,v=b;if("single"!=d){if("double"==d)var w=a.findWordAt(b);else var w=new sb(mb(b.line,0),wb(g,mb(b.line+1,0)));nb(w.anchor,u)>0?(v=w.head,u=qb(t.from(),w.anchor)):(v=w.anchor,u=pb(t.to(),w.head))}var e=j.ranges.slice(0);e[i]=new sb(wb(g,u),v),Hb(g,tb(e,i),Eg)}}function q(b){var c=++p,e=fd(a,b,!0,"rect"==d);if(e)if(0!=nb(e,m)){ad(a),n(e);var h=N(f,g);(e.line>=h.to||e.line<h.from)&&setTimeout(Kc(a,function(){p==c&&q(b)}),150)}else{var i=b.clientY<o.top?-20:b.clientY>o.bottom?20:0;i&&setTimeout(Kc(a,function(){p==c&&(f.scroller.scrollTop+=i,q(b))}),50)}}function r(b){p=1/0,lg(b),_c(a),sg(do
 cument,"mousemove",s),sg(document,"mouseup",t),g.history.lastSelOrigin=null}var f=a.display,g=a.doc;lg(b);var h,i,j=g.sel;if(e&&!b.shiftKey?(i=g.sel.contains(c),h=i>-1?g.sel.ranges[i]:new sb(c,c)):h=g.sel.primary(),b.altKey)d="rect",e||(h=new sb(c,c)),c=fd(a,b,!0,!0),i=-1;else if("double"==d){var k=a.findWordAt(c);h=a.display.shift||g.extend?Ab(g,h,k.anchor,k.head):k}else if("triple"==d){var l=new sb(mb(c.line,0),wb(g,mb(c.line+1,0)));h=a.display.shift||g.extend?Ab(g,h,l.anchor,l.head):l}else h=Ab(g,h,c);e?i>-1?Db(g,i,h,Eg):(i=g.sel.ranges.length,Hb(g,tb(g.sel.ranges.concat([h]),i),{scroll:!1,origin:"*mouse"})):(i=0,Hb(g,new rb([h],0),Eg),j=g.sel);var m=c,o=f.wrapper.getBoundingClientRect(),p=0,s=Kc(a,function(a){qg(a)?q(a):r(a)}),t=Kc(a,r);rg(document,"mousemove",s),rg(document,"mouseup",t)}function md(a,b,c,d,e){try{var f=b.clientX,g=b.clientY}catch(b){return!1}if(f>=Math.floor(a.display.gutters.getBoundingClientRect().right))return!1;d&&lg(b);var h=a.display,i=h.lineDiv.getBoundi
 ngClientRect();if(g>i.bottom||!zg(a,c))return ng(b);g-=i.top-h.viewOffset;for(var j=0;j<a.options.gutters.length;++j){var k=h.gutters.childNodes[j];if(k&&k.getBoundingClientRect().right>=f){var l=Vf(a.doc,g),m=a.options.gutters[j];return e(a,c,a,l,m,b),ng(b)}}}function nd(a,b){return md(a,b,"gutterClick",!0,vg)}function pd(a){var b=this;if(!xg(b,a)&&!ed(b.display,a)){lg(a),d&&(od=+new Date);var c=fd(b,a,!0),e=a.dataTransfer.files;if(c&&!bd(b))if(e&&e.length&&window.FileReader&&window.File)for(var f=e.length,g=Array(f),h=0,i=function(a,d){var e=new FileReader;e.onload=Kc(b,function(){if(g[d]=e.result,++h==f){c=wb(b.doc,c);var a={from:c,to:c,text:rh(g.join("\n")),origin:"paste"};Rd(b.doc,a),Gb(b.doc,ub(c,Ld(a)))}}),e.readAsText(a)},j=0;f>j;++j)i(e[j],j);else{if(b.state.draggingText&&b.doc.sel.contains(c)>-1)return b.state.draggingText(a),setTimeout(Rg(_c,b),20),void 0;try{var g=a.dataTransfer.getData("Text");if(g){if(b.state.draggingText&&!(p?a.metaKey:a.ctrlKey))var k=b.listSelection
 s();if(Ib(b.doc,ub(c,c)),k)for(var j=0;j<k.length;++j)Xd(b.doc,"",k[j].anchor,k[j].head,"drag");b.replaceSelection(g,"around","paste"),_c(b)}}catch(a){}}}}function qd(a,b){if(d&&(!a.state.draggingText||+new Date-od<100))return og(b),void 0;if(!xg(a,b)&&!ed(a.display,b)&&(b.dataTransfer.setData("Text",a.getSelection()),b.dataTransfer.setDragImage&&!j)){var c=Yg("img",null,null,"position: fixed; left: 0; top: 0;");c.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",i&&(c.width=c.height=1,a.display.wrapper.appendChild(c),c._top=c.offsetTop),b.dataTransfer.setDragImage(c,0,0),i&&c.parentNode.removeChild(c)}}function rd(b,c){Math.abs(b.doc.scrollTop-c)<2||(b.doc.scrollTop=c,a||V(b,{top:c}),b.display.scroller.scrollTop!=c&&(b.display.scroller.scrollTop=c),b.display.scrollbarV.scrollTop!=c&&(b.display.scrollbarV.scrollTop=c),a&&V(b),Tb(b,100))}function sd(a,b,c){(c?b==a.doc.scrollLeft:Math.abs(a.doc.scrollLeft-b)<2)||(b=Math.min(b,a.display.scroller.scrollWid
 th-a.display.scroller.clientWidth),a.doc.scrollLeft=b,O(a),a.display.scroller.scrollLeft!=b&&(a.display.scroller.scrollLeft=b),a.display.scrollbarH.scrollLeft!=b&&(a.display.scrollbarH.scrollLeft=b))}function vd(b,c){var d=c.wheelDeltaX,e=c.wheelDeltaY;null==d&&c.detail&&c.axis==c.HORIZONTAL_AXIS&&(d=c.detail),null==e&&c.detail&&c.axis==c.VERTICAL_AXIS?e=c.detail:null==e&&(e=c.wheelDelta);var g=b.display,h=g.scroller;if(d&&h.scrollWidth>h.clientWidth||e&&h.scrollHeight>h.clientHeight){if(e&&p&&f)a:for(var j=c.target,k=g.view;j!=h;j=j.parentNode)for(var l=0;l<k.length;l++)if(k[l].node==j){b.display.currentWheelTarget=j;break a}if(d&&!a&&!i&&null!=ud)return e&&rd(b,Math.max(0,Math.min(h.scrollTop+e*ud,h.scrollHeight-h.clientHeight))),sd(b,Math.max(0,Math.min(h.scrollLeft+d*ud,h.scrollWidth-h.clientWidth))),lg(c),g.wheelStartX=null,void 0;if(e&&null!=ud){var m=e*ud,n=b.doc.scrollTop,o=n+g.wrapper.clientHeight;0>m?n=Math.max(0,n+m-50):o=Math.min(b.doc.height,o+m+50),V(b,{top:n,bottom:o}
 )}20>td&&(null==g.wheelStartX?(g.wheelStartX=h.scrollLeft,g.wheelStartY=h.scrollTop,g.wheelDX=d,g.wheelDY=e,setTimeout(function(){if(null!=g.wheelStartX){var a=h.scrollLeft-g.wheelStartX,b=h.scrollTop-g.wheelStartY,c=b&&g.wheelDY&&b/g.wheelDY||a&&g.wheelDX&&a/g.wheelDX;g.wheelStartX=g.wheelStartY=null,c&&(ud=(ud*td+c)/(td+1),++td)}},200)):(g.wheelDX+=d,g.wheelDY+=e))}}function wd(a,b,c){if("string"==typeof b&&(b=te[b],!b))return!1;a.display.pollingFast&&Zc(a)&&(a.display.pollingFast=!1);var d=a.display.shift,e=!1;try{bd(a)&&(a.state.suppressEdits=!0),c&&(a.display.shift=!1),e=b(a)!=Cg}finally{a.display.shift=d,a.state.suppressEdits=!1}return e}function xd(a,b,c){for(var d=0;d<a.state.keyMaps.length;d++){var e=we(b,a.state.keyMaps[d],c);if(e)return e}return a.options.extraKeys&&we(b,a.options.extraKeys,c)||we(b,a.options.keyMap,c)}function zd(a,b,c,d){var e=a.state.keySeq;if(e){if(xe(b))return"handled";yd.set(50,function(){a.state.keySeq==e&&(a.state.keySeq=null,$c(a))}),b=e+" "+b}va
 r f=xd(a,b,d);return"multi"==f&&(a.state.keySeq=b),"handled"==f&&vg(a,"keyHandled",a,b,c),("handled"==f||"multi"==f)&&(lg(c),Sb(a)),e&&!f&&/\'$/.test(b)?(lg(c),!0):!!f}function Ad(a,b){var c=ye(b,!0);return c?b.shiftKey&&!a.state.keySeq?zd(a,"Shift-"+c,b,function(b){return wd(a,b,!0)})||zd(a,c,b,function(b){return("string"==typeof b?/^go[A-Z]/.test(b):b.motion)?wd(a,b):void 0}):zd(a,c,b,function(b){return wd(a,b)}):!1}function Bd(a,b,c){return zd(a,"'"+c+"'",b,function(b){return wd(a,b,!0)})}function Dd(a){var b=this;if(ad(b),!xg(b,a)){d&&11>e&&27==a.keyCode&&(a.returnValue=!1);var c=a.keyCode;b.display.shift=16==c||a.shiftKey;var f=Ad(b,a);i&&(Cd=f?c:null,!f&&88==c&&!th&&(p?a.metaKey:a.ctrlKey)&&b.replaceSelection("",null,"cut")),18!=c||/\bCodeMirror-crosshair\b/.test(b.display.lineDiv.className)||Ed(b)}}function Ed(a){function c(a){18!=a.keyCode&&a.altKey||(dh(b,"CodeMirror-crosshair"),sg(document,"keyup",c),sg(document,"mouseover",c))}var b=a.display.lineDiv;eh(b,"CodeMirror-cros
 shair"),rg(document,"keyup",c),rg(document,"mouseover",c)}function Fd(a){16==a.keyCode&&(this.doc.sel.shift=!1),xg(this,a)}function Gd(a){var b=this;if(!(xg(b,a)||a.ctrlKey&&!a.altKey||p&&a.metaKey)){var c=a.keyCode,f=a.charCode;if(i&&c==Cd)return Cd=null,lg(a),void 0;if(!(i&&(!a.which||a.which<10)||k)||!Ad(b,a)){var g=String.fromCharCode(null==f?c:f);Bd(b,a,g)||(d&&e>=9&&(b.display.inputHasSelection=null),Xc(b))}}}function Hd(a){"nocursor"!=a.options.readOnly&&(a.state.focused||(tg(a,"focus",a),a.state.focused=!0,eh(a.display.wrapper,"CodeMirror-focused"),a.curOp||a.display.selForContextMenu==a.doc.sel||($c(a),f&&setTimeout(Rg($c,a,!0),0))),Wc(a),Sb(a))}function Id(a){a.state.focused&&(tg(a,"blur",a),a.state.focused=!1,dh(a.display.wrapper,"CodeMirror-focused")),clearInterval(a.display.blinker),setTimeout(function(){a.state.focused||(a.display.shift=!1)},150)}function Jd(a,b){function m(){if(null!=c.input.selectionStart){var b=a.somethingSelected(),d=c.input.value="\u200b"+(b?c.inp
 ut.value:"");c.prevInput=b?"":"\u200b",c.input.selectionStart=1,c.input.selectionEnd=d.length,c.selForContextMenu=a.doc.sel}}function n(){if(c.inputDiv.style.position="relative",c.input.style.cssText=k,d&&9>e&&(c.scrollbarV.scrollTop=c.scroller.scrollTop=h),Wc(a),null!=c.input.selectionStart){(!d||d&&9>e)&&m();var b=0,f=function(){c.selForContextMenu==a.doc.sel&&0==c.input.selectionStart?Kc(a,te.selectAll)(a):b++<10?c.detectingSelectAll=setTimeout(f,500):$c(a)};c.detectingSelectAll=setTimeout(f,200)}}if(!xg(a,b,"contextmenu")){var c=a.display;if(!ed(c,b)&&!Kd(a,b)){var g=fd(a,b),h=c.scroller.scrollTop;if(g&&!i){var j=a.options.resetSelectionOnContextMenu;j&&-1==a.doc.sel.contains(g)&&Kc(a,Hb)(a.doc,ub(g),Dg);var k=c.input.style.cssText;if(c.inputDiv.style.position="absolute",c.input.style.cssText="position: fixed; width: 30px; height: 30px; top: "+(b.clientY-5)+"px; left: "+(b.clientX-5)+"px; z-index: 1000; background: "+(d?"rgba(255, 255, 255, .05)":"transparent")+"; outline: none;
  border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",f)var l=window.scrollY;if(_c(a),f&&window.scrollTo(null,l),$c(a),a.somethingSelected()||(c.input.value=c.prevInput=" "),c.selForContextMenu=a.doc.sel,clearTimeout(c.detectingSelectAll),d&&e>=9&&m(),t){og(b);var o=function(){sg(window,"mouseup",o),setTimeout(n,20)};rg(window,"mouseup",o)}else setTimeout(n,50)}}}}function Kd(a,b){return zg(a,"gutterContextMenu")?md(a,b,"gutterContextMenu",!1,tg):!1}function Md(a,b){if(nb(a,b.from)<0)return a;if(nb(a,b.to)<=0)return Ld(b);var c=a.line+b.text.length-(b.to.line-b.from.line)-1,d=a.ch;return a.line==b.to.line&&(d+=Ld(b).ch-b.to.ch),mb(c,d)}function Nd(a,b){for(var c=[],d=0;d<a.sel.ranges.length;d++){var e=a.sel.ranges[d];c.push(new sb(Md(e.anchor,b),Md(e.head,b)))}return tb(c,a.sel.primIndex)}function Od(a,b,c){return a.line==b.line?mb(c.line,a.ch-b.ch+c.ch):mb(c.line+(a.line-b.line),a.ch)}function Pd(a,b,c){for(var d=[],e=mb(a.first,0),f=e,g=0;g<b.
 length;g++){var h=b[g],i=Od(h.from,e,f),j=Od(Ld(h),e,f);if(e=h.to,f=j,"around"==c){var k=a.sel.ranges[g],l=nb(k.head,k.anchor)<0;d[g]=new sb(l?j:i,l?i:j)}else d[g]=new sb(i,i)}return new rb(d,a.sel.primIndex)}function Qd(a,b,c){var d={canceled:!1,from:b.from,to:b.to,text:b.text,origin:b.origin,cancel:function(){this.canceled=!0}};return c&&(d.update=function(b,c,d,e){b&&(this.from=wb(a,b)),c&&(this.to=wb(a,c)),d&&(this.text=d),void 0!==e&&(this.origin=e)}),tg(a,"beforeChange",a,d),a.cm&&tg(a.cm,"beforeChange",a.cm,d),d.canceled?null:{from:d.from,to:d.to,text:d.text,origin:d.origin}}function Rd(a,b,c){if(a.cm){if(!a.cm.curOp)return Kc(a.cm,Rd)(a,b,c);if(a.cm.state.suppressEdits)return}if(!(zg(a,"beforeChange")||a.cm&&zg(a.cm,"beforeChange"))||(b=Qd(a,b,!0))){var d=u&&!c&&Se(a,b.from,b.to);if(d)for(var e=d.length-1;e>=0;--e)Sd(a,{from:d[e].from,to:d[e].to,text:e?[""]:b.text});else Sd(a,b)}}function Sd(a,b){if(1!=b.text.length||""!=b.text[0]||0!=nb(b.from,b.to)){var c=Nd(a,b);ag(a,b,c,
 a.cm?a.cm.curOp.id:0/0),Vd(a,b,c,Pe(a,b));var d=[];Of(a,function(a,c){c||-1!=Ng(d,a.history)||(kg(a.history,b),d.push(a.history)),Vd(a,b,null,Pe(a,b))})}}function Td(a,b,c){if(!a.cm||!a.cm.state.suppressEdits){for(var e,d=a.history,f=a.sel,g="undo"==b?d.done:d.undone,h="undo"==b?d.undone:d.done,i=0;i<g.length&&(e=g[i],c?!e.ranges||e.equals(a.sel):e.ranges);i++);if(i!=g.length){for(d.lastOrigin=d.lastSelOrigin=null;e=g.pop(),e.ranges;){if(dg(e,h),c&&!e.equals(a.sel))return Hb(a,e,{clearRedo:!1}),void 0;f=e}var j=[];dg(f,h),h.push({changes:j,generation:d.generation}),d.generation=e.generation||++d.maxGeneration;for(var k=zg(a,"beforeChange")||a.cm&&zg(a.cm,"beforeChange"),i=e.changes.length-1;i>=0;--i){var l=e.changes[i];if(l.origin=b,k&&!Qd(a,l,!1))return g.length=0,void 0;j.push(Zf(a,l));var m=i?Nd(a,l):Lg(g);Vd(a,l,m,Re(a,l)),!i&&a.cm&&a.cm.scrollIntoView({from:l.from,to:Ld(l)});var n=[];Of(a,function(a,b){b||-1!=Ng(n,a.history)||(kg(a.history,l),n.push(a.history)),Vd(a,l,null,Re(a
 ,l))})}}}}function Ud(a,b){if(0!=b&&(a.first+=b,a.sel=new rb(Og(a.sel.ranges,function(a){return new sb(mb(a.anchor.line+b,a.anchor.ch),mb(a.head.line+b,a.head.ch))}),a.sel.primIndex),a.cm)){Pc(a.cm,a.first,a.first-b,b);for(var c=a.cm.display,d=c.viewFrom;d<c.viewTo;d++)Qc(a.cm,d,"gutter")}}function Vd(a,b,c,d){if(a.cm&&!a.cm.curOp)return Kc(a.cm,Vd)(a,b,c,d);if(b.to.line<a.first)return Ud(a,b.text.length-1-(b.to.line-b.from.line)),void 0;if(!(b.from.line>a.lastLine())){if(b.from.line<a.first){var e=b.text.length-1-(a.first-b.from.line);Ud(a,e),b={from:mb(a.first,0),to:mb(b.to.line+e,b.to.ch),text:[Lg(b.text)],origin:b.origin}}var f=a.lastLine();b.to.line>f&&(b={from:b.from,to:mb(f,Qf(a,f).text.length),text:[b.text[0]],origin:b.origin}),b.removed=Rf(a,b.from,b.to),c||(c=Nd(a,b)),a.cm?Wd(a.cm,b,d):Hf(a,b,d),Ib(a,c,Dg)}}function Wd(a,b,c){var d=a.doc,e=a.display,f=b.from,g=b.to,h=!1,i=f.line;a.options.lineWrapping||(i=Uf(af(Qf(d,f.line))),d.iter(i,g.line+1,function(a){return a==e.maxLi
 ne?(h=!0,!0):void 0})),d.sel.contains(b.from,b.to)>-1&&yg(a),Hf(d,b,c,B(a)),a.options.lineWrapping||(d.iter(i,f.line+b.text.length,function(a){var b=H(a);b>e.maxLineLength&&(e.maxLine=a,e.maxLineLength=b,e.maxLineChanged=!0,h=!1)}),h&&(a.curOp.updateMaxLine=!0)),d.frontier=Math.min(d.frontier,f.line),Tb(a,400);var j=b.text.length-(g.line-f.line)-1;f.line!=g.line||1!=b.text.length||Gf(a.doc,b)?Pc(a,f.line,g.line+1,j):Qc(a,f.line,"text");var k=zg(a,"changes"),l=zg(a,"change");if(l||k){var m={from:f,to:g,text:b.text,removed:b.removed,origin:b.origin};l&&vg(a,"change",a,m),k&&(a.curOp.changeObjs||(a.curOp.changeObjs=[])).push(m)}a.display.selForContextMenu=null}function Xd(a,b,c,d,e){if(d||(d=c),nb(d,c)<0){var f=d;d=c,c=f}"string"==typeof b&&(b=rh(b)),Rd(a,{from:c,to:d,text:b,origin:e})}function Yd(a,b){if(!xg(a,"scrollCursorIntoView")){var c=a.display,d=c.sizer.getBoundingClientRect(),e=null;if(b.top+d.top<0?e=!0:b.bottom+d.top>(window.innerHeight||document.documentElement.clientHeight
 )&&(e=!1),null!=e&&!m){var f=Yg("div","\u200b",null,"position: absolute; top: "+(b.top-c.viewOffset-Xb(a.display))+"px; height: "+(b.bottom-b.top+Bg)+"px; left: "+b.left+"px; width: 2px;");a.display.lineSpace.appendChild(f),f.scrollIntoView(e),a.display.lineSpace.removeChild(f)}}}function Zd(a,b,c,d){null==d&&(d=0);for(var e=0;5>e;e++){var f=!1,g=qc(a,b),h=c&&c!=b?qc(a,c):g,i=_d(a,Math.min(g.left,h.left),Math.min(g.top,h.top)-d,Math.max(g.left,h.left),Math.max(g.bottom,h.bottom)+d),j=a.doc.scrollTop,k=a.doc.scrollLeft;if(null!=i.scrollTop&&(rd(a,i.scrollTop),Math.abs(a.doc.scrollTop-j)>1&&(f=!0)),null!=i.scrollLeft&&(sd(a,i.scrollLeft),Math.abs(a.doc.scrollLeft-k)>1&&(f=!0)),!f)return g}}function $d(a,b,c,d,e){var f=_d(a,b,c,d,e);null!=f.scrollTop&&rd(a,f.scrollTop),null!=f.scrollLeft&&sd(a,f.scrollLeft)}function _d(a,b,c,d,e){var f=a.display,g=wc(a.display);0>c&&(c=0);var h=a.curOp&&null!=a.curOp.scrollTop?a.curOp.scrollTop:f.scroller.scrollTop,i=f.scroller.clientHeight-Bg,j={};e-c
 >i&&(e=c+i);var k=a.doc.height+Yb(f),l=g>c,m=e>k-g;if(h>c)j.scrollTop=l?0:c;else if(e>h+i){var n=Math.min(c,(m?k:e)-i);n!=h&&(j.scrollTop=n)}var o=a.curOp&&null!=a.curOp.scrollLeft?a.curOp.scrollLeft:f.scroller.scrollLeft,p=f.scroller.clientWidth-Bg-f.gutters.offsetWidth,q=d-b>p;return q&&(d=b+p),10>b?j.scrollLeft=0:o>b?j.scrollLeft=Math.max(0,b-(q?0:10)):d>p+o-3&&(j.scrollLeft=d+(q?0:10)-p),j}function ae(a,b,c){(null!=b||null!=c)&&ce(a),null!=b&&(a.curOp.scrollLeft=(null==a.curOp.scrollLeft?a.doc.scrollLeft:a.curOp.scrollLeft)+b),null!=c&&(a.curOp.scrollTop=(null==a.curOp.scrollTop?a.doc.scrollTop:a.curOp.scrollTop)+c)}function be(a){ce(a);var b=a.getCursor(),c=b,d=b;a.options.lineWrapping||(c=b.ch?mb(b.line,b.ch-1):b,d=mb(b.line,b.ch+1)),a.curOp.scrollToPos={from:c,to:d,margin:a.options.cursorScrollMargin,isCursor:!0}}function ce(a){var b=a.curOp.scrollToPos;if(b){a.curOp.scrollToPos=null;var c=rc(a,b.from),d=rc(a,b.to),e=_d(a,Math.min(c.left,d.left),Math.min(c.top,d.top)-b.margin
 ,Math.max(c.right,d.right),Math.max(c.bottom,d.bottom)+b.margin);a.scrollTo(e.scrollLeft,e.scrollTop)}}function de(a,b,c,d){var f,e=a.doc;null==c&&(c="add"),"smart"==c&&(e.mode.indent?f=Wb(a,b):c="prev");var g=a.options.tabSize,h=Qf(e,b),i=Hg(h.text,null,g);h.stateAfter&&(h.stateAfter=null);var k,j=h.text.match(/^\s*/)[0];if(d||/\S/.test(h.text)){if("smart"==c&&(k=e.mode.indent(f,h.text.slice(j.length),h.text),k==Cg||k>150)){if(!d)return;c="prev"}}else k=0,c="not";"prev"==c?k=b>e.first?Hg(Qf(e,b-1).text,null,g):0:"add"==c?k=i+a.options.indentUnit:"subtract"==c?k=i-a.options.indentUnit:"number"==typeof c&&(k=i+c),k=Math.max(0,k);var l="",m=0;if(a.options.indentWithTabs)for(var n=Math.floor(k/g);n;--n)m+=g,l+="	";if(k>m&&(l+=Kg(k-m)),l!=j)Xd(e,l,mb(b,0),mb(b,j.length),"+input");else for(var n=0;n<e.sel.ranges.length;n++){var o=e.sel.ranges[n];if(o.head.line==b&&o.head.ch<j.length){var m=mb(b,j.length);Db(e,n,new sb(m,m));break}}h.stateAfter=null}function ee(a,b,c,d){var e=b,f=b;return
 "number"==typeof b?f=Qf(a,vb(a,b)):e=Uf(b),null==e?null:(d(f,e)&&a.cm&&Qc(a.cm,e,c),f)}function fe(a,b){for(var c=a.doc.sel.ranges,d=[],e=0;e<c.length;e++){for(var f=b(c[e]);d.length&&nb(f.from,Lg(d).to)<=0;){var g=d.pop();if(nb(g.from,f.from)<0){f.from=g.from;break}}d.push(f)}Jc(a,function(){for(var b=d.length-1;b>=0;b--)Xd(a.doc,"",d[b].from,d[b].to,"+delete");be(a)})}function ge(a,b,c,d,e){function k(){var b=f+c;return b<a.first||b>=a.first+a.size?j=!1:(f=b,i=Qf(a,b))}function l(a){var b=(e?Jh:Kh)(i,g,c,!0);if(null==b){if(a||!k())return j=!1;g=e?(0>c?Bh:Ah)(i):0>c?i.text.length:0}else g=b;return!0}var f=b.line,g=b.ch,h=c,i=Qf(a,f),j=!0;if("char"==d)l();else if("column"==d)l(!0);else if("word"==d||"group"==d)for(var m=null,n="group"==d,o=a.cm&&a.cm.getHelper(b,"wordChars"),p=!0;!(0>c)||l(!p);p=!1){var q=i.text.charAt(g)||"\n",r=Ug(q,o)?"w":n&&"\n"==q?"n":!n||/\s/.test(q)?null:"p";if(!n||p||r||(r="s"),m&&m!=r){0>c&&(c=1,l());break}if(r&&(m=r),c>0&&!l(!p))break}var s=Mb(a,mb(f,g),h,
 !0);return j||(s.hitSide=!0),s}function he(a,b,c,d){var g,e=a.doc,f=b.left;if("page"==d){var h=Math.min(a.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight);g=b.top+c*(h-(0>c?1.5:.5)*wc(a.display))}else"line"==d&&(g=c>0?b.bottom+3:b.top-3);for(;;){var i=tc(a,f,g);if(!i.outside)break;if(0>c?0>=g:g>=e.height){i.hitSide=!0;break}g+=5*c}return i}function ke(a,b,c,d){w.defaults[a]=b,c&&(je[a]=d?function(a,b,d){d!=le&&c(a,b,d)}:c)}function ve(a){for(var c,d,e,f,b=a.split(/-(?!$)/),a=b[b.length-1],g=0;g<b.length-1;g++){var h=b[g];if(/^(cmd|meta|m)$/i.test(h))f=!0;else if(/^a(lt)?$/i.test(h))c=!0;else if(/^(c|ctrl|control)$/i.test(h))d=!0;else{if(!/^s(hift)$/i.test(h))throw new Error("Unrecognized modifier name: "+h);e=!0}}return c&&(a="Alt-"+a),d&&(a="Ctrl-"+a),f&&(a="Cmd-"+a),e&&(a="Shift-"+a),a}function ze(a){return"string"==typeof a?ue[a]:a}function De(a,b,c,d,e){if(d&&d.shared)return Fe(a,b,c,d,e);if(a.cm&&!a.cm.curOp)return Kc(a.cm,De)(a,b,c,d,e);v
 ar f=new Be(a,e),g=nb(b,c);if(d&&Qg(d,f,!1),g>0||0==g&&f.clearWhenEmpty!==!1)return f;if(f.replacedWith&&(f.collapsed=!0,f.widgetNode=Yg("span",[f.replacedWith],"CodeMirror-widget"),d.handleMouseEvents||(f.widgetNode.ignoreEvents=!0),d.insertLeft&&(f.widgetNode.insertLeft=!0)),f.collapsed){if(_e(a,b.line,b,c,f)||b.line!=c.line&&_e(a,c.line,b,c,f))throw new Error("Inserting collapsed marker partially overlapping an existing one");
+v=!0}f.addToHistory&&ag(a,{from:b,to:c,origin:"markText"},a.sel,0/0);var j,h=b.line,i=a.cm;if(a.iter(h,c.line+1,function(a){i&&f.collapsed&&!i.options.lineWrapping&&af(a)==i.display.maxLine&&(j=!0),f.collapsed&&h!=b.line&&Tf(a,0),Me(a,new Je(f,h==b.line?b.ch:null,h==c.line?c.ch:null)),++h}),f.collapsed&&a.iter(b.line,c.line+1,function(b){ef(a,b)&&Tf(b,0)}),f.clearOnEnter&&rg(f,"beforeCursorEnter",function(){f.clear()}),f.readOnly&&(u=!0,(a.history.done.length||a.history.undone.length)&&a.clearHistory()),f.collapsed&&(f.id=++Ce,f.atomic=!0),i){if(j&&(i.curOp.updateMaxLine=!0),f.collapsed)Pc(i,b.line,c.line+1);else if(f.className||f.title||f.startStyle||f.endStyle)for(var k=b.line;k<=c.line;k++)Qc(i,k,"text");f.atomic&&Kb(i.doc),vg(i,"markerAdded",i,f)}return f}function Fe(a,b,c,d,e){d=Qg(d),d.shared=!1;var f=[De(a,b,c,d,e)],g=f[0],h=d.widgetNode;return Of(a,function(a){h&&(d.widgetNode=h.cloneNode(!0)),f.push(De(a,wb(a,b),wb(a,c),d,e));for(var i=0;i<a.linked.length;++i)if(a.linked[i]
 .isParent)return;g=Lg(f)}),new Ee(f,g)}function Ge(a){return a.findMarks(mb(a.first,0),a.clipPos(mb(a.lastLine())),function(a){return a.parent})}function He(a,b){for(var c=0;c<b.length;c++){var d=b[c],e=d.find(),f=a.clipPos(e.from),g=a.clipPos(e.to);if(nb(f,g)){var h=De(a,f,g,d.primary,d.primary.type);d.markers.push(h),h.parent=d}}}function Ie(a){for(var b=0;b<a.length;b++){var c=a[b],d=[c.primary.doc];Of(c.primary.doc,function(a){d.push(a)});for(var e=0;e<c.markers.length;e++){var f=c.markers[e];-1==Ng(d,f.doc)&&(f.parent=null,c.markers.splice(e--,1))}}}function Je(a,b,c){this.marker=a,this.from=b,this.to=c}function Ke(a,b){if(a)for(var c=0;c<a.length;++c){var d=a[c];if(d.marker==b)return d}}function Le(a,b){for(var c,d=0;d<a.length;++d)a[d]!=b&&(c||(c=[])).push(a[d]);return c}function Me(a,b){a.markedSpans=a.markedSpans?a.markedSpans.concat([b]):[b],b.marker.attachLine(a)}function Ne(a,b,c){if(a)for(var e,d=0;d<a.length;++d){var f=a[d],g=f.marker,h=null==f.from||(g.inclusiveLeft?f
 .from<=b:f.from<b);if(h||f.from==b&&"bookmark"==g.type&&(!c||!f.marker.insertLeft)){var i=null==f.to||(g.inclusiveRight?f.to>=b:f.to>b);(e||(e=[])).push(new Je(g,f.from,i?null:f.to))}}return e}function Oe(a,b,c){if(a)for(var e,d=0;d<a.length;++d){var f=a[d],g=f.marker,h=null==f.to||(g.inclusiveRight?f.to>=b:f.to>b);if(h||f.from==b&&"bookmark"==g.type&&(!c||f.marker.insertLeft)){var i=null==f.from||(g.inclusiveLeft?f.from<=b:f.from<b);(e||(e=[])).push(new Je(g,i?null:f.from-b,null==f.to?null:f.to-b))}}return e}function Pe(a,b){var c=yb(a,b.from.line)&&Qf(a,b.from.line).markedSpans,d=yb(a,b.to.line)&&Qf(a,b.to.line).markedSpans;if(!c&&!d)return null;var e=b.from.ch,f=b.to.ch,g=0==nb(b.from,b.to),h=Ne(c,e,g),i=Oe(d,f,g),j=1==b.text.length,k=Lg(b.text).length+(j?e:0);if(h)for(var l=0;l<h.length;++l){var m=h[l];if(null==m.to){var n=Ke(i,m.marker);n?j&&(m.to=null==n.to?null:n.to+k):m.to=e}}if(i)for(var l=0;l<i.length;++l){var m=i[l];if(null!=m.to&&(m.to+=k),null==m.from){var n=Ke(h,m.mark
 er);n||(m.from=k,j&&(h||(h=[])).push(m))}else m.from+=k,j&&(h||(h=[])).push(m)}h&&(h=Qe(h)),i&&i!=h&&(i=Qe(i));var o=[h];if(!j){var q,p=b.text.length-2;if(p>0&&h)for(var l=0;l<h.length;++l)null==h[l].to&&(q||(q=[])).push(new Je(h[l].marker,null,null));for(var l=0;p>l;++l)o.push(q);o.push(i)}return o}function Qe(a){for(var b=0;b<a.length;++b){var c=a[b];null!=c.from&&c.from==c.to&&c.marker.clearWhenEmpty!==!1&&a.splice(b--,1)}return a.length?a:null}function Re(a,b){var c=gg(a,b),d=Pe(a,b);if(!c)return d;if(!d)return c;for(var e=0;e<c.length;++e){var f=c[e],g=d[e];if(f&&g)a:for(var h=0;h<g.length;++h){for(var i=g[h],j=0;j<f.length;++j)if(f[j].marker==i.marker)continue a;f.push(i)}else g&&(c[e]=g)}return c}function Se(a,b,c){var d=null;if(a.iter(b.line,c.line+1,function(a){if(a.markedSpans)for(var b=0;b<a.markedSpans.length;++b){var c=a.markedSpans[b].marker;!c.readOnly||d&&-1!=Ng(d,c)||(d||(d=[])).push(c)}}),!d)return null;for(var e=[{from:b,to:c}],f=0;f<d.length;++f)for(var g=d[f],h=
 g.find(0),i=0;i<e.length;++i){var j=e[i];if(!(nb(j.to,h.from)<0||nb(j.from,h.to)>0)){var k=[i,1],l=nb(j.from,h.from),m=nb(j.to,h.to);(0>l||!g.inclusiveLeft&&!l)&&k.push({from:j.from,to:h.from}),(m>0||!g.inclusiveRight&&!m)&&k.push({from:h.to,to:j.to}),e.splice.apply(e,k),i+=k.length-1}}return e}function Te(a){var b=a.markedSpans;if(b){for(var c=0;c<b.length;++c)b[c].marker.detachLine(a);a.markedSpans=null}}function Ue(a,b){if(b){for(var c=0;c<b.length;++c)b[c].marker.attachLine(a);a.markedSpans=b}}function Ve(a){return a.inclusiveLeft?-1:0}function We(a){return a.inclusiveRight?1:0}function Xe(a,b){var c=a.lines.length-b.lines.length;if(0!=c)return c;var d=a.find(),e=b.find(),f=nb(d.from,e.from)||Ve(a)-Ve(b);if(f)return-f;var g=nb(d.to,e.to)||We(a)-We(b);return g?g:b.id-a.id}function Ye(a,b){var d,c=v&&a.markedSpans;if(c)for(var e,f=0;f<c.length;++f)e=c[f],e.marker.collapsed&&null==(b?e.from:e.to)&&(!d||Xe(d,e.marker)<0)&&(d=e.marker);return d}function Ze(a){return Ye(a,!0)}function
  $e(a){return Ye(a,!1)}function _e(a,b,c,d,e){var f=Qf(a,b),g=v&&f.markedSpans;if(g)for(var h=0;h<g.length;++h){var i=g[h];if(i.marker.collapsed){var j=i.marker.find(0),k=nb(j.from,c)||Ve(i.marker)-Ve(e),l=nb(j.to,d)||We(i.marker)-We(e);if(!(k>=0&&0>=l||0>=k&&l>=0)&&(0>=k&&(nb(j.to,c)>0||i.marker.inclusiveRight&&e.inclusiveLeft)||k>=0&&(nb(j.from,d)<0||i.marker.inclusiveLeft&&e.inclusiveRight)))return!0}}}function af(a){for(var b;b=Ze(a);)a=b.find(-1,!0).line;return a}function bf(a){for(var b,c;b=$e(a);)a=b.find(1,!0).line,(c||(c=[])).push(a);return c}function cf(a,b){var c=Qf(a,b),d=af(c);return c==d?b:Uf(d)}function df(a,b){if(b>a.lastLine())return b;var d,c=Qf(a,b);if(!ef(a,c))return b;for(;d=$e(c);)c=d.find(1,!0).line;return Uf(c)+1}function ef(a,b){var c=v&&b.markedSpans;if(c)for(var d,e=0;e<c.length;++e)if(d=c[e],d.marker.collapsed){if(null==d.from)return!0;if(!d.marker.widgetNode&&0==d.from&&d.marker.inclusiveLeft&&ff(a,b,d))return!0}}function ff(a,b,c){if(null==c.to){var d=c
 .marker.find(1,!0);return ff(a,d.line,Ke(d.line.markedSpans,c.marker))}if(c.marker.inclusiveRight&&c.to==b.text.length)return!0;for(var e,f=0;f<b.markedSpans.length;++f)if(e=b.markedSpans[f],e.marker.collapsed&&!e.marker.widgetNode&&e.from==c.to&&(null==e.to||e.to!=c.from)&&(e.marker.inclusiveLeft||c.marker.inclusiveRight)&&ff(a,b,e))return!0}function hf(a,b,c){Wf(b)<(a.curOp&&a.curOp.scrollTop||a.doc.scrollTop)&&ae(a,null,c)}function jf(a){if(null!=a.height)return a.height;if(!ah(document.body,a.node)){var b="position: relative;";a.coverGutter&&(b+="margin-left: -"+a.cm.getGutterElement().offsetWidth+"px;"),_g(a.cm.display.measure,Yg("div",[a.node],null,b))}return a.height=a.node.offsetHeight}function kf(a,b,c,d){var e=new gf(a,c,d);return e.noHScroll&&(a.display.alignWidgets=!0),ee(a.doc,b,"widget",function(b){var c=b.widgets||(b.widgets=[]);if(null==e.insertAt?c.push(e):c.splice(Math.min(c.length-1,Math.max(0,e.insertAt)),0,e),e.line=b,!ef(a.doc,b)){var d=Wf(b)<a.doc.scrollTop;Tf
 (b,b.height+jf(e)),d&&ae(a,null,e.height),a.curOp.forceUpdate=!0}return!0}),e}function mf(a,b,c,d){a.text=b,a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null),null!=a.order&&(a.order=null),Te(a),Ue(a,c);var e=d?d(a):1;e!=a.height&&Tf(a,e)}function nf(a){a.parent=null,Te(a)}function of(a,b){if(a)for(;;){var c=a.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!c)break;a=a.slice(0,c.index)+a.slice(c.index+c[0].length);var d=c[1]?"bgClass":"textClass";null==b[d]?b[d]=c[2]:new RegExp("(?:^|s)"+c[2]+"(?:$|s)").test(b[d])||(b[d]+=" "+c[2])}return a}function pf(a,b){if(a.blankLine)return a.blankLine(b);if(a.innerMode){var c=w.innerMode(a,b);return c.mode.blankLine?c.mode.blankLine(c.state):void 0}}function qf(a,b,c,d){for(var e=0;10>e;e++){d&&(d[0]=w.innerMode(a,c).mode);var f=a.token(b,c);if(b.pos>b.start)return f}throw new Error("Mode "+a.name+" failed to advance stream.")}function rf(a,b,c,d){function e(a){return{start:k.start,end:k.pos,string:k.current(),type:h||null,state:a?re(f
 .mode,j):j}}var h,f=a.doc,g=f.mode;b=wb(f,b);var l,i=Qf(f,b.line),j=Wb(a,b.line,c),k=new Ae(i.text,a.options.tabSize);for(d&&(l=[]);(d||k.pos<b.ch)&&!k.eol();)k.start=k.pos,h=qf(g,k,j),d&&l.push(e(!0));return d?l:e()}function sf(a,b,c,d,e,f,g){var h=c.flattenSpans;null==h&&(h=a.options.flattenSpans);var l,i=0,j=null,k=new Ae(b,a.options.tabSize),m=a.options.addModeClass&&[null];for(""==b&&of(pf(c,d),f);!k.eol();){if(k.pos>a.options.maxHighlightLength?(h=!1,g&&vf(a,b,d,k.pos),k.pos=b.length,l=null):l=of(qf(c,k,d,m),f),m){var n=m[0].name;n&&(l="m-"+(l?n+" "+l:n))}h&&j==l||(i<k.start&&e(k.start,j),i=k.start,j=l),k.start=k.pos}for(;i<k.pos;){var o=Math.min(k.pos,i+5e4);e(o,j),i=o}}function tf(a,b,c,d){var e=[a.state.modeGen],f={};sf(a,b.text,a.doc.mode,c,function(a,b){e.push(a,b)},f,d);for(var g=0;g<a.state.overlays.length;++g){var h=a.state.overlays[g],i=1,j=0;sf(a,b.text,h.mode,!0,function(a,b){for(var c=i;a>j;){var d=e[i];d>a&&e.splice(i,1,a,e[i+1],d),i+=2,j=Math.min(a,d)}if(b)if(h.o
 paque)e.splice(c,i-c,a,"cm-overlay "+b),i=c+2;else for(;i>c;c+=2){var f=e[c+1];e[c+1]=(f?f+" ":"")+"cm-overlay "+b}},f)}return{styles:e,classes:f.bgClass||f.textClass?f:null}}function uf(a,b,c){if(!b.styles||b.styles[0]!=a.state.modeGen){var d=tf(a,b,b.stateAfter=Wb(a,Uf(b)));b.styles=d.styles,d.classes?b.styleClasses=d.classes:b.styleClasses&&(b.styleClasses=null),c===a.doc.frontier&&a.doc.frontier++}return b.styles}function vf(a,b,c,d){var e=a.doc.mode,f=new Ae(b,a.options.tabSize);for(f.start=f.pos=d||0,""==b&&pf(e,c);!f.eol()&&f.pos<=a.options.maxHighlightLength;)qf(e,f,c),f.start=f.pos}function yf(a,b){if(!a||/^\s*$/.test(a))return null;var c=b.addModeClass?xf:wf;return c[a]||(c[a]=a.replace(/\S+/g,"cm-$&"))}function zf(a,b){var c=Yg("span",null,null,f?"padding-right: .1px":null),e={pre:Yg("pre",[c]),content:c,col:0,pos:0,cm:a};b.measure={};for(var g=0;g<=(b.rest?b.rest.length:0);g++){var i,h=g?b.rest[g-1]:b.line;e.pos=0,e.addToken=Bf,(d||f)&&a.getOption("lineWrapping")&&(e.add
 Token=Cf(e.addToken)),qh(a.display.measure)&&(i=Xf(h))&&(e.addToken=Df(e.addToken,i)),e.map=[];var j=b!=a.display.externalMeasured&&Uf(h);Ff(h,e,uf(a,h,j)),h.styleClasses&&(h.styleClasses.bgClass&&(e.bgClass=fh(h.styleClasses.bgClass,e.bgClass||"")),h.styleClasses.textClass&&(e.textClass=fh(h.styleClasses.textClass,e.textClass||""))),0==e.map.length&&e.map.push(0,0,e.content.appendChild(oh(a.display.measure))),0==g?(b.measure.map=e.map,b.measure.cache={}):((b.measure.maps||(b.measure.maps=[])).push(e.map),(b.measure.caches||(b.measure.caches=[])).push({}))}return f&&/\bcm-tab\b/.test(e.content.lastChild.className)&&(e.content.className="cm-tab-wrap-hack"),tg(a,"renderLine",a,b.line,e.pre),e.pre.className&&(e.textClass=fh(e.pre.className,e.textClass||"")),e}function Af(a){var b=Yg("span","\u2022","cm-invalidchar");return b.title="\\u"+a.charCodeAt(0).toString(16),b}function Bf(a,b,c,f,g,h){if(b){var i=a.cm.options.specialChars,j=!1;if(i.test(b))for(var k=document.createDocumentFragme
 nt(),l=0;;){i.lastIndex=l;var m=i.exec(b),n=m?m.index-l:b.length-l;if(n){var o=document.createTextNode(b.slice(l,l+n));d&&9>e?k.appendChild(Yg("span",[o])):k.appendChild(o),a.map.push(a.pos,a.pos+n,o),a.col+=n,a.pos+=n}if(!m)break;if(l+=n+1,"	"==m[0]){var p=a.cm.options.tabSize,q=p-a.col%p,o=k.appendChild(Yg("span",Kg(q),"cm-tab"));a.col+=q}else{var o=a.cm.options.specialCharPlaceholder(m[0]);d&&9>e?k.appendChild(Yg("span",[o])):k.appendChild(o),a.col+=1}a.map.push(a.pos,a.pos+1,o),a.pos++}else{a.col+=b.length;var k=document.createTextNode(b);a.map.push(a.pos,a.pos+b.length,k),d&&9>e&&(j=!0),a.pos+=b.length}if(c||f||g||j){var r=c||"";f&&(r+=f),g&&(r+=g);var s=Yg("span",[k],r);return h&&(s.title=h),a.content.appendChild(s)}a.content.appendChild(k)}}function Cf(a){function b(a){for(var b=" ",c=0;c<a.length-2;++c)b+=c%2?" ":"\xa0";return b+=" "}return function(c,d,e,f,g,h){a(c,d.replace(/ {3,}/g,b),e,f,g,h)}}function Df(a,b){return function(c,d,e,f,g,h){e=e?e+" cm-force-border":"cm-for
 ce-border";for(var i=c.pos,j=i+d.length;;){for(var k=0;k<b.length;k++){var l=b[k];if(l.to>i&&l.from<=i)break}if(l.to>=j)return a(c,d,e,f,g,h);a(c,d.slice(0,l.to-i),e,f,null,h),f=null,d=d.slice(l.to-i),i=l.to}}}function Ef(a,b,c,d){var e=!d&&c.widgetNode;e&&(a.map.push(a.pos,a.pos+b,e),a.content.appendChild(e)),a.pos+=b}function Ff(a,b,c){var d=a.markedSpans,e=a.text,f=0;if(d)for(var k,m,n,o,p,q,h=e.length,i=0,g=1,j="",l=0;;){if(l==i){m=n=o=p="",q=null,l=1/0;for(var r=[],s=0;s<d.length;++s){var t=d[s],u=t.marker;t.from<=i&&(null==t.to||t.to>i)?(null!=t.to&&l>t.to&&(l=t.to,n=""),u.className&&(m+=" "+u.className),u.startStyle&&t.from==i&&(o+=" "+u.startStyle),u.endStyle&&t.to==l&&(n+=" "+u.endStyle),u.title&&!p&&(p=u.title),u.collapsed&&(!q||Xe(q.marker,u)<0)&&(q=t)):t.from>i&&l>t.from&&(l=t.from),"bookmark"==u.type&&t.from==i&&u.widgetNode&&r.push(u)}if(q&&(q.from||0)==i&&(Ef(b,(null==q.to?h+1:q.to)-i,q.marker,null==q.from),null==q.to))return;if(!q&&r.length)for(var s=0;s<r.length;++s
 )Ef(b,0,r[s])}if(i>=h)break;for(var v=Math.min(h,l);;){if(j){var w=i+j.length;if(!q){var x=w>v?j.slice(0,v-i):j;b.addToken(b,x,k?k+m:m,o,i+x.length==l?n:"",p)}if(w>=v){j=j.slice(v-i),i=v;break}i=w,o=""}j=e.slice(f,f=c[g++]),k=yf(c[g++],b.cm.options)}}else for(var g=1;g<c.length;g+=2)b.addToken(b,e.slice(f,f=c[g]),yf(c[g+1],b.cm.options))}function Gf(a,b){return 0==b.from.ch&&0==b.to.ch&&""==Lg(b.text)&&(!a.cm||a.cm.options.wholeLineUpdateBefore)}function Hf(a,b,c,d){function e(a){return c?c[a]:null}function f(a,c,e){mf(a,c,e,d),vg(a,"change",a,b)}var g=b.from,h=b.to,i=b.text,j=Qf(a,g.line),k=Qf(a,h.line),l=Lg(i),m=e(i.length-1),n=h.line-g.line;if(Gf(a,b)){for(var o=0,p=[];o<i.length-1;++o)p.push(new lf(i[o],e(o),d));f(k,k.text,m),n&&a.remove(g.line,n),p.length&&a.insert(g.line,p)}else if(j==k)if(1==i.length)f(j,j.text.slice(0,g.ch)+l+j.text.slice(h.ch),m);else{for(var p=[],o=1;o<i.length-1;++o)p.push(new lf(i[o],e(o),d));p.push(new lf(l+j.text.slice(h.ch),m,d)),f(j,j.text.slice(0,g.
 ch)+i[0],e(0)),a.insert(g.line+1,p)}else if(1==i.length)f(j,j.text.slice(0,g.ch)+i[0]+k.text.slice(h.ch),e(0)),a.remove(g.line+1,n);else{f(j,j.text.slice(0,g.ch)+i[0],e(0)),f(k,l+k.text.slice(h.ch),m);for(var o=1,p=[];o<i.length-1;++o)p.push(new lf(i[o],e(o),d));n>1&&a.remove(g.line+1,n-1),a.insert(g.line+1,p)}vg(a,"change",a,b)}function If(a){this.lines=a,this.parent=null;for(var b=0,c=0;b<a.length;++b)a[b].parent=this,c+=a[b].height;this.height=c}function Jf(a){this.children=a;for(var b=0,c=0,d=0;d<a.length;++d){var e=a[d];b+=e.chunkSize(),c+=e.height,e.parent=this}this.size=b,this.height=c,this.parent=null}function Of(a,b,c){function d(a,e,f){if(a.linked)for(var g=0;g<a.linked.length;++g){var h=a.linked[g];if(h.doc!=e){var i=f&&h.sharedHist;(!c||i)&&(b(h.doc,i),d(h.doc,a,i))}}}d(a,null,!0)}function Pf(a,b){if(b.cm)throw new Error("This document is already in use.");a.doc=b,b.cm=a,C(a),y(a),a.options.lineWrapping||I(a),a.options.mode=b.modeOption,Pc(a)}function Qf(a,b){if(b-=a.fir
 st,0>b||b>=a.size)throw new Error("There is no line "+(b+a.first)+" in the document.");for(var c=a;!c.lines;)for(var d=0;;++d){var e=c.children[d],f=e.chunkSize();if(f>b){c=e;break}b-=f}return c.lines[b]}function Rf(a,b,c){var d=[],e=b.line;return a.iter(b.line,c.line+1,function(a){var f=a.text;e==c.line&&(f=f.slice(0,c.ch)),e==b.line&&(f=f.slice(b.ch)),d.push(f),++e}),d}function Sf(a,b,c){var d=[];return a.iter(b,c,function(a){d.push(a.text)}),d}function Tf(a,b){var c=b-a.height;if(c)for(var d=a;d;d=d.parent)d.height+=c}function Uf(a){if(null==a.parent)return null;for(var b=a.parent,c=Ng(b.lines,a),d=b.parent;d;b=d,d=d.parent)for(var e=0;d.children[e]!=b;++e)c+=d.children[e].chunkSize();return c+b.first}function Vf(a,b){var c=a.first;a:do{for(var d=0;d<a.children.length;++d){var e=a.children[d],f=e.height;if(f>b){a=e;continue a}b-=f,c+=e.chunkSize()}return c}while(!a.lines);for(var d=0;d<a.lines.length;++d){var g=a.lines[d],h=g.height;if(h>b)break;b-=h}return c+d}function Wf(a){a=a
 f(a);for(var b=0,c=a.parent,d=0;d<c.lines.length;++d){var e=c.lines[d];if(e==a)break;b+=e.height}for(var f=c.parent;f;c=f,f=c.parent)for(var d=0;d<f.children.length;++d){var g=f.children[d];if(g==c)break;b+=g.height}return b}function Xf(a){var b=a.order;return null==b&&(b=a.order=Lh(a.text)),b}function Yf(a){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=a||1}function Zf(a,b){var c={from:ob(b.from),to:Ld(b),text:Rf(a,b.from,b.to)};return eg(a,c,b.from.line,b.to.line+1),Of(a,function(a){eg(a,c,b.from.line,b.to.line+1)},!0),c}function $f(a){for(;a.length;){var b=Lg(a);if(!b.ranges)break;a.pop()}}function _f(a,b){return b?($f(a.done),Lg(a.done)):a.done.length&&!Lg(a.done).ranges?Lg(a.done):a.done.length>1&&!a.done[a.done.length-2].ranges?(a.done.pop(),Lg(a.done)):void 0}function ag(a,b,c,d){var e=a.history;e.undone.length=0;var g,f=+new Date;if(
 (e.lastOp==d||e.lastOrigin==b.origin&&b.origin&&("+"==b.origin.charAt(0)&&a.cm&&e.lastModTime>f-a.cm.options.historyEventDelay||"*"==b.origin.charAt(0)))&&(g=_f(e,e.lastOp==d))){var h=Lg(g.changes);0==nb(b.from,b.to)&&0==nb(b.from,h.to)?h.to=Ld(b):g.changes.push(Zf(a,b))}else{var i=Lg(e.done);for(i&&i.ranges||dg(a.sel,e.done),g={changes:[Zf(a,b)],generation:e.generation},e.done.push(g);e.done.length>e.undoDepth;)e.done.shift(),e.done[0].ranges||e.done.shift()}e.done.push(c),e.generation=++e.maxGeneration,e.lastModTime=e.lastSelTime=f,e.lastOp=e.lastSelOp=d,e.lastOrigin=e.lastSelOrigin=b.origin,h||tg(a,"historyAdded")}function bg(a,b,c,d){var e=b.charAt(0);return"*"==e||"+"==e&&c.ranges.length==d.ranges.length&&c.somethingSelected()==d.somethingSelected()&&new Date-a.history.lastSelTime<=(a.cm?a.cm.options.historyEventDelay:500)}function cg(a,b,c,d){var e=a.history,f=d&&d.origin;c==e.lastSelOp||f&&e.lastSelOrigin==f&&(e.lastModTime==e.lastSelTime&&e.lastOrigin==f||bg(a,f,Lg(e.done),b
 ))?e.done[e.done.length-1]=b:dg(b,e.done),e.lastSelTime=+new Date,e.lastSelOrigin=f,e.lastSelOp=c,d&&d.clearRedo!==!1&&$f(e.undone)}function dg(a,b){var c=Lg(b);c&&c.ranges&&c.equals(a)||b.push(a)}function eg(a,b,c,d){var e=b["spans_"+a.id],f=0;a.iter(Math.max(a.first,c),Math.min(a.first+a.size,d),function(c){c.markedSpans&&((e||(e=b["spans_"+a.id]={}))[f]=c.markedSpans),++f})}function fg(a){if(!a)return null;for(var c,b=0;b<a.length;++b)a[b].marker.explicitlyCleared?c||(c=a.slice(0,b)):c&&c.push(a[b]);return c?c.length?c:null:a}function gg(a,b){var c=b["spans_"+a.id];if(!c)return null;for(var d=0,e=[];d<b.text.length;++d)e.push(fg(c[d]));return e}function hg(a,b,c){for(var d=0,e=[];d<a.length;++d){var f=a[d];if(f.ranges)e.push(c?rb.prototype.deepCopy.call(f):f);else{var g=f.changes,h=[];e.push({changes:h});for(var i=0;i<g.length;++i){var k,j=g[i];if(h.push({from:j.from,to:j.to,text:j.text}),b)for(var l in j)(k=l.match(/^spans_(\d+)$/))&&Ng(b,Number(k[1]))>-1&&(Lg(h)[l]=j[l],delete 
 j[l])}}}return e}function ig(a,b,c,d){c<a.line?a.line+=d:b<a.line&&(a.line=b,a.ch=0)}function jg(a,b,c,d){for(var e=0;e<a.length;++e){var f=a[e],g=!0;if(f.ranges){f.copied||(f=a[e]=f.deepCopy(),f.copied=!0);for(var h=0;h<f.ranges.length;h++)ig(f.ranges[h].anchor,b,c,d),ig(f.ranges[h].head,b,c,d)}else{for(var h=0;h<f.changes.length;++h){var i=f.changes[h];if(c<i.from.line)i.from=mb(i.from.line+d,i.from.ch),i.to=mb(i.to.line+d,i.to.ch);else if(b<=i.to.line){g=!1;break}}g||(a.splice(0,e+1),e=0)}}}function kg(a,b){var c=b.from.line,d=b.to.line,e=b.text.length-(d-c)-1;jg(a.done,c,d,e),jg(a.undone,c,d,e)}function ng(a){return null!=a.defaultPrevented?a.defaultPrevented:0==a.returnValue}function pg(a){return a.target||a.srcElement}function qg(a){var b=a.which;return null==b&&(1&a.button?b=1:2&a.button?b=3:4&a.button&&(b=2)),p&&a.ctrlKey&&1==b&&(b=3),b}function vg(a,b){function f(a){return function(){a.apply(null,d)}}var c=a._handlers&&a._handlers[b];if(c){var e,d=Array.prototype.slice.call
 (arguments,2);yc?e=yc.delayedCallbacks:ug?e=ug:(e=ug=[],setTimeout(wg,0));for(var g=0;g<c.length;++g)e.push(f(c[g]))}}function wg(){var a=ug;ug=null;for(var b=0;b<a.length;++b)a[b]()}function xg(a,b,c){return"string"==typeof b&&(b={type:b,preventDefault:function(){this.defaultPrevented=!0}}),tg(a,c||b.type,a,b),ng(b)||b.codemirrorIgnore}function yg(a){var b=a._handlers&&a._handlers.cursorActivity;if(b)for(var c=a.curOp.cursorActivityHandlers||(a.curOp.cursorActivityHandlers=[]),d=0;d<b.length;++d)-1==Ng(c,b[d])&&c.push(b[d])}function zg(a,b){var c=a._handlers&&a._handlers[b];return c&&c.length>0}function Ag(a){a.prototype.on=function(a,b){rg(this,a,b)},a.prototype.off=function(a,b){sg(this,a,b)}}function Gg(){this.id=null}function Ig(a,b,c){for(var d=0,e=0;;){var f=a.indexOf("	",d);-1==f&&(f=a.length);var g=f-d;if(f==a.length||e+g>=b)return d+Math.min(g,b-e);if(e+=f-d,e+=c-e%c,d=f+1,e>=b)return d}}function Kg(a){for(;Jg.length<=a;)Jg.push(Lg(Jg)+" ");return Jg[a]}function Lg(a){retu
 rn a[a.length-1]}function Ng(a,b){for(var c=0;c<a.length;++c)if(a[c]==b)return c;return-1}function Og(a,b){for(var c=[],d=0;d<a.length;d++)c[d]=b(a[d],d);return c}function Pg(a,b){var c;if(Object.create)c=Object.create(a);else{var d=function(){};d.prototype=a,c=new d}return b&&Qg(b,c),c}function Qg(a,b,c){b||(b={});for(var d in a)!a.hasOwnProperty(d)||c===!1&&b.hasOwnProperty(d)||(b[d]=a[d]);return b}function Rg(a){var b=Array.prototype.slice.call(arguments,1);return function(){return a.apply(null,b)}}function Ug(a,b){return b?b.source.indexOf("\\w")>-1&&Tg(a)?!0:b.test(a):Tg(a)}function Vg(a){for(var b in a)if(a.hasOwnProperty(b)&&a[b])return!1;return!0}function Xg(a){return a.charCodeAt(0)>=768&&Wg.test(a)}function Yg(a,b,c,d){var e=document.createElement(a);if(c&&(e.className=c),d&&(e.style.cssText=d),"string"==typeof b)e.appendChild(document.createTextNode(b));else if(b)for(var f=0;f<b.length;++f)e.appendChild(b[f]);return e}function $g(a){for(var b=a.childNodes.length;b>0;--b)a
 .removeChild(a.firstChild);return a}function _g(a,b){return $g(a).appendChild(b)}function ah(a,b){if(a.contains)return a.contains(b);for(;b=b.parentNode;)if(b==a)return!0}function bh(){return document.activeElement}function ch(a){return new RegExp("(^|\\s)"+a+"(?:$|\\s)\\s*")}function fh(a,b){for(var c=a.split(" "),d=0;d<c.length;d++)c[d]&&!ch(c[d]).test(b)&&(b+=" "+c[d]);return b}function gh(a){if(document.body.getElementsByClassName)for(var b=document.body.getElementsByClassName("CodeMirror"),c=0;c<b.length;c++){var d=b[c].CodeMirror;d&&a(d)}}function ih(){hh||(jh(),hh=!0)}function jh(){var a;rg(window,"resize",function(){null==a&&(a=setTimeout(function(){a=null,lh=null,gh(dd)},100))}),rg(window,"blur",function(){gh(Id)})}function mh(a){if(null!=lh)return lh;var b=Yg("div",null,null,"width: 50px; height: 50px; overflow-x: scroll");return _g(a,b),b.offsetWidth&&(lh=b.offsetHeight-b.clientHeight),lh||0}function oh(a){if(null==nh){var b=Yg("span","\u200b");_g(a,Yg("span",[b,document.
 createTextNode("x")])),0!=a.firstChild.offsetHeight&&(nh=b.offsetWidth<=1&&b.offsetHeight>2&&!(d&&8>e))}return nh?Yg("span","\u200b"):Yg("span","\xa0",null,"display: inline-block; width: 1px; margin-right: -1px")}function qh(a){if(null!=ph)return ph;var b=_g(a,document.createTextNode("A\u062eA")),c=Zg(b,0,1).getBoundingClientRect();if(!c||c.left==c.right)return!1;var d=Zg(b,1,2).getBoundingClientRect();return ph=d.right-c.right<3}function vh(a){if(null!=uh)return uh;var b=_g(a,Yg("span","x")),c=b.getBoundingClientRect(),d=Zg(b,0,1).getBoundingClientRect();return uh=Math.abs(c.left-d.left)>1}function xh(a,b,c,d){if(!a)return d(b,c,"ltr");for(var e=!1,f=0;f<a.length;++f){var g=a[f];(g.from<c&&g.to>b||b==c&&g.to==b)&&(d(Math.max(g.from,b),Math.min(g.to,c),1==g.level?"rtl":"ltr"),e=!0)}e||d(b,c,"ltr")}function yh(a){return a.level%2?a.to:a.from}function zh(a){return a.level%2?a.from:a.to}function Ah(a){var b=Xf(a);return b?yh(b[0]):0}function Bh(a){var b=Xf(a);return b?zh(Lg(b)):a.text.
 length}function Ch(a,b){var c=Qf(a.doc,b),d=af(c);d!=c&&(b=Uf(d));var e=Xf(d),f=e?e[0].level%2?Bh(d):Ah(d):0;return mb(b,f)}function Dh(a,b){for(var c,d=Qf(a.doc,b);c=$e(d);)d=c.find(1,!0).line,b=null;var e=Xf(d),f=e?e[0].level%2?Ah(d):Bh(d):d.text.length;return mb(

<TRUNCATED>

[31/50] [abbrv] incubator-nifi git commit: NIFI-27: - Starting to upgrade jQuery and jQuery UI.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-1.7.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-1.7.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-1.7.js
deleted file mode 100755
index f9563e1..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-1.7.js
+++ /dev/null
@@ -1,9017 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.7
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Thu Nov 3 16:18:21 2011 -0400
- */
-(function (window, undefined) {
-
-// Use the correct document accordingly with window argument (sandbox)
-    var document = window.document,
-            navigator = window.navigator,
-            location = window.location;
-    var jQuery = (function () {
-
-// Define a local copy of jQuery
-        var jQuery = function (selector, context) {
-            // The jQuery object is actually just the init constructor 'enhanced'
-            return new jQuery.fn.init(selector, context, rootjQuery);
-        },
-                // Map over jQuery in case of overwrite
-                _jQuery = window.jQuery,
-                // Map over the $ in case of overwrite
-                _$ = window.$,
-                // A central reference to the root jQuery(document)
-                rootjQuery,
-                // A simple way to check for HTML strings or ID strings
-                // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-                quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-                // Check if a string has a non-whitespace character in it
-                rnotwhite = /\S/,
-                // Used for trimming whitespace
-                trimLeft = /^\s+/,
-                trimRight = /\s+$/,
-                // Check for digits
-                rdigit = /\d/,
-                // Match a standalone tag
-                rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-                // JSON RegExp
-                rvalidchars = /^[\],:{}\s]*$/,
-                rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
-                rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
-                rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-                // Useragent RegExp
-                rwebkit = /(webkit)[ \/]([\w.]+)/,
-                ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
-                rmsie = /(msie) ([\w.]+)/,
-                rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
-                // Matches dashed string for camelizing
-                rdashAlpha = /-([a-z]|[0-9])/ig,
-                rmsPrefix = /^-ms-/,
-                // Used by jQuery.camelCase as callback to replace()
-                fcamelCase = function (all, letter) {
-                    return (letter + "").toUpperCase();
-                },
-                // Keep a UserAgent string for use with jQuery.browser
-                userAgent = navigator.userAgent,
-                // For matching the engine and version of the browser
-                browserMatch,
-                // The deferred used on DOM ready
-                readyList,
-                // The ready event handler
-                DOMContentLoaded,
-                // Save a reference to some core methods
-                toString = Object.prototype.toString,
-                hasOwn = Object.prototype.hasOwnProperty,
-                push = Array.prototype.push,
-                slice = Array.prototype.slice,
-                trim = String.prototype.trim,
-                indexOf = Array.prototype.indexOf,
-                // [[Class]] -> type pairs
-                class2type = {};
-
-        jQuery.fn = jQuery.prototype = {
-            constructor: jQuery,
-            init: function (selector, context, rootjQuery) {
-                var match, elem, ret, doc;
-
-                // Handle $(""), $(null), or $(undefined)
-                if (!selector) {
-                    return this;
-                }
-
-                // Handle $(DOMElement)
-                if (selector.nodeType) {
-                    this.context = this[0] = selector;
-                    this.length = 1;
-                    return this;
-                }
-
-                // The body element only exists once, optimize finding it
-                if (selector === "body" && !context && document.body) {
-                    this.context = document;
-                    this[0] = document.body;
-                    this.selector = selector;
-                    this.length = 1;
-                    return this;
-                }
-
-                // Handle HTML strings
-                if (typeof selector === "string") {
-                    // Are we dealing with HTML string or an ID?
-                    if (selector.charAt(0) === "<" && selector.charAt(selector.length - 1) === ">" && selector.length >= 3) {
-                        // Assume that strings that start and end with <> are HTML and skip the regex check
-                        match = [null, selector, null];
-
-                    } else {
-                        match = quickExpr.exec(selector);
-                    }
-
-                    // Verify a match, and that no context was specified for #id
-                    if (match && (match[1] || !context)) {
-
-                        // HANDLE: $(html) -> $(array)
-                        if (match[1]) {
-                            context = context instanceof jQuery ? context[0] : context;
-                            doc = (context ? context.ownerDocument || context : document);
-
-                            // If a single string is passed in and it's a single tag
-                            // just do a createElement and skip the rest
-                            ret = rsingleTag.exec(selector);
-
-                            if (ret) {
-                                if (jQuery.isPlainObject(context)) {
-                                    selector = [document.createElement(ret[1])];
-                                    jQuery.fn.attr.call(selector, context, true);
-
-                                } else {
-                                    selector = [doc.createElement(ret[1])];
-                                }
-
-                            } else {
-                                ret = jQuery.buildFragment([match[1]], [doc]);
-                                selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
-                            }
-
-                            return jQuery.merge(this, selector);
-
-                            // HANDLE: $("#id")
-                        } else {
-                            elem = document.getElementById(match[2]);
-
-                            // Check parentNode to catch when Blackberry 4.6 returns
-                            // nodes that are no longer in the document #6963
-                            if (elem && elem.parentNode) {
-                                // Handle the case where IE and Opera return items
-                                // by name instead of ID
-                                if (elem.id !== match[2]) {
-                                    return rootjQuery.find(selector);
-                                }
-
-                                // Otherwise, we inject the element directly into the jQuery object
-                                this.length = 1;
-                                this[0] = elem;
-                            }
-
-                            this.context = document;
-                            this.selector = selector;
-                            return this;
-                        }
-
-                        // HANDLE: $(expr, $(...))
-                    } else if (!context || context.jquery) {
-                        return (context || rootjQuery).find(selector);
-
-                        // HANDLE: $(expr, context)
-                        // (which is just equivalent to: $(context).find(expr)
-                    } else {
-                        return this.constructor(context).find(selector);
-                    }
-
-                    // HANDLE: $(function)
-                    // Shortcut for document ready
-                } else if (jQuery.isFunction(selector)) {
-                    return rootjQuery.ready(selector);
-                }
-
-                if (selector.selector !== undefined) {
-                    this.selector = selector.selector;
-                    this.context = selector.context;
-                }
-
-                return jQuery.makeArray(selector, this);
-            },
-            // Start with an empty selector
-            selector: "",
-            // The current version of jQuery being used
-            jquery: "1.7",
-            // The default length of a jQuery object is 0
-            length: 0,
-            // The number of elements contained in the matched element set
-            size: function () {
-                return this.length;
-            },
-            toArray: function () {
-                return slice.call(this, 0);
-            },
-            // Get the Nth element in the matched element set OR
-            // Get the whole matched element set as a clean array
-            get: function (num) {
-                return num == null ?
-                        // Return a 'clean' array
-                        this.toArray() :
-                        // Return just the object
-                                (num < 0 ? this[ this.length + num ] : this[ num ]);
-                    },
-                    // Take an array of elements and push it onto the stack
-                    // (returning the new matched element set)
-                    pushStack: function (elems, name, selector) {
-                        // Build a new jQuery matched element set
-                        var ret = this.constructor();
-
-                        if (jQuery.isArray(elems)) {
-                            push.apply(ret, elems);
-
-                        } else {
-                            jQuery.merge(ret, elems);
-                        }
-
-                        // Add the old object onto the stack (as a reference)
-                        ret.prevObject = this;
-
-                        ret.context = this.context;
-
-                        if (name === "find") {
-                            ret.selector = this.selector + (this.selector ? " " : "") + selector;
-                        } else if (name) {
-                            ret.selector = this.selector + "." + name + "(" + selector + ")";
-                        }
-
-                        // Return the newly-formed element set
-                        return ret;
-                    },
-                    // Execute a callback for every element in the matched set.
-                    // (You can seed the arguments with an array of args, but this is
-                    // only used internally.)
-                    each: function (callback, args) {
-                        return jQuery.each(this, callback, args);
-                    },
-                    ready: function (fn) {
-                        // Attach the listeners
-                        jQuery.bindReady();
-
-                        // Add the callback
-                        readyList.add(fn);
-
-                        return this;
-                    },
-                    eq: function (i) {
-                        return i === -1 ?
-                                this.slice(i) :
-                                this.slice(i, +i + 1);
-                    },
-                    first: function () {
-                        return this.eq(0);
-                    },
-                    last: function () {
-                        return this.eq(-1);
-                    },
-                    slice: function () {
-                        return this.pushStack(slice.apply(this, arguments),
-                                "slice", slice.call(arguments).join(","));
-                    },
-                    map: function (callback) {
-                        return this.pushStack(jQuery.map(this, function (elem, i) {
-                            return callback.call(elem, i, elem);
-                        }));
-                    },
-                    end: function () {
-                        return this.prevObject || this.constructor(null);
-                    },
-                    // For internal use only.
-                    // Behaves like an Array's method, not like a jQuery method.
-                    push: push,
-                    sort: [].sort,
-                    splice: [].splice
-                };
-
-// Give the init function the jQuery prototype for later instantiation
-                jQuery.fn.init.prototype = jQuery.fn;
-
-                jQuery.extend = jQuery.fn.extend = function () {
-                    var options, name, src, copy, copyIsArray, clone,
-                            target = arguments[0] || {},
-                            i = 1,
-                            length = arguments.length,
-                            deep = false;
-
-                    // Handle a deep copy situation
-                    if (typeof target === "boolean") {
-                        deep = target;
-                        target = arguments[1] || {};
-                        // skip the boolean and the target
-                        i = 2;
-                    }
-
-                    // Handle case when target is a string or something (possible in deep copy)
-                    if (typeof target !== "object" && !jQuery.isFunction(target)) {
-                        target = {};
-                    }
-
-                    // extend jQuery itself if only one argument is passed
-                    if (length === i) {
-                        target = this;
-                        --i;
-                    }
-
-                    for (; i < length; i++) {
-                        // Only deal with non-null/undefined values
-                        if ((options = arguments[ i ]) != null) {
-                            // Extend the base object
-                            for (name in options) {
-                                src = target[ name ];
-                                copy = options[ name ];
-
-                                // Prevent never-ending loop
-                                if (target === copy) {
-                                    continue;
-                                }
-
-                                // Recurse if we're merging plain objects or arrays
-                                if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) {
-                                    if (copyIsArray) {
-                                        copyIsArray = false;
-                                        clone = src && jQuery.isArray(src) ? src : [];
-
-                                    } else {
-                                        clone = src && jQuery.isPlainObject(src) ? src : {};
-                                    }
-
-                                    // Never move original objects, clone them
-                                    target[ name ] = jQuery.extend(deep, clone, copy);
-
-                                    // Don't bring in undefined values
-                                } else if (copy !== undefined) {
-                                    target[ name ] = copy;
-                                }
-                            }
-                        }
-                    }
-
-                    // Return the modified object
-                    return target;
-                };
-
-                jQuery.extend({
-                    noConflict: function (deep) {
-                        if (window.$ === jQuery) {
-                            window.$ = _$;
-                        }
-
-                        if (deep && window.jQuery === jQuery) {
-                            window.jQuery = _jQuery;
-                        }
-
-                        return jQuery;
-                    },
-                    // Is the DOM ready to be used? Set to true once it occurs.
-                    isReady: false,
-                    // A counter to track how many items to wait for before
-                    // the ready event fires. See #6781
-                    readyWait: 1,
-                    // Hold (or release) the ready event
-                    holdReady: function (hold) {
-                        if (hold) {
-                            jQuery.readyWait++;
-                        } else {
-                            jQuery.ready(true);
-                        }
-                    },
-                    // Handle when the DOM is ready
-                    ready: function (wait) {
-                        // Either a released hold or an DOMready/load event and not yet ready
-                        if ((wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady)) {
-                            // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-                            if (!document.body) {
-                                return setTimeout(jQuery.ready, 1);
-                            }
-
-                            // Remember that the DOM is ready
-                            jQuery.isReady = true;
-
-                            // If a normal DOM Ready event fired, decrement, and wait if need be
-                            if (wait !== true && --jQuery.readyWait > 0) {
-                                return;
-                            }
-
-                            // If there are functions bound, to execute
-                            readyList.fireWith(document, [jQuery]);
-
-                            // Trigger any bound ready events
-                            if (jQuery.fn.trigger) {
-                                jQuery(document).trigger("ready").unbind("ready");
-                            }
-                        }
-                    },
-                    bindReady: function () {
-                        if (readyList) {
-                            return;
-                        }
-
-                        readyList = jQuery.Callbacks("once memory");
-
-                        // Catch cases where $(document).ready() is called after the
-                        // browser event has already occurred.
-                        if (document.readyState === "complete") {
-                            // Handle it asynchronously to allow scripts the opportunity to delay ready
-                            return setTimeout(jQuery.ready, 1);
-                        }
-
-                        // Mozilla, Opera and webkit nightlies currently support this event
-                        if (document.addEventListener) {
-                            // Use the handy event callback
-                            document.addEventListener("DOMContentLoaded", DOMContentLoaded, false);
-
-                            // A fallback to window.onload, that will always work
-                            window.addEventListener("load", jQuery.ready, false);
-
-                            // If IE event model is used
-                        } else if (document.attachEvent) {
-                            // ensure firing before onload,
-                            // maybe late but safe also for iframes
-                            document.attachEvent("onreadystatechange", DOMContentLoaded);
-
-                            // A fallback to window.onload, that will always work
-                            window.attachEvent("onload", jQuery.ready);
-
-                            // If IE and not a frame
-                            // continually check to see if the document is ready
-                            var toplevel = false;
-
-                            try {
-                                toplevel = window.frameElement == null;
-                            } catch (e) {
-                            }
-
-                            if (document.documentElement.doScroll && toplevel) {
-                                doScrollCheck();
-                            }
-                        }
-                    },
-                    // See test/unit/core.js for details concerning isFunction.
-                    // Since version 1.3, DOM methods and functions like alert
-                    // aren't supported. They return false on IE (#2968).
-                    isFunction: function (obj) {
-                        return jQuery.type(obj) === "function";
-                    },
-                    isArray: Array.isArray || function (obj) {
-                        return jQuery.type(obj) === "array";
-                    },
-                    // A crude way of determining if an object is a window
-                    isWindow: function (obj) {
-                        return obj && typeof obj === "object" && "setInterval" in obj;
-                    },
-                    isNumeric: function (obj) {
-                        return obj != null && rdigit.test(obj) && !isNaN(obj);
-                    },
-                    type: function (obj) {
-                        return obj == null ?
-                                String(obj) :
-                                class2type[ toString.call(obj) ] || "object";
-                    },
-                    isPlainObject: function (obj) {
-                        // Must be an Object.
-                        // Because of IE, we also have to check the presence of the constructor property.
-                        // Make sure that DOM nodes and window objects don't pass through, as well
-                        if (!obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow(obj)) {
-                            return false;
-                        }
-
-                        try {
-                            // Not own constructor property must be Object
-                            if (obj.constructor &&
-                                    !hasOwn.call(obj, "constructor") &&
-                                    !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
-                                return false;
-                            }
-                        } catch (e) {
-                            // IE8,9 Will throw exceptions on certain host objects #9897
-                            return false;
-                        }
-
-                        // Own properties are enumerated firstly, so to speed up,
-                        // if last one is own, then all properties are own.
-
-                        var key;
-                        for (key in obj) {
-                        }
-
-                        return key === undefined || hasOwn.call(obj, key);
-                    },
-                    isEmptyObject: function (obj) {
-                        for (var name in obj) {
-                            return false;
-                        }
-                        return true;
-                    },
-                    error: function (msg) {
-                        throw msg;
-                    },
-                    parseJSON: function (data) {
-                        if (typeof data !== "string" || !data) {
-                            return null;
-                        }
-
-                        // Make sure leading/trailing whitespace is removed (IE can't handle it)
-                        data = jQuery.trim(data);
-
-                        // Attempt to parse using the native JSON parser first
-                        if (window.JSON && window.JSON.parse) {
-                            return window.JSON.parse(data);
-                        }
-
-                        // Make sure the incoming data is actual JSON
-                        // Logic borrowed from http://json.org/json2.js
-                        if (rvalidchars.test(data.replace(rvalidescape, "@")
-                                .replace(rvalidtokens, "]")
-                                .replace(rvalidbraces, ""))) {
-
-                            return (new Function("return " + data))();
-
-                        }
-                        jQuery.error("Invalid JSON: " + data);
-                    },
-                    // Cross-browser xml parsing
-                    parseXML: function (data) {
-                        var xml, tmp;
-                        try {
-                            if (window.DOMParser) { // Standard
-                                tmp = new DOMParser();
-                                xml = tmp.parseFromString(data, "text/xml");
-                            } else { // IE
-                                xml = new ActiveXObject("Microsoft.XMLDOM");
-                                xml.async = "false";
-                                xml.loadXML(data);
-                            }
-                        } catch (e) {
-                            xml = undefined;
-                        }
-                        if (!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) {
-                            jQuery.error("Invalid XML: " + data);
-                        }
-                        return xml;
-                    },
-                    noop: function () {
-                    },
-                    // Evaluates a script in a global context
-                    // Workarounds based on findings by Jim Driscoll
-                    // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-                    globalEval: function (data) {
-                        if (data && rnotwhite.test(data)) {
-                            // We use execScript on Internet Explorer
-                            // We use an anonymous function so that context is window
-                            // rather than jQuery in Firefox
-                            (window.execScript || function (data) {
-                                window[ "eval" ].call(window, data);
-                            })(data);
-                        }
-                    },
-                    // Convert dashed to camelCase; used by the css and data modules
-                    // Microsoft forgot to hump their vendor prefix (#9572)
-                    camelCase: function (string) {
-                        return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase);
-                    },
-                    nodeName: function (elem, name) {
-                        return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
-                    },
-                    // args is for internal usage only
-                    each: function (object, callback, args) {
-                        var name, i = 0,
-                                length = object.length,
-                                isObj = length === undefined || jQuery.isFunction(object);
-
-                        if (args) {
-                            if (isObj) {
-                                for (name in object) {
-                                    if (callback.apply(object[ name ], args) === false) {
-                                        break;
-                                    }
-                                }
-                            } else {
-                                for (; i < length; ) {
-                                    if (callback.apply(object[ i++ ], args) === false) {
-                                        break;
-                                    }
-                                }
-                            }
-
-                            // A special, fast, case for the most common use of each
-                        } else {
-                            if (isObj) {
-                                for (name in object) {
-                                    if (callback.call(object[ name ], name, object[ name ]) === false) {
-                                        break;
-                                    }
-                                }
-                            } else {
-                                for (; i < length; ) {
-                                    if (callback.call(object[ i ], i, object[ i++ ]) === false) {
-                                        break;
-                                    }
-                                }
-                            }
-                        }
-
-                        return object;
-                    },
-                    // Use native String.trim function wherever possible
-                    trim: trim ?
-                            function (text) {
-                                return text == null ?
-                                        "" :
-                                        trim.call(text);
-                            } :
-                            // Otherwise use our own trimming functionality
-                                    function (text) {
-                                        return text == null ?
-                                                "" :
-                                                text.toString().replace(trimLeft, "").replace(trimRight, "");
-                                    },
-                            // results is for internal usage only
-                            makeArray: function (array, results) {
-                                var ret = results || [];
-
-                                if (array != null) {
-                                    // The window, strings (and functions) also have 'length'
-                                    // The extra typeof function check is to prevent crashes
-                                    // in Safari 2 (See: #3039)
-                                    // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
-                                    var type = jQuery.type(array);
-
-                                    if (array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow(array)) {
-                                        push.call(ret, array);
-                                    } else {
-                                        jQuery.merge(ret, array);
-                                    }
-                                }
-
-                                return ret;
-                            },
-                            inArray: function (elem, array, i) {
-                                var len;
-
-                                if (array) {
-                                    if (indexOf) {
-                                        return indexOf.call(array, elem, i);
-                                    }
-
-                                    len = array.length;
-                                    i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
-
-                                    for (; i < len; i++) {
-                                        // Skip accessing in sparse arrays
-                                        if (i in array && array[ i ] === elem) {
-                                            return i;
-                                        }
-                                    }
-                                }
-
-                                return -1;
-                            },
-                            merge: function (first, second) {
-                                var i = first.length,
-                                        j = 0;
-
-                                if (typeof second.length === "number") {
-                                    for (var l = second.length; j < l; j++) {
-                                        first[ i++ ] = second[ j ];
-                                    }
-
-                                } else {
-                                    while (second[j] !== undefined) {
-                                        first[ i++ ] = second[ j++ ];
-                                    }
-                                }
-
-                                first.length = i;
-
-                                return first;
-                            },
-                            grep: function (elems, callback, inv) {
-                                var ret = [], retVal;
-                                inv = !!inv;
-
-                                // Go through the array, only saving the items
-                                // that pass the validator function
-                                for (var i = 0, length = elems.length; i < length; i++) {
-                                    retVal = !!callback(elems[ i ], i);
-                                    if (inv !== retVal) {
-                                        ret.push(elems[ i ]);
-                                    }
-                                }
-
-                                return ret;
-                            },
-                            // arg is for internal usage only
-                            map: function (elems, callback, arg) {
-                                var value, key, ret = [],
-                                        i = 0,
-                                        length = elems.length,
-                                        // jquery objects are treated as arrays
-                                        isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ((length > 0 && elems[ 0 ] && elems[ length - 1 ]) || length === 0 || jQuery.isArray(elems));
-
-                                // Go through the array, translating each of the items to their
-                                if (isArray) {
-                                    for (; i < length; i++) {
-                                        value = callback(elems[ i ], i, arg);
-
-                                        if (value != null) {
-                                            ret[ ret.length ] = value;
-                                        }
-                                    }
-
-                                    // Go through every key on the object,
-                                } else {
-                                    for (key in elems) {
-                                        value = callback(elems[ key ], key, arg);
-
-                                        if (value != null) {
-                                            ret[ ret.length ] = value;
-                                        }
-                                    }
-                                }
-
-                                // Flatten any nested arrays
-                                return ret.concat.apply([], ret);
-                            },
-                            // A global GUID counter for objects
-                            guid: 1,
-                            // Bind a function to a context, optionally partially applying any
-                            // arguments.
-                            proxy: function (fn, context) {
-                                if (typeof context === "string") {
-                                    var tmp = fn[ context ];
-                                    context = fn;
-                                    fn = tmp;
-                                }
-
-                                // Quick check to determine if target is callable, in the spec
-                                // this throws a TypeError, but we will just return undefined.
-                                if (!jQuery.isFunction(fn)) {
-                                    return undefined;
-                                }
-
-                                // Simulated bind
-                                var args = slice.call(arguments, 2),
-                                        proxy = function () {
-                                            return fn.apply(context, args.concat(slice.call(arguments)));
-                                        };
-
-                                // Set the guid of unique handler to the same of original handler, so it can be removed
-                                proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
-                                return proxy;
-                            },
-                            // Mutifunctional method to get and set values to a collection
-                            // The value/s can optionally be executed if it's a function
-                            access: function (elems, key, value, exec, fn, pass) {
-                                var length = elems.length;
-
-                                // Setting many attributes
-                                if (typeof key === "object") {
-                                    for (var k in key) {
-                                        jQuery.access(elems, k, key[k], exec, fn, value);
-                                    }
-                                    return elems;
-                                }
-
-                                // Setting one attribute
-                                if (value !== undefined) {
-                                    // Optionally, function values get executed if exec is true
-                                    exec = !pass && exec && jQuery.isFunction(value);
-
-                                    for (var i = 0; i < length; i++) {
-                                        fn(elems[i], key, exec ? value.call(elems[i], i, fn(elems[i], key)) : value, pass);
-                                    }
-
-                                    return elems;
-                                }
-
-                                // Getting an attribute
-                                return length ? fn(elems[0], key) : undefined;
-                            },
-                            now: function () {
-                                return (new Date()).getTime();
-                            },
-                            // Use of jQuery.browser is frowned upon.
-                            // More details: http://docs.jquery.com/Utilities/jQuery.browser
-                            uaMatch: function (ua) {
-                                ua = ua.toLowerCase();
-
-                                var match = rwebkit.exec(ua) ||
-                                        ropera.exec(ua) ||
-                                        rmsie.exec(ua) ||
-                                        ua.indexOf("compatible") < 0 && rmozilla.exec(ua) ||
-                                        [];
-
-                                return {browser: match[1] || "", version: match[2] || "0"};
-                            },
-                            sub: function () {
-                                function jQuerySub(selector, context) {
-                                    return new jQuerySub.fn.init(selector, context);
-                                }
-                                jQuery.extend(true, jQuerySub, this);
-                                jQuerySub.superclass = this;
-                                jQuerySub.fn = jQuerySub.prototype = this();
-                                jQuerySub.fn.constructor = jQuerySub;
-                                jQuerySub.sub = this.sub;
-                                jQuerySub.fn.init = function init(selector, context) {
-                                    if (context && context instanceof jQuery && !(context instanceof jQuerySub)) {
-                                        context = jQuerySub(context);
-                                    }
-
-                                    return jQuery.fn.init.call(this, selector, context, rootjQuerySub);
-                                };
-                                jQuerySub.fn.init.prototype = jQuerySub.fn;
-                                var rootjQuerySub = jQuerySub(document);
-                                return jQuerySub;
-                            },
-                            browser: {}
-                        });
-
-// Populate the class2type map
-                jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function (i, name) {
-                    class2type[ "[object " + name + "]" ] = name.toLowerCase();
-                });
-
-                browserMatch = jQuery.uaMatch(userAgent);
-                if (browserMatch.browser) {
-                    jQuery.browser[ browserMatch.browser ] = true;
-                    jQuery.browser.version = browserMatch.version;
-                }
-
-// Deprecated, use jQuery.browser.webkit instead
-                if (jQuery.browser.webkit) {
-                    jQuery.browser.safari = true;
-                }
-
-// IE doesn't match non-breaking spaces with \s
-                if (rnotwhite.test("\xA0")) {
-                    trimLeft = /^[\s\xA0]+/;
-                    trimRight = /[\s\xA0]+$/;
-                }
-
-// All jQuery objects should point back to these
-                rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-                if (document.addEventListener) {
-                    DOMContentLoaded = function () {
-                        document.removeEventListener("DOMContentLoaded", DOMContentLoaded, false);
-                        jQuery.ready();
-                    };
-
-                } else if (document.attachEvent) {
-                    DOMContentLoaded = function () {
-                        // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-                        if (document.readyState === "complete") {
-                            document.detachEvent("onreadystatechange", DOMContentLoaded);
-                            jQuery.ready();
-                        }
-                    };
-                }
-
-// The DOM ready check for Internet Explorer
-                function doScrollCheck() {
-                    if (jQuery.isReady) {
-                        return;
-                    }
-
-                    try {
-                        // If IE is used, use the trick by Diego Perini
-                        // http://javascript.nwbox.com/IEContentLoaded/
-                        document.documentElement.doScroll("left");
-                    } catch (e) {
-                        setTimeout(doScrollCheck, 1);
-                        return;
-                    }
-
-                    // and execute any waiting functions
-                    jQuery.ready();
-                }
-
-// Expose jQuery as an AMD module, but only for AMD loaders that
-// understand the issues with loading multiple versions of jQuery
-// in a page that all might call define(). The loader will indicate
-// they have special allowances for multiple jQuery versions by
-// specifying define.amd.jQuery = true. Register as a named module,
-// since jQuery can be concatenated with other files that may use define,
-// but not use a proper concatenation script that understands anonymous
-// AMD modules. A named AMD is safest and most robust way to register.
-// Lowercase jquery is used because AMD module names are derived from
-// file names, and jQuery is normally delivered in a lowercase file name.
-                if (typeof define === "function" && define.amd && define.amd.jQuery) {
-                    define("jquery", [], function () {
-                        return jQuery;
-                    });
-                }
-
-                return jQuery;
-
-            })();
-
-
-// String to Object flags format cache
-            var flagsCache = {};
-
-// Convert String-formatted flags into Object-formatted ones and store in cache
-            function createFlags(flags) {
-                var object = flagsCache[ flags ] = {},
-                        i, length;
-                flags = flags.split(/\s+/);
-                for (i = 0, length = flags.length; i < length; i++) {
-                    object[ flags[i] ] = true;
-                }
-                return object;
-            }
-
-            /*
-             * Create a callback list using the following parameters:
-             *
-             *	flags:	an optional list of space-separated flags that will change how
-             *			the callback list behaves
-             *
-             * By default a callback list will act like an event callback list and can be
-             * "fired" multiple times.
-             *
-             * Possible flags:
-             *
-             *	once:			will ensure the callback list can only be fired once (like a Deferred)
-             *
-             *	memory:			will keep track of previous values and will call any callback added
-             *					after the list has been fired right away with the latest "memorized"
-             *					values (like a Deferred)
-             *
-             *	unique:			will ensure a callback can only be added once (no duplicate in the list)
-             *
-             *	stopOnFalse:	interrupt callings when a callback returns false
-             *
-             */
-            jQuery.Callbacks = function (flags) {
-
-                // Convert flags from String-formatted to Object-formatted
-                // (we check in cache first)
-                flags = flags ? (flagsCache[ flags ] || createFlags(flags)) : {};
-
-                var // Actual callback list
-                        list = [],
-                        // Stack of fire calls for repeatable lists
-                        stack = [],
-                        // Last fire value (for non-forgettable lists)
-                        memory,
-                        // Flag to know if list is currently firing
-                        firing,
-                        // First callback to fire (used internally by add and fireWith)
-                        firingStart,
-                        // End of the loop when firing
-                        firingLength,
-                        // Index of currently firing callback (modified by remove if needed)
-                        firingIndex,
-                        // Add one or several callbacks to the list
-                        add = function (args) {
-                            var i,
-                                    length,
-                                    elem,
-                                    type,
-                                    actual;
-                            for (i = 0, length = args.length; i < length; i++) {
-                                elem = args[ i ];
-                                type = jQuery.type(elem);
-                                if (type === "array") {
-                                    // Inspect recursively
-                                    add(elem);
-                                } else if (type === "function") {
-                                    // Add if not in unique mode and callback is not in
-                                    if (!flags.unique || !self.has(elem)) {
-                                        list.push(elem);
-                                    }
-                                }
-                            }
-                        },
-                        // Fire callbacks
-                        fire = function (context, args) {
-                            args = args || [];
-                            memory = !flags.memory || [context, args];
-                            firing = true;
-                            firingIndex = firingStart || 0;
-                            firingStart = 0;
-                            firingLength = list.length;
-                            for (; list && firingIndex < firingLength; firingIndex++) {
-                                if (list[ firingIndex ].apply(context, args) === false && flags.stopOnFalse) {
-                                    memory = true; // Mark as halted
-                                    break;
-                                }
-                            }
-                            firing = false;
-                            if (list) {
-                                if (!flags.once) {
-                                    if (stack && stack.length) {
-                                        memory = stack.shift();
-                                        self.fireWith(memory[ 0 ], memory[ 1 ]);
-                                    }
-                                } else if (memory === true) {
-                                    self.disable();
-                                } else {
-                                    list = [];
-                                }
-                            }
-                        },
-                        // Actual Callbacks object
-                        self = {
-                            // Add a callback or a collection of callbacks to the list
-                            add: function () {
-                                if (list) {
-                                    var length = list.length;
-                                    add(arguments);
-                                    // Do we need to add the callbacks to the
-                                    // current firing batch?
-                                    if (firing) {
-                                        firingLength = list.length;
-                                        // With memory, if we're not firing then
-                                        // we should call right away, unless previous
-                                        // firing was halted (stopOnFalse)
-                                    } else if (memory && memory !== true) {
-                                        firingStart = length;
-                                        fire(memory[ 0 ], memory[ 1 ]);
-                                    }
-                                }
-                                return this;
-                            },
-                            // Remove a callback from the list
-                            remove: function () {
-                                if (list) {
-                                    var args = arguments,
-                                            argIndex = 0,
-                                            argLength = args.length;
-                                    for (; argIndex < argLength; argIndex++) {
-                                        for (var i = 0; i < list.length; i++) {
-                                            if (args[ argIndex ] === list[ i ]) {
-                                                // Handle firingIndex and firingLength
-                                                if (firing) {
-                                                    if (i <= firingLength) {
-                                                        firingLength--;
-                                                        if (i <= firingIndex) {
-                                                            firingIndex--;
-                                                        }
-                                                    }
-                                                }
-                                                // Remove the element
-                                                list.splice(i--, 1);
-                                                // If we have some unicity property then
-                                                // we only need to do this once
-                                                if (flags.unique) {
-                                                    break;
-                                                }
-                                            }
-                                        }
-                                    }
-                                }
-                                return this;
-                            },
-                            // Control if a given callback is in the list
-                            has: function (fn) {
-                                if (list) {
-                                    var i = 0,
-                                            length = list.length;
-                                    for (; i < length; i++) {
-                                        if (fn === list[ i ]) {
-                                            return true;
-                                        }
-                                    }
-                                }
-                                return false;
-                            },
-                            // Remove all callbacks from the list
-                            empty: function () {
-                                list = [];
-                                return this;
-                            },
-                            // Have the list do nothing anymore
-                            disable: function () {
-                                list = stack = memory = undefined;
-                                return this;
-                            },
-                            // Is it disabled?
-                            disabled: function () {
-                                return !list;
-                            },
-                            // Lock the list in its current state
-                            lock: function () {
-                                stack = undefined;
-                                if (!memory || memory === true) {
-                                    self.disable();
-                                }
-                                return this;
-                            },
-                            // Is it locked?
-                            locked: function () {
-                                return !stack;
-                            },
-                            // Call all callbacks with the given context and arguments
-                            fireWith: function (context, args) {
-                                if (stack) {
-                                    if (firing) {
-                                        if (!flags.once) {
-                                            stack.push([context, args]);
-                                        }
-                                    } else if (!(flags.once && memory)) {
-                                        fire(context, args);
-                                    }
-                                }
-                                return this;
-                            },
-                            // Call all the callbacks with the given arguments
-                            fire: function () {
-                                self.fireWith(this, arguments);
-                                return this;
-                            },
-                            // To know if the callbacks have already been called at least once
-                            fired: function () {
-                                return !!memory;
-                            }
-                        };
-
-                return self;
-            };
-
-
-
-
-            var // Static reference to slice
-                    sliceDeferred = [].slice;
-
-            jQuery.extend({
-                Deferred: function (func) {
-                    var doneList = jQuery.Callbacks("once memory"),
-                            failList = jQuery.Callbacks("once memory"),
-                            progressList = jQuery.Callbacks("memory"),
-                            state = "pending",
-                            lists = {
-                                resolve: doneList,
-                                reject: failList,
-                                notify: progressList
-                            },
-                    promise = {
-                        done: doneList.add,
-                        fail: failList.add,
-                        progress: progressList.add,
-                        state: function () {
-                            return state;
-                        },
-                        // Deprecated
-                        isResolved: doneList.fired,
-                        isRejected: failList.fired,
-                        then: function (doneCallbacks, failCallbacks, progressCallbacks) {
-                            deferred.done(doneCallbacks).fail(failCallbacks).progress(progressCallbacks);
-                            return this;
-                        },
-                        always: function () {
-                            return deferred.done.apply(deferred, arguments).fail.apply(deferred, arguments);
-                        },
-                        pipe: function (fnDone, fnFail, fnProgress) {
-                            return jQuery.Deferred(function (newDefer) {
-                                jQuery.each({
-                                    done: [fnDone, "resolve"],
-                                    fail: [fnFail, "reject"],
-                                    progress: [fnProgress, "notify"]
-                                }, function (handler, data) {
-                                    var fn = data[ 0 ],
-                                            action = data[ 1 ],
-                                            returned;
-                                    if (jQuery.isFunction(fn)) {
-                                        deferred[ handler ](function () {
-                                            returned = fn.apply(this, arguments);
-                                            if (returned && jQuery.isFunction(returned.promise)) {
-                                                returned.promise().then(newDefer.resolve, newDefer.reject, newDefer.notify);
-                                            } else {
-                                                newDefer[ action + "With" ](this === deferred ? newDefer : this, [returned]);
-                                            }
-                                        });
-                                    } else {
-                                        deferred[ handler ](newDefer[ action ]);
-                                    }
-                                });
-                            }).promise();
-                        },
-                        // Get a promise for this deferred
-                        // If obj is provided, the promise aspect is added to the object
-                        promise: function (obj) {
-                            if (obj == null) {
-                                obj = promise;
-                            } else {
-                                for (var key in promise) {
-                                    obj[ key ] = promise[ key ];
-                                }
-                            }
-                            return obj;
-                        }
-                    },
-                    deferred = promise.promise({}),
-                            key;
-
-                    for (key in lists) {
-                        deferred[ key ] = lists[ key ].fire;
-                        deferred[ key + "With" ] = lists[ key ].fireWith;
-                    }
-
-                    // Handle state
-                    deferred.done(function () {
-                        state = "resolved";
-                    }, failList.disable, progressList.lock).fail(function () {
-                        state = "rejected";
-                    }, doneList.disable, progressList.lock);
-
-                    // Call given func if any
-                    if (func) {
-                        func.call(deferred, deferred);
-                    }
-
-                    // All done!
-                    return deferred;
-                },
-                // Deferred helper
-                when: function (firstParam) {
-                    var args = sliceDeferred.call(arguments, 0),
-                            i = 0,
-                            length = args.length,
-                            pValues = new Array(length),
-                            count = length,
-                            pCount = length,
-                            deferred = length <= 1 && firstParam && jQuery.isFunction(firstParam.promise) ?
-                            firstParam :
-                            jQuery.Deferred(),
-                            promise = deferred.promise();
-                    function resolveFunc(i) {
-                        return function (value) {
-                            args[ i ] = arguments.length > 1 ? sliceDeferred.call(arguments, 0) : value;
-                            if (!(--count)) {
-                                deferred.resolveWith(deferred, args);
-                            }
-                        };
-                    }
-                    function progressFunc(i) {
-                        return function (value) {
-                            pValues[ i ] = arguments.length > 1 ? sliceDeferred.call(arguments, 0) : value;
-                            deferred.notifyWith(promise, pValues);
-                        };
-                    }
-                    if (length > 1) {
-                        for (; i < length; i++) {
-                            if (args[ i ] && args[ i ].promise && jQuery.isFunction(args[ i ].promise)) {
-                                args[ i ].promise().then(resolveFunc(i), deferred.reject, progressFunc(i));
-                            } else {
-                                --count;
-                            }
-                        }
-                        if (!count) {
-                            deferred.resolveWith(deferred, args);
-                        }
-                    } else if (deferred !== firstParam) {
-                        deferred.resolveWith(deferred, length ? [firstParam] : []);
-                    }
-                    return promise;
-                }
-            });
-
-
-
-
-            jQuery.support = (function () {
-
-                var div = document.createElement("div"),
-                        documentElement = document.documentElement,
-                        all,
-                        a,
-                        select,
-                        opt,
-                        input,
-                        marginDiv,
-                        support,
-                        fragment,
-                        body,
-                        testElementParent,
-                        testElement,
-                        testElementStyle,
-                        tds,
-                        events,
-                        eventName,
-                        i,
-                        isSupported;
-
-                // Preliminary tests
-                div.setAttribute("className", "t");
-                div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>";
-
-
-                all = div.getElementsByTagName("*");
-                a = div.getElementsByTagName("a")[ 0 ];
-
-                // Can't get basic test support
-                if (!all || !all.length || !a) {
-                    return {};
-                }
-
-                // First batch of supports tests
-                select = document.createElement("select");
-                opt = select.appendChild(document.createElement("option"));
-                input = div.getElementsByTagName("input")[ 0 ];
-
-                support = {
-                    // IE strips leading whitespace when .innerHTML is used
-                    leadingWhitespace: (div.firstChild.nodeType === 3),
-                    // Make sure that tbody elements aren't automatically inserted
-                    // IE will insert them into empty tables
-                    tbody: !div.getElementsByTagName("tbody").length,
-                    // Make sure that link elements get serialized correctly by innerHTML
-                    // This requires a wrapper element in IE
-                    htmlSerialize: !!div.getElementsByTagName("link").length,
-                    // Get the style information from getAttribute
-                    // (IE uses .cssText instead)
-                    style: /top/.test(a.getAttribute("style")),
-                    // Make sure that URLs aren't manipulated
-                    // (IE normalizes it by default)
-                    hrefNormalized: (a.getAttribute("href") === "/a"),
-                    // Make sure that element opacity exists
-                    // (IE uses filter instead)
-                    // Use a regex to work around a WebKit issue. See #5145
-                    opacity: /^0.55/.test(a.style.opacity),
-                    // Verify style float existence
-                    // (IE uses styleFloat instead of cssFloat)
-                    cssFloat: !!a.style.cssFloat,
-                    // Make sure unknown elements (like HTML5 elems) are handled appropriately
-                    unknownElems: !!div.getElementsByTagName("nav").length,
-                    // Make sure that if no value is specified for a checkbox
-                    // that it defaults to "on".
-                    // (WebKit defaults to "" instead)
-                    checkOn: (input.value === "on"),
-                    // Make sure that a selected-by-default option has a working selected property.
-                    // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
-                    optSelected: opt.selected,
-                    // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-                    getSetAttribute: div.className !== "t",
-                    // Tests for enctype support on a form(#6743)
-                    enctype: !!document.createElement("form").enctype,
-                    // Will be defined later
-                    submitBubbles: true,
-                    changeBubbles: true,
-                    focusinBubbles: false,
-                    deleteExpando: true,
-                    noCloneEvent: true,
-                    inlineBlockNeedsLayout: false,
-                    shrinkWrapBlocks: false,
-                    reliableMarginRight: true
-                };
-
-                // Make sure checked status is properly cloned
-                input.checked = true;
-                support.noCloneChecked = input.cloneNode(true).checked;
-
-                // Make sure that the options inside disabled selects aren't marked as disabled
-                // (WebKit marks them as disabled)
-                select.disabled = true;
-                support.optDisabled = !opt.disabled;
-
-                // Test to see if it's possible to delete an expando from an element
-                // Fails in Internet Explorer
-                try {
-                    delete div.test;
-                } catch (e) {
-                    support.deleteExpando = false;
-                }
-
-                if (!div.addEventListener && div.attachEvent && div.fireEvent) {
-                    div.attachEvent("onclick", function () {
-                        // Cloning a node shouldn't copy over any
-                        // bound event handlers (IE does this)
-                        support.noCloneEvent = false;
-                    });
-                    div.cloneNode(true).fireEvent("onclick");
-                }
-
-                // Check if a radio maintains its value
-                // after being appended to the DOM
-                input = document.createElement("input");
-                input.value = "t";
-                input.setAttribute("type", "radio");
-                support.radioValue = input.value === "t";
-
-                input.setAttribute("checked", "checked");
-                div.appendChild(input);
-                fragment = document.createDocumentFragment();
-                fragment.appendChild(div.lastChild);
-
-                // WebKit doesn't clone checked state correctly in fragments
-                support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
-
-                div.innerHTML = "";
-
-                // Figure out if the W3C box model works as expected
-                div.style.width = div.style.paddingLeft = "1px";
-
-                // We don't want to do body-related feature tests on frameset
-                // documents, which lack a body. So we use
-                // document.getElementsByTagName("body")[0], which is undefined in
-                // frameset documents, while document.body isn’t. (7398)
-                body = document.getElementsByTagName("body")[ 0 ];
-                // We use our own, invisible, body unless the body is already present
-                // in which case we use a div (#9239)
-                testElement = document.createElement(body ? "div" : "body");
-                testElementStyle = {
-                    visibility: "hidden",
-                    width: 0,
-                    height: 0,
-                    border: 0,
-                    margin: 0,
-                    background: "none"
-                };
-                if (body) {
-                    jQuery.extend(testElementStyle, {
-                        position: "absolute",
-                        left: "-999px",
-                        top: "-999px"
-                    });
-                }
-                for (i in testElementStyle) {
-                    testElement.style[ i ] = testElementStyle[ i ];
-                }
-                testElement.appendChild(div);
-                testElementParent = body || documentElement;
-                testElementParent.insertBefore(testElement, testElementParent.firstChild);
-
-                // Check if a disconnected checkbox will retain its checked
-                // value of true after appended to the DOM (IE6/7)
-                support.appendChecked = input.checked;
-
-                support.boxModel = div.offsetWidth === 2;
-
-                if ("zoom" in div.style) {
-                    // Check if natively block-level elements act like inline-block
-                    // elements when setting their display to 'inline' and giving
-                    // them layout
-                    // (IE < 8 does this)
-                    div.style.display = "inline";
-                    div.style.zoom = 1;
-                    support.inlineBlockNeedsLayout = (div.offsetWidth === 2);
-
-                    // Check if elements with layout shrink-wrap their children
-                    // (IE 6 does this)
-                    div.style.display = "";
-                    div.innerHTML = "<div style='width:4px;'></div>";
-                    support.shrinkWrapBlocks = (div.offsetWidth !== 2);
-                }
-
-                div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
-                tds = div.getElementsByTagName("td");
-
-                // Check if table cells still have offsetWidth/Height when they are set
-                // to display:none and there are still other visible table cells in a
-                // table row; if so, offsetWidth/Height are not reliable for use when
-                // determining if an element has been hidden directly using
-                // display:none (it is still safe to use offsets if a parent element is
-                // hidden; don safety goggles and see bug #4512 for more information).
-                // (only IE 8 fails this test)
-                isSupported = (tds[ 0 ].offsetHeight === 0);
-
-                tds[ 0 ].style.display = "";
-                tds[ 1 ].style.display = "none";
-
-                // Check if empty table cells still have offsetWidth/Height
-                // (IE < 8 fail this test)
-                support.reliableHiddenOffsets = isSupported && (tds[ 0 ].offsetHeight === 0);
-                div.innerHTML = "";
-
-                // Check if div with explicit width and no margin-right incorrectly
-                // gets computed margin-right based on width of container. For more
-                // info see bug #3333
-                // Fails in WebKit before Feb 2011 nightlies
-                // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-                if (document.defaultView && document.defaultView.getComputedStyle) {
-                    marginDiv = document.createElement("div");
-                    marginDiv.style.width = "0";
-                    marginDiv.style.marginRight = "0";
-                    div.appendChild(marginDiv);
-                    support.reliableMarginRight =
-                            (parseInt((document.defaultView.getComputedStyle(marginDiv, null) || {marginRight: 0}).marginRight, 10) || 0) === 0;
-                }
-
-                // Technique from Juriy Zaytsev
-                // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
-                // We only care about the case where non-standard event systems
-                // are used, namely in IE. Short-circuiting here helps us to
-                // avoid an eval call (in setAttribute) which can cause CSP
-                // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
-                if (div.attachEvent) {
-                    for (i in {
-                        submit: 1,
-                        change: 1,
-                        focusin: 1
-                    }) {
-                        eventName = "on" + i;
-                        isSupported = (eventName in div);
-                        if (!isSupported) {
-                            div.setAttribute(eventName, "return;");
-                            isSupported = (typeof div[ eventName ] === "function");
-                        }
-                        support[ i + "Bubbles" ] = isSupported;
-                    }
-                }
-
-                // Run fixed position tests at doc ready to avoid a crash
-                // related to the invisible body in IE8
-                jQuery(function () {
-                    var container, outer, inner, table, td, offsetSupport,
-                            conMarginTop = 1,
-                            ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",
-                            vb = "visibility:hidden;border:0;",
-                            style = "style='" + ptlm + "border:5px solid #000;padding:0;'",
-                            html = "<div " + style + "><div></div></div>" +
-                            "<table " + style + " cellpadding='0' cellspacing='0'>" +
-                            "<tr><td></td></tr></table>";
-
-                    // Reconstruct a container
-                    body = document.getElementsByTagName("body")[0];
-                    if (!body) {
-                        // Return for frameset docs that don't have a body
-                        // These tests cannot be done
-                        return;
-                    }
-
-                    container = document.createElement("div");
-                    container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
-                    body.insertBefore(container, body.firstChild);
-
-                    // Construct a test element
-                    testElement = document.createElement("div");
-                    testElement.style.cssText = ptlm + vb;
-
-                    testElement.innerHTML = html;
-                    container.appendChild(testElement);
-                    outer = testElement.firstChild;
-                    inner = outer.firstChild;
-                    td = outer.nextSibling.firstChild.firstChild;
-
-                    offsetSupport = {
-                        doesNotAddBorder: (inner.offsetTop !== 5),
-                        doesAddBorderForTableAndCells: (td.offsetTop === 5)
-                    };
-
-                    inner.style.position = "fixed";
-                    inner.style.top = "20px";
-
-                    // safari subtracts parent border width here which is 5px
-                    offsetSupport.fixedPosition = (inner.offsetTop === 20 || inner.offsetTop === 15);
-                    inner.style.position = inner.style.top = "";
-
-                    outer.style.overflow = "hidden";
-                    outer.style.position = "relative";
-
-                    offsetSupport.subtractsBorderForOverflowNotVisible = (inner.offsetTop === -5);
-                    offsetSupport.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== conMarginTop);
-
-                    body.removeChild(container);
-                    testElement = container = null;
-
-                    jQuery.extend(support, offsetSupport);
-                });
-
-                testElement.innerHTML = "";
-                testElementParent.removeChild(testElement);
-
-                // Null connected elements to avoid leaks in IE
-                testElement = fragment = select = opt = body = marginDiv = div = input = null;
-
-                return support;
-            })();
-
-// Keep track of boxModel
-            jQuery.boxModel = jQuery.support.boxModel;
-
-
-
-
-            var rbrace = /^(?:\{.*\}|\[.*\])$/,
-                    rmultiDash = /([A-Z])/g;
-
-            jQuery.extend({
-                cache: {},
-                // Please use with caution
-                uuid: 0,
-                // Unique for each copy of jQuery on the page
-                // Non-digits removed to match rinlinejQuery
-                expando: "jQuery" + (jQuery.fn.jquery + Math.random()).replace(/\D/g, ""),
-                // The following elements throw uncatchable exceptions if you
-                // attempt to add expando properties to them.
-                noData: {
-                    "embed": true,
-                    // Ban all objects except for Flash (which handle expandos)
-                    "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
-                    "applet": true
-                },
-                hasData: function (elem) {
-                    elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-                    return !!elem && !isEmptyDataObject(elem);
-                },
-                data: function (elem, name, data, pvt /* Internal Use Only */) {
-                    if (!jQuery.acceptData(elem)) {
-                        return;
-                    }
-
-                    var privateCache, thisCache, ret,
-                            internalKey = jQuery.expando,
-                            getByName = typeof name === "string",
-                            // We have to handle DOM nodes and JS objects differently because IE6-7
-                            // can't GC object references properly across the DOM-JS boundary
-                            isNode = elem.nodeType,
-                            // Only DOM nodes need the global jQuery cache; JS object data is
-                            // attached directly to the object so GC can occur automatically
-                            cache = isNode ? jQuery.cache : elem,
-                            // Only defining an ID for JS objects if its cache already exists allows
-                            // the code to shortcut on the same path as a DOM node with no cache
-                            id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando,
-                            isEvents = name === "events";
-
-                    // Avoid doing any more work than we need to when trying to get data on an
-                    // object that has no data at all
-                    if ((!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined) {
-                        return;
-                    }
-
-                    if (!id) {
-                        // Only DOM nodes need a new unique ID for each element since their data
-                        // ends up in the global cache
-                        if (isNode) {
-                            elem[ jQuery.expando ] = id = ++jQuery.uuid;
-                        } else {
-                            id = jQuery.expando;
-                        }
-                    }
-
-                    if (!cache[ id ]) {
-                        cache[ id ] = {};
-
-                        // Avoids exposing jQuery metadata on plain JS objects when the object
-                        // is serialized using JSON.stringify
-                        if (!isNode) {
-                            cache[ id ].toJSON = jQuery.noop;
-                        }
-                    }
-
-                    // An object can be passed to jQuery.data instead of a key/value pair; this gets
-                    // shallow copied over onto the existing cache
-                    if (typeof name === "object" || typeof name === "function") {
-                        if (pvt) {
-                            cache[ id ] = jQuery.extend(cache[ id ], name);
-                        } else {
-                            cache[ id ].data = jQuery.extend(cache[ id ].data, name);
-                        }
-                    }
-
-                    privateCache = thisCache = cache[ id ];
-
-                    // jQuery data() is stored in a separate object inside the object's internal data
-                    // cache in order to avoid key collisions between internal data and user-defined
-                    // data.
-                    if (!pvt) {
-                        if (!thisCache.data) {
-                            thisCache.data = {};
-                        }
-
-                        thisCache = thisCache.data;
-                    }
-
-                    if (data !== undefined) {
-                        thisCache[ jQuery.camelCase(name) ] = data;
-                    }
-
-                    // Users should not attempt to inspect the internal events object using jQuery.data,
-                    // it is undocumented and subject to change. But does anyone listen? No.
-                    if (isEvents && !thisCache[ name ]) {
-                        return privateCache.events;
-                    }
-
-                    // Check for both converted-to-camel and non-converted data property names
-                    // If a data property was specified
-                    if (getByName) {
-
-                        // First Try to find as-is property data
-                        ret = thisCache[ name ];
-
-                        // Test for null|undefined property data
-                        if (ret == null) {
-
-                            // Try to find the camelCased property
-                            ret = thisCache[ jQuery.camelCase(name) ];
-                        }
-                    } else {
-                        ret = thisCache;
-                    }
-
-                    return ret;
-                },
-                removeData: function (elem, name, pvt /* Internal Use Only */) {
-                    if (!jQuery.acceptData(elem)) {
-                        return;
-                    }
-
-                    var thisCache, i, l,
-                            // Reference to internal data cache key
-                            internalKey = jQuery.expando,
-                            isNode = elem.nodeType,
-                            // See jQuery.data for more information
-                            cache = isNode ? jQuery.cache : elem,
-                            // See jQuery.data for more information
-                            id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
-                    // If there is already no cache entry for this object, there is no
-                    // purpose in continuing
-                    if (!cache[ id ]) {
-                        return;
-                    }
-
-                    if (name) {
-
-                        thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
-                        if (thisCache) {
-
-                            // Support space separated names
-                            if (jQuery.isArray(name)) {
-                                name = name;
-                            } else if (name in thisCache) {
-                                name = [name];
-                            } else {
-
-                                // split the camel cased version by spaces
-                                name = jQuery.camelCase(name);
-                                if (name in thisCache) {
-                                    name = [name];
-                                } else {
-                                    name = name.split(" ");
-                                }
-                            }
-
-                            for (i = 0, l = name.length; i < l; i++) {
-                                delete thisCache[ name[i] ];
-                            }
-
-                            // If there is no data left in the cache, we want to continue
-                            // and let the cache object itself get destroyed
-                            if (!(pvt ? isEmptyDataObject : jQuery.isEmptyObject)(thisCache)) {
-                                return;
-                            }
-                        }
-                    }
-
-                    // See jQuery.data for more information
-                    if (!pvt) {
-                        delete cache[ id ].data;
-
-                        // Don't destroy the parent cache unless the internal data object
-                        // had been the only thing left in it
-                        if (!isEmptyDataObject(cache[ id ])) {
-                            return;
-                        }
-                    }
-
-                    // Browsers that fail expando deletion also refuse to delete expandos on
-                    // the window, but it will allow it on all other JS objects; other browsers
-                    // don't care
-                    // Ensure that `cache` is not a window object #10080
-                    if (jQuery.support.deleteExpando || !cache.setInterval) {
-                        delete cache[ id ];
-                    } else {
-                        cache[ id ] = null;
-                    }
-
-                    // We destroyed the cache and need to eliminate the expando on the node to avoid
-                    // false lookups in the cache for entries that no longer exist
-                    if (isNode) {
-                        // IE does not allow us to delete expando properties from nodes,
-                        // nor does it have a removeAttribute function on Document nodes;
-                        // we must handle all of these cases
-                        if (jQuery.support.deleteExpando) {
-                            delete elem[ jQuery.expando ];
-                        } else if (elem.removeAttribute) {
-                            elem.removeAttribute(jQuery.expando);
-                        } else {
-                            elem[ jQuery.expando ] = null;
-                        }
-                    }
-                },
-                // For internal use only.
-                _data: function (elem, name, data) {
-                    return jQuery.data(elem, name, data, true);
-                },
-                // A method for determining if a DOM node can handle the data expando
-                acceptData: function (elem) {
-                    if (elem.nodeName) {
-                        var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
-                        if (match) {
-                            return !(match === true || elem.getAttribute("classid") !== match);
-                        }
-                    }
-
-                    return true;
-                }
-            });
-
-            jQuery.fn.extend({
-                data: function (key, value) {
-                    var parts, attr, name,
-                            data = null;
-
-                    if (typeof key === "undefined") {
-                        if (this.length) {
-                            data = jQuery.data(this[0]);
-
-                            if (this[0].nodeType === 1 && !jQuery._data(this[0], "parsedAttrs")) {
-                                attr = this[0].attributes;
-                                for (var i = 0, l = attr.length; i < l; i++) {
-                                    name = at

<TRUNCATED>

[35/50] [abbrv] incubator-nifi git commit: NIFI-27: - Updating access control configuration for secure ports due to autocomplete upgrade.

Posted by mc...@apache.org.
NIFI-27:
- Updating access control configuration for secure ports due to autocomplete upgrade.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/fc78752e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/fc78752e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/fc78752e

Branch: refs/heads/develop
Commit: fc78752e61fcf82b8a39dbb12bd4a3ff4ce21cb6
Parents: d307a13
Author: Matt Gilman <ma...@gmail.com>
Authored: Mon Dec 15 12:02:15 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Mon Dec 15 12:02:15 2014 -0500

----------------------------------------------------------------------
 .../canvas/secure-port-configuration.jsp        |  3 +-
 .../src/main/webapp/css/port-configuration.css  | 16 +++++++++--
 .../nf/canvas/nf-secure-port-configuration.js   | 30 +++++++++-----------
 3 files changed, 29 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/fc78752e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/secure-port-configuration.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/secure-port-configuration.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/secure-port-configuration.jsp
index 200ef72..bd87018 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/secure-port-configuration.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/secure-port-configuration.jsp
@@ -78,4 +78,5 @@
             </div>
         </div>
     </div>
-</div>
\ No newline at end of file
+</div>
+<div id="search-users-results"></div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/fc78752e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/port-configuration.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/port-configuration.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/port-configuration.css
index 340c2a4..b8fc87c 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/port-configuration.css
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/port-configuration.css
@@ -110,14 +110,26 @@ input.search-users {
     color: #888;
 }
 
+#search-users-results .ui-autocomplete {
+    max-height: 300px;
+    overflow: auto;
+    border: 1px solid #aaaaaa;
+    z-index: 1351;
+    border-radius: 0;
+}
+
+#search-users-results .ui-menu .ui-menu-item a.ui-state-focus {
+    background: #D4E0E5 !important;
+    border: 1px solid #999999;
+    border-radius: 0;
+}
+
 li.search-users-header {
     font-weight: bold;
     padding-top: 4px;
     padding-left: 4px;
     padding-right: 4px;
     height: 14px;
-    float: left;
-    clear: left;
 }
 
 div.search-users-match-header {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/fc78752e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-secure-port-configuration.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-secure-port-configuration.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-secure-port-configuration.js
index 8ddddfe..b21b1bf 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-secure-port-configuration.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-secure-port-configuration.js
@@ -138,17 +138,10 @@ nf.SecurePortConfiguration = (function () {
 
         // initialize the access control auto complete
         $.widget('nf.userSearchAutocomplete', $.ui.autocomplete, {
-            _response: function (content) {
-                if (!this.options.disabled && content) {
-                    this._suggest(content);
-                    this._trigger('open');
-                } else {
-                    this.close();
-                }
-                this.pending--;
-                if (!this.pending) {
-                    this.element.removeClass('ui-autocomplete-loading');
-                }
+            _normalize: function(searchResults) {
+                var items = [];
+                items.push(searchResults);
+                return items;
             },
             _resizeMenu: function () {
                 var ul = this.menu.element;
@@ -157,14 +150,16 @@ nf.SecurePortConfiguration = (function () {
             _renderMenu: function (ul, items) {
                 var self = this;
 
+                // results are normalized into an array
+                var results = items[0];
 
                 // show all groups not currently selected
-                if (!nf.Common.isEmpty(items.userGroupResults)) {
+                if (!nf.Common.isEmpty(results.userGroupResults)) {
                     var allowedGroups = getAllowedGroups();
                     var groupHeaderAdded = false;
 
                     // go through each group result
-                    $.each(items.userGroupResults, function (i, groupMatch) {
+                    $.each(results.userGroupResults, function (i, groupMatch) {
 
                         // see if this match is not already selected
                         if ($.inArray(groupMatch.group, allowedGroups) === -1) {
@@ -182,12 +177,12 @@ nf.SecurePortConfiguration = (function () {
                 }
 
                 // show all users not currently selected
-                if (!nf.Common.isEmpty(items.userResults)) {
+                if (!nf.Common.isEmpty(results.userResults)) {
                     var allowedUsers = getAllowedUsers();
                     var userHeaderAdded = false;
 
                     // go through each user result
-                    $.each(items.userResults, function (i, userMatch) {
+                    $.each(results.userResults, function (i, userMatch) {
 
                         // see if this match is not already selected
                         if ($.inArray(userMatch.userDn, allowedUsers) === -1) {
@@ -211,17 +206,18 @@ nf.SecurePortConfiguration = (function () {
             },
             _renderGroupItem: function (ul, groupMatch) {
                 var groupContent = $('<a></a>').append($('<div class="search-users-match-header"></div>').text(groupMatch.group));
-                return $('<li></li>').data('item.autocomplete', groupMatch).append(groupContent).appendTo(ul);
+                return $('<li></li>').data('ui-autocomplete-item', groupMatch).append(groupContent).appendTo(ul);
             },
             _renderUserItem: function (ul, userMatch) {
                 var userContent = $('<a></a>').append($('<div class="search-users-match-header"></div>').text(userMatch.userDn));
-                return $('<li></li>').data('item.autocomplete', userMatch).append(userContent).appendTo(ul);
+                return $('<li></li>').data('ui-autocomplete-item', userMatch).append(userContent).appendTo(ul);
             }
         });
 
         // configure the autocomplete field
         $('#secure-port-access-control').userSearchAutocomplete({
             minLength: 0,
+            appendTo: '#search-users-results',
             position: {
                 my: 'left top',
                 at: 'left bottom',


[09/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of qtip2.

Posted by mc...@apache.org.
NIFI-27:
- Latest version of qtip2.


Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/658131de
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/658131de
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/658131de

Branch: refs/heads/develop
Commit: 658131de13d3a571d2a764600d7fa5b3f85e8e5f
Parents: fe2a331
Author: Matt Gilman <ma...@gmail.com>
Authored: Wed Dec 10 08:35:31 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Wed Dec 10 14:36:33 2014 -0500

----------------------------------------------------------------------
 .../webapp/WEB-INF/pages/bulletin-board.jsp     |   2 +-
 .../src/main/webapp/WEB-INF/pages/canvas.jsp    |   2 +-
 .../src/main/webapp/WEB-INF/pages/cluster.jsp   |   2 +-
 .../src/main/webapp/WEB-INF/pages/counters.jsp  |   2 +-
 .../src/main/webapp/WEB-INF/pages/history.jsp   |   2 +-
 .../main/webapp/WEB-INF/pages/provenance.jsp    |   2 +-
 .../src/main/webapp/WEB-INF/pages/summary.jsp   |   2 +-
 .../src/main/webapp/WEB-INF/pages/templates.jsp |   2 +-
 .../src/main/webapp/WEB-INF/pages/users.jsp     |   2 +-
 .../main/webapp/js/jquery/qtip2/jquery.qtip.css | 557 ---------------
 .../webapp/js/jquery/qtip2/jquery.qtip.min.css  |   3 +
 .../webapp/js/jquery/qtip2/jquery.qtip.min.js   | 711 +------------------
 12 files changed, 17 insertions(+), 1272 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/658131de/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
index 8669f6c..083862d 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
@@ -24,7 +24,7 @@
         ${nf.bulletin.board.style.tags}
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <script type="text/javascript" src="js/jquery/jquery-1.7.min.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/658131de/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
index acdd147..c8f2ff7 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
@@ -28,7 +28,7 @@
         <link rel="stylesheet" href="js/jquery/tabbs/jquery.tabbs.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/minicolors/jquery.minicolors.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/658131de/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
index 33fdbb0..e3e7b86 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
@@ -24,7 +24,7 @@
         ${nf.cluster.style.tags}
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/658131de/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
index 5b90113..21ee508 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
@@ -24,7 +24,7 @@
         ${nf.counters.style.tags}
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/658131de/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
index 47eb9ec..61be727 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
@@ -24,7 +24,7 @@
         ${nf.history.style.tags}
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/658131de/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
index 742dd32..2f51918 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
@@ -25,7 +25,7 @@
         <link rel="stylesheet" href="js/jquery/tabbs/jquery.tabbs.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/658131de/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
index 983fac9..b34f0e6 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
@@ -25,7 +25,7 @@
         <link rel="stylesheet" href="js/jquery/tabbs/jquery.tabbs.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/658131de/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
index d4c41ab..c7c0293 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
@@ -24,7 +24,7 @@
         ${nf.templates.style.tags}
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/658131de/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
index a1b511f..770dad5 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
@@ -25,7 +25,7 @@
         <link rel="stylesheet" href="js/jquery/tabbs/jquery.tabbs.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/658131de/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.css
deleted file mode 100755
index 4655d9c..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.css
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
-* qTip2 - Pretty powerful tooltips
-* http://craigsworks.com/projects/qtip2/
-*
-* Version: 2.0.0pre
-* Copyright 2009-2010 Craig Michael Thompson - http://craigsworks.com
-*
-* Dual licensed under MIT or GPLv2 licenses
-*   http://en.wikipedia.org/wiki/MIT_License
-*   http://en.wikipedia.org/wiki/GNU_General_Public_License
-*
-* Date: Thu Apr 26 20:40:09 2012 +0100
-*/
-
-/* Core qTip styles */
-.ui-tooltip, .qtip{
-    position: absolute;
-    left: -28000px;
-    top: -28000px;
-    display: none;
-
-    max-width: 600px;
-    min-width: 50px;
-
-    font-size: 10.5px;
-    line-height: 12px;
-}
-
-/* Fluid class for determining actual width in IE */
-.ui-tooltip-fluid{
-    display: block;
-    visibility: hidden;
-    position: static !important;
-    float: left !important;
-}
-
-.ui-tooltip-content{
-    position: relative;
-    padding: 5px 9px;
-    overflow: hidden;
-
-    border: 1px solid #000001;
-
-    text-align: left;
-    word-wrap: break-word;
-    overflow: hidden;
-}
-
-.ui-tooltip-titlebar{
-    position: relative;
-    min-height: 14px;
-    padding: 5px 35px 5px 10px;
-    overflow: hidden;
-
-    border: 1px solid #000001;
-    border-width: 1px 1px 0;
-
-    font-weight: bold;
-}
-
-.ui-tooltip-titlebar + .ui-tooltip-content{ border-top-width: 0px !important; }
-
-/*! Default close button class */
-.ui-tooltip-titlebar .ui-state-default{
-    position: absolute;
-    right: 4px;
-    top: 50%;
-    margin-top: -9px;
-
-    cursor: pointer;
-    outline: medium none;
-
-    border-width: 1px;
-    border-style: solid;
-}
-
-* html .ui-tooltip-titlebar .ui-state-default{ top: 16px; } /* IE fix */
-
-.ui-tooltip-titlebar .ui-icon,
-.ui-tooltip-icon .ui-icon{
-    display: block;
-    text-indent: -1000em;
-}
-
-.ui-tooltip-icon, .ui-tooltip-icon .ui-icon{
-    -moz-border-radius: 3px;
-    -webkit-border-radius: 3px;
-    border-radius: 3px;
-}
-
-.ui-tooltip-icon .ui-icon{
-    width: 18px;
-    height: 14px;
-
-    text-align: center;
-    text-indent: 0;
-    font: normal bold 10px/13px Tahoma,sans-serif;
-
-    color: inherit;
-    background: transparent none no-repeat -100em -100em;
-}
-
-
-/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */
-.ui-tooltip-focus{
-
-}
-
-/* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */
-.ui-tooltip-hover{
-
-}
-
-
-/*! Default tooltip style */
-.ui-tooltip-default .ui-tooltip-titlebar,
-.ui-tooltip-default .ui-tooltip-content{
-    border-color: #F1D031;
-    background-color: #FFFFA3;
-    color: #555;
-}
-
-.ui-tooltip-default .ui-tooltip-titlebar{
-    background-color: #FFEF93;
-}
-
-.ui-tooltip-default .ui-tooltip-icon{
-    border-color: #CCC;
-    background: #F1F1F1;
-    color: #777;
-}
-
-.ui-tooltip-default .ui-tooltip-titlebar .ui-state-hover{
-    border-color: #AAA;
-    color: #111;
-}
-
-/* Modal plugin */
-#qtip-overlay{
-    position: fixed;
-    left: -10000em;
-    top: -10000em;
-}
-
-/* Applied to modals with show.modal.blur set to true */
-#qtip-overlay.blurs{ cursor: pointer; }
-
-/* Change opacity of overlay here */
-#qtip-overlay div{
-    position: absolute;
-    left: 0; top: 0;
-    width: 100%; height: 100%;
-
-    background-color: black;
-
-    opacity: 0.7;
-    filter:alpha(opacity=70);
-    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
-}
-
-/* Tips plugin */
-.ui-tooltip .ui-tooltip-tip{
-    margin: 0 auto;
-    overflow: hidden;
-    z-index: 10;
-}
-
-.ui-tooltip .ui-tooltip-tip,
-.ui-tooltip .ui-tooltip-tip *{
-    position: absolute;
-
-    line-height: 0.1px !important;
-    font-size: 0.1px !important;
-    color: #123456;
-
-    background: transparent;
-    border: 0px dashed transparent;
-}
-
-.ui-tooltip .ui-tooltip-tip canvas{ top: 0; left: 0; }
-
-
-/*! Light tooltip style */
-.ui-tooltip-light .ui-tooltip-titlebar,
-.ui-tooltip-light .ui-tooltip-content{
-    border-color: #E2E2E2;
-    color: #454545;
-}
-
-.ui-tooltip-light .ui-tooltip-content{
-    background-color: white;
-}
-
-.ui-tooltip-light .ui-tooltip-titlebar{
-    background-color: #f1f1f1;
-}
-
-
-/*! Dark tooltip style */
-.ui-tooltip-dark .ui-tooltip-titlebar,
-.ui-tooltip-dark .ui-tooltip-content{
-    border-color: #303030;
-    color: #f3f3f3;
-}
-
-.ui-tooltip-dark .ui-tooltip-content{
-    background-color: #505050;
-}
-
-.ui-tooltip-dark .ui-tooltip-titlebar{
-    background-color: #404040;
-}
-
-.ui-tooltip-dark .ui-tooltip-icon{
-    border-color: #444;
-}
-
-.ui-tooltip-dark .ui-tooltip-titlebar .ui-state-hover{
-    border-color: #303030;
-}
-
-
-/*! Cream tooltip style */
-.ui-tooltip-cream .ui-tooltip-titlebar,
-.ui-tooltip-cream .ui-tooltip-content{
-    border-color: #F9E98E;
-    color: #A27D35;
-}
-
-.ui-tooltip-cream .ui-tooltip-content{
-    background-color: #FBF7AA;
-}
-
-.ui-tooltip-cream .ui-tooltip-titlebar{
-    background-color: #F0DE7D;
-}
-
-.ui-tooltip-cream .ui-state-default .ui-tooltip-icon{
-    background-position: -82px 0;
-}
-
-
-/*! Red tooltip style */
-.ui-tooltip-red .ui-tooltip-titlebar,
-.ui-tooltip-red .ui-tooltip-content{
-    border-color: #D95252;
-    color: #912323;
-}
-
-.ui-tooltip-red .ui-tooltip-content{
-    background-color: #F78B83;
-}
-
-.ui-tooltip-red .ui-tooltip-titlebar{
-    background-color: #F06D65;
-}
-
-.ui-tooltip-red .ui-state-default .ui-tooltip-icon{
-    background-position: -102px 0;
-}
-
-.ui-tooltip-red .ui-tooltip-icon{
-    border-color: #D95252;
-}
-
-.ui-tooltip-red .ui-tooltip-titlebar .ui-state-hover{
-    border-color: #D95252;
-}
-
-
-/*! Green tooltip style */
-.ui-tooltip-green .ui-tooltip-titlebar,
-.ui-tooltip-green .ui-tooltip-content{
-    border-color: #90D93F;
-    color: #3F6219;
-}
-
-.ui-tooltip-green .ui-tooltip-content{
-    background-color: #CAED9E;
-}
-
-.ui-tooltip-green .ui-tooltip-titlebar{
-    background-color: #B0DE78;
-}
-
-.ui-tooltip-green .ui-state-default .ui-tooltip-icon{
-    background-position: -42px 0;
-}
-
-
-/*! Blue tooltip style */
-.ui-tooltip-blue .ui-tooltip-titlebar,
-.ui-tooltip-blue .ui-tooltip-content{
-    border-color: #ADD9ED;
-    color: #5E99BD;
-}
-
-.ui-tooltip-blue .ui-tooltip-content{
-    background-color: #E5F6FE;
-}
-
-.ui-tooltip-blue .ui-tooltip-titlebar{
-    background-color: #D0E9F5;
-}
-
-.ui-tooltip-blue .ui-state-default .ui-tooltip-icon{
-    background-position: -2px 0;
-}
-
-/*! Add shadows to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE6+, Safari 2+ */
-.ui-tooltip-shadow{
-    -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
-    -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
-    box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
-}
-
-.ui-tooltip-shadow .ui-tooltip-titlebar,
-.ui-tooltip-shadow .ui-tooltip-content{
-    filter: progid:DXImageTransform.Microsoft.Shadow(Color='gray', Direction=135, Strength=3);
-    -ms-filter:"progid:DXImageTransform.Microsoft.Shadow(Color='gray', Direction=135, Strength=3)";
-
-    _margin-bottom: -3px; /* IE6 */
-    .margin-bottom: -3px; /* IE7 */
-}
-
-
-/*! Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */
-.ui-tooltip-rounded,
-.ui-tooltip-rounded .ui-tooltip-content,
-.ui-tooltip-tipsy,
-.ui-tooltip-tipsy .ui-tooltip-content,
-.ui-tooltip-youtube,
-.ui-tooltip-youtube .ui-tooltip-content{
-    -moz-border-radius: 4px;
-    -webkit-border-radius: 4px;
-    border-radius: 4px;
-}
-
-.ui-tooltip-rounded .ui-tooltip-titlebar,
-.ui-tooltip-tipsy .ui-tooltip-titlebar,
-.ui-tooltip-youtube .ui-tooltip-titlebar{
-    -moz-border-radius: 5px 5px 0 0;
-    -webkit-border-radius: 5px 5px 0 0;
-    border-radius: 5px 5px 0 0;
-}
-
-.ui-tooltip-rounded .ui-tooltip-titlebar + .ui-tooltip-content,
-.ui-tooltip-tipsy .ui-tooltip-titlebar + .ui-tooltip-content,
-.ui-tooltip-youtube .ui-tooltip-titlebar + .ui-tooltip-content{
-    -moz-border-radius: 0 0 5px 5px;
-    -webkit-border-radius: 0 0 5px 5px;
-    border-radius: 0 0 5px 5px;
-}
-
-
-/*! Youtube tooltip style */
-.ui-tooltip-youtube{
-    -webkit-box-shadow: 0 0 3px #333;
-    -moz-box-shadow: 0 0 3px #333;
-    box-shadow: 0 0 3px #333;
-}
-
-.ui-tooltip-youtube .ui-tooltip-titlebar,
-.ui-tooltip-youtube .ui-tooltip-content{
-    _margin-bottom: 0; /* IE6 */
-    .margin-bottom: 0; /* IE7 */
-
-    background: transparent;
-    background: rgba(0, 0, 0, 0.85);
-    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#D9000000,endColorstr=#D9000000);
-    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#D9000000,endColorstr=#D9000000)";
-
-    color: white;
-    border-color: #CCCCCC;
-}
-
-.ui-tooltip-youtube .ui-tooltip-icon{
-    border-color: #222;
-}
-
-.ui-tooltip-youtube .ui-tooltip-titlebar .ui-state-hover{
-    border-color: #303030;
-}
-
-
-/* jQuery TOOLS Tooltip style */
-.ui-tooltip-jtools{
-    background: #232323;
-    background: rgba(0, 0, 0, 0.7);
-    background-image: -moz-linear-gradient(top, #717171, #232323);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323));
-
-    border: 2px solid #ddd;
-    border: 2px solid rgba(241,241,241,1);
-
-    -moz-border-radius: 2px;
-    -webkit-border-radius: 2px;
-    border-radius: 2px;
-
-    -webkit-box-shadow: 0 0 12px #333;
-    -moz-box-shadow: 0 0 12px #333;
-    box-shadow: 0 0 12px #333;
-}
-
-/* IE Specific */
-.ui-tooltip-jtools .ui-tooltip-titlebar{
-    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A);
-    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)";
-}
-.ui-tooltip-jtools .ui-tooltip-content{
-    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323);
-    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)";
-}
-
-.ui-tooltip-jtools .ui-tooltip-titlebar,
-.ui-tooltip-jtools .ui-tooltip-content{
-    background: transparent;
-    color: white;
-    border: 0 dashed transparent;
-}
-
-.ui-tooltip-jtools .ui-tooltip-icon{
-    border-color: #555;
-}
-
-.ui-tooltip-jtools .ui-tooltip-titlebar .ui-state-hover{
-    border-color: #333;
-}
-
-
-/* Cluetip style */
-.ui-tooltip-cluetip{
-    -webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
-    -moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
-    box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
-}
-
-.ui-tooltip-cluetip .ui-tooltip-titlebar{
-    background-color: #87876A;
-    color: white;
-    border: 0 dashed transparent;
-}
-
-.ui-tooltip-cluetip .ui-tooltip-content{
-    background-color: #D9D9C2;
-    color: #111;
-    border: 0 dashed transparent;
-}
-
-.ui-tooltip-cluetip .ui-tooltip-icon{
-    border-color: #808064;
-}
-
-.ui-tooltip-cluetip .ui-tooltip-titlebar .ui-state-hover{
-    border-color: #696952;
-    color: #696952;
-}
-
-
-/* Tipsy style */
-.ui-tooltip-tipsy{
-    border: 0;
-}
-
-.ui-tooltip-tipsy .ui-tooltip-titlebar,
-.ui-tooltip-tipsy .ui-tooltip-content{
-    _margin-bottom: 0; /* IE6 */
-    .margin-bottom: 0; /* IE7 */
-
-    background: transparent;
-    background: rgba(0, 0, 0, .87);
-    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#D9000000,endColorstr=#D9000000);
-    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#D9000000,endColorstr=#D9000000)";
-
-    color: white;
-    border: 0px transparent;
-
-    font-size: 11px;
-    font-family: 'Lucida Grande', sans-serif;
-    font-weight: bold;
-    line-height: 16px;
-    text-shadow: 0 1px black;
-}
-
-.ui-tooltip-tipsy .ui-tooltip-titlebar{
-    padding: 6px 35px 0 10;
-}
-
-.ui-tooltip-tipsy .ui-tooltip-content{
-    padding: 6px 10;
-}
-
-.ui-tooltip-tipsy .ui-tooltip-icon{
-    border-color: #222;
-    text-shadow: none;
-}
-
-.ui-tooltip-tipsy .ui-tooltip-titlebar .ui-state-hover{
-    border-color: #303030;
-}
-
-
-/* Tipped style */
-.ui-tooltip-tipped{
-
-}
-
-.ui-tooltip-tipped .ui-tooltip-titlebar,
-.ui-tooltip-tipped .ui-tooltip-content{
-    border: 3px solid #959FA9;
-
-    filter: none; -ms-filter: none;
-}
-
-.ui-tooltip-tipped .ui-tooltip-titlebar{
-    background: #3A79B8;
-    background-image: -moz-linear-gradient(top, #3A79B8, #2E629D);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D));
-    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D);
-    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)";
-
-    color: white;
-    font-weight: normal;
-    font-family: serif;
-
-    border-bottom-width: 0;
-    -moz-border-radius: 3px 3px 0 0;
-    -webkit-border-radius: 3px 3px 0 0;
-    border-radius: 3px 3px 0 0;
-}
-
-.ui-tooltip-tipped .ui-tooltip-content{
-    background-color: #F9F9F9;
-    color: #454545;
-
-    -moz-border-radius: 0 0 3px 3px;
-    -webkit-border-radius: 0 0 3px 3px;
-    border-radius: 0 0 3px 3px;
-}
-
-.ui-tooltip-tipped .ui-tooltip-icon{
-    border: 2px solid #285589;
-    background: #285589;
-}
-
-.ui-tooltip-tipped .ui-tooltip-icon .ui-icon{
-    background-color: #FBFBFB;
-    color: #555;
-}
-
-/* IE9 fix - removes all filters */
-.ui-tooltip:not(.ie9haxors) div.ui-tooltip-content,
-.ui-tooltip:not(.ie9haxors) div.ui-tooltip-titlebar{
-    filter: none;
-    -ms-filter: none;
-}
-

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/658131de/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.css
new file mode 100644
index 0000000..27b9729
--- /dev/null
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.css
@@ -0,0 +1,3 @@
+/* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */
+
+.qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr;box-shadow:none;padding:0}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:700}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;z-index:11;cursor:pointer;outline:0;border:1px solid transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-icon .ui-icon,.qtip-titlebar .ui-icon{display:block;text-indent:-1000em;direction:ltr}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;line-height:14px;text-align:center;text-indent:0;font:400 bold 10px/13px Tahoma,sans
 -serif;color:inherit;background:-100em -100em no-repeat}.qtip-default{border:1px solid #F1D031;background-color:#FFFFA3;color:#555}.qtip-default .qtip-titlebar{background-color:#FFEF93}.qtip-default .qtip-icon{border-color:#CCC;background:#F1F1F1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111}.qtip-light{background-color:#fff;border-color:#E2E2E2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1}.qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-cream{background-color:#FBF7AA;border-color:#F9E98E;color:#A27D35}.qtip-cream .qtip-titlebar{background-color:#F0DE7D}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0}.qtip-red{background-color:#F78B83;border-color:#D95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#F06D65}.qtip-red .qtip-
 close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon,.qtip-red .qtip-titlebar .ui-state-hover{border-color:#D95252}.qtip-green{background-color:#CAED9E;border-color:#90D93F;color:#3F6219}.qtip-green .qtip-titlebar{background-color:#B0DE78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0}.qtip-blue{background-color:#E5F6FE;border-color:#ADD9ED;color:#5E99BD}.qtip-blue .qtip-titlebar{background-color:#D0E9F5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,.15)}.qtip-bootstrap,.qtip-rounded,.qtip-tipsy{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-rounded .qtip-titlebar{-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-
 moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:#fff;border:0 solid transparent;background:#4A4A4A;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,#000));background-image:-webkit-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-moz-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-ms-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-o-linear-gradient(top,#4A4A4A 0,#000 100%)}.qtip-youtube .qtip-titlebar{background-color:transparent}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,.7);background
 -image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid rgba(241,241,241,1);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"}.qtip-jtools .qtip-content,
 .qtip-jtools .qtip-titlebar{background:0 0;color:#fff;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,.4);box-shadow:4px 4px 5px rgba(0,0,0,.4);background-color:#D9D9C2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876A;color:#fff;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:#000;background:rgba(0,0,0,.87);color:#fff;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px;text-shadow:0 1px #000}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10px;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10px}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qt
 ip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959FA9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#F9F9F9;color:#454545;font-weight:400;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:#fff;background:#3A79B8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3A79B8),to(#2E629D));background-image:-webkit-linear-gradient(top,#3A79B8,#2E629D);background-image:-moz-linear-gradient(top,#3A79B8,#2E629D);background-image:-ms-linear-gradient(top,#3A79B8,#2E629D);background-image:-o-linear-gradient(top,#3A79B8,#2E629D);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#FBFBFB;color:#555}.qtip-bootstrap{font-si
 ze:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:0 0}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:700;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;f
 ilter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}.qtip .qtip-tip,x:-o-prefocus{visibility:hidden}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml,.qtip .qtip-tip canvas{position:absolute;color:#123456;background:0 0;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:0;top:0;width:100%;height:100%}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70);-ms-filter:"alpha(Opacity=70)"}.qtipmodal-ie6fix{position:absolute!important}
\ No newline at end of file


[50/50] [abbrv] incubator-nifi git commit: NIFI-27: - Upgrading jQuery, jQuery UI, jqGrid. - Replacing deprecated functionality.

Posted by mc...@apache.org.
NIFI-27:
- Upgrading jQuery, jQuery UI, jqGrid.
- Replacing deprecated functionality.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/d7b1113a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/d7b1113a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/d7b1113a

Branch: refs/heads/develop
Commit: d7b1113a86a8ed52aa2a7f907d89ab8b8a730c73
Parents: a016bf4
Author: Matt Gilman <ma...@gmail.com>
Authored: Tue Dec 16 11:25:25 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Tue Dec 16 11:25:25 2014 -0500

----------------------------------------------------------------------
 .../ui/src/main/webapp/WEB-INF/jsp/index.jsp    |   6 +-
 .../js/jquery/jqgrid/css/ellipsis-xbl.xml       |  29 -
 .../webapp/js/jquery/jqgrid/css/ui.jqgrid.css   | 251 ++---
 .../js/jquery/jqgrid/js/i18n/grid.locale-en.js  | 175 +++-
 .../js/jquery/jqgrid/js/jquery.jqGrid.min.js    | 959 +++++++++++--------
 .../ui/src/main/webapp/js/nf-common.js          |   7 +-
 6 files changed, 826 insertions(+), 601 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/d7b1113a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/WEB-INF/jsp/index.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/WEB-INF/jsp/index.jsp b/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/WEB-INF/jsp/index.jsp
index 8470f61..e39ccc3 100644
--- a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/WEB-INF/jsp/index.jsp
+++ b/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/WEB-INF/jsp/index.jsp
@@ -23,7 +23,7 @@
         <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
         <link rel="shortcut icon" href="images/nifi16.ico"/>
 
-        <link rel="stylesheet" href="../nifi/js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
+        <link rel="stylesheet" href="../nifi/js/jquery/ui-smoothness/jquery-ui-1.10.4.min.css" type="text/css" />
         <link rel="stylesheet" href="../nifi/js/jquery/modal/jquery.modal.css" type="text/css" />
 
         <link rel="stylesheet" href="js/jquery/jqgrid/css/ui.jqgrid.css" type="text/css" />
@@ -33,8 +33,8 @@
 
         <link rel="stylesheet" href="css/threshold_styles.css" type="text/css" />
 
-        <script type="text/javascript" src="../nifi/js/jquery/jquery-1.7.min.js"></script>
-        <script type="text/javascript" src="../nifi/js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
+        <script type="text/javascript" src="../nifi/js/jquery/jquery-2.1.1.min.js"></script>
+        <script type="text/javascript" src="../nifi/js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/modal/jquery.modal.js"></script>
 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/d7b1113a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/css/ellipsis-xbl.xml
----------------------------------------------------------------------
diff --git a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/css/ellipsis-xbl.xml b/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/css/ellipsis-xbl.xml
deleted file mode 100644
index ea0bdf8..0000000
--- a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/css/ellipsis-xbl.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-  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.
--->
-<bindings
-    xmlns="http://www.mozilla.org/xbl"
-    xmlns:xbl="http://www.mozilla.org/xbl"
-    xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-    <binding id="ellipsis">
-        <content>
-            <xul:window><!-- xul:window tag required for FF2 -->
-                <xul:description crop="end" xbl:inherits="value=xbl:text">
-                    <children/>
-                </xul:description>
-            </xul:window>
-        </content>
-    </binding>
-</bindings>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/d7b1113a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/css/ui.jqgrid.css
----------------------------------------------------------------------
diff --git a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/css/ui.jqgrid.css b/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/css/ui.jqgrid.css
old mode 100755
new mode 100644
index a3baeed..11594b1
--- a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/css/ui.jqgrid.css
+++ b/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/css/ui.jqgrid.css
@@ -1,181 +1,120 @@
 /*Grid*/
-.ui-jqgrid {position: relative; font-size:11px;}
-.ui-jqgrid .ui-jqgrid-view {position: relative;left:0px; top: 0px; padding: .0em;}
-
+.ui-jqgrid {position: relative;}
+.ui-jqgrid .ui-jqgrid-view {position: relative;left:0; top: 0; padding: 0; font-size:11px;}
 /* caption*/
-.ui-jqgrid .ui-jqgrid-titlebar {padding: .3em .2em .2em .3em; position: relative; border-left: 0px none;border-right: 0px none; border-top: 0px none;}
-.ui-jqgrid .ui-jqgrid-title { float: left; margin: .1em 0 .2em; }
-.ui-jqgrid .ui-jqgrid-titlebar-close { position: absolute;top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height:18px;}.ui-jqgrid .ui-jqgrid-titlebar-close span { display: block; margin: 1px; }
+.ui-jqgrid .ui-jqgrid-titlebar {padding: .3em .2em .2em .3em; position: relative; font-size: 12px; border-left: 0 none;border-right: 0 none; border-top: 0 none;}
+.ui-jqgrid .ui-jqgrid-caption {text-align: left;}
+.ui-jqgrid .ui-jqgrid-title { margin: .1em 0 .2em; }
+.ui-jqgrid .ui-jqgrid-titlebar-close { position: absolute;top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height:18px; cursor:pointer;}
+.ui-jqgrid .ui-jqgrid-titlebar-close span { display: block; margin: 1px; }
 .ui-jqgrid .ui-jqgrid-titlebar-close:hover { padding: 0; }
-
 /* header*/
-/*.ui-jqgrid .ui-jqgrid-hdiv {position: relative; margin: 0em;padding: 0em; overflow-x: hidden; overflow-y: auto; border-left: 0px none !important; border-top : 0px none !important; border-right : 0px none !important;}*/
-.ui-jqgrid .ui-jqgrid-hdiv {
-    position: relative;
-    margin: 0em;
-    padding: 0em;
-    overflow-x: hidden;
-    overflow-y: auto;
-    border-left: 0px none !important;
-    border-top : 0px none !important;
-    border-right : 0px none !important;
-    border-bottom: 1px solid #666;
-    background-image: url(../../../../images/bgTableHeader.png);
-    background-repeat: repeat-x;
-}
-
+.ui-jqgrid .ui-jqgrid-hdiv {position: relative; margin: 0;padding: 0; overflow-x: hidden; border-left: 0 none !important; border-top : 0 none !important; border-right : 0 none !important;}
 .ui-jqgrid .ui-jqgrid-hbox {float: left; padding-right: 20px;}
-.ui-jqgrid .ui-jqgrid-htable {table-layout:fixed;margin:0em;}
-/*.ui-jqgrid .ui-jqgrid-htable th {height:22px;padding: 0 2px 0 2px;}*/
-.ui-jqgrid .ui-jqgrid-htable th {
-    height: 26px;
-    padding: 0 2px;
-    border-right: 1px solid #172B31;
-    border-bottom: 1px solid #365C6A;
-    background-image: url(../../../../images/bgTableHeader.png);
-    background-repeat: repeat-x;
-}
-/*.ui-jqgrid .ui-jqgrid-htable th div {overflow: hidden; position:relative; height:17px;}*/
-.ui-jqgrid .ui-jqgrid-htable th div {
-    overflow: hidden;
-    position: relative;
-    padding-top: 8px;
-    left: 4px;
-    height: 17px;
-    color: #fff;
-    font-weight: bold;
-}
-/*.ui-th-column, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column {overflow: hidden;white-space: nowrap;text-align:center;border-top : 0px none;border-bottom : 0px none;}*/
-.ui-th-column, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column {
-    overflow: hidden;
-    white-space: nowrap;
-    border-top: 0px none;
-    border-bottom: 0px none;
-}
-.ui-th-ltr, .ui-jqgrid .ui-jqgrid-htable th.ui-th-ltr {border-left : 0px none;}
-.ui-th-rtl, .ui-jqgrid .ui-jqgrid-htable th.ui-th-rtl {border-right : 0px none;}
+.ui-jqgrid .ui-jqgrid-htable {table-layout:fixed;margin:0;}
+.ui-jqgrid .ui-jqgrid-htable th {height:22px;padding: 0 2px 0 2px;}
+.ui-jqgrid .ui-jqgrid-htable th div {overflow: hidden; position:relative; height:17px;}
+.ui-th-column, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column {overflow: hidden;white-space: nowrap;text-align:center;border-top : 0 none;border-bottom : 0 none;}
+.ui-th-ltr, .ui-jqgrid .ui-jqgrid-htable th.ui-th-ltr {border-left : 0 none;}
+.ui-th-rtl, .ui-jqgrid .ui-jqgrid-htable th.ui-th-rtl {border-right : 0 none;}
+.ui-first-th-ltr {border-right: 1px solid; }
+.ui-first-th-rtl {border-left: 1px solid; }
 .ui-jqgrid .ui-th-div-ie {white-space: nowrap; zoom :1; height:17px;}
-/*.ui-jqgrid .ui-jqgrid-resize {height:20px !important;position: relative; cursor :e-resize;display: inline;overflow: hidden;}*/
-.ui-jqgrid .ui-jqgrid-resize {
-    height: 26px !important;
-    position: relative; 
-    cursor: e-resize;
-    display: inline;
-    overflow: hidden;
-    z-index: 1;
-}
+.ui-jqgrid .ui-jqgrid-resize {height:20px !important;position: relative; cursor :e-resize;display: inline;overflow: hidden;}
 .ui-jqgrid .ui-grid-ico-sort {overflow:hidden;position:absolute;display:inline; cursor: pointer !important;}
-/*.ui-jqgrid .ui-icon-asc {margin-top:-3px; height:12px;}*/
-.ui-jqgrid .ui-icon-asc {
-    margin-left: 5px;
-    margin-top: -5px;
-    height: 12px;
-}
-/*.ui-jqgrid .ui-icon-desc {margin-top:3px;height:12px;}*/
-.ui-jqgrid .ui-icon-desc {
-    height: 12px;
-    margin-top: 2px;
-    margin-left: 4px;
-}
-.ui-jqgrid .ui-i-asc {margin-top:0px;height:16px;}
-.ui-jqgrid .ui-i-desc {margin-top:0px;margin-left:13px;height:16px;}
+.ui-jqgrid .ui-icon-asc {margin-top:-3px; height:12px;}
+.ui-jqgrid .ui-icon-desc {margin-top:3px;height:12px;}
+.ui-jqgrid .ui-i-asc {margin-top:0;height:16px;}
+.ui-jqgrid .ui-i-desc {margin-top:0;margin-left:13px;height:16px;}
 .ui-jqgrid .ui-jqgrid-sortable {cursor:pointer;}
 .ui-jqgrid tr.ui-search-toolbar th { border-top-width: 1px !important; border-top-color: inherit !important; border-top-style: ridge !important }
-tr.ui-search-toolbar input {margin: 1px 0px 0px 0px}
-tr.ui-search-toolbar select {margin: 1px 0px 0px 0px}
-
+tr.ui-search-toolbar input {margin: 1px 0 0 0}
+tr.ui-search-toolbar select {margin: 1px 0 0 0}
 /* body */ 
-.ui-jqgrid .ui-jqgrid-bdiv {position: relative; margin: 0em; padding:0; overflow: auto; text-align:left;}
-.ui-jqgrid .ui-jqgrid-btable {table-layout:fixed; margin:0em;}
-/*.ui-jqgrid tr.jqgrow td {font-weight: normal; overflow: hidden; white-space: pre; height: 22px;padding: 0 2px 0 2px;border-bottom-width: 1px; border-bottom-color: inherit; border-bottom-style: solid;}*/
-.ui-jqgrid tr.jqgrow td {
-    font-weight: normal;
-    overflow: hidden;
-    padding: 2px;
-    border-bottom-width: 1px;
-    border-bottom-color: #aaa;
-    border-bottom-style: solid;
-}
-/*.ui-jqgrid tr.ui-row-ltr td {text-align:left;border-right-width: 1px; border-right-color: inherit; border-right-style: solid;}*/
-.ui-jqgrid tr.ui-row-ltr td {
-    vertical-align: middle;
-    padding: 6px 3px 4px 2px;
-    text-align: left;
-}
+.ui-jqgrid .ui-jqgrid-bdiv {position: relative; margin: 0; padding:0; overflow: auto; text-align:left;}
+.ui-jqgrid .ui-jqgrid-btable {table-layout:fixed; margin:0; outline-style: none; }
+.ui-jqgrid tr.jqgrow { outline-style: none; }
+.ui-jqgrid tr.jqgroup { outline-style: none; }
+.ui-jqgrid tr.jqgrow td {font-weight: normal; overflow: hidden; white-space: pre; height: 22px;padding: 0 2px 0 2px;border-bottom-width: 1px; border-bottom-color: inherit; border-bottom-style: solid;}
+.ui-jqgrid tr.jqgfirstrow td {padding: 0 2px 0 2px;border-right-width: 1px; border-right-style: solid;}
+.ui-jqgrid tr.jqgroup td {font-weight: normal; overflow: hidden; white-space: pre; height: 22px;padding: 0 2px 0 2px;border-bottom-width: 1px; border-bottom-color: inherit; border-bottom-style: solid;}
+.ui-jqgrid tr.jqfoot td {font-weight: bold; overflow: hidden; white-space: pre; height: 22px;padding: 0 2px 0 2px;border-bottom-width: 1px; border-bottom-color: inherit; border-bottom-style: solid;}
+.ui-jqgrid tr.ui-row-ltr td {text-align:left;border-right-width: 1px; border-right-color: inherit; border-right-style: solid;}
 .ui-jqgrid tr.ui-row-rtl td {text-align:right;border-left-width: 1px; border-left-color: inherit; border-left-style: solid;}
-.ui-jqgrid td.jqgrid-rownum { padding: 0 2px 0 2px; margin: 0px; border: 0px none;}
-.ui-jqgrid .ui-jqgrid-resize-mark { width:2px; left:0; background-color:#777; cursor: e-resize; cursor: col-resize; position:absolute; top:0; height:100px; overflow:hidden; display:none;	border:0 none;}
-
+.ui-jqgrid td.jqgrid-rownum { padding: 0 2px 0 2px; margin: 0; border: 0 none;}
+.ui-jqgrid .ui-jqgrid-resize-mark { width:2px; left:0; background-color:#777; cursor: e-resize; cursor: col-resize; position:absolute; top:0; height:100px; overflow:hidden; display:none; border:0 none; z-index: 99999;}
 /* footer */
-.ui-jqgrid .ui-jqgrid-sdiv {position: relative; margin: 0em;padding: 0em; overflow: hidden; border-left: 0px none !important; border-top : 0px none !important; border-right : 0px none !important;}
-.ui-jqgrid .ui-jqgrid-ftable {table-layout:fixed; margin-bottom:0em;}
+.ui-jqgrid .ui-jqgrid-sdiv {position: relative; margin: 0;padding: 0; overflow: hidden; border-left: 0 none !important; border-top : 0 none !important; border-right : 0 none !important;}
+.ui-jqgrid .ui-jqgrid-ftable {table-layout:fixed; margin-bottom:0;}
 .ui-jqgrid tr.footrow td {font-weight: bold; overflow: hidden; white-space:nowrap; height: 21px;padding: 0 2px 0 2px;border-top-width: 1px; border-top-color: inherit; border-top-style: solid;}
 .ui-jqgrid tr.footrow-ltr td {text-align:left;border-right-width: 1px; border-right-color: inherit; border-right-style: solid;}
 .ui-jqgrid tr.footrow-rtl td {text-align:right;border-left-width: 1px; border-left-color: inherit; border-left-style: solid;}
-
 /* Pager*/
-.ui-jqgrid .ui-jqgrid-pager { border-left: 0px none !important;border-right: 0px none !important; border-bottom: 0px none !important; margin: 0px !important; padding: 0px !important; position: relative; height: 25px;white-space: nowrap;overflow: hidden;}
+.ui-jqgrid .ui-jqgrid-pager { border-left: 0 none !important;border-right: 0 none !important; border-bottom: 0 none !important; margin: 0 !important; padding: 0 !important; position: relative; height: 25px;white-space: nowrap;overflow: hidden;font-size:11px;}
 .ui-jqgrid .ui-pager-control {position: relative;}
-.ui-jqgrid .ui-pg-table {position: relative; padding-bottom:2px; width:auto; margin: 0em;}
+.ui-jqgrid .ui-pg-table {position: relative; padding-bottom:2px; width:auto; margin: 0;}
 .ui-jqgrid .ui-pg-table td {font-weight:normal; vertical-align:middle; padding:1px;}
 .ui-jqgrid .ui-pg-button  { height:19px !important;}
 .ui-jqgrid .ui-pg-button span { display: block; margin: 1px; float:left;}
-/*.ui-jqgrid .ui-pg-button:hover { padding: 0px; }*/
-.ui-jqgrid .ui-pg-button:hover { 
-    padding: 1px; 
-}
+.ui-jqgrid .ui-pg-button:hover { padding: 0; }
 .ui-jqgrid .ui-state-disabled:hover {padding:1px;}
-.ui-jqgrid .ui-pg-input { height:13px;font-size:.8em; margin: 0em;}
-.ui-jqgrid .ui-pg-selbox {font-size:.8em; line-height:18px; display:block; height:18px; margin: 0em;}
+.ui-jqgrid .ui-pg-input { height:13px;font-size:.8em; margin: 0;}
+.ui-jqgrid .ui-pg-selbox {font-size:.8em; line-height:18px; display:block; height:18px; margin: 0;}
 .ui-jqgrid .ui-separator {height: 18px; border-left: 1px solid #ccc ; border-right: 1px solid #ccc ; margin: 1px; float: right;}
 .ui-jqgrid .ui-paging-info {font-weight: normal;height:19px; margin-top:3px;margin-right:4px;}
-.ui-jqgrid .ui-jqgrid-pager .ui-pg-div {padding:1px 0;float:left;list-style-image:none;list-style-position:outside;list-style-type:none;position:relative;}
+.ui-jqgrid .ui-jqgrid-pager .ui-pg-div {padding:1px 0;float:left;position:relative;}
 .ui-jqgrid .ui-jqgrid-pager .ui-pg-button { cursor:pointer; }
 .ui-jqgrid .ui-jqgrid-pager .ui-pg-div  span.ui-icon {float:left;margin:0 2px;}
-.ui-jqgrid td input, .ui-jqgrid td select .ui-jqgrid td textarea { margin: 0em;}
+.ui-jqgrid td input, .ui-jqgrid td select .ui-jqgrid td textarea { margin: 0;}
 .ui-jqgrid td textarea {width:auto;height:auto;}
-.ui-jqgrid .ui-jqgrid-toppager {border-left: 0px none !important;border-right: 0px none !important; border-top: 0px none !important; margin: 0px !important; padding: 0px !important; position: relative; height: 25px !important;white-space: nowrap;overflow: hidden;}
-
-/* subgrid */
+.ui-jqgrid .ui-jqgrid-toppager {border-left: 0 none !important;border-right: 0 none !important; border-top: 0 none !important; margin: 0 !important; padding: 0 !important; position: relative; height: 25px !important;white-space: nowrap;overflow: hidden;}
+.ui-jqgrid .ui-jqgrid-toppager .ui-pg-div {padding:1px 0;float:left;position:relative;}
+.ui-jqgrid .ui-jqgrid-toppager .ui-pg-button { cursor:pointer; }
+.ui-jqgrid .ui-jqgrid-toppager .ui-pg-div  span.ui-icon {float:left;margin:0 2px;}
+/*subgrid*/
 .ui-jqgrid .ui-jqgrid-btable .ui-sgcollapsed span {display: block;}
-.ui-jqgrid .ui-subgrid {margin:0em;padding:0em; width:100%;}
+.ui-jqgrid .ui-subgrid {margin:0;padding:0; width:100%;}
 .ui-jqgrid .ui-subgrid table {table-layout: fixed;}
 .ui-jqgrid .ui-subgrid tr.ui-subtblcell td {height:18px;border-right-width: 1px; border-right-color: inherit; border-right-style: solid;border-bottom-width: 1px; border-bottom-color: inherit; border-bottom-style: solid;}
-.ui-jqgrid .ui-subgrid td.subgrid-data {border-top:  0px none !important;}
-.ui-jqgrid .ui-subgrid td.subgrid-cell {border-width: 0px 0px 1px 0px;}
+.ui-jqgrid .ui-subgrid td.subgrid-data {border-top:  0 none !important;}
+.ui-jqgrid .ui-subgrid td.subgrid-cell {border-width: 0 0 1px 0;}
 .ui-jqgrid .ui-th-subgrid {height:20px;}
-
 /* loading */
-.ui-jqgrid .loading {position: absolute; top: 45%;left: 45%;width: auto;z-index:101;padding: 6px; margin: 5px;text-align: center;font-weight: bold;display: none;border-width: 2px !important;}
+.ui-jqgrid .loading {position: absolute; top: 45%;left: 45%;width: auto;z-index:101;padding: 6px; margin: 5px;text-align: center;font-weight: bold;display: none;border-width: 2px !important; font-size:11px;}
 .ui-jqgrid .jqgrid-overlay {display:none;z-index:100;}
-* html .jqgrid-overlay {width: expression(this.parentNode.offsetWidth+'px');height: expression(this.parentNode.offsetHeight+'px');}
-* .jqgrid-overlay iframe {position:absolute;top:0;left:0;z-index:-1;width: expression(this.parentNode.offsetWidth+'px');height: expression(this.parentNode.offsetHeight+'px');}
+/* IE * html .jqgrid-overlay {width: expression(this.parentNode.offsetWidth+'px');height: expression(this.parentNode.offsetHeight+'px');} */
+* .jqgrid-overlay iframe {position:absolute;top:0;left:0;z-index:-1;}
+/* IE width: expression(this.parentNode.offsetWidth+'px');height: expression(this.parentNode.offsetHeight+'px');}*/
 /* end loading div */
-
 /* toolbar */
-.ui-jqgrid .ui-userdata {border-left: 0px none;	border-right: 0px none;	height : 21px;overflow: hidden;	}
-
+.ui-jqgrid .ui-userdata {border-left: 0 none;    border-right: 0 none;	height : 21px;overflow: hidden;	}
 /*Modal Window */
 .ui-jqdialog { display: none; width: 300px; position: absolute; padding: .2em; font-size:11px; overflow:visible;}
 .ui-jqdialog .ui-jqdialog-titlebar { padding: .3em .2em; position: relative;  }
 .ui-jqdialog .ui-jqdialog-title { margin: .1em 0 .2em; } 
-.ui-jqdialog .ui-jqdialog-titlebar-close { position: absolute;  top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-jqdialog .ui-jqdialog-titlebar-close { position: absolute;  top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; cursor:pointer;}
+
 .ui-jqdialog .ui-jqdialog-titlebar-close span { display: block; margin: 1px; }
 .ui-jqdialog .ui-jqdialog-titlebar-close:hover, .ui-jqdialog .ui-jqdialog-titlebar-close:focus { padding: 0; }
 .ui-jqdialog-content, .ui-jqdialog .ui-jqdialog-content { border: 0; padding: .3em .2em; background: none; height:auto;}
 .ui-jqdialog .ui-jqconfirm {padding: .4em 1em; border-width:3px;position:absolute;bottom:10px;right:10px;overflow:visible;display:none;height:80px;width:220px;text-align:center;}
+.ui-jqdialog>.ui-resizable-se { bottom: -3px; right: -3px}
+.ui-jqgrid>.ui-resizable-se { bottom: -3px; right: -3px }
 /* end Modal window*/
-
 /* Form edit */
-.ui-jqdialog-content .FormGrid {margin: 0px;}
-.ui-jqdialog-content .EditTable { width: 100%; margin-bottom:0em;}
-.ui-jqdialog-content .DelTable { width: 100%; margin-bottom:0em;}
-.EditTable td input, .EditTable td select, .EditTable td textarea {margin: 0em;}
+.ui-jqdialog-content .FormGrid {margin: 0;}
+.ui-jqdialog-content .EditTable { width: 100%; margin-bottom:0;}
+.ui-jqdialog-content .DelTable { width: 100%; margin-bottom:0;}
+.EditTable td input, .EditTable td select, .EditTable td textarea {margin: 0;}
 .EditTable td textarea { width:auto; height:auto;}
-.ui-jqdialog-content td.EditButton {text-align: right;border-top: 0px none;border-left: 0px none;border-right: 0px none; padding-bottom:5px; padding-top:5px;}
-.ui-jqdialog-content td.navButton {text-align: center; border-left: 0px none;border-top: 0px none;border-right: 0px none; padding-bottom:5px; padding-top:5px;}
-.ui-jqdialog-content .CaptionTD {text-align: left; vertical-align: top;border-left: 0px none;border-right: 0px none; border-bottom: 0px none; padding: 1px;white-space: nowrap;}
-.ui-jqdialog-content .DataTD {padding: 1px;border-left: 0px none;border-right: 0px none; border-bottom: 0px none; vertical-align: top;}
+.ui-jqdialog-content td.EditButton {text-align: right;border-top: 0 none;border-left: 0 none;border-right: 0 none; padding-bottom:5px; padding-top:5px;}
+.ui-jqdialog-content td.navButton {text-align: center; border-left: 0 none;border-top: 0 none;border-right: 0 none; padding-bottom:5px; padding-top:5px;}
+.ui-jqdialog-content input.FormElement {padding:.3em}
+.ui-jqdialog-content select.FormElement {padding:.3em}
+.ui-jqdialog-content .data-line {padding-top:.1em;border: 0 none;}
+
+.ui-jqdialog-content .CaptionTD {vertical-align: middle;border: 0 none; padding: 2px;white-space: nowrap;}
+.ui-jqdialog-content .DataTD {padding: 2px; border: 0 none; vertical-align: top;}
 .ui-jqdialog-content .form-view-data {white-space:pre}
 .fm-button { display: inline-block; margin:0 4px 0 0; padding: .4em .5em; text-decoration:none !important; cursor:pointer; position: relative; text-align: center; zoom: 1; }
 .fm-button-icon-left { padding-left: 1.9em; }
@@ -184,29 +123,49 @@ tr.ui-search-toolbar select {margin: 1px 0px 0px 0px}
 .fm-button-icon-right .ui-icon { left: auto; right: .2em; margin-left: 0; position: absolute; top: 50%; margin-top: -8px;}
 #nData, #pData { float: left; margin:3px;padding: 0; width: 15px; }
 /* End Eorm edit */
-
 /*.ui-jqgrid .edit-cell {}*/
-.ui-jqgrid .selected-row, div.ui-jqgrid .selected-row td {font-style : normal;border-left: 0px none;}
-
+.ui-jqgrid .selected-row, div.ui-jqgrid .selected-row td {font-style : normal;border-left: 0 none;}
+/* inline edit actions button*/
+.ui-inline-del.ui-state-hover span, .ui-inline-edit.ui-state-hover span,
+.ui-inline-save.ui-state-hover span, .ui-inline-cancel.ui-state-hover span {
+    margin: -1px;
+}
 /* Tree Grid */
 .ui-jqgrid .tree-wrap {float: left; position: relative;height: 18px;white-space: nowrap;overflow: hidden;}
 .ui-jqgrid .tree-minus {position: absolute; height: 18px; width: 18px; overflow: hidden;}
 .ui-jqgrid .tree-plus {position: absolute;	height: 18px; width: 18px;	overflow: hidden;}
 .ui-jqgrid .tree-leaf {position: absolute;	height: 18px; width: 18px;overflow: hidden;}
 .ui-jqgrid .treeclick {cursor: pointer;}
-
 /* moda dialog */
-.jqmOverlay { background-color: #000; }
-* iframe.jqm {position:absolute;top:0;left:0;z-index:-1;width: expression(this.parentNode.offsetWidth+'px');height: expression(this.parentNode.offsetHeight+'px');}
+* iframe.jqm {position:absolute;top:0;left:0;z-index:-1;}
+/*	 width: expression(this.parentNode.offsetWidth+'px');height: expression(this.parentNode.offsetHeight+'px');}*/
 .ui-jqgrid-dnd tr td {border-right-width: 1px; border-right-color: inherit; border-right-style: solid; height:20px}
-
 /* RTL Support */
-.ui-jqgrid .ui-jqgrid-title-rtl {float:right;margin: .1em 0 .2em; }
+.ui-jqgrid .ui-jqgrid-caption-rtl {text-align: right;}
 .ui-jqgrid .ui-jqgrid-hbox-rtl {float: right; padding-left: 20px;}
-.ui-jqgrid .ui-jqgrid-resize-ltr {float: right;margin: -2px -2px -2px 0px;}
-.ui-jqgrid .ui-jqgrid-resize-rtl {float: left;margin: -2px 0px -1px -3px;}
-.ui-jqgrid .ui-sort-rtl {left:0px;}
+.ui-jqgrid .ui-jqgrid-resize-ltr {float: right;margin: -2px -2px -2px 0;}
+.ui-jqgrid .ui-jqgrid-resize-rtl {float: left;margin: -2px 0 -1px -3px;}
+.ui-jqgrid .ui-sort-rtl {left:0;}
 .ui-jqgrid .tree-wrap-ltr {float: left;}
 .ui-jqgrid .tree-wrap-rtl {float: right;}
-.ui-jqgrid .ui-ellipsis {text-overflow:ellipsis; -moz-binding:url('ellipsis-xbl.xml#ellipsis');}
-
+.ui-jqgrid .ui-ellipsis {-moz-text-overflow:ellipsis;text-overflow:ellipsis;}
+
+/* Toolbar Search Menu */
+.ui-search-menu { position: absolute; padding: 2px 5px;}
+.ui-jqgrid .ui-search-table { padding: 0; border: 0 none; height:20px; width:100%;}
+.ui-jqgrid .ui-search-table .ui-search-oper { width:20px; }
+a.g-menu-item, a.soptclass, a.clearsearchclass { cursor: pointer; }
+.ui-jqgrid .ui-search-table .ui-search-input>input,
+.ui-jqgrid .ui-search-table .ui-search-input>select
+{
+    display: block;
+    -moz-box-sizing: border-box;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+} 
+.ui-jqgrid .ui-jqgrid-view input,
+.ui-jqgrid .ui-jqgrid-view select,
+.ui-jqgrid .ui-jqgrid-view textarea,
+.ui-jqgrid .ui-jqgrid-view button {
+    font-size: 11px
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/d7b1113a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/js/i18n/grid.locale-en.js
----------------------------------------------------------------------
diff --git a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/js/i18n/grid.locale-en.js b/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/js/i18n/grid.locale-en.js
old mode 100755
new mode 100644
index 7b12acf..6929885
--- a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/js/i18n/grid.locale-en.js
+++ b/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/jquery/jqgrid/js/i18n/grid.locale-en.js
@@ -1,5 +1,170 @@
-(function (a) {
-    a.jgrid = {defaults: {recordtext: "View {0} - {1} of {2}", emptyrecords: "No records to view", loadtext: "Loading...", pgtext: "Page {0} of {1}"}, search: {caption: "Search...", Find: "Find", Reset: "Reset", odata: ["equal", "not equal", "less", "less or equal", "greater", "greater or equal", "begins with", "does not begin with", "is in", "is not in", "ends with", "does not end with", "contains", "does not contain"], groupOps: [{op: "AND", text: "all"}, {op: "OR", text: "any"}], matchText: " match", rulesText: " rules"}, edit: {addCaption: "Add Record", editCaption: "Edit Record", bSubmit: "Submit", bCancel: "Cancel", bClose: "Close", saveData: "Data has been changed! Save changes?", bYes: "Yes", bNo: "No", bExit: "Cancel", msg: {required: "Field is required", number: "Please, enter valid number", minValue: "value must be greater than or equal to ", maxValue: "value must be less than or equal to", email: "is not a valid e-mail", integer: "Please, enter valid integer value", date
 : "Please, enter valid date value", url: "is not a valid URL. Prefix required ('http://' or 'https://')", nodefined: " is not defined!", novalue: " return value is required!", customarray: "Custom function should return array!", customfcheck: "Custom function should be present in case of custom checking!"}}, view: {caption: "View Record", bClose: "Close"}, del: {caption: "Delete", msg: "Delete selected record(s)?", bSubmit: "Delete", bCancel: "Cancel"}, nav: {edittext: "", edittitle: "Edit selected row", addtext: "", addtitle: "Add new row", deltext: "", deltitle: "Delete selected row", searchtext: "", searchtitle: "Find records", refreshtext: "", refreshtitle: "Reload Grid", alertcap: "Warning", alerttext: "Please, select row", viewtext: "", viewtitle: "View selected row"}, col: {caption: "Select columns", bSubmit: "Ok", bCancel: "Cancel"}, errors: {errcap: "Error", nourl: "No url is set", norecords: "No records to process", model: "Length of colNames <> colModel!"}, formatter: {in
 teger: {thousandsSeparator: " ", defaultValue: "0"}, number: {decimalSeparator: ".", thousandsSeparator: " ", decimalPlaces: 2, defaultValue: "0.00"}, currency: {decimalSeparator: ".", thousandsSeparator: " ", decimalPlaces: 2, prefix: "", suffix: "", defaultValue: "0.00"}, date: {dayNames: ["Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], monthNames: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], AmPm: ["am", "pm", "AM", "PM"], S: function (b) {
-                    return b < 11 || b > 13 ? ["st", "nd", "rd", "th"][Math.min((b - 1) % 10, 3)] : "th"
-                }, srcformat: "Y-m-d", newformat: "d/m/Y", masks: {ISO8601Long: "Y-m-d H:i:s", ISO8601Short: "Y-m-d", ShortDate: "n/j/Y", LongDate: "l, F d, Y", FullDateTime: "l, F d, Y g:i:s A", MonthDay: "F d", ShortTime: "g:i A", LongTime: "g:i:s A", SortableDateTime: "Y-m-d\\TH:i:s", UniversalSortableDateTime: "Y-m-d H:i:sO", YearMonth: "F, Y"}, reformatAfterEdit: false}, baseLinkUrl: "", showAction: "", target: "", checkbox: {disabled: true}, idName: "id"}}
-})(jQuery);
\ No newline at end of file
+;(function($){
+/**
+ * jqGrid English Translation
+ * Tony Tomov tony@trirand.com
+ * http://trirand.com/blog/ 
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+**/
+$.jgrid = $.jgrid || {};
+$.extend($.jgrid,{
+	defaults : {
+		recordtext: "View {0} - {1} of {2}",
+		emptyrecords: "No records to view",
+		loadtext: "Loading...",
+		pgtext : "Page {0} of {1}"
+	},
+	search : {
+		caption: "Search...",
+		Find: "Find",
+		Reset: "Reset",
+		odata: [{ oper:'eq', text:'equal'},{ oper:'ne', text:'not equal'},{ oper:'lt', text:'less'},{ oper:'le', text:'less or equal'},{ oper:'gt', text:'greater'},{ oper:'ge', text:'greater or equal'},{ oper:'bw', text:'begins with'},{ oper:'bn', text:'does not begin with'},{ oper:'in', text:'is in'},{ oper:'ni', text:'is not in'},{ oper:'ew', text:'ends with'},{ oper:'en', text:'does not end with'},{ oper:'cn', text:'contains'},{ oper:'nc', text:'does not contain'},{ oper:'nu', text:'is null'},{ oper:'nn', text:'is not null'}],
+		groupOps: [{ op: "AND", text: "all" },{ op: "OR",  text: "any" }],
+		operandTitle : "Click to select search operation.",
+		resetTitle : "Reset Search Value"
+	},
+	edit : {
+		addCaption: "Add Record",
+		editCaption: "Edit Record",
+		bSubmit: "Submit",
+		bCancel: "Cancel",
+		bClose: "Close",
+		saveData: "Data has been changed! Save changes?",
+		bYes : "Yes",
+		bNo : "No",
+		bExit : "Cancel",
+		msg: {
+			required:"Field is required",
+			number:"Please, enter valid number",
+			minValue:"value must be greater than or equal to ",
+			maxValue:"value must be less than or equal to",
+			email: "is not a valid e-mail",
+			integer: "Please, enter valid integer value",
+			date: "Please, enter valid date value",
+			url: "is not a valid URL. Prefix required ('http://' or 'https://')",
+			nodefined : " is not defined!",
+			novalue : " return value is required!",
+			customarray : "Custom function should return array!",
+			customfcheck : "Custom function should be present in case of custom checking!"
+			
+		}
+	},
+	view : {
+		caption: "View Record",
+		bClose: "Close"
+	},
+	del : {
+		caption: "Delete",
+		msg: "Delete selected record(s)?",
+		bSubmit: "Delete",
+		bCancel: "Cancel"
+	},
+	nav : {
+		edittext: "",
+		edittitle: "Edit selected row",
+		addtext:"",
+		addtitle: "Add new row",
+		deltext: "",
+		deltitle: "Delete selected row",
+		searchtext: "",
+		searchtitle: "Find records",
+		refreshtext: "",
+		refreshtitle: "Reload Grid",
+		alertcap: "Warning",
+		alerttext: "Please, select row",
+		viewtext: "",
+		viewtitle: "View selected row"
+	},
+	col : {
+		caption: "Select columns",
+		bSubmit: "Ok",
+		bCancel: "Cancel"
+	},
+	errors : {
+		errcap : "Error",
+		nourl : "No url is set",
+		norecords: "No records to process",
+		model : "Length of colNames <> colModel!"
+	},
+	formatter : {
+		integer : {thousandsSeparator: ",", defaultValue: '0'},
+		number : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, defaultValue: '0.00'},
+		currency : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, prefix: "", suffix:"", defaultValue: '0.00'},
+		date : {
+			dayNames:   [
+				"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat",
+				"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
+			],
+			monthNames: [
+				"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
+				"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
+			],
+			AmPm : ["am","pm","AM","PM"],
+			S: function (j) {return j < 11 || j > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((j - 1) % 10, 3)] : 'th';},
+			srcformat: 'Y-m-d',
+			newformat: 'n/j/Y',
+			parseRe : /[#%\\\/:_;.,\t\s-]/,
+			masks : {
+				// see http://php.net/manual/en/function.date.php for PHP format used in jqGrid
+				// and see http://docs.jquery.com/UI/Datepicker/formatDate
+				// and https://github.com/jquery/globalize#dates for alternative formats used frequently
+				// one can find on https://github.com/jquery/globalize/tree/master/lib/cultures many
+				// information about date, time, numbers and currency formats used in different countries
+				// one should just convert the information in PHP format
+				ISO8601Long:"Y-m-d H:i:s",
+				ISO8601Short:"Y-m-d",
+				// short date:
+				//    n - Numeric representation of a month, without leading zeros
+				//    j - Day of the month without leading zeros
+				//    Y - A full numeric representation of a year, 4 digits
+				// example: 3/1/2012 which means 1 March 2012
+				ShortDate: "n/j/Y", // in jQuery UI Datepicker: "M/d/yyyy"
+				// long date:
+				//    l - A full textual representation of the day of the week
+				//    F - A full textual representation of a month
+				//    d - Day of the month, 2 digits with leading zeros
+				//    Y - A full numeric representation of a year, 4 digits
+				LongDate: "l, F d, Y", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy"
+				// long date with long time:
+				//    l - A full textual representation of the day of the week
+				//    F - A full textual representation of a month
+				//    d - Day of the month, 2 digits with leading zeros
+				//    Y - A full numeric representation of a year, 4 digits
+				//    g - 12-hour format of an hour without leading zeros
+				//    i - Minutes with leading zeros
+				//    s - Seconds, with leading zeros
+				//    A - Uppercase Ante meridiem and Post meridiem (AM or PM)
+				FullDateTime: "l, F d, Y g:i:s A", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy h:mm:ss tt"
+				// month day:
+				//    F - A full textual representation of a month
+				//    d - Day of the month, 2 digits with leading zeros
+				MonthDay: "F d", // in jQuery UI Datepicker: "MMMM dd"
+				// short time (without seconds)
+				//    g - 12-hour format of an hour without leading zeros
+				//    i - Minutes with leading zeros
+				//    A - Uppercase Ante meridiem and Post meridiem (AM or PM)
+				ShortTime: "g:i A", // in jQuery UI Datepicker: "h:mm tt"
+				// long time (with seconds)
+				//    g - 12-hour format of an hour without leading zeros
+				//    i - Minutes with leading zeros
+				//    s - Seconds, with leading zeros
+				//    A - Uppercase Ante meridiem and Post meridiem (AM or PM)
+				LongTime: "g:i:s A", // in jQuery UI Datepicker: "h:mm:ss tt"
+				SortableDateTime: "Y-m-d\\TH:i:s",
+				UniversalSortableDateTime: "Y-m-d H:i:sO",
+				// month with year
+				//    Y - A full numeric representation of a year, 4 digits
+				//    F - A full textual representation of a month
+				YearMonth: "F, Y" // in jQuery UI Datepicker: "MMMM, yyyy"
+			},
+			reformatAfterEdit : false
+		},
+		baseLinkUrl: '',
+		showAction: '',
+		target: '',
+		checkbox : {disabled:true},
+		idName : 'id'
+	}
+});
+})(jQuery);


[25/50] [abbrv] incubator-nifi git commit: NIFI-27: - Starting to upgrade jQuery and jQuery UI.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.min.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.min.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.min.css
new file mode 100755
index 0000000..1aa929c
--- /dev/null
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.min.css
@@ -0,0 +1,7 @@
+/*! jQuery UI - v1.10.4 - 2014-12-11
+* http://jqueryui.com
+* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureE
 rror=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-re
 sizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-acc
 ordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-butt
 on-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{wid
 th:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;m
 argin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-grou
 p-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;lef
 t:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:none}.ui-menu .ui-menu{margin-top:-3px;position:abs
 olute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:normal}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-menu .ui-state-disabled{font-weight:normal;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overla
 y{background:url("images/animated-overlay.gif");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vert
 ical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-t
 abs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url("images/ui-bg_flat_75_ffffff_40x100.p
 ng") 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focu
 s a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a
 ,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-state-h
 over .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-positi
 on:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{
 background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -
 48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 
 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{backgro
 und-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128p
 x}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-ico
 n-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px
 }.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-
 position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-c
 orner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
\ No newline at end of file


[39/50] [abbrv] incubator-nifi git commit: NIFI-27: - Upgrading jQuery and jQuery UI. - Replacing all instances of Deferred.then with Deferred.done/fail due to API change introduced in 1.8. - Restoring line returns between public methods. - Upgrading jqu

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.js
deleted file mode 100755
index ecac757..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.js
+++ /dev/null
@@ -1,15008 +0,0 @@
-/*! jQuery UI - v1.10.4 - 2014-12-08
-* http://jqueryui.com
-* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-(function( $, undefined ) {
-
-var uuid = 0,
-	runiqueId = /^ui-id-\d+$/;
-
-// $.ui might exist from components with no dependencies, e.g., $.ui.position
-$.ui = $.ui || {};
-
-$.extend( $.ui, {
-	version: "1.10.4",
-
-	keyCode: {
-		BACKSPACE: 8,
-		COMMA: 188,
-		DELETE: 46,
-		DOWN: 40,
-		END: 35,
-		ENTER: 13,
-		ESCAPE: 27,
-		HOME: 36,
-		LEFT: 37,
-		NUMPAD_ADD: 107,
-		NUMPAD_DECIMAL: 110,
-		NUMPAD_DIVIDE: 111,
-		NUMPAD_ENTER: 108,
-		NUMPAD_MULTIPLY: 106,
-		NUMPAD_SUBTRACT: 109,
-		PAGE_DOWN: 34,
-		PAGE_UP: 33,
-		PERIOD: 190,
-		RIGHT: 39,
-		SPACE: 32,
-		TAB: 9,
-		UP: 38
-	}
-});
-
-// plugins
-$.fn.extend({
-	focus: (function( orig ) {
-		return function( delay, fn ) {
-			return typeof delay === "number" ?
-				this.each(function() {
-					var elem = this;
-					setTimeout(function() {
-						$( elem ).focus();
-						if ( fn ) {
-							fn.call( elem );
-						}
-					}, delay );
-				}) :
-				orig.apply( this, arguments );
-		};
-	})( $.fn.focus ),
-
-	scrollParent: function() {
-		var scrollParent;
-		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
-			scrollParent = this.parents().filter(function() {
-				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
-			}).eq(0);
-		} else {
-			scrollParent = this.parents().filter(function() {
-				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
-			}).eq(0);
-		}
-
-		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
-	},
-
-	zIndex: function( zIndex ) {
-		if ( zIndex !== undefined ) {
-			return this.css( "zIndex", zIndex );
-		}
-
-		if ( this.length ) {
-			var elem = $( this[ 0 ] ), position, value;
-			while ( elem.length && elem[ 0 ] !== document ) {
-				// Ignore z-index if position is set to a value where z-index is ignored by the browser
-				// This makes behavior of this function consistent across browsers
-				// WebKit always returns auto if the element is positioned
-				position = elem.css( "position" );
-				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
-					// IE returns 0 when zIndex is not specified
-					// other browsers return a string
-					// we ignore the case of nested elements with an explicit value of 0
-					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
-					value = parseInt( elem.css( "zIndex" ), 10 );
-					if ( !isNaN( value ) && value !== 0 ) {
-						return value;
-					}
-				}
-				elem = elem.parent();
-			}
-		}
-
-		return 0;
-	},
-
-	uniqueId: function() {
-		return this.each(function() {
-			if ( !this.id ) {
-				this.id = "ui-id-" + (++uuid);
-			}
-		});
-	},
-
-	removeUniqueId: function() {
-		return this.each(function() {
-			if ( runiqueId.test( this.id ) ) {
-				$( this ).removeAttr( "id" );
-			}
-		});
-	}
-});
-
-// selectors
-function focusable( element, isTabIndexNotNaN ) {
-	var map, mapName, img,
-		nodeName = element.nodeName.toLowerCase();
-	if ( "area" === nodeName ) {
-		map = element.parentNode;
-		mapName = map.name;
-		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
-			return false;
-		}
-		img = $( "img[usemap=#" + mapName + "]" )[0];
-		return !!img && visible( img );
-	}
-	return ( /input|select|textarea|button|object/.test( nodeName ) ?
-		!element.disabled :
-		"a" === nodeName ?
-			element.href || isTabIndexNotNaN :
-			isTabIndexNotNaN) &&
-		// the element and all of its ancestors must be visible
-		visible( element );
-}
-
-function visible( element ) {
-	return $.expr.filters.visible( element ) &&
-		!$( element ).parents().addBack().filter(function() {
-			return $.css( this, "visibility" ) === "hidden";
-		}).length;
-}
-
-$.extend( $.expr[ ":" ], {
-	data: $.expr.createPseudo ?
-		$.expr.createPseudo(function( dataName ) {
-			return function( elem ) {
-				return !!$.data( elem, dataName );
-			};
-		}) :
-		// support: jQuery <1.8
-		function( elem, i, match ) {
-			return !!$.data( elem, match[ 3 ] );
-		},
-
-	focusable: function( element ) {
-		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
-	},
-
-	tabbable: function( element ) {
-		var tabIndex = $.attr( element, "tabindex" ),
-			isTabIndexNaN = isNaN( tabIndex );
-		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
-	}
-});
-
-// support: jQuery <1.8
-if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
-	$.each( [ "Width", "Height" ], function( i, name ) {
-		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
-			type = name.toLowerCase(),
-			orig = {
-				innerWidth: $.fn.innerWidth,
-				innerHeight: $.fn.innerHeight,
-				outerWidth: $.fn.outerWidth,
-				outerHeight: $.fn.outerHeight
-			};
-
-		function reduce( elem, size, border, margin ) {
-			$.each( side, function() {
-				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
-				if ( border ) {
-					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
-				}
-				if ( margin ) {
-					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
-				}
-			});
-			return size;
-		}
-
-		$.fn[ "inner" + name ] = function( size ) {
-			if ( size === undefined ) {
-				return orig[ "inner" + name ].call( this );
-			}
-
-			return this.each(function() {
-				$( this ).css( type, reduce( this, size ) + "px" );
-			});
-		};
-
-		$.fn[ "outer" + name] = function( size, margin ) {
-			if ( typeof size !== "number" ) {
-				return orig[ "outer" + name ].call( this, size );
-			}
-
-			return this.each(function() {
-				$( this).css( type, reduce( this, size, true, margin ) + "px" );
-			});
-		};
-	});
-}
-
-// support: jQuery <1.8
-if ( !$.fn.addBack ) {
-	$.fn.addBack = function( selector ) {
-		return this.add( selector == null ?
-			this.prevObject : this.prevObject.filter( selector )
-		);
-	};
-}
-
-// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
-if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
-	$.fn.removeData = (function( removeData ) {
-		return function( key ) {
-			if ( arguments.length ) {
-				return removeData.call( this, $.camelCase( key ) );
-			} else {
-				return removeData.call( this );
-			}
-		};
-	})( $.fn.removeData );
-}
-
-
-
-
-
-// deprecated
-$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
-
-$.support.selectstart = "onselectstart" in document.createElement( "div" );
-$.fn.extend({
-	disableSelection: function() {
-		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
-			".ui-disableSelection", function( event ) {
-				event.preventDefault();
-			});
-	},
-
-	enableSelection: function() {
-		return this.unbind( ".ui-disableSelection" );
-	}
-});
-
-$.extend( $.ui, {
-	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
-	plugin: {
-		add: function( module, option, set ) {
-			var i,
-				proto = $.ui[ module ].prototype;
-			for ( i in set ) {
-				proto.plugins[ i ] = proto.plugins[ i ] || [];
-				proto.plugins[ i ].push( [ option, set[ i ] ] );
-			}
-		},
-		call: function( instance, name, args ) {
-			var i,
-				set = instance.plugins[ name ];
-			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
-				return;
-			}
-
-			for ( i = 0; i < set.length; i++ ) {
-				if ( instance.options[ set[ i ][ 0 ] ] ) {
-					set[ i ][ 1 ].apply( instance.element, args );
-				}
-			}
-		}
-	},
-
-	// only used by resizable
-	hasScroll: function( el, a ) {
-
-		//If overflow is hidden, the element might have extra content, but the user wants to hide it
-		if ( $( el ).css( "overflow" ) === "hidden") {
-			return false;
-		}
-
-		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
-			has = false;
-
-		if ( el[ scroll ] > 0 ) {
-			return true;
-		}
-
-		// TODO: determine which cases actually cause this to happen
-		// if the element doesn't have the scroll set, see if it's possible to
-		// set the scroll
-		el[ scroll ] = 1;
-		has = ( el[ scroll ] > 0 );
-		el[ scroll ] = 0;
-		return has;
-	}
-});
-
-})( jQuery );
-(function( $, undefined ) {
-
-var uuid = 0,
-	slice = Array.prototype.slice,
-	_cleanData = $.cleanData;
-$.cleanData = function( elems ) {
-	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-		try {
-			$( elem ).triggerHandler( "remove" );
-		// http://bugs.jquery.com/ticket/8235
-		} catch( e ) {}
-	}
-	_cleanData( elems );
-};
-
-$.widget = function( name, base, prototype ) {
-	var fullName, existingConstructor, constructor, basePrototype,
-		// proxiedPrototype allows the provided prototype to remain unmodified
-		// so that it can be used as a mixin for multiple widgets (#8876)
-		proxiedPrototype = {},
-		namespace = name.split( "." )[ 0 ];
-
-	name = name.split( "." )[ 1 ];
-	fullName = namespace + "-" + name;
-
-	if ( !prototype ) {
-		prototype = base;
-		base = $.Widget;
-	}
-
-	// create selector for plugin
-	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
-		return !!$.data( elem, fullName );
-	};
-
-	$[ namespace ] = $[ namespace ] || {};
-	existingConstructor = $[ namespace ][ name ];
-	constructor = $[ namespace ][ name ] = function( options, element ) {
-		// allow instantiation without "new" keyword
-		if ( !this._createWidget ) {
-			return new constructor( options, element );
-		}
-
-		// allow instantiation without initializing for simple inheritance
-		// must use "new" keyword (the code above always passes args)
-		if ( arguments.length ) {
-			this._createWidget( options, element );
-		}
-	};
-	// extend with the existing constructor to carry over any static properties
-	$.extend( constructor, existingConstructor, {
-		version: prototype.version,
-		// copy the object used to create the prototype in case we need to
-		// redefine the widget later
-		_proto: $.extend( {}, prototype ),
-		// track widgets that inherit from this widget in case this widget is
-		// redefined after a widget inherits from it
-		_childConstructors: []
-	});
-
-	basePrototype = new base();
-	// we need to make the options hash a property directly on the new instance
-	// otherwise we'll modify the options hash on the prototype that we're
-	// inheriting from
-	basePrototype.options = $.widget.extend( {}, basePrototype.options );
-	$.each( prototype, function( prop, value ) {
-		if ( !$.isFunction( value ) ) {
-			proxiedPrototype[ prop ] = value;
-			return;
-		}
-		proxiedPrototype[ prop ] = (function() {
-			var _super = function() {
-					return base.prototype[ prop ].apply( this, arguments );
-				},
-				_superApply = function( args ) {
-					return base.prototype[ prop ].apply( this, args );
-				};
-			return function() {
-				var __super = this._super,
-					__superApply = this._superApply,
-					returnValue;
-
-				this._super = _super;
-				this._superApply = _superApply;
-
-				returnValue = value.apply( this, arguments );
-
-				this._super = __super;
-				this._superApply = __superApply;
-
-				return returnValue;
-			};
-		})();
-	});
-	constructor.prototype = $.widget.extend( basePrototype, {
-		// TODO: remove support for widgetEventPrefix
-		// always use the name + a colon as the prefix, e.g., draggable:start
-		// don't prefix for widgets that aren't DOM-based
-		widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
-	}, proxiedPrototype, {
-		constructor: constructor,
-		namespace: namespace,
-		widgetName: name,
-		widgetFullName: fullName
-	});
-
-	// If this widget is being redefined then we need to find all widgets that
-	// are inheriting from it and redefine all of them so that they inherit from
-	// the new version of this widget. We're essentially trying to replace one
-	// level in the prototype chain.
-	if ( existingConstructor ) {
-		$.each( existingConstructor._childConstructors, function( i, child ) {
-			var childPrototype = child.prototype;
-
-			// redefine the child widget using the same prototype that was
-			// originally used, but inherit from the new version of the base
-			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
-		});
-		// remove the list of existing child constructors from the old constructor
-		// so the old child constructors can be garbage collected
-		delete existingConstructor._childConstructors;
-	} else {
-		base._childConstructors.push( constructor );
-	}
-
-	$.widget.bridge( name, constructor );
-};
-
-$.widget.extend = function( target ) {
-	var input = slice.call( arguments, 1 ),
-		inputIndex = 0,
-		inputLength = input.length,
-		key,
-		value;
-	for ( ; inputIndex < inputLength; inputIndex++ ) {
-		for ( key in input[ inputIndex ] ) {
-			value = input[ inputIndex ][ key ];
-			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
-				// Clone objects
-				if ( $.isPlainObject( value ) ) {
-					target[ key ] = $.isPlainObject( target[ key ] ) ?
-						$.widget.extend( {}, target[ key ], value ) :
-						// Don't extend strings, arrays, etc. with objects
-						$.widget.extend( {}, value );
-				// Copy everything else by reference
-				} else {
-					target[ key ] = value;
-				}
-			}
-		}
-	}
-	return target;
-};
-
-$.widget.bridge = function( name, object ) {
-	var fullName = object.prototype.widgetFullName || name;
-	$.fn[ name ] = function( options ) {
-		var isMethodCall = typeof options === "string",
-			args = slice.call( arguments, 1 ),
-			returnValue = this;
-
-		// allow multiple hashes to be passed on init
-		options = !isMethodCall && args.length ?
-			$.widget.extend.apply( null, [ options ].concat(args) ) :
-			options;
-
-		if ( isMethodCall ) {
-			this.each(function() {
-				var methodValue,
-					instance = $.data( this, fullName );
-				if ( !instance ) {
-					return $.error( "cannot call methods on " + name + " prior to initialization; " +
-						"attempted to call method '" + options + "'" );
-				}
-				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
-					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
-				}
-				methodValue = instance[ options ].apply( instance, args );
-				if ( methodValue !== instance && methodValue !== undefined ) {
-					returnValue = methodValue && methodValue.jquery ?
-						returnValue.pushStack( methodValue.get() ) :
-						methodValue;
-					return false;
-				}
-			});
-		} else {
-			this.each(function() {
-				var instance = $.data( this, fullName );
-				if ( instance ) {
-					instance.option( options || {} )._init();
-				} else {
-					$.data( this, fullName, new object( options, this ) );
-				}
-			});
-		}
-
-		return returnValue;
-	};
-};
-
-$.Widget = function( /* options, element */ ) {};
-$.Widget._childConstructors = [];
-
-$.Widget.prototype = {
-	widgetName: "widget",
-	widgetEventPrefix: "",
-	defaultElement: "<div>",
-	options: {
-		disabled: false,
-
-		// callbacks
-		create: null
-	},
-	_createWidget: function( options, element ) {
-		element = $( element || this.defaultElement || this )[ 0 ];
-		this.element = $( element );
-		this.uuid = uuid++;
-		this.eventNamespace = "." + this.widgetName + this.uuid;
-		this.options = $.widget.extend( {},
-			this.options,
-			this._getCreateOptions(),
-			options );
-
-		this.bindings = $();
-		this.hoverable = $();
-		this.focusable = $();
-
-		if ( element !== this ) {
-			$.data( element, this.widgetFullName, this );
-			this._on( true, this.element, {
-				remove: function( event ) {
-					if ( event.target === element ) {
-						this.destroy();
-					}
-				}
-			});
-			this.document = $( element.style ?
-				// element within the document
-				element.ownerDocument :
-				// element is window or document
-				element.document || element );
-			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
-		}
-
-		this._create();
-		this._trigger( "create", null, this._getCreateEventData() );
-		this._init();
-	},
-	_getCreateOptions: $.noop,
-	_getCreateEventData: $.noop,
-	_create: $.noop,
-	_init: $.noop,
-
-	destroy: function() {
-		this._destroy();
-		// we can probably remove the unbind calls in 2.0
-		// all event bindings should go through this._on()
-		this.element
-			.unbind( this.eventNamespace )
-			// 1.9 BC for #7810
-			// TODO remove dual storage
-			.removeData( this.widgetName )
-			.removeData( this.widgetFullName )
-			// support: jquery <1.6.3
-			// http://bugs.jquery.com/ticket/9413
-			.removeData( $.camelCase( this.widgetFullName ) );
-		this.widget()
-			.unbind( this.eventNamespace )
-			.removeAttr( "aria-disabled" )
-			.removeClass(
-				this.widgetFullName + "-disabled " +
-				"ui-state-disabled" );
-
-		// clean up events and states
-		this.bindings.unbind( this.eventNamespace );
-		this.hoverable.removeClass( "ui-state-hover" );
-		this.focusable.removeClass( "ui-state-focus" );
-	},
-	_destroy: $.noop,
-
-	widget: function() {
-		return this.element;
-	},
-
-	option: function( key, value ) {
-		var options = key,
-			parts,
-			curOption,
-			i;
-
-		if ( arguments.length === 0 ) {
-			// don't return a reference to the internal hash
-			return $.widget.extend( {}, this.options );
-		}
-
-		if ( typeof key === "string" ) {
-			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
-			options = {};
-			parts = key.split( "." );
-			key = parts.shift();
-			if ( parts.length ) {
-				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
-				for ( i = 0; i < parts.length - 1; i++ ) {
-					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
-					curOption = curOption[ parts[ i ] ];
-				}
-				key = parts.pop();
-				if ( arguments.length === 1 ) {
-					return curOption[ key ] === undefined ? null : curOption[ key ];
-				}
-				curOption[ key ] = value;
-			} else {
-				if ( arguments.length === 1 ) {
-					return this.options[ key ] === undefined ? null : this.options[ key ];
-				}
-				options[ key ] = value;
-			}
-		}
-
-		this._setOptions( options );
-
-		return this;
-	},
-	_setOptions: function( options ) {
-		var key;
-
-		for ( key in options ) {
-			this._setOption( key, options[ key ] );
-		}
-
-		return this;
-	},
-	_setOption: function( key, value ) {
-		this.options[ key ] = value;
-
-		if ( key === "disabled" ) {
-			this.widget()
-				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
-				.attr( "aria-disabled", value );
-			this.hoverable.removeClass( "ui-state-hover" );
-			this.focusable.removeClass( "ui-state-focus" );
-		}
-
-		return this;
-	},
-
-	enable: function() {
-		return this._setOption( "disabled", false );
-	},
-	disable: function() {
-		return this._setOption( "disabled", true );
-	},
-
-	_on: function( suppressDisabledCheck, element, handlers ) {
-		var delegateElement,
-			instance = this;
-
-		// no suppressDisabledCheck flag, shuffle arguments
-		if ( typeof suppressDisabledCheck !== "boolean" ) {
-			handlers = element;
-			element = suppressDisabledCheck;
-			suppressDisabledCheck = false;
-		}
-
-		// no element argument, shuffle and use this.element
-		if ( !handlers ) {
-			handlers = element;
-			element = this.element;
-			delegateElement = this.widget();
-		} else {
-			// accept selectors, DOM elements
-			element = delegateElement = $( element );
-			this.bindings = this.bindings.add( element );
-		}
-
-		$.each( handlers, function( event, handler ) {
-			function handlerProxy() {
-				// allow widgets to customize the disabled handling
-				// - disabled as an array instead of boolean
-				// - disabled class as method for disabling individual parts
-				if ( !suppressDisabledCheck &&
-						( instance.options.disabled === true ||
-							$( this ).hasClass( "ui-state-disabled" ) ) ) {
-					return;
-				}
-				return ( typeof handler === "string" ? instance[ handler ] : handler )
-					.apply( instance, arguments );
-			}
-
-			// copy the guid so direct unbinding works
-			if ( typeof handler !== "string" ) {
-				handlerProxy.guid = handler.guid =
-					handler.guid || handlerProxy.guid || $.guid++;
-			}
-
-			var match = event.match( /^(\w+)\s*(.*)$/ ),
-				eventName = match[1] + instance.eventNamespace,
-				selector = match[2];
-			if ( selector ) {
-				delegateElement.delegate( selector, eventName, handlerProxy );
-			} else {
-				element.bind( eventName, handlerProxy );
-			}
-		});
-	},
-
-	_off: function( element, eventName ) {
-		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
-		element.unbind( eventName ).undelegate( eventName );
-	},
-
-	_delay: function( handler, delay ) {
-		function handlerProxy() {
-			return ( typeof handler === "string" ? instance[ handler ] : handler )
-				.apply( instance, arguments );
-		}
-		var instance = this;
-		return setTimeout( handlerProxy, delay || 0 );
-	},
-
-	_hoverable: function( element ) {
-		this.hoverable = this.hoverable.add( element );
-		this._on( element, {
-			mouseenter: function( event ) {
-				$( event.currentTarget ).addClass( "ui-state-hover" );
-			},
-			mouseleave: function( event ) {
-				$( event.currentTarget ).removeClass( "ui-state-hover" );
-			}
-		});
-	},
-
-	_focusable: function( element ) {
-		this.focusable = this.focusable.add( element );
-		this._on( element, {
-			focusin: function( event ) {
-				$( event.currentTarget ).addClass( "ui-state-focus" );
-			},
-			focusout: function( event ) {
-				$( event.currentTarget ).removeClass( "ui-state-focus" );
-			}
-		});
-	},
-
-	_trigger: function( type, event, data ) {
-		var prop, orig,
-			callback = this.options[ type ];
-
-		data = data || {};
-		event = $.Event( event );
-		event.type = ( type === this.widgetEventPrefix ?
-			type :
-			this.widgetEventPrefix + type ).toLowerCase();
-		// the original event may come from any element
-		// so we need to reset the target on the new event
-		event.target = this.element[ 0 ];
-
-		// copy original event properties over to the new event
-		orig = event.originalEvent;
-		if ( orig ) {
-			for ( prop in orig ) {
-				if ( !( prop in event ) ) {
-					event[ prop ] = orig[ prop ];
-				}
-			}
-		}
-
-		this.element.trigger( event, data );
-		return !( $.isFunction( callback ) &&
-			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
-			event.isDefaultPrevented() );
-	}
-};
-
-$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
-	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
-		if ( typeof options === "string" ) {
-			options = { effect: options };
-		}
-		var hasOptions,
-			effectName = !options ?
-				method :
-				options === true || typeof options === "number" ?
-					defaultEffect :
-					options.effect || defaultEffect;
-		options = options || {};
-		if ( typeof options === "number" ) {
-			options = { duration: options };
-		}
-		hasOptions = !$.isEmptyObject( options );
-		options.complete = callback;
-		if ( options.delay ) {
-			element.delay( options.delay );
-		}
-		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
-			element[ method ]( options );
-		} else if ( effectName !== method && element[ effectName ] ) {
-			element[ effectName ]( options.duration, options.easing, callback );
-		} else {
-			element.queue(function( next ) {
-				$( this )[ method ]();
-				if ( callback ) {
-					callback.call( element[ 0 ] );
-				}
-				next();
-			});
-		}
-	};
-});
-
-})( jQuery );
-(function( $, undefined ) {
-
-var mouseHandled = false;
-$( document ).mouseup( function() {
-	mouseHandled = false;
-});
-
-$.widget("ui.mouse", {
-	version: "1.10.4",
-	options: {
-		cancel: "input,textarea,button,select,option",
-		distance: 1,
-		delay: 0
-	},
-	_mouseInit: function() {
-		var that = this;
-
-		this.element
-			.bind("mousedown."+this.widgetName, function(event) {
-				return that._mouseDown(event);
-			})
-			.bind("click."+this.widgetName, function(event) {
-				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
-					$.removeData(event.target, that.widgetName + ".preventClickEvent");
-					event.stopImmediatePropagation();
-					return false;
-				}
-			});
-
-		this.started = false;
-	},
-
-	// TODO: make sure destroying one instance of mouse doesn't mess with
-	// other instances of mouse
-	_mouseDestroy: function() {
-		this.element.unbind("."+this.widgetName);
-		if ( this._mouseMoveDelegate ) {
-			$(document)
-				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
-				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
-		}
-	},
-
-	_mouseDown: function(event) {
-		// don't let more than one widget handle mouseStart
-		if( mouseHandled ) { return; }
-
-		// we may have missed mouseup (out of window)
-		(this._mouseStarted && this._mouseUp(event));
-
-		this._mouseDownEvent = event;
-
-		var that = this,
-			btnIsLeft = (event.which === 1),
-			// event.target.nodeName works around a bug in IE 8 with
-			// disabled inputs (#7620)
-			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
-		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
-			return true;
-		}
-
-		this.mouseDelayMet = !this.options.delay;
-		if (!this.mouseDelayMet) {
-			this._mouseDelayTimer = setTimeout(function() {
-				that.mouseDelayMet = true;
-			}, this.options.delay);
-		}
-
-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
-			this._mouseStarted = (this._mouseStart(event) !== false);
-			if (!this._mouseStarted) {
-				event.preventDefault();
-				return true;
-			}
-		}
-
-		// Click event may never have fired (Gecko & Opera)
-		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
-			$.removeData(event.target, this.widgetName + ".preventClickEvent");
-		}
-
-		// these delegates are required to keep context
-		this._mouseMoveDelegate = function(event) {
-			return that._mouseMove(event);
-		};
-		this._mouseUpDelegate = function(event) {
-			return that._mouseUp(event);
-		};
-		$(document)
-			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
-			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);
-
-		event.preventDefault();
-
-		mouseHandled = true;
-		return true;
-	},
-
-	_mouseMove: function(event) {
-		// IE mouseup check - mouseup happened when mouse was out of window
-		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
-			return this._mouseUp(event);
-		}
-
-		if (this._mouseStarted) {
-			this._mouseDrag(event);
-			return event.preventDefault();
-		}
-
-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
-			this._mouseStarted =
-				(this._mouseStart(this._mouseDownEvent, event) !== false);
-			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
-		}
-
-		return !this._mouseStarted;
-	},
-
-	_mouseUp: function(event) {
-		$(document)
-			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
-			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
-
-		if (this._mouseStarted) {
-			this._mouseStarted = false;
-
-			if (event.target === this._mouseDownEvent.target) {
-				$.data(event.target, this.widgetName + ".preventClickEvent", true);
-			}
-
-			this._mouseStop(event);
-		}
-
-		return false;
-	},
-
-	_mouseDistanceMet: function(event) {
-		return (Math.max(
-				Math.abs(this._mouseDownEvent.pageX - event.pageX),
-				Math.abs(this._mouseDownEvent.pageY - event.pageY)
-			) >= this.options.distance
-		);
-	},
-
-	_mouseDelayMet: function(/* event */) {
-		return this.mouseDelayMet;
-	},
-
-	// These are placeholder methods, to be overriden by extending plugin
-	_mouseStart: function(/* event */) {},
-	_mouseDrag: function(/* event */) {},
-	_mouseStop: function(/* event */) {},
-	_mouseCapture: function(/* event */) { return true; }
-});
-
-})(jQuery);
-(function( $, undefined ) {
-
-$.ui = $.ui || {};
-
-var cachedScrollbarWidth,
-	max = Math.max,
-	abs = Math.abs,
-	round = Math.round,
-	rhorizontal = /left|center|right/,
-	rvertical = /top|center|bottom/,
-	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
-	rposition = /^\w+/,
-	rpercent = /%$/,
-	_position = $.fn.position;
-
-function getOffsets( offsets, width, height ) {
-	return [
-		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
-		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
-	];
-}
-
-function parseCss( element, property ) {
-	return parseInt( $.css( element, property ), 10 ) || 0;
-}
-
-function getDimensions( elem ) {
-	var raw = elem[0];
-	if ( raw.nodeType === 9 ) {
-		return {
-			width: elem.width(),
-			height: elem.height(),
-			offset: { top: 0, left: 0 }
-		};
-	}
-	if ( $.isWindow( raw ) ) {
-		return {
-			width: elem.width(),
-			height: elem.height(),
-			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
-		};
-	}
-	if ( raw.preventDefault ) {
-		return {
-			width: 0,
-			height: 0,
-			offset: { top: raw.pageY, left: raw.pageX }
-		};
-	}
-	return {
-		width: elem.outerWidth(),
-		height: elem.outerHeight(),
-		offset: elem.offset()
-	};
-}
-
-$.position = {
-	scrollbarWidth: function() {
-		if ( cachedScrollbarWidth !== undefined ) {
-			return cachedScrollbarWidth;
-		}
-		var w1, w2,
-			div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
-			innerDiv = div.children()[0];
-
-		$( "body" ).append( div );
-		w1 = innerDiv.offsetWidth;
-		div.css( "overflow", "scroll" );
-
-		w2 = innerDiv.offsetWidth;
-
-		if ( w1 === w2 ) {
-			w2 = div[0].clientWidth;
-		}
-
-		div.remove();
-
-		return (cachedScrollbarWidth = w1 - w2);
-	},
-	getScrollInfo: function( within ) {
-		var overflowX = within.isWindow || within.isDocument ? "" :
-				within.element.css( "overflow-x" ),
-			overflowY = within.isWindow || within.isDocument ? "" :
-				within.element.css( "overflow-y" ),
-			hasOverflowX = overflowX === "scroll" ||
-				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
-			hasOverflowY = overflowY === "scroll" ||
-				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
-		return {
-			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
-			height: hasOverflowX ? $.position.scrollbarWidth() : 0
-		};
-	},
-	getWithinInfo: function( element ) {
-		var withinElement = $( element || window ),
-			isWindow = $.isWindow( withinElement[0] ),
-			isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;
-		return {
-			element: withinElement,
-			isWindow: isWindow,
-			isDocument: isDocument,
-			offset: withinElement.offset() || { left: 0, top: 0 },
-			scrollLeft: withinElement.scrollLeft(),
-			scrollTop: withinElement.scrollTop(),
-			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
-			height: isWindow ? withinElement.height() : withinElement.outerHeight()
-		};
-	}
-};
-
-$.fn.position = function( options ) {
-	if ( !options || !options.of ) {
-		return _position.apply( this, arguments );
-	}
-
-	// make a copy, we don't want to modify arguments
-	options = $.extend( {}, options );
-
-	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
-		target = $( options.of ),
-		within = $.position.getWithinInfo( options.within ),
-		scrollInfo = $.position.getScrollInfo( within ),
-		collision = ( options.collision || "flip" ).split( " " ),
-		offsets = {};
-
-	dimensions = getDimensions( target );
-	if ( target[0].preventDefault ) {
-		// force left top to allow flipping
-		options.at = "left top";
-	}
-	targetWidth = dimensions.width;
-	targetHeight = dimensions.height;
-	targetOffset = dimensions.offset;
-	// clone to reuse original targetOffset later
-	basePosition = $.extend( {}, targetOffset );
-
-	// force my and at to have valid horizontal and vertical positions
-	// if a value is missing or invalid, it will be converted to center
-	$.each( [ "my", "at" ], function() {
-		var pos = ( options[ this ] || "" ).split( " " ),
-			horizontalOffset,
-			verticalOffset;
-
-		if ( pos.length === 1) {
-			pos = rhorizontal.test( pos[ 0 ] ) ?
-				pos.concat( [ "center" ] ) :
-				rvertical.test( pos[ 0 ] ) ?
-					[ "center" ].concat( pos ) :
-					[ "center", "center" ];
-		}
-		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
-		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
-
-		// calculate offsets
-		horizontalOffset = roffset.exec( pos[ 0 ] );
-		verticalOffset = roffset.exec( pos[ 1 ] );
-		offsets[ this ] = [
-			horizontalOffset ? horizontalOffset[ 0 ] : 0,
-			verticalOffset ? verticalOffset[ 0 ] : 0
-		];
-
-		// reduce to just the positions without the offsets
-		options[ this ] = [
-			rposition.exec( pos[ 0 ] )[ 0 ],
-			rposition.exec( pos[ 1 ] )[ 0 ]
-		];
-	});
-
-	// normalize collision option
-	if ( collision.length === 1 ) {
-		collision[ 1 ] = collision[ 0 ];
-	}
-
-	if ( options.at[ 0 ] === "right" ) {
-		basePosition.left += targetWidth;
-	} else if ( options.at[ 0 ] === "center" ) {
-		basePosition.left += targetWidth / 2;
-	}
-
-	if ( options.at[ 1 ] === "bottom" ) {
-		basePosition.top += targetHeight;
-	} else if ( options.at[ 1 ] === "center" ) {
-		basePosition.top += targetHeight / 2;
-	}
-
-	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
-	basePosition.left += atOffset[ 0 ];
-	basePosition.top += atOffset[ 1 ];
-
-	return this.each(function() {
-		var collisionPosition, using,
-			elem = $( this ),
-			elemWidth = elem.outerWidth(),
-			elemHeight = elem.outerHeight(),
-			marginLeft = parseCss( this, "marginLeft" ),
-			marginTop = parseCss( this, "marginTop" ),
-			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
-			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
-			position = $.extend( {}, basePosition ),
-			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
-
-		if ( options.my[ 0 ] === "right" ) {
-			position.left -= elemWidth;
-		} else if ( options.my[ 0 ] === "center" ) {
-			position.left -= elemWidth / 2;
-		}
-
-		if ( options.my[ 1 ] === "bottom" ) {
-			position.top -= elemHeight;
-		} else if ( options.my[ 1 ] === "center" ) {
-			position.top -= elemHeight / 2;
-		}
-
-		position.left += myOffset[ 0 ];
-		position.top += myOffset[ 1 ];
-
-		// if the browser doesn't support fractions, then round for consistent results
-		if ( !$.support.offsetFractions ) {
-			position.left = round( position.left );
-			position.top = round( position.top );
-		}
-
-		collisionPosition = {
-			marginLeft: marginLeft,
-			marginTop: marginTop
-		};
-
-		$.each( [ "left", "top" ], function( i, dir ) {
-			if ( $.ui.position[ collision[ i ] ] ) {
-				$.ui.position[ collision[ i ] ][ dir ]( position, {
-					targetWidth: targetWidth,
-					targetHeight: targetHeight,
-					elemWidth: elemWidth,
-					elemHeight: elemHeight,
-					collisionPosition: collisionPosition,
-					collisionWidth: collisionWidth,
-					collisionHeight: collisionHeight,
-					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
-					my: options.my,
-					at: options.at,
-					within: within,
-					elem : elem
-				});
-			}
-		});
-
-		if ( options.using ) {
-			// adds feedback as second argument to using callback, if present
-			using = function( props ) {
-				var left = targetOffset.left - position.left,
-					right = left + targetWidth - elemWidth,
-					top = targetOffset.top - position.top,
-					bottom = top + targetHeight - elemHeight,
-					feedback = {
-						target: {
-							element: target,
-							left: targetOffset.left,
-							top: targetOffset.top,
-							width: targetWidth,
-							height: targetHeight
-						},
-						element: {
-							element: elem,
-							left: position.left,
-							top: position.top,
-							width: elemWidth,
-							height: elemHeight
-						},
-						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
-						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
-					};
-				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
-					feedback.horizontal = "center";
-				}
-				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
-					feedback.vertical = "middle";
-				}
-				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
-					feedback.important = "horizontal";
-				} else {
-					feedback.important = "vertical";
-				}
-				options.using.call( this, props, feedback );
-			};
-		}
-
-		elem.offset( $.extend( position, { using: using } ) );
-	});
-};
-
-$.ui.position = {
-	fit: {
-		left: function( position, data ) {
-			var within = data.within,
-				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
-				outerWidth = within.width,
-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
-				overLeft = withinOffset - collisionPosLeft,
-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
-				newOverRight;
-
-			// element is wider than within
-			if ( data.collisionWidth > outerWidth ) {
-				// element is initially over the left side of within
-				if ( overLeft > 0 && overRight <= 0 ) {
-					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
-					position.left += overLeft - newOverRight;
-				// element is initially over right side of within
-				} else if ( overRight > 0 && overLeft <= 0 ) {
-					position.left = withinOffset;
-				// element is initially over both left and right sides of within
-				} else {
-					if ( overLeft > overRight ) {
-						position.left = withinOffset + outerWidth - data.collisionWidth;
-					} else {
-						position.left = withinOffset;
-					}
-				}
-			// too far left -> align with left edge
-			} else if ( overLeft > 0 ) {
-				position.left += overLeft;
-			// too far right -> align with right edge
-			} else if ( overRight > 0 ) {
-				position.left -= overRight;
-			// adjust based on position and margin
-			} else {
-				position.left = max( position.left - collisionPosLeft, position.left );
-			}
-		},
-		top: function( position, data ) {
-			var within = data.within,
-				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
-				outerHeight = data.within.height,
-				collisionPosTop = position.top - data.collisionPosition.marginTop,
-				overTop = withinOffset - collisionPosTop,
-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
-				newOverBottom;
-
-			// element is taller than within
-			if ( data.collisionHeight > outerHeight ) {
-				// element is initially over the top of within
-				if ( overTop > 0 && overBottom <= 0 ) {
-					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
-					position.top += overTop - newOverBottom;
-				// element is initially over bottom of within
-				} else if ( overBottom > 0 && overTop <= 0 ) {
-					position.top = withinOffset;
-				// element is initially over both top and bottom of within
-				} else {
-					if ( overTop > overBottom ) {
-						position.top = withinOffset + outerHeight - data.collisionHeight;
-					} else {
-						position.top = withinOffset;
-					}
-				}
-			// too far up -> align with top
-			} else if ( overTop > 0 ) {
-				position.top += overTop;
-			// too far down -> align with bottom edge
-			} else if ( overBottom > 0 ) {
-				position.top -= overBottom;
-			// adjust based on position and margin
-			} else {
-				position.top = max( position.top - collisionPosTop, position.top );
-			}
-		}
-	},
-	flip: {
-		left: function( position, data ) {
-			var within = data.within,
-				withinOffset = within.offset.left + within.scrollLeft,
-				outerWidth = within.width,
-				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
-				overLeft = collisionPosLeft - offsetLeft,
-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
-				myOffset = data.my[ 0 ] === "left" ?
-					-data.elemWidth :
-					data.my[ 0 ] === "right" ?
-						data.elemWidth :
-						0,
-				atOffset = data.at[ 0 ] === "left" ?
-					data.targetWidth :
-					data.at[ 0 ] === "right" ?
-						-data.targetWidth :
-						0,
-				offset = -2 * data.offset[ 0 ],
-				newOverRight,
-				newOverLeft;
-
-			if ( overLeft < 0 ) {
-				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
-				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
-					position.left += myOffset + atOffset + offset;
-				}
-			}
-			else if ( overRight > 0 ) {
-				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
-				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
-					position.left += myOffset + atOffset + offset;
-				}
-			}
-		},
-		top: function( position, data ) {
-			var within = data.within,
-				withinOffset = within.offset.top + within.scrollTop,
-				outerHeight = within.height,
-				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
-				collisionPosTop = position.top - data.collisionPosition.marginTop,
-				overTop = collisionPosTop - offsetTop,
-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
-				top = data.my[ 1 ] === "top",
-				myOffset = top ?
-					-data.elemHeight :
-					data.my[ 1 ] === "bottom" ?
-						data.elemHeight :
-						0,
-				atOffset = data.at[ 1 ] === "top" ?
-					data.targetHeight :
-					data.at[ 1 ] === "bottom" ?
-						-data.targetHeight :
-						0,
-				offset = -2 * data.offset[ 1 ],
-				newOverTop,
-				newOverBottom;
-			if ( overTop < 0 ) {
-				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
-				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
-					position.top += myOffset + atOffset + offset;
-				}
-			}
-			else if ( overBottom > 0 ) {
-				newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
-				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
-					position.top += myOffset + atOffset + offset;
-				}
-			}
-		}
-	},
-	flipfit: {
-		left: function() {
-			$.ui.position.flip.left.apply( this, arguments );
-			$.ui.position.fit.left.apply( this, arguments );
-		},
-		top: function() {
-			$.ui.position.flip.top.apply( this, arguments );
-			$.ui.position.fit.top.apply( this, arguments );
-		}
-	}
-};
-
-// fraction support test
-(function () {
-	var testElement, testElementParent, testElementStyle, offsetLeft, i,
-		body = document.getElementsByTagName( "body" )[ 0 ],
-		div = document.createElement( "div" );
-
-	//Create a "fake body" for testing based on method used in jQuery.support
-	testElement = document.createElement( body ? "div" : "body" );
-	testElementStyle = {
-		visibility: "hidden",
-		width: 0,
-		height: 0,
-		border: 0,
-		margin: 0,
-		background: "none"
-	};
-	if ( body ) {
-		$.extend( testElementStyle, {
-			position: "absolute",
-			left: "-1000px",
-			top: "-1000px"
-		});
-	}
-	for ( i in testElementStyle ) {
-		testElement.style[ i ] = testElementStyle[ i ];
-	}
-	testElement.appendChild( div );
-	testElementParent = body || document.documentElement;
-	testElementParent.insertBefore( testElement, testElementParent.firstChild );
-
-	div.style.cssText = "position: absolute; left: 10.7432222px;";
-
-	offsetLeft = $( div ).offset().left;
-	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
-
-	testElement.innerHTML = "";
-	testElementParent.removeChild( testElement );
-})();
-
-}( jQuery ) );
-(function( $, undefined ) {
-
-$.widget("ui.draggable", $.ui.mouse, {
-	version: "1.10.4",
-	widgetEventPrefix: "drag",
-	options: {
-		addClasses: true,
-		appendTo: "parent",
-		axis: false,
-		connectToSortable: false,
-		containment: false,
-		cursor: "auto",
-		cursorAt: false,
-		grid: false,
-		handle: false,
-		helper: "original",
-		iframeFix: false,
-		opacity: false,
-		refreshPositions: false,
-		revert: false,
-		revertDuration: 500,
-		scope: "default",
-		scroll: true,
-		scrollSensitivity: 20,
-		scrollSpeed: 20,
-		snap: false,
-		snapMode: "both",
-		snapTolerance: 20,
-		stack: false,
-		zIndex: false,
-
-		// callbacks
-		drag: null,
-		start: null,
-		stop: null
-	},
-	_create: function() {
-
-		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
-			this.element[0].style.position = "relative";
-		}
-		if (this.options.addClasses){
-			this.element.addClass("ui-draggable");
-		}
-		if (this.options.disabled){
-			this.element.addClass("ui-draggable-disabled");
-		}
-
-		this._mouseInit();
-
-	},
-
-	_destroy: function() {
-		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
-		this._mouseDestroy();
-	},
-
-	_mouseCapture: function(event) {
-
-		var o = this.options;
-
-		// among others, prevent a drag on a resizable-handle
-		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
-			return false;
-		}
-
-		//Quit if we're not on a valid handle
-		this.handle = this._getHandle(event);
-		if (!this.handle) {
-			return false;
-		}
-
-		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
-			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
-			.css({
-				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
-				position: "absolute", opacity: "0.001", zIndex: 1000
-			})
-			.css($(this).offset())
-			.appendTo("body");
-		});
-
-		return true;
-
-	},
-
-	_mouseStart: function(event) {
-
-		var o = this.options;
-
-		//Create and append the visible helper
-		this.helper = this._createHelper(event);
-
-		this.helper.addClass("ui-draggable-dragging");
-
-		//Cache the helper size
-		this._cacheHelperProportions();
-
-		//If ddmanager is used for droppables, set the global draggable
-		if($.ui.ddmanager) {
-			$.ui.ddmanager.current = this;
-		}
-
-		/*
-		 * - Position generation -
-		 * This block generates everything position related - it's the core of draggables.
-		 */
-
-		//Cache the margins of the original element
-		this._cacheMargins();
-
-		//Store the helper's css position
-		this.cssPosition = this.helper.css( "position" );
-		this.scrollParent = this.helper.scrollParent();
-		this.offsetParent = this.helper.offsetParent();
-		this.offsetParentCssPosition = this.offsetParent.css( "position" );
-
-		//The element's absolute position on the page minus margins
-		this.offset = this.positionAbs = this.element.offset();
-		this.offset = {
-			top: this.offset.top - this.margins.top,
-			left: this.offset.left - this.margins.left
-		};
-
-		//Reset scroll cache
-		this.offset.scroll = false;
-
-		$.extend(this.offset, {
-			click: { //Where the click happened, relative to the element
-				left: event.pageX - this.offset.left,
-				top: event.pageY - this.offset.top
-			},
-			parent: this._getParentOffset(),
-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
-		});
-
-		//Generate the original position
-		this.originalPosition = this.position = this._generatePosition(event);
-		this.originalPageX = event.pageX;
-		this.originalPageY = event.pageY;
-
-		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
-
-		//Set a containment if given in the options
-		this._setContainment();
-
-		//Trigger event + callbacks
-		if(this._trigger("start", event) === false) {
-			this._clear();
-			return false;
-		}
-
-		//Recache the helper size
-		this._cacheHelperProportions();
-
-		//Prepare the droppable offsets
-		if ($.ui.ddmanager && !o.dropBehaviour) {
-			$.ui.ddmanager.prepareOffsets(this, event);
-		}
-
-
-		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
-
-		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
-		if ( $.ui.ddmanager ) {
-			$.ui.ddmanager.dragStart(this, event);
-		}
-
-		return true;
-	},
-
-	_mouseDrag: function(event, noPropagation) {
-		// reset any necessary cached properties (see #5009)
-		if ( this.offsetParentCssPosition === "fixed" ) {
-			this.offset.parent = this._getParentOffset();
-		}
-
-		//Compute the helpers position
-		this.position = this._generatePosition(event);
-		this.positionAbs = this._convertPositionTo("absolute");
-
-		//Call plugins and callbacks and use the resulting position if something is returned
-		if (!noPropagation) {
-			var ui = this._uiHash();
-			if(this._trigger("drag", event, ui) === false) {
-				this._mouseUp({});
-				return false;
-			}
-			this.position = ui.position;
-		}
-
-		if(!this.options.axis || this.options.axis !== "y") {
-			this.helper[0].style.left = this.position.left+"px";
-		}
-		if(!this.options.axis || this.options.axis !== "x") {
-			this.helper[0].style.top = this.position.top+"px";
-		}
-		if($.ui.ddmanager) {
-			$.ui.ddmanager.drag(this, event);
-		}
-
-		return false;
-	},
-
-	_mouseStop: function(event) {
-
-		//If we are using droppables, inform the manager about the drop
-		var that = this,
-			dropped = false;
-		if ($.ui.ddmanager && !this.options.dropBehaviour) {
-			dropped = $.ui.ddmanager.drop(this, event);
-		}
-
-		//if a drop comes from outside (a sortable)
-		if(this.dropped) {
-			dropped = this.dropped;
-			this.dropped = false;
-		}
-
-		//if the original element is no longer in the DOM don't bother to continue (see #8269)
-		if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
-			return false;
-		}
-
-		if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
-			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
-				if(that._trigger("stop", event) !== false) {
-					that._clear();
-				}
-			});
-		} else {
-			if(this._trigger("stop", event) !== false) {
-				this._clear();
-			}
-		}
-
-		return false;
-	},
-
-	_mouseUp: function(event) {
-		//Remove frame helpers
-		$("div.ui-draggable-iframeFix").each(function() {
-			this.parentNode.removeChild(this);
-		});
-
-		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
-		if( $.ui.ddmanager ) {
-			$.ui.ddmanager.dragStop(this, event);
-		}
-
-		return $.ui.mouse.prototype._mouseUp.call(this, event);
-	},
-
-	cancel: function() {
-
-		if(this.helper.is(".ui-draggable-dragging")) {
-			this._mouseUp({});
-		} else {
-			this._clear();
-		}
-
-		return this;
-
-	},
-
-	_getHandle: function(event) {
-		return this.options.handle ?
-			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
-			true;
-	},
-
-	_createHelper: function(event) {
-
-		var o = this.options,
-			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
-
-		if(!helper.parents("body").length) {
-			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
-		}
-
-		if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
-			helper.css("position", "absolute");
-		}
-
-		return helper;
-
-	},
-
-	_adjustOffsetFromHelper: function(obj) {
-		if (typeof obj === "string") {
-			obj = obj.split(" ");
-		}
-		if ($.isArray(obj)) {
-			obj = {left: +obj[0], top: +obj[1] || 0};
-		}
-		if ("left" in obj) {
-			this.offset.click.left = obj.left + this.margins.left;
-		}
-		if ("right" in obj) {
-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
-		}
-		if ("top" in obj) {
-			this.offset.click.top = obj.top + this.margins.top;
-		}
-		if ("bottom" in obj) {
-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
-		}
-	},
-
-	_getParentOffset: function() {
-
-		//Get the offsetParent and cache its position
-		var po = this.offsetParent.offset();
-
-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
-		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
-			po.left += this.scrollParent.scrollLeft();
-			po.top += this.scrollParent.scrollTop();
-		}
-
-		//This needs to be actually done for all browsers, since pageX/pageY includes this information
-		//Ugly IE fix
-		if((this.offsetParent[0] === document.body) ||
-			(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
-			po = { top: 0, left: 0 };
-		}
-
-		return {
-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
-		};
-
-	},
-
-	_getRelativeOffset: function() {
-
-		if(this.cssPosition === "relative") {
-			var p = this.element.position();
-			return {
-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
-			};
-		} else {
-			return { top: 0, left: 0 };
-		}
-
-	},
-
-	_cacheMargins: function() {
-		this.margins = {
-			left: (parseInt(this.element.css("marginLeft"),10) || 0),
-			top: (parseInt(this.element.css("marginTop"),10) || 0),
-			right: (parseInt(this.element.css("marginRight"),10) || 0),
-			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
-		};
-	},
-
-	_cacheHelperProportions: function() {
-		this.helperProportions = {
-			width: this.helper.outerWidth(),
-			height: this.helper.outerHeight()
-		};
-	},
-
-	_setContainment: function() {
-
-		var over, c, ce,
-			o = this.options;
-
-		if ( !o.containment ) {
-			this.containment = null;
-			return;
-		}
-
-		if ( o.containment === "window" ) {
-			this.containment = [
-				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
-				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
-				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
-				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
-			];
-			return;
-		}
-
-		if ( o.containment === "document") {
-			this.containment = [
-				0,
-				0,
-				$( document ).width() - this.helperProportions.width - this.margins.left,
-				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
-			];
-			return;
-		}
-
-		if ( o.containment.constructor === Array ) {
-			this.containment = o.containment;
-			return;
-		}
-
-		if ( o.containment === "parent" ) {
-			o.containment = this.helper[ 0 ].parentNode;
-		}
-
-		c = $( o.containment );
-		ce = c[ 0 ];
-
-		if( !ce ) {
-			return;
-		}
-
-		over = c.css( "overflow" ) !== "hidden";
-
-		this.containment = [
-			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
-			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
-			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
-			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
-		];
-		this.relative_container = c;
-	},
-
-	_convertPositionTo: function(d, pos) {
-
-		if(!pos) {
-			pos = this.position;
-		}
-
-		var mod = d === "absolute" ? 1 : -1,
-			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
-
-		//Cache the scroll
-		if (!this.offset.scroll) {
-			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
-		}
-
-		return {
-			top: (
-				pos.top	+																// The absolute mouse position
-				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
-				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
-			),
-			left: (
-				pos.left +																// The absolute mouse position
-				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
-				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
-			)
-		};
-
-	},
-
-	_generatePosition: function(event) {
-
-		var containment, co, top, left,
-			o = this.options,
-			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
-			pageX = event.pageX,
-			pageY = event.pageY;
-
-		//Cache the scroll
-		if (!this.offset.scroll) {
-			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
-		}
-
-		/*
-		 * - Position constraining -
-		 * Constrain the position to a mix of grid, containment.
-		 */
-
-		// If we are not dragging yet, we won't check for options
-		if ( this.originalPosition ) {
-			if ( this.containment ) {
-				if ( this.relative_container ){
-					co = this.relative_container.offset();
-					containment = [
-						this.containment[ 0 ] + co.left,
-						this.containment[ 1 ] + co.top,
-						this.containment[ 2 ] + co.left,
-						this.containment[ 3 ] + co.top
-					];
-				}
-				else {
-					containment = this.containment;
-				}
-
-				if(event.pageX - this.offset.click.left < containment[0]) {
-					pageX = containment[0] + this.offset.click.left;
-				}
-				if(event.pageY - this.offset.click.top < containment[1]) {
-					pageY = containment[1] + this.offset.click.top;
-				}
-				if(event.pageX - this.offset.click.left > containment[2]) {
-					pageX = containment[2] + this.offset.click.left;
-				}
-				if(event.pageY - this.offset.click.top > containment[3]) {
-					pageY = containment[3] + this.offset.click.top;
-				}
-			}
-
-			if(o.grid) {
-				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
-				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
-				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
-
-				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
-				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
-			}
-
-		}
-
-		return {
-			top: (
-				pageY -																	// The absolute mouse position
-				this.offset.click.top	-												// Click offset (relative to the element)
-				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
-				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
-				( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
-			),
-			left: (
-				pageX -																	// The absolute mouse position
-				this.offset.click.left -												// Click offset (relative to the element)
-				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
-				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
-				( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
-			)
-		};
-
-	},
-
-	_clear: function() {
-		this.helper.removeClass("ui-draggable-dragging");
-		if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
-			this.helper.remove();
-		}
-		this.helper = null;
-		this.cancelHelperRemoval = false;
-	},
-
-	// From now on bulk stuff - mainly helpers
-
-	_trigger: function(type, event, ui) {
-		ui = ui || this._uiHash();
-		$.ui.plugin.call(this, type, [event, ui]);
-		//The absolute position has to be recalculated after plugins
-		if(type === "drag") {
-			this.positionAbs = this._convertPositionTo("absolute");
-		}
-		return $.Widget.prototype._trigger.call(this, type, event, ui);
-	},
-
-	plugins: {},
-
-	_uiHash: function() {
-		return {
-			helper: this.helper,
-			position: this.position,
-			originalPosition: this.originalPosition,
-			offset: this.positionAbs
-		};
-	}
-
-});
-
-$.ui.plugin.add("draggable", "connectToSortable", {
-	start: function(event, ui) {
-
-		var inst = $(this).data("ui-draggable"), o = inst.options,
-			uiSortable = $.extend({}, ui, { item: inst.element });
-		inst.sortables = [];
-		$(o.connectToSortable).each(function() {
-			var sortable = $.data(this, "ui-sortable");
-			if (sortable && !sortable.options.disabled) {
-				inst.sortables.push({
-					instance: sortable,
-					shouldRevert: sortable.options.revert
-				});
-				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
-				sortable._trigger("activate", event, uiSortable);
-			}
-		});
-
-	},
-	stop: function(event, ui) {
-
-		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
-		var inst = $(this).data("ui-draggable"),
-			uiSortable = $.extend({}, ui, { item: inst.element });
-
-		$.each(inst.sortables, function() {
-			if(this.instance.isOver) {
-
-				this.instance.isOver = 0;
-
-				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
-				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
-
-				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
-				if(this.shouldRevert) {
-					this.instance.options.revert = this.shouldRevert;
-				}
-
-				//Trigger the stop of the sortable
-				this.instance._mouseStop(event);
-
-				this.instance.options.helper = this.instance.options._helper;
-
-				//If the helper has been the original item, restore properties in the sortable
-				if(inst.options.helper === "original") {
-					this.instance.currentItem.css({ top: "auto", left: "auto" });
-				}
-
-			} else {
-				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
-				this.instance._trigger("deactivate", event, uiSortable);
-			}
-
-		});
-
-	},
-	drag: function(event, ui) {
-
-		var inst = $(this).data("ui-draggable"), that = this;
-
-		$.each(inst.sortables, function() {
-
-			var innermostIntersecting = false,
-				thisSortable = this;
-
-			//Copy over some variables to allow calling the sortable's native _intersectsWith
-			this.instance.positionAbs = inst.positionAbs;
-			this.instance.helperProportions = inst.helperProportions;
-			this.instance.offset.click = inst.offset.click;
-
-			if(this.instance._intersectsWith(this.instance.containerCache)) {
-				innermostIntersecting = true;
-				$.each(inst.sortables, function () {
-					this.instance.positionAbs = inst.positionAbs;
-					this.instance.helperProportions = inst.helperProportions;
-					this.instance.offset.click = inst.offset.click;
-					if (this !== thisSortable &&
-						this.instance._intersectsWith(this.instance.containerCache) &&
-						$.contains(thisSortable.instance.element[0], this.instance.element[0])
-					) {
-						innermostIntersecting = false;
-					}
-					return innermostIntersecting;
-				});
-			}
-
-
-			if(innermostIntersecting) {
-				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
-				if(!this.instance.isOver) {
-
-					this.instance.isOver = 1;
-					//Now we fake the start of dragging for the sortable instance,
-					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
-					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
-					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
-					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
-					this.instance.options.helper = function() { return ui.helper[0]; };
-
-					event.target = this.instance.currentItem[0];
-					this.instance._mouseCapture(event, true);
-					this.instance._mouseStart(event, true, true);
-
-					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
-					this.instance.offset.click.top = inst.offset.click.top;
-					this.instance.offset.click.left = inst.offset.click.left;
-					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
-					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
-
-					inst._trigger("toSortable", event);
-					inst.dropped = this.instance.element; //draggable revert needs that
-					//hack so receive/update callbacks work (mostly)
-					inst.currentItem = inst.element;
-					this.instance.fromOutside = inst;
-
-				}
-
-				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
-				if(this.instance.currentItem) {
-					this.instance._mouseDrag(event);
-				}
-
-			} else {
-
-				//If it doesn't intersect with the sortable, and it intersected before,
-				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
-				if(this.instance.isOver) {
-
-					this.instance.isOver = 0;
-					this.instance.cancelHelperRemoval = true;
-
-					//Prevent reverting on this forced stop
-					this.instance.options.revert = false;
-
-					// The out event needs to be triggered independently
-					this.instance._trigger("out", event, this.instance._uiHash(this.instance));
-
-					this.instance._mouseStop(event, true);
-					this.instance.options.helper = this.instance.options._helper;
-
-					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
-					this.instance.currentItem.remove();
-					if(this.instance.placeholder) {
-						this.instance.placeholder.remove();
-					}
-
-					inst._trigger("fromSortable", event);
-					inst.dropped = false; //draggable revert needs that
-				}
-
-			}
-
-		});
-
-	}
-});
-
-$.ui.plugin.add("draggable", "cursor", {
-	start: function() {
-		var t = $("body"), o = $(this).data("ui-draggable").options;
-		if (t.css("cursor")) {
-			o._cursor = t.css("cursor");
-		}
-		t.css("cursor", o.cursor);
-	},
-	stop: function() {
-		var o = $(this).data("ui-draggable").options;
-		if (o._cursor) {
-			$("body").css("cursor", o._cursor);
-		}
-	}
-});
-
-$.ui.plugin.add("draggable", "opacity", {
-	start: function(event, ui) {
-		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
-		if(t.css("opacity")) {
-			o._opacity = t.css("opacity");
-		}
-		t.css("opacity", o.opacity);
-	},
-	stop: function(event, ui) {
-		var o = $(this).data("ui-draggable").options;
-		if(o._opacity) {
-			$(ui.helper).css("opacity", o._opacity);
-		}
-	}
-});
-
-$.ui.plugin.add("draggable", "scroll", {
-	start: function() {
-		var i = $(this).data("ui-draggable");
-		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
-			i.overflowOffset = i.scrollParent.offset();
-		}
-	},
-	drag: function( event ) {
-
-		var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
-
-		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
-
-			if(!o.axis || o.axis !== "x") {
-				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
-				} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
-				}
-			}
-
-			if(!o.axis || o.axis !== "y") {
-				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
-				} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
-				}
-			}
-
-		} else {
-
-			if(!o.axis || o.axis !== "x") {
-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
-				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
-				}
-			}
-
-			if(!o.axis || o.axis !== "y") {
-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
-				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
-				}
-			}
-
-		}
-
-		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
-			$.ui.ddmanager.prepareOffsets(i, event);
-		}
-
-	}
-});
-
-$.ui.plugin.add("draggable", "snap", {
-	start: function() {
-
-		var i = $(this).data("ui-draggable"),
-			o = i.options;
-
-		i.snapElements = [];
-
-		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
-			var $t = $(this),
-				$o = $t.offset();
-			if(this !== i.element[0]) {
-				i.snapElements.push({
-					item: this,
-					width: $t.outerWidth(), height: $t.outerHeight(),
-					top: $o.top, left: $o.left
-				});
-			}
-		});
-
-	},
-	drag: function(event, ui) {
-
-		var ts, bs, ls, rs, l, r, t, b, i, first,
-			inst = $(this).data("ui-draggable"),
-			o = inst.options,
-			d = o.snapTolerance,
-			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
-			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
-
-		for (i = inst.snapElements.length - 1; i >= 0; i--){
-
-			l = inst.snapElements[i].left;
-			r = l + inst.snapElements[i].width;
-			t = inst.snapElements[i].top;
-			b = t + inst.snapElements[i].height;
-
-			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
-				if(inst.snapElements[i].snapping) {
-					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
-				}
-				inst.snapElements[i].snapping = false;
-				continue;
-			}
-
-			if(o.snapMode !== "inner") {
-				ts = Math.abs(t - y2) <= d;
-				bs = Math.abs(b - y1) <= d;
-				ls = Math.abs(l - x2) <= d;
-				rs = Math.abs(r - x1) <= d;
-				if(ts) {
-					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
-				}
-				if(bs) {
-					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
-				}
-				if(ls) {
-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
-				}
-				if(rs) {
-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
-				}
-			}
-
-			first = (ts || bs || ls || rs);
-
-			if(o.snapMode !== "outer") {
-				ts = Math.abs(t - y1) <= d;
-				bs = Math.abs(b - y2) <= d;
-				ls = Math.abs(l - x1) <= d;
-				rs = Math.abs(r - x2) <= d;
-				if(ts) {
-					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
-				}
-				if(bs) {
-					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
-				}
-				if(ls) {
-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
-				}
-				if(rs) {
-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
-				}
-			}
-
-			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
-				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
-			}
-			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
-
-		}
-
-	}
-});
-
-$.ui.plugin.add("draggable", "stack", {
-	start: function() {
-		var min,
-			o = this.data("ui-draggable").options,
-			group = $.makeArray($(o.stack)).sort(function(a,b) {
-				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
-			});
-
-		if (!group.length) { return; }
-
-		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
-		$(group).each(function(i) {
-			$(this).css("zIndex", min + i);
-		});
-		this.css("zIndex", (min + group.length));
-	}
-});
-
-$.ui.plugin.add("draggable", "zIndex", {
-	start: function(event, ui) {
-		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
-		if(t.css("zIndex")) {
-			o._zIndex = t.css("zIndex");
-		}
-		t.css("zIndex", o.zIndex);
-	},
-	stop: function(event, ui) {
-		var o = $(this).data("ui-draggable").options;
-		if(o._zIndex) {
-			$(ui.helper).css("zIndex", o._zIndex);
-		}
-	}
-});
-
-})(jQuery);
-(function( $, undefined ) {
-
-function isOverAxis( x, reference, size ) {
-	return ( x > reference ) && ( x < ( reference + size ) );
-}
-
-$.widget("ui.droppable", {
-	version: "1.10.4",
-	widgetEventPrefix: "drop",
-	options: {
-		accept: "*",
-		activeClass: false,
-		addClasses: true,
-		greedy: false,
-		hoverClass: false,
-		scope: "default",
-		tolerance: "intersect",
-
-		// callbacks
-		activate: null,
-		deactivate: null,
-		drop: null,
-		out: null,
-		over: null
-	},
-	_create: function() {
-
-		var proportions,
-			o = this.options,
-			accept = o.accept;
-
-		this.isover = false;
-		this.isout = true;
-
-		this.accept = $.isFunction(accept) ? accept : function(d) {
-			return d.is(accept);
-		};
-
-		this.proportions = function( /* valueToWrite */ ) {
-			if ( arguments.length ) {
-				// Store the droppable's proportions
-				proportions = arguments[ 0 ];
-			} else {
-				// Retrieve or derive the droppable's proportions
-				return proportions ?
-					proportions :
-					proportions = {
-						width: this.element[ 0 ].offsetWidth,
-						height: this.element[ 0 ].offsetHeight
-					};
-			}
-		};
-
-		// Add the reference and positions to the manager
-		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
-		$.ui.ddmanager.droppables[o.scope].push(this);
-
-		(o.addClasses && this.element.addClass("ui-droppable"));
-
-	},
-
-	_destroy: function() {
-		var i = 0,
-			drop = $.ui.ddmanager.droppables[this.options.scope];
-
-		for ( ; i < drop.length; i++ ) {
-			if ( drop[i] === this ) {
-				drop.splice(i, 1);
-			}
-		}
-
-		this.element.removeClass("ui-droppable ui-droppable-disabled");
-	},
-
-	_setOption: function(key, value) {
-
-		if(key === "accept") {
-			this.accept = $.isFunction(value) ? value : function(d) {
-				return d.is(value);
-			};
-		}
-		$.Widget.prototype._setOption.apply(this, arguments);
-	},
-
-	_activate: function(event) {
-		var draggable = $.ui.ddmanager.current;
-		if(this.options.activeClass) {
-			this.element.addClass(this.options.activeClass);
-		}
-		if(draggable){
-			this._trigger("activate", event, this.ui(draggable));
-		}
-	},
-
-	_deactivate: function(event) {
-		var draggable = $.ui.ddmanager.current;
-		if(this.options.activeClass) {
-			this.element.removeClass(this.options.activeClass);
-		}
-		if(draggable){
-			this._trigger("deactivate", event, this.ui(draggable));
-		}
-	},
-
-	_over: function(event) {
-
-		var draggable = $.ui.ddmanager.current;
-
-		// Bail if draggable and droppable are same element
-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
-			return;
-		}
-
-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
-			if(this.options.hoverClass) {
-				this.element.addClass(this.options.hoverClass);
-			}
-			this._trigger("over", event, this.ui(draggable));
-		}
-
-	},
-
-	_out: function(event) {
-
-		var draggable = $.ui.ddmanager.current;
-
-		// Bail if draggable and droppable are same element
-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
-			return;
-		}
-
-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
-			if(this.options.hoverClass) {
-				this.element.removeClass(this.options.hoverClass);
-			}
-			this._trigger("out", event, this.ui(draggable));
-		}
-
-	},
-
-	_drop: function(event,custom) {
-
-		var draggable = custom || $.ui.ddmanager.current,
-			childrenIntersection = false;
-
-		// Bail if draggable and droppable are same element
-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
-			return false;
-		}
-
-		this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
-			var inst = $.data(this, "ui-droppable");
-			if(
-				inst.options.greedy &&
-				!inst.options.disabled &&
-				inst.options.scope === draggable.options.scope &&
-				inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
-				$.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
-			) { childrenIntersection = true; return false; }
-		});
-		if(childrenIntersection) {
-			return false;
-		}
-
-		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
-			if(this.options.activeClass) {
-				this.element.removeClass(this.options.activeClass);
-			}
-			if(this.options.hoverClass) {
-				this.element.removeClass(this.options.hoverClass);
-			}
-			this._trigger("drop", event, this.ui(draggable));
-			return this.element;
-		}
-
-		return false;
-
-	},
-
-	ui: function(c) {
-		return {
-			draggable: (c.currentItem || c.element),
-			helper: c.helper,
-			position: c.position,
-			offset: c.positionAbs
-		};
-	}
-
-});
-
-$.ui.intersect = function(draggable, droppable, toleranceMode) {
-
-	if (!droppable.offset) {
-		return false;
-	}
-
-	var draggableLeft, draggableTop,
-		x1 = (draggable.positionAbs || draggable.position.absolute).left,
-		y1 = (draggable.positionAbs || draggable.position.absolute).top,
-		x2 = x1 + draggable.helperProportions.width,
-		y2 = y1 + draggable.helperProportions.height,
-		l = droppable.offset.left,
-		t = droppable.offset.top,
-		r = l + droppable.proportions().width,
-		b = t + droppable.proportions().height;
-
-	switch (toleranceMode) {
-		case "fit":
-			return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
-		case "intersect":
-			return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
-				x2 - (draggable.helperProportions.width / 2) < r && // Left Half
-				t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
-				y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
-		case "pointer":
-			draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
-			draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
-			return isOverAxis( draggableTop, t, droppable.proportions().height ) && isOverAxis( draggableLeft, l, droppable.proportions().width );
-		case "touch":
-			return (
-				(y1 >= t && y1 <= b) ||	// Top edge touching
-				(y2 >= t && y2 <= b) ||	// Bottom edge touching
-				(y1 < t && y2 > b)		// Surrounded vertically
-			) && (
-				(x1 >= l && x1 <= r) ||	// Left edge touching
-				(x2 >= l && x2 <= r) ||	// Right edge touching
-				(x1 < l && x2 > r)		// Surrounded horizontally
-			);
-		default:
-			return false;
-		}
-
-};
-
-/*
-	This manager tracks offsets of draggables and droppables
-*/
-$.ui.ddmanager = {
-	current: null,
-	droppables: { "default": [] },
-	prepareOffsets: function(t, event) {
-
-		var i, j,
-			m = $.ui.ddmanager.droppables[t.options.scope] || [],
-			type = event ? event.type : null, // workaround for #2317
-			list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
-
-		droppablesLoop: for (i = 0; i < m.length; i++) {
-
-			//No disabled and non-accepted
-			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
-				continue;
-			}
-
-			// Filter out elements in the current dragged item
-			for (j=0; j < list.length; j++) {
-				if(list[j] === m[i].element[0]) {
-					m[i].proportions().height = 0;
-					continue droppablesLoop;
-				}
-			}
-
-			m[i].visible = m[i].element.css("display") !== "none";
-			if(!m[i].visible) {
-				continue;
-			}
-
-			//Activate the droppable if used directly from draggables
-			if(type === "mousedown") {
-				m[i]._activate.call(m[i], event);
-			}
-
-			m[ i ].offset = m[ i ].element.offset();
-			m[ i ].proportions({ width: m[ i ].element[ 0 ].offsetWidth, height: m[ i ].element[ 0 ].offsetHeight });
-
-		}
-
-	},
-	drop: function(draggable, event) {
-
-		var dropped = false;
-		// Create a copy of the droppables in case the list changes during the drop (#9116)
-		$.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
-
-			if(!this.options) {
-				return;
-			}
-			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
-				dropped = this._drop.call(this, event) || dropped;
-			}
-
-			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
-				this.isout = true;
-				this.isover = false;
-				this._deactivate.call(this, event);
-			}
-
-		});
-		return dropped;
-
-	},
-	dragStart: function( draggable, event ) {
-		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
-		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
-			if( !draggable.options.refreshPositions ) {
-				$.ui.ddmanager.prepareOffsets( draggable, event );
-			}
-		});
-	},
-	drag: function(draggable, event) {
-
-		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
-		if(draggable.options.refreshPositions) {
-			$.ui.ddmanager.prepareOffsets(draggable, event);
-		}
-
-		//Run through all droppables and check their positions based on specific tolerance options
-		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
-
-			if(this.options.disabled || this.greedyChild || !this.visible) {
-				return;
-			}
-
-			var parentInstance, scope, parent,
-				intersects = $.ui.intersect(draggable, this, this.options.tolerance),
-				c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
-			if(!c) {
-				return;
-			}
-
-			if (this.options.greedy) {
-				// find droppable parents with same scope
-				scope = this.options.scope;
-				parent = this.element.parents(":data(ui-droppable)").filter(function () {
-					return $.data(this, "ui-droppable").options.scope === scope;
-				});
-
-				if (parent.length) {
-					parentInstance = $.data(parent[0], "ui-droppable");
-					parentInstance.greedyChild = (c === "isover");
-				}
-			}
-
-			// we just moved into a greedy child
-			if (parentInstance && c === "isover") {
-				parentInstance.isover = false;
-				parentInstance.isout = true;
-				parentInstance._out.call(parentInstance, event);
-			}
-
-			this[c] = true;
-			this[c === "isout" ? "isover" : "isout"] = false;
-			this[c === "isover" ? "_over" : "_out"].call(this, event);
-
-			// we just moved out of a greedy child
-			if (parentInstance && c === "isout") {
-				parentInstance.isout = false;
-				parentInstance.isover = true;
-				parentInstance._over.call(parentInstance, event);
-			}
-		});
-
-	},
-	dragStop: function( draggable, event ) {
-		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
-		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
-		if( !draggable.options.refreshPositions ) {
-			$.ui.ddmanager.prepareOffsets( draggable, event );
-		}
-	}
-};
-
-})(jQuery);
-(function( $, undefined ) {
-
-function num(v) {
-	return parseInt(v, 10) || 0;
-}
-
-function isNumber(value) {
-	return !isNaN(parseInt(value, 10));
-}
-
-$.widget("ui.resizable", $.ui.mouse, {
-	version: "1.10.4",
-	widgetEventPrefix: "resize",
-	options: {
-		alsoResize: false,
-		animate: false,
-		animateDuration: "slow",
-		animateEasing: "swing",
-		aspectRatio: false,
-		autoHide: false,
-		containment: false,
-		ghost: false,
-		grid: false,
-		handles: "e,s,se",
-		helper: false,
-		maxHeight: 

<TRUNCATED>

[46/50] [abbrv] incubator-nifi git commit: NIFI-27: - Reverting to a slightly old version of minicolors to do issues compressing the css in the latests version.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/a016bf47/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.css
index 91363b8..cdf4ae4 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.css
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.css
@@ -1,269 +1,259 @@
 .minicolors {
-    position: relative;
-}
-
-.minicolors-sprite {
-    background-image: url(data:image/png;base64,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

<TRUNCATED>

[26/50] [abbrv] incubator-nifi git commit: NIFI-27: - Starting to upgrade jQuery and jQuery UI.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.js
new file mode 100755
index 0000000..ecac757
--- /dev/null
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.js
@@ -0,0 +1,15008 @@
+/*! jQuery UI - v1.10.4 - 2014-12-08
+* http://jqueryui.com
+* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+(function( $, undefined ) {
+
+var uuid = 0,
+	runiqueId = /^ui-id-\d+$/;
+
+// $.ui might exist from components with no dependencies, e.g., $.ui.position
+$.ui = $.ui || {};
+
+$.extend( $.ui, {
+	version: "1.10.4",
+
+	keyCode: {
+		BACKSPACE: 8,
+		COMMA: 188,
+		DELETE: 46,
+		DOWN: 40,
+		END: 35,
+		ENTER: 13,
+		ESCAPE: 27,
+		HOME: 36,
+		LEFT: 37,
+		NUMPAD_ADD: 107,
+		NUMPAD_DECIMAL: 110,
+		NUMPAD_DIVIDE: 111,
+		NUMPAD_ENTER: 108,
+		NUMPAD_MULTIPLY: 106,
+		NUMPAD_SUBTRACT: 109,
+		PAGE_DOWN: 34,
+		PAGE_UP: 33,
+		PERIOD: 190,
+		RIGHT: 39,
+		SPACE: 32,
+		TAB: 9,
+		UP: 38
+	}
+});
+
+// plugins
+$.fn.extend({
+	focus: (function( orig ) {
+		return function( delay, fn ) {
+			return typeof delay === "number" ?
+				this.each(function() {
+					var elem = this;
+					setTimeout(function() {
+						$( elem ).focus();
+						if ( fn ) {
+							fn.call( elem );
+						}
+					}, delay );
+				}) :
+				orig.apply( this, arguments );
+		};
+	})( $.fn.focus ),
+
+	scrollParent: function() {
+		var scrollParent;
+		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
+			scrollParent = this.parents().filter(function() {
+				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+			}).eq(0);
+		} else {
+			scrollParent = this.parents().filter(function() {
+				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+			}).eq(0);
+		}
+
+		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
+	},
+
+	zIndex: function( zIndex ) {
+		if ( zIndex !== undefined ) {
+			return this.css( "zIndex", zIndex );
+		}
+
+		if ( this.length ) {
+			var elem = $( this[ 0 ] ), position, value;
+			while ( elem.length && elem[ 0 ] !== document ) {
+				// Ignore z-index if position is set to a value where z-index is ignored by the browser
+				// This makes behavior of this function consistent across browsers
+				// WebKit always returns auto if the element is positioned
+				position = elem.css( "position" );
+				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+					// IE returns 0 when zIndex is not specified
+					// other browsers return a string
+					// we ignore the case of nested elements with an explicit value of 0
+					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+					value = parseInt( elem.css( "zIndex" ), 10 );
+					if ( !isNaN( value ) && value !== 0 ) {
+						return value;
+					}
+				}
+				elem = elem.parent();
+			}
+		}
+
+		return 0;
+	},
+
+	uniqueId: function() {
+		return this.each(function() {
+			if ( !this.id ) {
+				this.id = "ui-id-" + (++uuid);
+			}
+		});
+	},
+
+	removeUniqueId: function() {
+		return this.each(function() {
+			if ( runiqueId.test( this.id ) ) {
+				$( this ).removeAttr( "id" );
+			}
+		});
+	}
+});
+
+// selectors
+function focusable( element, isTabIndexNotNaN ) {
+	var map, mapName, img,
+		nodeName = element.nodeName.toLowerCase();
+	if ( "area" === nodeName ) {
+		map = element.parentNode;
+		mapName = map.name;
+		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+			return false;
+		}
+		img = $( "img[usemap=#" + mapName + "]" )[0];
+		return !!img && visible( img );
+	}
+	return ( /input|select|textarea|button|object/.test( nodeName ) ?
+		!element.disabled :
+		"a" === nodeName ?
+			element.href || isTabIndexNotNaN :
+			isTabIndexNotNaN) &&
+		// the element and all of its ancestors must be visible
+		visible( element );
+}
+
+function visible( element ) {
+	return $.expr.filters.visible( element ) &&
+		!$( element ).parents().addBack().filter(function() {
+			return $.css( this, "visibility" ) === "hidden";
+		}).length;
+}
+
+$.extend( $.expr[ ":" ], {
+	data: $.expr.createPseudo ?
+		$.expr.createPseudo(function( dataName ) {
+			return function( elem ) {
+				return !!$.data( elem, dataName );
+			};
+		}) :
+		// support: jQuery <1.8
+		function( elem, i, match ) {
+			return !!$.data( elem, match[ 3 ] );
+		},
+
+	focusable: function( element ) {
+		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+	},
+
+	tabbable: function( element ) {
+		var tabIndex = $.attr( element, "tabindex" ),
+			isTabIndexNaN = isNaN( tabIndex );
+		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+	}
+});
+
+// support: jQuery <1.8
+if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+	$.each( [ "Width", "Height" ], function( i, name ) {
+		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+			type = name.toLowerCase(),
+			orig = {
+				innerWidth: $.fn.innerWidth,
+				innerHeight: $.fn.innerHeight,
+				outerWidth: $.fn.outerWidth,
+				outerHeight: $.fn.outerHeight
+			};
+
+		function reduce( elem, size, border, margin ) {
+			$.each( side, function() {
+				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
+				if ( border ) {
+					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
+				}
+				if ( margin ) {
+					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
+				}
+			});
+			return size;
+		}
+
+		$.fn[ "inner" + name ] = function( size ) {
+			if ( size === undefined ) {
+				return orig[ "inner" + name ].call( this );
+			}
+
+			return this.each(function() {
+				$( this ).css( type, reduce( this, size ) + "px" );
+			});
+		};
+
+		$.fn[ "outer" + name] = function( size, margin ) {
+			if ( typeof size !== "number" ) {
+				return orig[ "outer" + name ].call( this, size );
+			}
+
+			return this.each(function() {
+				$( this).css( type, reduce( this, size, true, margin ) + "px" );
+			});
+		};
+	});
+}
+
+// support: jQuery <1.8
+if ( !$.fn.addBack ) {
+	$.fn.addBack = function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	};
+}
+
+// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
+	$.fn.removeData = (function( removeData ) {
+		return function( key ) {
+			if ( arguments.length ) {
+				return removeData.call( this, $.camelCase( key ) );
+			} else {
+				return removeData.call( this );
+			}
+		};
+	})( $.fn.removeData );
+}
+
+
+
+
+
+// deprecated
+$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+
+$.support.selectstart = "onselectstart" in document.createElement( "div" );
+$.fn.extend({
+	disableSelection: function() {
+		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
+			".ui-disableSelection", function( event ) {
+				event.preventDefault();
+			});
+	},
+
+	enableSelection: function() {
+		return this.unbind( ".ui-disableSelection" );
+	}
+});
+
+$.extend( $.ui, {
+	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+	plugin: {
+		add: function( module, option, set ) {
+			var i,
+				proto = $.ui[ module ].prototype;
+			for ( i in set ) {
+				proto.plugins[ i ] = proto.plugins[ i ] || [];
+				proto.plugins[ i ].push( [ option, set[ i ] ] );
+			}
+		},
+		call: function( instance, name, args ) {
+			var i,
+				set = instance.plugins[ name ];
+			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
+				return;
+			}
+
+			for ( i = 0; i < set.length; i++ ) {
+				if ( instance.options[ set[ i ][ 0 ] ] ) {
+					set[ i ][ 1 ].apply( instance.element, args );
+				}
+			}
+		}
+	},
+
+	// only used by resizable
+	hasScroll: function( el, a ) {
+
+		//If overflow is hidden, the element might have extra content, but the user wants to hide it
+		if ( $( el ).css( "overflow" ) === "hidden") {
+			return false;
+		}
+
+		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+			has = false;
+
+		if ( el[ scroll ] > 0 ) {
+			return true;
+		}
+
+		// TODO: determine which cases actually cause this to happen
+		// if the element doesn't have the scroll set, see if it's possible to
+		// set the scroll
+		el[ scroll ] = 1;
+		has = ( el[ scroll ] > 0 );
+		el[ scroll ] = 0;
+		return has;
+	}
+});
+
+})( jQuery );
+(function( $, undefined ) {
+
+var uuid = 0,
+	slice = Array.prototype.slice,
+	_cleanData = $.cleanData;
+$.cleanData = function( elems ) {
+	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+		try {
+			$( elem ).triggerHandler( "remove" );
+		// http://bugs.jquery.com/ticket/8235
+		} catch( e ) {}
+	}
+	_cleanData( elems );
+};
+
+$.widget = function( name, base, prototype ) {
+	var fullName, existingConstructor, constructor, basePrototype,
+		// proxiedPrototype allows the provided prototype to remain unmodified
+		// so that it can be used as a mixin for multiple widgets (#8876)
+		proxiedPrototype = {},
+		namespace = name.split( "." )[ 0 ];
+
+	name = name.split( "." )[ 1 ];
+	fullName = namespace + "-" + name;
+
+	if ( !prototype ) {
+		prototype = base;
+		base = $.Widget;
+	}
+
+	// create selector for plugin
+	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+		return !!$.data( elem, fullName );
+	};
+
+	$[ namespace ] = $[ namespace ] || {};
+	existingConstructor = $[ namespace ][ name ];
+	constructor = $[ namespace ][ name ] = function( options, element ) {
+		// allow instantiation without "new" keyword
+		if ( !this._createWidget ) {
+			return new constructor( options, element );
+		}
+
+		// allow instantiation without initializing for simple inheritance
+		// must use "new" keyword (the code above always passes args)
+		if ( arguments.length ) {
+			this._createWidget( options, element );
+		}
+	};
+	// extend with the existing constructor to carry over any static properties
+	$.extend( constructor, existingConstructor, {
+		version: prototype.version,
+		// copy the object used to create the prototype in case we need to
+		// redefine the widget later
+		_proto: $.extend( {}, prototype ),
+		// track widgets that inherit from this widget in case this widget is
+		// redefined after a widget inherits from it
+		_childConstructors: []
+	});
+
+	basePrototype = new base();
+	// we need to make the options hash a property directly on the new instance
+	// otherwise we'll modify the options hash on the prototype that we're
+	// inheriting from
+	basePrototype.options = $.widget.extend( {}, basePrototype.options );
+	$.each( prototype, function( prop, value ) {
+		if ( !$.isFunction( value ) ) {
+			proxiedPrototype[ prop ] = value;
+			return;
+		}
+		proxiedPrototype[ prop ] = (function() {
+			var _super = function() {
+					return base.prototype[ prop ].apply( this, arguments );
+				},
+				_superApply = function( args ) {
+					return base.prototype[ prop ].apply( this, args );
+				};
+			return function() {
+				var __super = this._super,
+					__superApply = this._superApply,
+					returnValue;
+
+				this._super = _super;
+				this._superApply = _superApply;
+
+				returnValue = value.apply( this, arguments );
+
+				this._super = __super;
+				this._superApply = __superApply;
+
+				return returnValue;
+			};
+		})();
+	});
+	constructor.prototype = $.widget.extend( basePrototype, {
+		// TODO: remove support for widgetEventPrefix
+		// always use the name + a colon as the prefix, e.g., draggable:start
+		// don't prefix for widgets that aren't DOM-based
+		widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
+	}, proxiedPrototype, {
+		constructor: constructor,
+		namespace: namespace,
+		widgetName: name,
+		widgetFullName: fullName
+	});
+
+	// If this widget is being redefined then we need to find all widgets that
+	// are inheriting from it and redefine all of them so that they inherit from
+	// the new version of this widget. We're essentially trying to replace one
+	// level in the prototype chain.
+	if ( existingConstructor ) {
+		$.each( existingConstructor._childConstructors, function( i, child ) {
+			var childPrototype = child.prototype;
+
+			// redefine the child widget using the same prototype that was
+			// originally used, but inherit from the new version of the base
+			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+		});
+		// remove the list of existing child constructors from the old constructor
+		// so the old child constructors can be garbage collected
+		delete existingConstructor._childConstructors;
+	} else {
+		base._childConstructors.push( constructor );
+	}
+
+	$.widget.bridge( name, constructor );
+};
+
+$.widget.extend = function( target ) {
+	var input = slice.call( arguments, 1 ),
+		inputIndex = 0,
+		inputLength = input.length,
+		key,
+		value;
+	for ( ; inputIndex < inputLength; inputIndex++ ) {
+		for ( key in input[ inputIndex ] ) {
+			value = input[ inputIndex ][ key ];
+			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+				// Clone objects
+				if ( $.isPlainObject( value ) ) {
+					target[ key ] = $.isPlainObject( target[ key ] ) ?
+						$.widget.extend( {}, target[ key ], value ) :
+						// Don't extend strings, arrays, etc. with objects
+						$.widget.extend( {}, value );
+				// Copy everything else by reference
+				} else {
+					target[ key ] = value;
+				}
+			}
+		}
+	}
+	return target;
+};
+
+$.widget.bridge = function( name, object ) {
+	var fullName = object.prototype.widgetFullName || name;
+	$.fn[ name ] = function( options ) {
+		var isMethodCall = typeof options === "string",
+			args = slice.call( arguments, 1 ),
+			returnValue = this;
+
+		// allow multiple hashes to be passed on init
+		options = !isMethodCall && args.length ?
+			$.widget.extend.apply( null, [ options ].concat(args) ) :
+			options;
+
+		if ( isMethodCall ) {
+			this.each(function() {
+				var methodValue,
+					instance = $.data( this, fullName );
+				if ( !instance ) {
+					return $.error( "cannot call methods on " + name + " prior to initialization; " +
+						"attempted to call method '" + options + "'" );
+				}
+				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+				}
+				methodValue = instance[ options ].apply( instance, args );
+				if ( methodValue !== instance && methodValue !== undefined ) {
+					returnValue = methodValue && methodValue.jquery ?
+						returnValue.pushStack( methodValue.get() ) :
+						methodValue;
+					return false;
+				}
+			});
+		} else {
+			this.each(function() {
+				var instance = $.data( this, fullName );
+				if ( instance ) {
+					instance.option( options || {} )._init();
+				} else {
+					$.data( this, fullName, new object( options, this ) );
+				}
+			});
+		}
+
+		return returnValue;
+	};
+};
+
+$.Widget = function( /* options, element */ ) {};
+$.Widget._childConstructors = [];
+
+$.Widget.prototype = {
+	widgetName: "widget",
+	widgetEventPrefix: "",
+	defaultElement: "<div>",
+	options: {
+		disabled: false,
+
+		// callbacks
+		create: null
+	},
+	_createWidget: function( options, element ) {
+		element = $( element || this.defaultElement || this )[ 0 ];
+		this.element = $( element );
+		this.uuid = uuid++;
+		this.eventNamespace = "." + this.widgetName + this.uuid;
+		this.options = $.widget.extend( {},
+			this.options,
+			this._getCreateOptions(),
+			options );
+
+		this.bindings = $();
+		this.hoverable = $();
+		this.focusable = $();
+
+		if ( element !== this ) {
+			$.data( element, this.widgetFullName, this );
+			this._on( true, this.element, {
+				remove: function( event ) {
+					if ( event.target === element ) {
+						this.destroy();
+					}
+				}
+			});
+			this.document = $( element.style ?
+				// element within the document
+				element.ownerDocument :
+				// element is window or document
+				element.document || element );
+			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+		}
+
+		this._create();
+		this._trigger( "create", null, this._getCreateEventData() );
+		this._init();
+	},
+	_getCreateOptions: $.noop,
+	_getCreateEventData: $.noop,
+	_create: $.noop,
+	_init: $.noop,
+
+	destroy: function() {
+		this._destroy();
+		// we can probably remove the unbind calls in 2.0
+		// all event bindings should go through this._on()
+		this.element
+			.unbind( this.eventNamespace )
+			// 1.9 BC for #7810
+			// TODO remove dual storage
+			.removeData( this.widgetName )
+			.removeData( this.widgetFullName )
+			// support: jquery <1.6.3
+			// http://bugs.jquery.com/ticket/9413
+			.removeData( $.camelCase( this.widgetFullName ) );
+		this.widget()
+			.unbind( this.eventNamespace )
+			.removeAttr( "aria-disabled" )
+			.removeClass(
+				this.widgetFullName + "-disabled " +
+				"ui-state-disabled" );
+
+		// clean up events and states
+		this.bindings.unbind( this.eventNamespace );
+		this.hoverable.removeClass( "ui-state-hover" );
+		this.focusable.removeClass( "ui-state-focus" );
+	},
+	_destroy: $.noop,
+
+	widget: function() {
+		return this.element;
+	},
+
+	option: function( key, value ) {
+		var options = key,
+			parts,
+			curOption,
+			i;
+
+		if ( arguments.length === 0 ) {
+			// don't return a reference to the internal hash
+			return $.widget.extend( {}, this.options );
+		}
+
+		if ( typeof key === "string" ) {
+			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+			options = {};
+			parts = key.split( "." );
+			key = parts.shift();
+			if ( parts.length ) {
+				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+				for ( i = 0; i < parts.length - 1; i++ ) {
+					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+					curOption = curOption[ parts[ i ] ];
+				}
+				key = parts.pop();
+				if ( arguments.length === 1 ) {
+					return curOption[ key ] === undefined ? null : curOption[ key ];
+				}
+				curOption[ key ] = value;
+			} else {
+				if ( arguments.length === 1 ) {
+					return this.options[ key ] === undefined ? null : this.options[ key ];
+				}
+				options[ key ] = value;
+			}
+		}
+
+		this._setOptions( options );
+
+		return this;
+	},
+	_setOptions: function( options ) {
+		var key;
+
+		for ( key in options ) {
+			this._setOption( key, options[ key ] );
+		}
+
+		return this;
+	},
+	_setOption: function( key, value ) {
+		this.options[ key ] = value;
+
+		if ( key === "disabled" ) {
+			this.widget()
+				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
+				.attr( "aria-disabled", value );
+			this.hoverable.removeClass( "ui-state-hover" );
+			this.focusable.removeClass( "ui-state-focus" );
+		}
+
+		return this;
+	},
+
+	enable: function() {
+		return this._setOption( "disabled", false );
+	},
+	disable: function() {
+		return this._setOption( "disabled", true );
+	},
+
+	_on: function( suppressDisabledCheck, element, handlers ) {
+		var delegateElement,
+			instance = this;
+
+		// no suppressDisabledCheck flag, shuffle arguments
+		if ( typeof suppressDisabledCheck !== "boolean" ) {
+			handlers = element;
+			element = suppressDisabledCheck;
+			suppressDisabledCheck = false;
+		}
+
+		// no element argument, shuffle and use this.element
+		if ( !handlers ) {
+			handlers = element;
+			element = this.element;
+			delegateElement = this.widget();
+		} else {
+			// accept selectors, DOM elements
+			element = delegateElement = $( element );
+			this.bindings = this.bindings.add( element );
+		}
+
+		$.each( handlers, function( event, handler ) {
+			function handlerProxy() {
+				// allow widgets to customize the disabled handling
+				// - disabled as an array instead of boolean
+				// - disabled class as method for disabling individual parts
+				if ( !suppressDisabledCheck &&
+						( instance.options.disabled === true ||
+							$( this ).hasClass( "ui-state-disabled" ) ) ) {
+					return;
+				}
+				return ( typeof handler === "string" ? instance[ handler ] : handler )
+					.apply( instance, arguments );
+			}
+
+			// copy the guid so direct unbinding works
+			if ( typeof handler !== "string" ) {
+				handlerProxy.guid = handler.guid =
+					handler.guid || handlerProxy.guid || $.guid++;
+			}
+
+			var match = event.match( /^(\w+)\s*(.*)$/ ),
+				eventName = match[1] + instance.eventNamespace,
+				selector = match[2];
+			if ( selector ) {
+				delegateElement.delegate( selector, eventName, handlerProxy );
+			} else {
+				element.bind( eventName, handlerProxy );
+			}
+		});
+	},
+
+	_off: function( element, eventName ) {
+		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
+		element.unbind( eventName ).undelegate( eventName );
+	},
+
+	_delay: function( handler, delay ) {
+		function handlerProxy() {
+			return ( typeof handler === "string" ? instance[ handler ] : handler )
+				.apply( instance, arguments );
+		}
+		var instance = this;
+		return setTimeout( handlerProxy, delay || 0 );
+	},
+
+	_hoverable: function( element ) {
+		this.hoverable = this.hoverable.add( element );
+		this._on( element, {
+			mouseenter: function( event ) {
+				$( event.currentTarget ).addClass( "ui-state-hover" );
+			},
+			mouseleave: function( event ) {
+				$( event.currentTarget ).removeClass( "ui-state-hover" );
+			}
+		});
+	},
+
+	_focusable: function( element ) {
+		this.focusable = this.focusable.add( element );
+		this._on( element, {
+			focusin: function( event ) {
+				$( event.currentTarget ).addClass( "ui-state-focus" );
+			},
+			focusout: function( event ) {
+				$( event.currentTarget ).removeClass( "ui-state-focus" );
+			}
+		});
+	},
+
+	_trigger: function( type, event, data ) {
+		var prop, orig,
+			callback = this.options[ type ];
+
+		data = data || {};
+		event = $.Event( event );
+		event.type = ( type === this.widgetEventPrefix ?
+			type :
+			this.widgetEventPrefix + type ).toLowerCase();
+		// the original event may come from any element
+		// so we need to reset the target on the new event
+		event.target = this.element[ 0 ];
+
+		// copy original event properties over to the new event
+		orig = event.originalEvent;
+		if ( orig ) {
+			for ( prop in orig ) {
+				if ( !( prop in event ) ) {
+					event[ prop ] = orig[ prop ];
+				}
+			}
+		}
+
+		this.element.trigger( event, data );
+		return !( $.isFunction( callback ) &&
+			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+			event.isDefaultPrevented() );
+	}
+};
+
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+		if ( typeof options === "string" ) {
+			options = { effect: options };
+		}
+		var hasOptions,
+			effectName = !options ?
+				method :
+				options === true || typeof options === "number" ?
+					defaultEffect :
+					options.effect || defaultEffect;
+		options = options || {};
+		if ( typeof options === "number" ) {
+			options = { duration: options };
+		}
+		hasOptions = !$.isEmptyObject( options );
+		options.complete = callback;
+		if ( options.delay ) {
+			element.delay( options.delay );
+		}
+		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+			element[ method ]( options );
+		} else if ( effectName !== method && element[ effectName ] ) {
+			element[ effectName ]( options.duration, options.easing, callback );
+		} else {
+			element.queue(function( next ) {
+				$( this )[ method ]();
+				if ( callback ) {
+					callback.call( element[ 0 ] );
+				}
+				next();
+			});
+		}
+	};
+});
+
+})( jQuery );
+(function( $, undefined ) {
+
+var mouseHandled = false;
+$( document ).mouseup( function() {
+	mouseHandled = false;
+});
+
+$.widget("ui.mouse", {
+	version: "1.10.4",
+	options: {
+		cancel: "input,textarea,button,select,option",
+		distance: 1,
+		delay: 0
+	},
+	_mouseInit: function() {
+		var that = this;
+
+		this.element
+			.bind("mousedown."+this.widgetName, function(event) {
+				return that._mouseDown(event);
+			})
+			.bind("click."+this.widgetName, function(event) {
+				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
+					$.removeData(event.target, that.widgetName + ".preventClickEvent");
+					event.stopImmediatePropagation();
+					return false;
+				}
+			});
+
+		this.started = false;
+	},
+
+	// TODO: make sure destroying one instance of mouse doesn't mess with
+	// other instances of mouse
+	_mouseDestroy: function() {
+		this.element.unbind("."+this.widgetName);
+		if ( this._mouseMoveDelegate ) {
+			$(document)
+				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+		}
+	},
+
+	_mouseDown: function(event) {
+		// don't let more than one widget handle mouseStart
+		if( mouseHandled ) { return; }
+
+		// we may have missed mouseup (out of window)
+		(this._mouseStarted && this._mouseUp(event));
+
+		this._mouseDownEvent = event;
+
+		var that = this,
+			btnIsLeft = (event.which === 1),
+			// event.target.nodeName works around a bug in IE 8 with
+			// disabled inputs (#7620)
+			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+			return true;
+		}
+
+		this.mouseDelayMet = !this.options.delay;
+		if (!this.mouseDelayMet) {
+			this._mouseDelayTimer = setTimeout(function() {
+				that.mouseDelayMet = true;
+			}, this.options.delay);
+		}
+
+		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+			this._mouseStarted = (this._mouseStart(event) !== false);
+			if (!this._mouseStarted) {
+				event.preventDefault();
+				return true;
+			}
+		}
+
+		// Click event may never have fired (Gecko & Opera)
+		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
+			$.removeData(event.target, this.widgetName + ".preventClickEvent");
+		}
+
+		// these delegates are required to keep context
+		this._mouseMoveDelegate = function(event) {
+			return that._mouseMove(event);
+		};
+		this._mouseUpDelegate = function(event) {
+			return that._mouseUp(event);
+		};
+		$(document)
+			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);
+
+		event.preventDefault();
+
+		mouseHandled = true;
+		return true;
+	},
+
+	_mouseMove: function(event) {
+		// IE mouseup check - mouseup happened when mouse was out of window
+		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+			return this._mouseUp(event);
+		}
+
+		if (this._mouseStarted) {
+			this._mouseDrag(event);
+			return event.preventDefault();
+		}
+
+		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+			this._mouseStarted =
+				(this._mouseStart(this._mouseDownEvent, event) !== false);
+			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+		}
+
+		return !this._mouseStarted;
+	},
+
+	_mouseUp: function(event) {
+		$(document)
+			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+
+		if (this._mouseStarted) {
+			this._mouseStarted = false;
+
+			if (event.target === this._mouseDownEvent.target) {
+				$.data(event.target, this.widgetName + ".preventClickEvent", true);
+			}
+
+			this._mouseStop(event);
+		}
+
+		return false;
+	},
+
+	_mouseDistanceMet: function(event) {
+		return (Math.max(
+				Math.abs(this._mouseDownEvent.pageX - event.pageX),
+				Math.abs(this._mouseDownEvent.pageY - event.pageY)
+			) >= this.options.distance
+		);
+	},
+
+	_mouseDelayMet: function(/* event */) {
+		return this.mouseDelayMet;
+	},
+
+	// These are placeholder methods, to be overriden by extending plugin
+	_mouseStart: function(/* event */) {},
+	_mouseDrag: function(/* event */) {},
+	_mouseStop: function(/* event */) {},
+	_mouseCapture: function(/* event */) { return true; }
+});
+
+})(jQuery);
+(function( $, undefined ) {
+
+$.ui = $.ui || {};
+
+var cachedScrollbarWidth,
+	max = Math.max,
+	abs = Math.abs,
+	round = Math.round,
+	rhorizontal = /left|center|right/,
+	rvertical = /top|center|bottom/,
+	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+	rposition = /^\w+/,
+	rpercent = /%$/,
+	_position = $.fn.position;
+
+function getOffsets( offsets, width, height ) {
+	return [
+		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+	];
+}
+
+function parseCss( element, property ) {
+	return parseInt( $.css( element, property ), 10 ) || 0;
+}
+
+function getDimensions( elem ) {
+	var raw = elem[0];
+	if ( raw.nodeType === 9 ) {
+		return {
+			width: elem.width(),
+			height: elem.height(),
+			offset: { top: 0, left: 0 }
+		};
+	}
+	if ( $.isWindow( raw ) ) {
+		return {
+			width: elem.width(),
+			height: elem.height(),
+			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+		};
+	}
+	if ( raw.preventDefault ) {
+		return {
+			width: 0,
+			height: 0,
+			offset: { top: raw.pageY, left: raw.pageX }
+		};
+	}
+	return {
+		width: elem.outerWidth(),
+		height: elem.outerHeight(),
+		offset: elem.offset()
+	};
+}
+
+$.position = {
+	scrollbarWidth: function() {
+		if ( cachedScrollbarWidth !== undefined ) {
+			return cachedScrollbarWidth;
+		}
+		var w1, w2,
+			div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+			innerDiv = div.children()[0];
+
+		$( "body" ).append( div );
+		w1 = innerDiv.offsetWidth;
+		div.css( "overflow", "scroll" );
+
+		w2 = innerDiv.offsetWidth;
+
+		if ( w1 === w2 ) {
+			w2 = div[0].clientWidth;
+		}
+
+		div.remove();
+
+		return (cachedScrollbarWidth = w1 - w2);
+	},
+	getScrollInfo: function( within ) {
+		var overflowX = within.isWindow || within.isDocument ? "" :
+				within.element.css( "overflow-x" ),
+			overflowY = within.isWindow || within.isDocument ? "" :
+				within.element.css( "overflow-y" ),
+			hasOverflowX = overflowX === "scroll" ||
+				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
+			hasOverflowY = overflowY === "scroll" ||
+				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
+		return {
+			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+			height: hasOverflowX ? $.position.scrollbarWidth() : 0
+		};
+	},
+	getWithinInfo: function( element ) {
+		var withinElement = $( element || window ),
+			isWindow = $.isWindow( withinElement[0] ),
+			isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;
+		return {
+			element: withinElement,
+			isWindow: isWindow,
+			isDocument: isDocument,
+			offset: withinElement.offset() || { left: 0, top: 0 },
+			scrollLeft: withinElement.scrollLeft(),
+			scrollTop: withinElement.scrollTop(),
+			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
+			height: isWindow ? withinElement.height() : withinElement.outerHeight()
+		};
+	}
+};
+
+$.fn.position = function( options ) {
+	if ( !options || !options.of ) {
+		return _position.apply( this, arguments );
+	}
+
+	// make a copy, we don't want to modify arguments
+	options = $.extend( {}, options );
+
+	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+		target = $( options.of ),
+		within = $.position.getWithinInfo( options.within ),
+		scrollInfo = $.position.getScrollInfo( within ),
+		collision = ( options.collision || "flip" ).split( " " ),
+		offsets = {};
+
+	dimensions = getDimensions( target );
+	if ( target[0].preventDefault ) {
+		// force left top to allow flipping
+		options.at = "left top";
+	}
+	targetWidth = dimensions.width;
+	targetHeight = dimensions.height;
+	targetOffset = dimensions.offset;
+	// clone to reuse original targetOffset later
+	basePosition = $.extend( {}, targetOffset );
+
+	// force my and at to have valid horizontal and vertical positions
+	// if a value is missing or invalid, it will be converted to center
+	$.each( [ "my", "at" ], function() {
+		var pos = ( options[ this ] || "" ).split( " " ),
+			horizontalOffset,
+			verticalOffset;
+
+		if ( pos.length === 1) {
+			pos = rhorizontal.test( pos[ 0 ] ) ?
+				pos.concat( [ "center" ] ) :
+				rvertical.test( pos[ 0 ] ) ?
+					[ "center" ].concat( pos ) :
+					[ "center", "center" ];
+		}
+		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+
+		// calculate offsets
+		horizontalOffset = roffset.exec( pos[ 0 ] );
+		verticalOffset = roffset.exec( pos[ 1 ] );
+		offsets[ this ] = [
+			horizontalOffset ? horizontalOffset[ 0 ] : 0,
+			verticalOffset ? verticalOffset[ 0 ] : 0
+		];
+
+		// reduce to just the positions without the offsets
+		options[ this ] = [
+			rposition.exec( pos[ 0 ] )[ 0 ],
+			rposition.exec( pos[ 1 ] )[ 0 ]
+		];
+	});
+
+	// normalize collision option
+	if ( collision.length === 1 ) {
+		collision[ 1 ] = collision[ 0 ];
+	}
+
+	if ( options.at[ 0 ] === "right" ) {
+		basePosition.left += targetWidth;
+	} else if ( options.at[ 0 ] === "center" ) {
+		basePosition.left += targetWidth / 2;
+	}
+
+	if ( options.at[ 1 ] === "bottom" ) {
+		basePosition.top += targetHeight;
+	} else if ( options.at[ 1 ] === "center" ) {
+		basePosition.top += targetHeight / 2;
+	}
+
+	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+	basePosition.left += atOffset[ 0 ];
+	basePosition.top += atOffset[ 1 ];
+
+	return this.each(function() {
+		var collisionPosition, using,
+			elem = $( this ),
+			elemWidth = elem.outerWidth(),
+			elemHeight = elem.outerHeight(),
+			marginLeft = parseCss( this, "marginLeft" ),
+			marginTop = parseCss( this, "marginTop" ),
+			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
+			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
+			position = $.extend( {}, basePosition ),
+			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+
+		if ( options.my[ 0 ] === "right" ) {
+			position.left -= elemWidth;
+		} else if ( options.my[ 0 ] === "center" ) {
+			position.left -= elemWidth / 2;
+		}
+
+		if ( options.my[ 1 ] === "bottom" ) {
+			position.top -= elemHeight;
+		} else if ( options.my[ 1 ] === "center" ) {
+			position.top -= elemHeight / 2;
+		}
+
+		position.left += myOffset[ 0 ];
+		position.top += myOffset[ 1 ];
+
+		// if the browser doesn't support fractions, then round for consistent results
+		if ( !$.support.offsetFractions ) {
+			position.left = round( position.left );
+			position.top = round( position.top );
+		}
+
+		collisionPosition = {
+			marginLeft: marginLeft,
+			marginTop: marginTop
+		};
+
+		$.each( [ "left", "top" ], function( i, dir ) {
+			if ( $.ui.position[ collision[ i ] ] ) {
+				$.ui.position[ collision[ i ] ][ dir ]( position, {
+					targetWidth: targetWidth,
+					targetHeight: targetHeight,
+					elemWidth: elemWidth,
+					elemHeight: elemHeight,
+					collisionPosition: collisionPosition,
+					collisionWidth: collisionWidth,
+					collisionHeight: collisionHeight,
+					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+					my: options.my,
+					at: options.at,
+					within: within,
+					elem : elem
+				});
+			}
+		});
+
+		if ( options.using ) {
+			// adds feedback as second argument to using callback, if present
+			using = function( props ) {
+				var left = targetOffset.left - position.left,
+					right = left + targetWidth - elemWidth,
+					top = targetOffset.top - position.top,
+					bottom = top + targetHeight - elemHeight,
+					feedback = {
+						target: {
+							element: target,
+							left: targetOffset.left,
+							top: targetOffset.top,
+							width: targetWidth,
+							height: targetHeight
+						},
+						element: {
+							element: elem,
+							left: position.left,
+							top: position.top,
+							width: elemWidth,
+							height: elemHeight
+						},
+						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+					};
+				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+					feedback.horizontal = "center";
+				}
+				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+					feedback.vertical = "middle";
+				}
+				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+					feedback.important = "horizontal";
+				} else {
+					feedback.important = "vertical";
+				}
+				options.using.call( this, props, feedback );
+			};
+		}
+
+		elem.offset( $.extend( position, { using: using } ) );
+	});
+};
+
+$.ui.position = {
+	fit: {
+		left: function( position, data ) {
+			var within = data.within,
+				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+				outerWidth = within.width,
+				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+				overLeft = withinOffset - collisionPosLeft,
+				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+				newOverRight;
+
+			// element is wider than within
+			if ( data.collisionWidth > outerWidth ) {
+				// element is initially over the left side of within
+				if ( overLeft > 0 && overRight <= 0 ) {
+					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
+					position.left += overLeft - newOverRight;
+				// element is initially over right side of within
+				} else if ( overRight > 0 && overLeft <= 0 ) {
+					position.left = withinOffset;
+				// element is initially over both left and right sides of within
+				} else {
+					if ( overLeft > overRight ) {
+						position.left = withinOffset + outerWidth - data.collisionWidth;
+					} else {
+						position.left = withinOffset;
+					}
+				}
+			// too far left -> align with left edge
+			} else if ( overLeft > 0 ) {
+				position.left += overLeft;
+			// too far right -> align with right edge
+			} else if ( overRight > 0 ) {
+				position.left -= overRight;
+			// adjust based on position and margin
+			} else {
+				position.left = max( position.left - collisionPosLeft, position.left );
+			}
+		},
+		top: function( position, data ) {
+			var within = data.within,
+				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+				outerHeight = data.within.height,
+				collisionPosTop = position.top - data.collisionPosition.marginTop,
+				overTop = withinOffset - collisionPosTop,
+				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+				newOverBottom;
+
+			// element is taller than within
+			if ( data.collisionHeight > outerHeight ) {
+				// element is initially over the top of within
+				if ( overTop > 0 && overBottom <= 0 ) {
+					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
+					position.top += overTop - newOverBottom;
+				// element is initially over bottom of within
+				} else if ( overBottom > 0 && overTop <= 0 ) {
+					position.top = withinOffset;
+				// element is initially over both top and bottom of within
+				} else {
+					if ( overTop > overBottom ) {
+						position.top = withinOffset + outerHeight - data.collisionHeight;
+					} else {
+						position.top = withinOffset;
+					}
+				}
+			// too far up -> align with top
+			} else if ( overTop > 0 ) {
+				position.top += overTop;
+			// too far down -> align with bottom edge
+			} else if ( overBottom > 0 ) {
+				position.top -= overBottom;
+			// adjust based on position and margin
+			} else {
+				position.top = max( position.top - collisionPosTop, position.top );
+			}
+		}
+	},
+	flip: {
+		left: function( position, data ) {
+			var within = data.within,
+				withinOffset = within.offset.left + within.scrollLeft,
+				outerWidth = within.width,
+				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+				overLeft = collisionPosLeft - offsetLeft,
+				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+				myOffset = data.my[ 0 ] === "left" ?
+					-data.elemWidth :
+					data.my[ 0 ] === "right" ?
+						data.elemWidth :
+						0,
+				atOffset = data.at[ 0 ] === "left" ?
+					data.targetWidth :
+					data.at[ 0 ] === "right" ?
+						-data.targetWidth :
+						0,
+				offset = -2 * data.offset[ 0 ],
+				newOverRight,
+				newOverLeft;
+
+			if ( overLeft < 0 ) {
+				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+					position.left += myOffset + atOffset + offset;
+				}
+			}
+			else if ( overRight > 0 ) {
+				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+					position.left += myOffset + atOffset + offset;
+				}
+			}
+		},
+		top: function( position, data ) {
+			var within = data.within,
+				withinOffset = within.offset.top + within.scrollTop,
+				outerHeight = within.height,
+				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+				collisionPosTop = position.top - data.collisionPosition.marginTop,
+				overTop = collisionPosTop - offsetTop,
+				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+				top = data.my[ 1 ] === "top",
+				myOffset = top ?
+					-data.elemHeight :
+					data.my[ 1 ] === "bottom" ?
+						data.elemHeight :
+						0,
+				atOffset = data.at[ 1 ] === "top" ?
+					data.targetHeight :
+					data.at[ 1 ] === "bottom" ?
+						-data.targetHeight :
+						0,
+				offset = -2 * data.offset[ 1 ],
+				newOverTop,
+				newOverBottom;
+			if ( overTop < 0 ) {
+				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
+					position.top += myOffset + atOffset + offset;
+				}
+			}
+			else if ( overBottom > 0 ) {
+				newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
+					position.top += myOffset + atOffset + offset;
+				}
+			}
+		}
+	},
+	flipfit: {
+		left: function() {
+			$.ui.position.flip.left.apply( this, arguments );
+			$.ui.position.fit.left.apply( this, arguments );
+		},
+		top: function() {
+			$.ui.position.flip.top.apply( this, arguments );
+			$.ui.position.fit.top.apply( this, arguments );
+		}
+	}
+};
+
+// fraction support test
+(function () {
+	var testElement, testElementParent, testElementStyle, offsetLeft, i,
+		body = document.getElementsByTagName( "body" )[ 0 ],
+		div = document.createElement( "div" );
+
+	//Create a "fake body" for testing based on method used in jQuery.support
+	testElement = document.createElement( body ? "div" : "body" );
+	testElementStyle = {
+		visibility: "hidden",
+		width: 0,
+		height: 0,
+		border: 0,
+		margin: 0,
+		background: "none"
+	};
+	if ( body ) {
+		$.extend( testElementStyle, {
+			position: "absolute",
+			left: "-1000px",
+			top: "-1000px"
+		});
+	}
+	for ( i in testElementStyle ) {
+		testElement.style[ i ] = testElementStyle[ i ];
+	}
+	testElement.appendChild( div );
+	testElementParent = body || document.documentElement;
+	testElementParent.insertBefore( testElement, testElementParent.firstChild );
+
+	div.style.cssText = "position: absolute; left: 10.7432222px;";
+
+	offsetLeft = $( div ).offset().left;
+	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
+
+	testElement.innerHTML = "";
+	testElementParent.removeChild( testElement );
+})();
+
+}( jQuery ) );
+(function( $, undefined ) {
+
+$.widget("ui.draggable", $.ui.mouse, {
+	version: "1.10.4",
+	widgetEventPrefix: "drag",
+	options: {
+		addClasses: true,
+		appendTo: "parent",
+		axis: false,
+		connectToSortable: false,
+		containment: false,
+		cursor: "auto",
+		cursorAt: false,
+		grid: false,
+		handle: false,
+		helper: "original",
+		iframeFix: false,
+		opacity: false,
+		refreshPositions: false,
+		revert: false,
+		revertDuration: 500,
+		scope: "default",
+		scroll: true,
+		scrollSensitivity: 20,
+		scrollSpeed: 20,
+		snap: false,
+		snapMode: "both",
+		snapTolerance: 20,
+		stack: false,
+		zIndex: false,
+
+		// callbacks
+		drag: null,
+		start: null,
+		stop: null
+	},
+	_create: function() {
+
+		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
+			this.element[0].style.position = "relative";
+		}
+		if (this.options.addClasses){
+			this.element.addClass("ui-draggable");
+		}
+		if (this.options.disabled){
+			this.element.addClass("ui-draggable-disabled");
+		}
+
+		this._mouseInit();
+
+	},
+
+	_destroy: function() {
+		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
+		this._mouseDestroy();
+	},
+
+	_mouseCapture: function(event) {
+
+		var o = this.options;
+
+		// among others, prevent a drag on a resizable-handle
+		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
+			return false;
+		}
+
+		//Quit if we're not on a valid handle
+		this.handle = this._getHandle(event);
+		if (!this.handle) {
+			return false;
+		}
+
+		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
+			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
+			.css({
+				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
+				position: "absolute", opacity: "0.001", zIndex: 1000
+			})
+			.css($(this).offset())
+			.appendTo("body");
+		});
+
+		return true;
+
+	},
+
+	_mouseStart: function(event) {
+
+		var o = this.options;
+
+		//Create and append the visible helper
+		this.helper = this._createHelper(event);
+
+		this.helper.addClass("ui-draggable-dragging");
+
+		//Cache the helper size
+		this._cacheHelperProportions();
+
+		//If ddmanager is used for droppables, set the global draggable
+		if($.ui.ddmanager) {
+			$.ui.ddmanager.current = this;
+		}
+
+		/*
+		 * - Position generation -
+		 * This block generates everything position related - it's the core of draggables.
+		 */
+
+		//Cache the margins of the original element
+		this._cacheMargins();
+
+		//Store the helper's css position
+		this.cssPosition = this.helper.css( "position" );
+		this.scrollParent = this.helper.scrollParent();
+		this.offsetParent = this.helper.offsetParent();
+		this.offsetParentCssPosition = this.offsetParent.css( "position" );
+
+		//The element's absolute position on the page minus margins
+		this.offset = this.positionAbs = this.element.offset();
+		this.offset = {
+			top: this.offset.top - this.margins.top,
+			left: this.offset.left - this.margins.left
+		};
+
+		//Reset scroll cache
+		this.offset.scroll = false;
+
+		$.extend(this.offset, {
+			click: { //Where the click happened, relative to the element
+				left: event.pageX - this.offset.left,
+				top: event.pageY - this.offset.top
+			},
+			parent: this._getParentOffset(),
+			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+		});
+
+		//Generate the original position
+		this.originalPosition = this.position = this._generatePosition(event);
+		this.originalPageX = event.pageX;
+		this.originalPageY = event.pageY;
+
+		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+		//Set a containment if given in the options
+		this._setContainment();
+
+		//Trigger event + callbacks
+		if(this._trigger("start", event) === false) {
+			this._clear();
+			return false;
+		}
+
+		//Recache the helper size
+		this._cacheHelperProportions();
+
+		//Prepare the droppable offsets
+		if ($.ui.ddmanager && !o.dropBehaviour) {
+			$.ui.ddmanager.prepareOffsets(this, event);
+		}
+
+
+		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+
+		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+		if ( $.ui.ddmanager ) {
+			$.ui.ddmanager.dragStart(this, event);
+		}
+
+		return true;
+	},
+
+	_mouseDrag: function(event, noPropagation) {
+		// reset any necessary cached properties (see #5009)
+		if ( this.offsetParentCssPosition === "fixed" ) {
+			this.offset.parent = this._getParentOffset();
+		}
+
+		//Compute the helpers position
+		this.position = this._generatePosition(event);
+		this.positionAbs = this._convertPositionTo("absolute");
+
+		//Call plugins and callbacks and use the resulting position if something is returned
+		if (!noPropagation) {
+			var ui = this._uiHash();
+			if(this._trigger("drag", event, ui) === false) {
+				this._mouseUp({});
+				return false;
+			}
+			this.position = ui.position;
+		}
+
+		if(!this.options.axis || this.options.axis !== "y") {
+			this.helper[0].style.left = this.position.left+"px";
+		}
+		if(!this.options.axis || this.options.axis !== "x") {
+			this.helper[0].style.top = this.position.top+"px";
+		}
+		if($.ui.ddmanager) {
+			$.ui.ddmanager.drag(this, event);
+		}
+
+		return false;
+	},
+
+	_mouseStop: function(event) {
+
+		//If we are using droppables, inform the manager about the drop
+		var that = this,
+			dropped = false;
+		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+			dropped = $.ui.ddmanager.drop(this, event);
+		}
+
+		//if a drop comes from outside (a sortable)
+		if(this.dropped) {
+			dropped = this.dropped;
+			this.dropped = false;
+		}
+
+		//if the original element is no longer in the DOM don't bother to continue (see #8269)
+		if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
+			return false;
+		}
+
+		if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+				if(that._trigger("stop", event) !== false) {
+					that._clear();
+				}
+			});
+		} else {
+			if(this._trigger("stop", event) !== false) {
+				this._clear();
+			}
+		}
+
+		return false;
+	},
+
+	_mouseUp: function(event) {
+		//Remove frame helpers
+		$("div.ui-draggable-iframeFix").each(function() {
+			this.parentNode.removeChild(this);
+		});
+
+		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+		if( $.ui.ddmanager ) {
+			$.ui.ddmanager.dragStop(this, event);
+		}
+
+		return $.ui.mouse.prototype._mouseUp.call(this, event);
+	},
+
+	cancel: function() {
+
+		if(this.helper.is(".ui-draggable-dragging")) {
+			this._mouseUp({});
+		} else {
+			this._clear();
+		}
+
+		return this;
+
+	},
+
+	_getHandle: function(event) {
+		return this.options.handle ?
+			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
+			true;
+	},
+
+	_createHelper: function(event) {
+
+		var o = this.options,
+			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
+
+		if(!helper.parents("body").length) {
+			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
+		}
+
+		if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
+			helper.css("position", "absolute");
+		}
+
+		return helper;
+
+	},
+
+	_adjustOffsetFromHelper: function(obj) {
+		if (typeof obj === "string") {
+			obj = obj.split(" ");
+		}
+		if ($.isArray(obj)) {
+			obj = {left: +obj[0], top: +obj[1] || 0};
+		}
+		if ("left" in obj) {
+			this.offset.click.left = obj.left + this.margins.left;
+		}
+		if ("right" in obj) {
+			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+		}
+		if ("top" in obj) {
+			this.offset.click.top = obj.top + this.margins.top;
+		}
+		if ("bottom" in obj) {
+			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+		}
+	},
+
+	_getParentOffset: function() {
+
+		//Get the offsetParent and cache its position
+		var po = this.offsetParent.offset();
+
+		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+			po.left += this.scrollParent.scrollLeft();
+			po.top += this.scrollParent.scrollTop();
+		}
+
+		//This needs to be actually done for all browsers, since pageX/pageY includes this information
+		//Ugly IE fix
+		if((this.offsetParent[0] === document.body) ||
+			(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+			po = { top: 0, left: 0 };
+		}
+
+		return {
+			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+		};
+
+	},
+
+	_getRelativeOffset: function() {
+
+		if(this.cssPosition === "relative") {
+			var p = this.element.position();
+			return {
+				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+			};
+		} else {
+			return { top: 0, left: 0 };
+		}
+
+	},
+
+	_cacheMargins: function() {
+		this.margins = {
+			left: (parseInt(this.element.css("marginLeft"),10) || 0),
+			top: (parseInt(this.element.css("marginTop"),10) || 0),
+			right: (parseInt(this.element.css("marginRight"),10) || 0),
+			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
+		};
+	},
+
+	_cacheHelperProportions: function() {
+		this.helperProportions = {
+			width: this.helper.outerWidth(),
+			height: this.helper.outerHeight()
+		};
+	},
+
+	_setContainment: function() {
+
+		var over, c, ce,
+			o = this.options;
+
+		if ( !o.containment ) {
+			this.containment = null;
+			return;
+		}
+
+		if ( o.containment === "window" ) {
+			this.containment = [
+				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
+				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+			];
+			return;
+		}
+
+		if ( o.containment === "document") {
+			this.containment = [
+				0,
+				0,
+				$( document ).width() - this.helperProportions.width - this.margins.left,
+				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+			];
+			return;
+		}
+
+		if ( o.containment.constructor === Array ) {
+			this.containment = o.containment;
+			return;
+		}
+
+		if ( o.containment === "parent" ) {
+			o.containment = this.helper[ 0 ].parentNode;
+		}
+
+		c = $( o.containment );
+		ce = c[ 0 ];
+
+		if( !ce ) {
+			return;
+		}
+
+		over = c.css( "overflow" ) !== "hidden";
+
+		this.containment = [
+			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
+			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
+			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
+			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
+		];
+		this.relative_container = c;
+	},
+
+	_convertPositionTo: function(d, pos) {
+
+		if(!pos) {
+			pos = this.position;
+		}
+
+		var mod = d === "absolute" ? 1 : -1,
+			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
+
+		//Cache the scroll
+		if (!this.offset.scroll) {
+			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
+		}
+
+		return {
+			top: (
+				pos.top	+																// The absolute mouse position
+				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
+				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
+			),
+			left: (
+				pos.left +																// The absolute mouse position
+				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
+			)
+		};
+
+	},
+
+	_generatePosition: function(event) {
+
+		var containment, co, top, left,
+			o = this.options,
+			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
+			pageX = event.pageX,
+			pageY = event.pageY;
+
+		//Cache the scroll
+		if (!this.offset.scroll) {
+			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
+		}
+
+		/*
+		 * - Position constraining -
+		 * Constrain the position to a mix of grid, containment.
+		 */
+
+		// If we are not dragging yet, we won't check for options
+		if ( this.originalPosition ) {
+			if ( this.containment ) {
+				if ( this.relative_container ){
+					co = this.relative_container.offset();
+					containment = [
+						this.containment[ 0 ] + co.left,
+						this.containment[ 1 ] + co.top,
+						this.containment[ 2 ] + co.left,
+						this.containment[ 3 ] + co.top
+					];
+				}
+				else {
+					containment = this.containment;
+				}
+
+				if(event.pageX - this.offset.click.left < containment[0]) {
+					pageX = containment[0] + this.offset.click.left;
+				}
+				if(event.pageY - this.offset.click.top < containment[1]) {
+					pageY = containment[1] + this.offset.click.top;
+				}
+				if(event.pageX - this.offset.click.left > containment[2]) {
+					pageX = containment[2] + this.offset.click.left;
+				}
+				if(event.pageY - this.offset.click.top > containment[3]) {
+					pageY = containment[3] + this.offset.click.top;
+				}
+			}
+
+			if(o.grid) {
+				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+			}
+
+		}
+
+		return {
+			top: (
+				pageY -																	// The absolute mouse position
+				this.offset.click.top	-												// Click offset (relative to the element)
+				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+				( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
+			),
+			left: (
+				pageX -																	// The absolute mouse position
+				this.offset.click.left -												// Click offset (relative to the element)
+				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+				( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
+			)
+		};
+
+	},
+
+	_clear: function() {
+		this.helper.removeClass("ui-draggable-dragging");
+		if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
+			this.helper.remove();
+		}
+		this.helper = null;
+		this.cancelHelperRemoval = false;
+	},
+
+	// From now on bulk stuff - mainly helpers
+
+	_trigger: function(type, event, ui) {
+		ui = ui || this._uiHash();
+		$.ui.plugin.call(this, type, [event, ui]);
+		//The absolute position has to be recalculated after plugins
+		if(type === "drag") {
+			this.positionAbs = this._convertPositionTo("absolute");
+		}
+		return $.Widget.prototype._trigger.call(this, type, event, ui);
+	},
+
+	plugins: {},
+
+	_uiHash: function() {
+		return {
+			helper: this.helper,
+			position: this.position,
+			originalPosition: this.originalPosition,
+			offset: this.positionAbs
+		};
+	}
+
+});
+
+$.ui.plugin.add("draggable", "connectToSortable", {
+	start: function(event, ui) {
+
+		var inst = $(this).data("ui-draggable"), o = inst.options,
+			uiSortable = $.extend({}, ui, { item: inst.element });
+		inst.sortables = [];
+		$(o.connectToSortable).each(function() {
+			var sortable = $.data(this, "ui-sortable");
+			if (sortable && !sortable.options.disabled) {
+				inst.sortables.push({
+					instance: sortable,
+					shouldRevert: sortable.options.revert
+				});
+				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
+				sortable._trigger("activate", event, uiSortable);
+			}
+		});
+
+	},
+	stop: function(event, ui) {
+
+		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
+		var inst = $(this).data("ui-draggable"),
+			uiSortable = $.extend({}, ui, { item: inst.element });
+
+		$.each(inst.sortables, function() {
+			if(this.instance.isOver) {
+
+				this.instance.isOver = 0;
+
+				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
+				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
+
+				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
+				if(this.shouldRevert) {
+					this.instance.options.revert = this.shouldRevert;
+				}
+
+				//Trigger the stop of the sortable
+				this.instance._mouseStop(event);
+
+				this.instance.options.helper = this.instance.options._helper;
+
+				//If the helper has been the original item, restore properties in the sortable
+				if(inst.options.helper === "original") {
+					this.instance.currentItem.css({ top: "auto", left: "auto" });
+				}
+
+			} else {
+				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
+				this.instance._trigger("deactivate", event, uiSortable);
+			}
+
+		});
+
+	},
+	drag: function(event, ui) {
+
+		var inst = $(this).data("ui-draggable"), that = this;
+
+		$.each(inst.sortables, function() {
+
+			var innermostIntersecting = false,
+				thisSortable = this;
+
+			//Copy over some variables to allow calling the sortable's native _intersectsWith
+			this.instance.positionAbs = inst.positionAbs;
+			this.instance.helperProportions = inst.helperProportions;
+			this.instance.offset.click = inst.offset.click;
+
+			if(this.instance._intersectsWith(this.instance.containerCache)) {
+				innermostIntersecting = true;
+				$.each(inst.sortables, function () {
+					this.instance.positionAbs = inst.positionAbs;
+					this.instance.helperProportions = inst.helperProportions;
+					this.instance.offset.click = inst.offset.click;
+					if (this !== thisSortable &&
+						this.instance._intersectsWith(this.instance.containerCache) &&
+						$.contains(thisSortable.instance.element[0], this.instance.element[0])
+					) {
+						innermostIntersecting = false;
+					}
+					return innermostIntersecting;
+				});
+			}
+
+
+			if(innermostIntersecting) {
+				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
+				if(!this.instance.isOver) {
+
+					this.instance.isOver = 1;
+					//Now we fake the start of dragging for the sortable instance,
+					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
+					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
+					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
+					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
+					this.instance.options.helper = function() { return ui.helper[0]; };
+
+					event.target = this.instance.currentItem[0];
+					this.instance._mouseCapture(event, true);
+					this.instance._mouseStart(event, true, true);
+
+					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
+					this.instance.offset.click.top = inst.offset.click.top;
+					this.instance.offset.click.left = inst.offset.click.left;
+					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
+					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
+
+					inst._trigger("toSortable", event);
+					inst.dropped = this.instance.element; //draggable revert needs that
+					//hack so receive/update callbacks work (mostly)
+					inst.currentItem = inst.element;
+					this.instance.fromOutside = inst;
+
+				}
+
+				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
+				if(this.instance.currentItem) {
+					this.instance._mouseDrag(event);
+				}
+
+			} else {
+
+				//If it doesn't intersect with the sortable, and it intersected before,
+				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
+				if(this.instance.isOver) {
+
+					this.instance.isOver = 0;
+					this.instance.cancelHelperRemoval = true;
+
+					//Prevent reverting on this forced stop
+					this.instance.options.revert = false;
+
+					// The out event needs to be triggered independently
+					this.instance._trigger("out", event, this.instance._uiHash(this.instance));
+
+					this.instance._mouseStop(event, true);
+					this.instance.options.helper = this.instance.options._helper;
+
+					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
+					this.instance.currentItem.remove();
+					if(this.instance.placeholder) {
+						this.instance.placeholder.remove();
+					}
+
+					inst._trigger("fromSortable", event);
+					inst.dropped = false; //draggable revert needs that
+				}
+
+			}
+
+		});
+
+	}
+});
+
+$.ui.plugin.add("draggable", "cursor", {
+	start: function() {
+		var t = $("body"), o = $(this).data("ui-draggable").options;
+		if (t.css("cursor")) {
+			o._cursor = t.css("cursor");
+		}
+		t.css("cursor", o.cursor);
+	},
+	stop: function() {
+		var o = $(this).data("ui-draggable").options;
+		if (o._cursor) {
+			$("body").css("cursor", o._cursor);
+		}
+	}
+});
+
+$.ui.plugin.add("draggable", "opacity", {
+	start: function(event, ui) {
+		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+		if(t.css("opacity")) {
+			o._opacity = t.css("opacity");
+		}
+		t.css("opacity", o.opacity);
+	},
+	stop: function(event, ui) {
+		var o = $(this).data("ui-draggable").options;
+		if(o._opacity) {
+			$(ui.helper).css("opacity", o._opacity);
+		}
+	}
+});
+
+$.ui.plugin.add("draggable", "scroll", {
+	start: function() {
+		var i = $(this).data("ui-draggable");
+		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+			i.overflowOffset = i.scrollParent.offset();
+		}
+	},
+	drag: function( event ) {
+
+		var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
+
+		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+
+			if(!o.axis || o.axis !== "x") {
+				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
+				} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
+					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
+				}
+			}
+
+			if(!o.axis || o.axis !== "y") {
+				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
+				} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
+					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
+				}
+			}
+
+		} else {
+
+			if(!o.axis || o.axis !== "x") {
+				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+				}
+			}
+
+			if(!o.axis || o.axis !== "y") {
+				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+				}
+			}
+
+		}
+
+		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+			$.ui.ddmanager.prepareOffsets(i, event);
+		}
+
+	}
+});
+
+$.ui.plugin.add("draggable", "snap", {
+	start: function() {
+
+		var i = $(this).data("ui-draggable"),
+			o = i.options;
+
+		i.snapElements = [];
+
+		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
+			var $t = $(this),
+				$o = $t.offset();
+			if(this !== i.element[0]) {
+				i.snapElements.push({
+					item: this,
+					width: $t.outerWidth(), height: $t.outerHeight(),
+					top: $o.top, left: $o.left
+				});
+			}
+		});
+
+	},
+	drag: function(event, ui) {
+
+		var ts, bs, ls, rs, l, r, t, b, i, first,
+			inst = $(this).data("ui-draggable"),
+			o = inst.options,
+			d = o.snapTolerance,
+			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+
+		for (i = inst.snapElements.length - 1; i >= 0; i--){
+
+			l = inst.snapElements[i].left;
+			r = l + inst.snapElements[i].width;
+			t = inst.snapElements[i].top;
+			b = t + inst.snapElements[i].height;
+
+			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
+				if(inst.snapElements[i].snapping) {
+					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+				}
+				inst.snapElements[i].snapping = false;
+				continue;
+			}
+
+			if(o.snapMode !== "inner") {
+				ts = Math.abs(t - y2) <= d;
+				bs = Math.abs(b - y1) <= d;
+				ls = Math.abs(l - x2) <= d;
+				rs = Math.abs(r - x1) <= d;
+				if(ts) {
+					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+				}
+				if(bs) {
+					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
+				}
+				if(ls) {
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
+				}
+				if(rs) {
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
+				}
+			}
+
+			first = (ts || bs || ls || rs);
+
+			if(o.snapMode !== "outer") {
+				ts = Math.abs(t - y1) <= d;
+				bs = Math.abs(b - y2) <= d;
+				ls = Math.abs(l - x1) <= d;
+				rs = Math.abs(r - x2) <= d;
+				if(ts) {
+					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
+				}
+				if(bs) {
+					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+				}
+				if(ls) {
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
+				}
+				if(rs) {
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
+				}
+			}
+
+			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
+				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+			}
+			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+
+		}
+
+	}
+});
+
+$.ui.plugin.add("draggable", "stack", {
+	start: function() {
+		var min,
+			o = this.data("ui-draggable").options,
+			group = $.makeArray($(o.stack)).sort(function(a,b) {
+				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
+			});
+
+		if (!group.length) { return; }
+
+		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
+		$(group).each(function(i) {
+			$(this).css("zIndex", min + i);
+		});
+		this.css("zIndex", (min + group.length));
+	}
+});
+
+$.ui.plugin.add("draggable", "zIndex", {
+	start: function(event, ui) {
+		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+		if(t.css("zIndex")) {
+			o._zIndex = t.css("zIndex");
+		}
+		t.css("zIndex", o.zIndex);
+	},
+	stop: function(event, ui) {
+		var o = $(this).data("ui-draggable").options;
+		if(o._zIndex) {
+			$(ui.helper).css("zIndex", o._zIndex);
+		}
+	}
+});
+
+})(jQuery);
+(function( $, undefined ) {
+
+function isOverAxis( x, reference, size ) {
+	return ( x > reference ) && ( x < ( reference + size ) );
+}
+
+$.widget("ui.droppable", {
+	version: "1.10.4",
+	widgetEventPrefix: "drop",
+	options: {
+		accept: "*",
+		activeClass: false,
+		addClasses: true,
+		greedy: false,
+		hoverClass: false,
+		scope: "default",
+		tolerance: "intersect",
+
+		// callbacks
+		activate: null,
+		deactivate: null,
+		drop: null,
+		out: null,
+		over: null
+	},
+	_create: function() {
+
+		var proportions,
+			o = this.options,
+			accept = o.accept;
+
+		this.isover = false;
+		this.isout = true;
+
+		this.accept = $.isFunction(accept) ? accept : function(d) {
+			return d.is(accept);
+		};
+
+		this.proportions = function( /* valueToWrite */ ) {
+			if ( arguments.length ) {
+				// Store the droppable's proportions
+				proportions = arguments[ 0 ];
+			} else {
+				// Retrieve or derive the droppable's proportions
+				return proportions ?
+					proportions :
+					proportions = {
+						width: this.element[ 0 ].offsetWidth,
+						height: this.element[ 0 ].offsetHeight
+					};
+			}
+		};
+
+		// Add the reference and positions to the manager
+		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
+		$.ui.ddmanager.droppables[o.scope].push(this);
+
+		(o.addClasses && this.element.addClass("ui-droppable"));
+
+	},
+
+	_destroy: function() {
+		var i = 0,
+			drop = $.ui.ddmanager.droppables[this.options.scope];
+
+		for ( ; i < drop.length; i++ ) {
+			if ( drop[i] === this ) {
+				drop.splice(i, 1);
+			}
+		}
+
+		this.element.removeClass("ui-droppable ui-droppable-disabled");
+	},
+
+	_setOption: function(key, value) {
+
+		if(key === "accept") {
+			this.accept = $.isFunction(value) ? value : function(d) {
+				return d.is(value);
+			};
+		}
+		$.Widget.prototype._setOption.apply(this, arguments);
+	},
+
+	_activate: function(event) {
+		var draggable = $.ui.ddmanager.current;
+		if(this.options.activeClass) {
+			this.element.addClass(this.options.activeClass);
+		}
+		if(draggable){
+			this._trigger("activate", event, this.ui(draggable));
+		}
+	},
+
+	_deactivate: function(event) {
+		var draggable = $.ui.ddmanager.current;
+		if(this.options.activeClass) {
+			this.element.removeClass(this.options.activeClass);
+		}
+		if(draggable){
+			this._trigger("deactivate", event, this.ui(draggable));
+		}
+	},
+
+	_over: function(event) {
+
+		var draggable = $.ui.ddmanager.current;
+
+		// Bail if draggable and droppable are same element
+		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+			return;
+		}
+
+		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+			if(this.options.hoverClass) {
+				this.element.addClass(this.options.hoverClass);
+			}
+			this._trigger("over", event, this.ui(draggable));
+		}
+
+	},
+
+	_out: function(event) {
+
+		var draggable = $.ui.ddmanager.current;
+
+		// Bail if draggable and droppable are same element
+		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+			return;
+		}
+
+		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+			if(this.options.hoverClass) {
+				this.element.removeClass(this.options.hoverClass);
+			}
+			this._trigger("out", event, this.ui(draggable));
+		}
+
+	},
+
+	_drop: function(event,custom) {
+
+		var draggable = custom || $.ui.ddmanager.current,
+			childrenIntersection = false;
+
+		// Bail if draggable and droppable are same element
+		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+			return false;
+		}
+
+		this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
+			var inst = $.data(this, "ui-droppable");
+			if(
+				inst.options.greedy &&
+				!inst.options.disabled &&
+				inst.options.scope === draggable.options.scope &&
+				inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
+				$.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
+			) { childrenIntersection = true; return false; }
+		});
+		if(childrenIntersection) {
+			return false;
+		}
+
+		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+			if(this.options.activeClass) {
+				this.element.removeClass(this.options.activeClass);
+			}
+			if(this.options.hoverClass) {
+				this.element.removeClass(this.options.hoverClass);
+			}
+			this._trigger("drop", event, this.ui(draggable));
+			return this.element;
+		}
+
+		return false;
+
+	},
+
+	ui: function(c) {
+		return {
+			draggable: (c.currentItem || c.element),
+			helper: c.helper,
+			position: c.position,
+			offset: c.positionAbs
+		};
+	}
+
+});
+
+$.ui.intersect = function(draggable, droppable, toleranceMode) {
+
+	if (!droppable.offset) {
+		return false;
+	}
+
+	var draggableLeft, draggableTop,
+		x1 = (draggable.positionAbs || draggable.position.absolute).left,
+		y1 = (draggable.positionAbs || draggable.position.absolute).top,
+		x2 = x1 + draggable.helperProportions.width,
+		y2 = y1 + draggable.helperProportions.height,
+		l = droppable.offset.left,
+		t = droppable.offset.top,
+		r = l + droppable.proportions().width,
+		b = t + droppable.proportions().height;
+
+	switch (toleranceMode) {
+		case "fit":
+			return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
+		case "intersect":
+			return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
+				x2 - (draggable.helperProportions.width / 2) < r && // Left Half
+				t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
+				y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
+		case "pointer":
+			draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
+			draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
+			return isOverAxis( draggableTop, t, droppable.proportions().height ) && isOverAxis( draggableLeft, l, droppable.proportions().width );
+		case "touch":
+			return (
+				(y1 >= t && y1 <= b) ||	// Top edge touching
+				(y2 >= t && y2 <= b) ||	// Bottom edge touching
+				(y1 < t && y2 > b)		// Surrounded vertically
+			) && (
+				(x1 >= l && x1 <= r) ||	// Left edge touching
+				(x2 >= l && x2 <= r) ||	// Right edge touching
+				(x1 < l && x2 > r)		// Surrounded horizontally
+			);
+		default:
+			return false;
+		}
+
+};
+
+/*
+	This manager tracks offsets of draggables and droppables
+*/
+$.ui.ddmanager = {
+	current: null,
+	droppables: { "default": [] },
+	prepareOffsets: function(t, event) {
+
+		var i, j,
+			m = $.ui.ddmanager.droppables[t.options.scope] || [],
+			type = event ? event.type : null, // workaround for #2317
+			list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
+
+		droppablesLoop: for (i = 0; i < m.length; i++) {
+
+			//No disabled and non-accepted
+			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
+				continue;
+			}
+
+			// Filter out elements in the current dragged item
+			for (j=0; j < list.length; j++) {
+				if(list[j] === m[i].element[0]) {
+					m[i].proportions().height = 0;
+					continue droppablesLoop;
+				}
+			}
+
+			m[i].visible = m[i].element.css("display") !== "none";
+			if(!m[i].visible) {
+				continue;
+			}
+
+			//Activate the droppable if used directly from draggables
+			if(type === "mousedown") {
+				m[i]._activate.call(m[i], event);
+			}
+
+			m[ i ].offset = m[ i ].element.offset();
+			m[ i ].proportions({ width: m[ i ].element[ 0 ].offsetWidth, height: m[ i ].element[ 0 ].offsetHeight });
+
+		}
+
+	},
+	drop: function(draggable, event) {
+
+		var dropped = false;
+		// Create a copy of the droppables in case the list changes during the drop (#9116)
+		$.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
+
+			if(!this.options) {
+				return;
+			}
+			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
+				dropped = this._drop.call(this, event) || dropped;
+			}
+
+			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+				this.isout = true;
+				this.isover = false;
+				this._deactivate.call(this, event);
+			}
+
+		});
+		return dropped;
+
+	},
+	dragStart: function( draggable, event ) {
+		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
+			if( !draggable.options.refreshPositions ) {
+				$.ui.ddmanager.prepareOffsets( draggable, event );
+			}
+		});
+	},
+	drag: function(draggable, event) {
+
+		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+		if(draggable.options.refreshPositions) {
+			$.ui.ddmanager.prepareOffsets(draggable, event);
+		}
+
+		//Run through all droppables and check their positions based on specific tolerance options
+		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+
+			if(this.options.disabled || this.greedyChild || !this.visible) {
+				return;
+			}
+
+			var parentInstance, scope, parent,
+				intersects = $.ui.intersect(draggable, this, this.options.tolerance),
+				c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
+			if(!c) {
+				return;
+			}
+
+			if (this.options.greedy) {
+				// find droppable parents with same scope
+				scope = this.options.scope;
+				parent = this.element.parents(":data(ui-droppable)").filter(function () {
+					return $.data(this, "ui-droppable").options.scope === scope;
+				});
+
+				if (parent.length) {
+					parentInstance = $.data(parent[0], "ui-droppable");
+					parentInstance.greedyChild = (c === "isover");
+				}
+			}
+
+			// we just moved into a greedy child
+			if (parentInstance && c === "isover") {
+				parentInstance.isover = false;
+				parentInstance.isout = true;
+				parentInstance._out.call(parentInstance, event);
+			}
+
+			this[c] = true;
+			this[c === "isout" ? "isover" : "isout"] = false;
+			this[c === "isover" ? "_over" : "_out"].call(this, event);
+
+			// we just moved out of a greedy child
+			if (parentInstance && c === "isout") {
+				parentInstance.isout = false;
+				parentInstance.isover = true;
+				parentInstance._over.call(parentInstance, event);
+			}
+		});
+
+	},
+	dragStop: function( draggable, event ) {
+		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
+		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+		if( !draggable.options.refreshPositions ) {
+			$.ui.ddmanager.prepareOffsets( draggable, event );
+		}
+	}
+};
+
+})(jQuery);
+(function( $, undefined ) {
+
+function num(v) {
+	return parseInt(v, 10) || 0;
+}
+
+function isNumber(value) {
+	return !isNaN(parseInt(value, 10));
+}
+
+$.widget("ui.resizable", $.ui.mouse, {
+	version: "1.10.4",
+	widgetEventPrefix: "resize",
+	options: {
+		alsoResize: false,
+		animate: false,
+		animateDuration: "slow",
+		animateEasing: "swing",
+		aspectRatio: false,
+		autoHide: false,
+		containment: false,
+		ghost: false,
+		grid: false,
+		handles: "e,s,se",
+		helper: false,
+		maxHeight: null

<TRUNCATED>

[19/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of codemirror.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/1d23e6e1/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.css
old mode 100755
new mode 100644
index 4de1393..e2d4ec2
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.css
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.css
@@ -1,67 +1,97 @@
 /* BASICS */
 
 .CodeMirror {
-    /* Set height, width, borders, and global font properties here */
-    font-family: monospace;
-    height: 300px;
+  /* Set height, width, borders, and global font properties here */
+  font-family: monospace;
+  height: 300px;
 }
 .CodeMirror-scroll {
-    /* Set scrolling behaviour here */
-    overflow: auto;
+  /* Set scrolling behaviour here */
+  overflow: auto;
 }
 
 /* PADDING */
 
 .CodeMirror-lines {
-    padding: 4px 0; /* Vertical padding around content */
+  padding: 4px 0; /* Vertical padding around content */
 }
 .CodeMirror pre {
-    padding: 0 4px; /* Horizontal padding of content */
+  padding: 0 4px; /* Horizontal padding of content */
 }
 
 .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
-    background-color: white; /* The little square between H and V scrollbars */
+  background-color: white; /* The little square between H and V scrollbars */
 }
 
 /* GUTTER */
 
 .CodeMirror-gutters {
-    border-right: 1px solid #ddd;
-    background-color: #f7f7f7;
-    white-space: nowrap;
+  border-right: 1px solid #ddd;
+  background-color: #f7f7f7;
+  white-space: nowrap;
 }
 .CodeMirror-linenumbers {}
 .CodeMirror-linenumber {
-    padding: 0 3px 0 5px;
-    min-width: 20px;
-    text-align: right;
-    color: #999;
-    -moz-box-sizing: content-box;
-    box-sizing: content-box;
+  padding: 0 3px 0 5px;
+  min-width: 20px;
+  text-align: right;
+  color: #999;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
 }
 
+.CodeMirror-guttermarker { color: black; }
+.CodeMirror-guttermarker-subtle { color: #999; }
+
 /* CURSOR */
 
 .CodeMirror div.CodeMirror-cursor {
-    border-left: 1px solid black;
+  border-left: 1px solid black;
 }
 /* Shown when moving in bi-directional text */
 .CodeMirror div.CodeMirror-secondarycursor {
-    border-left: 1px solid silver;
+  border-left: 1px solid silver;
+}
+.CodeMirror.cm-fat-cursor div.CodeMirror-cursor {
+  width: auto;
+  border: 0;
+  background: #7e7;
+}
+.CodeMirror.cm-fat-cursor div.CodeMirror-cursors {
+  z-index: 1;
+}
+
+.cm-animate-fat-cursor {
+  width: auto;
+  border: 0;
+  -webkit-animation: blink 1.06s steps(1) infinite;
+  -moz-animation: blink 1.06s steps(1) infinite;
+  animation: blink 1.06s steps(1) infinite;
+}
+@-moz-keyframes blink {
+  0% { background: #7e7; }
+  50% { background: none; }
+  100% { background: #7e7; }
+}
+@-webkit-keyframes blink {
+  0% { background: #7e7; }
+  50% { background: none; }
+  100% { background: #7e7; }
 }
-.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor {
-    width: auto;
-    border: 0;
-    background: #7e7;
+@keyframes blink {
+  0% { background: #7e7; }
+  50% { background: none; }
+  100% { background: #7e7; }
 }
+
 /* Can style cursor different in overwrite (non-insert) mode */
 div.CodeMirror-overwrite div.CodeMirror-cursor {}
 
-.cm-tab { display: inline-block; }
+.cm-tab { display: inline-block; text-decoration: inherit; }
 
 .CodeMirror-ruler {
-    border-left: 1px solid #ccc;
-    position: absolute;
+  border-left: 1px solid #ccc;
+  position: absolute;
 }
 
 /* DEFAULT THEME */
@@ -70,11 +100,12 @@ div.CodeMirror-overwrite div.CodeMirror-cursor {}
 .cm-s-default .cm-atom {color: #219;}
 .cm-s-default .cm-number {color: #164;}
 .cm-s-default .cm-def {color: #00f;}
-.cm-s-default .cm-variable {color: black;}
+.cm-s-default .cm-variable,
+.cm-s-default .cm-punctuation,
+.cm-s-default .cm-property,
+.cm-s-default .cm-operator {}
 .cm-s-default .cm-variable-2 {color: #05a;}
 .cm-s-default .cm-variable-3 {color: #085;}
-.cm-s-default .cm-property {color: black;}
-.cm-s-default .cm-operator {color: black;}
 .cm-s-default .cm-comment {color: #a50;}
 .cm-s-default .cm-string {color: #a11;}
 .cm-s-default .cm-string-2 {color: #f50;}
@@ -94,12 +125,16 @@ div.CodeMirror-overwrite div.CodeMirror-cursor {}
 .cm-header, .cm-strong {font-weight: bold;}
 .cm-em {font-style: italic;}
 .cm-link {text-decoration: underline;}
+.cm-strikethrough {text-decoration: line-through;}
 
 .cm-s-default .cm-error {color: #f00;}
 .cm-invalidchar {color: #f00;}
 
+/* Default styles for common addons */
+
 div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
 div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
+.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
 .CodeMirror-activeline-background {background: #e8f2ff;}
 
 /* STOP */
@@ -108,152 +143,159 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
    the editor. You probably shouldn't touch them. */
 
 .CodeMirror {
-    line-height: 1;
-    position: relative;
-    overflow: hidden;
-    background: white;
-    color: black;
+  line-height: 1;
+  position: relative;
+  overflow: hidden;
+  background: white;
+  color: black;
 }
 
 .CodeMirror-scroll {
-    /* 30px is the magic margin used to hide the element's real scrollbars */
-    /* See overflow: hidden in .CodeMirror */
-    margin-bottom: -30px; margin-right: -30px;
-    padding-bottom: 30px;
-    height: 100%;
-    outline: none; /* Prevent dragging from highlighting the element */
-    position: relative;
-    -moz-box-sizing: content-box;
-    box-sizing: content-box;
+  /* 30px is the magic margin used to hide the element's real scrollbars */
+  /* See overflow: hidden in .CodeMirror */
+  margin-bottom: -30px; margin-right: -30px;
+  padding-bottom: 30px;
+  height: 100%;
+  outline: none; /* Prevent dragging from highlighting the element */
+  position: relative;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
 }
 .CodeMirror-sizer {
-    position: relative;
-    border-right: 30px solid transparent;
-    -moz-box-sizing: content-box;
-    box-sizing: content-box;
+  position: relative;
+  border-right: 30px solid transparent;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
 }
 
 /* The fake, visible scrollbars. Used to force redraw during scrolling
    before actuall scrolling happens, thus preventing shaking and
    flickering artifacts. */
 .CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
-    position: absolute;
-    z-index: 6;
-    display: none;
+  position: absolute;
+  z-index: 6;
+  display: none;
 }
 .CodeMirror-vscrollbar {
-    right: 0; top: 0;
-    overflow-x: hidden;
-    overflow-y: scroll;
+  right: 0; top: 0;
+  overflow-x: hidden;
+  overflow-y: scroll;
 }
 .CodeMirror-hscrollbar {
-    bottom: 0; left: 0;
-    overflow-y: hidden;
-    overflow-x: scroll;
+  bottom: 0; left: 0;
+  overflow-y: hidden;
+  overflow-x: scroll;
 }
 .CodeMirror-scrollbar-filler {
-    right: 0; bottom: 0;
+  right: 0; bottom: 0;
 }
 .CodeMirror-gutter-filler {
-    left: 0; bottom: 0;
+  left: 0; bottom: 0;
 }
 
 .CodeMirror-gutters {
-    position: absolute; left: 0; top: 0;
-    padding-bottom: 30px;
-    z-index: 3;
+  position: absolute; left: 0; top: 0;
+  padding-bottom: 30px;
+  z-index: 3;
 }
 .CodeMirror-gutter {
-    white-space: normal;
-    height: 100%;
-    -moz-box-sizing: content-box;
-    box-sizing: content-box;
-    padding-bottom: 30px;
-    margin-bottom: -32px;
-    display: inline-block;
-    /* Hack to make IE7 behave */
-    *zoom:1;
-    *display:inline;
+  white-space: normal;
+  height: 100%;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
+  padding-bottom: 30px;
+  margin-bottom: -32px;
+  display: inline-block;
+  /* Hack to make IE7 behave */
+  *zoom:1;
+  *display:inline;
+}
+.CodeMirror-gutter-wrapper {
+  position: absolute;
+  z-index: 4;
+  height: 100%;
 }
 .CodeMirror-gutter-elt {
-    position: absolute;
-    cursor: default;
-    z-index: 4;
+  position: absolute;
+  cursor: default;
+  z-index: 4;
 }
 
 .CodeMirror-lines {
-    cursor: text;
+  cursor: text;
+  min-height: 1px; /* prevents collapsing before first draw */
 }
 .CodeMirror pre {
-    /* Reset some styles that the rest of the page might have set */
-    -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
-    border-width: 0;
-    background: transparent;
-    font-family: inherit;
-    font-size: inherit;
-    margin: 0;
-    white-space: pre;
-    word-wrap: normal;
-    line-height: inherit;
-    color: inherit;
-    z-index: 2;
-    position: relative;
-    overflow: visible;
+  /* Reset some styles that the rest of the page might have set */
+  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
+  border-width: 0;
+  background: transparent;
+  font-family: inherit;
+  font-size: inherit;
+  margin: 0;
+  white-space: pre;
+  word-wrap: normal;
+  line-height: inherit;
+  color: inherit;
+  z-index: 2;
+  position: relative;
+  overflow: visible;
 }
 .CodeMirror-wrap pre {
-    word-wrap: break-word;
-    white-space: pre-wrap;
-    word-break: normal;
+  word-wrap: break-word;
+  white-space: pre-wrap;
+  word-break: normal;
 }
 
 .CodeMirror-linebackground {
-    position: absolute;
-    left: 0; right: 0; top: 0; bottom: 0;
-    z-index: 0;
+  position: absolute;
+  left: 0; right: 0; top: 0; bottom: 0;
+  z-index: 0;
 }
 
 .CodeMirror-linewidget {
-    position: relative;
-    z-index: 2;
-    overflow: auto;
+  position: relative;
+  z-index: 2;
+  overflow: auto;
 }
 
 .CodeMirror-widget {}
 
 .CodeMirror-wrap .CodeMirror-scroll {
-    overflow-x: hidden;
+  overflow-x: hidden;
 }
 
 .CodeMirror-measure {
-    position: absolute;
-    width: 100%;
-    height: 0;
-    overflow: hidden;
-    visibility: hidden;
+  position: absolute;
+  width: 100%;
+  height: 0;
+  overflow: hidden;
+  visibility: hidden;
 }
 .CodeMirror-measure pre { position: static; }
 
 .CodeMirror div.CodeMirror-cursor {
-    position: absolute;
-    border-right: none;
-    width: 0;
+  position: absolute;
+  border-right: none;
+  width: 0;
 }
 
 div.CodeMirror-cursors {
-    visibility: hidden;
-    position: relative;
-    z-index: 1;
+  visibility: hidden;
+  position: relative;
+  z-index: 3;
 }
 .CodeMirror-focused div.CodeMirror-cursors {
-    visibility: visible;
+  visibility: visible;
 }
 
 .CodeMirror-selected { background: #d9d9d9; }
 .CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
+.CodeMirror-crosshair { cursor: crosshair; }
 
 .cm-searching {
-    background: #ffa;
-    background: rgba(255, 255, 0, .4);
+  background: #ffa;
+  background: rgba(255, 255, 0, .4);
 }
 
 /* IE7 hack to prevent it from returning funny offsetTops on the spans */
@@ -263,8 +305,14 @@ div.CodeMirror-cursors {
 .cm-force-border { padding-right: .1px; }
 
 @media print {
-    /* Hide the cursor when printing */
-    .CodeMirror div.CodeMirror-cursors {
-        visibility: hidden;
-    }
+  /* Hide the cursor when printing */
+  .CodeMirror div.CodeMirror-cursors {
+    visibility: hidden;
+  }
 }
+
+/* See issue #2901 */
+.cm-tab-wrap-hack:after { content: ''; }
+
+/* Help users use markselection to safely style text background */
+span.CodeMirror-selectedtext { background: none; }


[18/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of codemirror.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/1d23e6e1/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.js
deleted file mode 100755
index a085720..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.js
+++ /dev/null
@@ -1,8488 +0,0 @@
-// This is CodeMirror (http://codemirror.net), a code editor
-// implemented in JavaScript on top of the browser's DOM.
-//
-// You can find some technical background for some of the code below
-// at http://marijnhaverbeke.nl/blog/#cm-internals .
-
-(function (mod) {
-    if (typeof exports == "object" && typeof module == "object") // CommonJS
-        module.exports = mod();
-    else if (typeof define == "function" && define.amd) // AMD
-        return define([], mod);
-    else // Plain browser env
-        this.CodeMirror = mod();
-})(function () {
-    "use strict";
-
-    // BROWSER SNIFFING
-
-    // Kludges for bugs and behavior differences that can't be feature
-    // detected are enabled based on userAgent etc sniffing.
-
-    var gecko = /gecko\/\d/i.test(navigator.userAgent);
-    // ie_uptoN means Internet Explorer version N or lower
-    var ie_upto10 = /MSIE \d/.test(navigator.userAgent);
-    var ie_upto7 = ie_upto10 && (document.documentMode == null || document.documentMode < 8);
-    var ie_upto8 = ie_upto10 && (document.documentMode == null || document.documentMode < 9);
-    var ie_upto9 = ie_upto10 && (document.documentMode == null || document.documentMode < 10);
-    var ie_11up = /Trident\/([7-9]|\d{2,})\./.test(navigator.userAgent);
-    var ie = ie_upto10 || ie_11up;
-    var webkit = /WebKit\//.test(navigator.userAgent);
-    var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent);
-    var chrome = /Chrome\//.test(navigator.userAgent);
-    var presto = /Opera\//.test(navigator.userAgent);
-    var safari = /Apple Computer/.test(navigator.vendor);
-    var khtml = /KHTML\//.test(navigator.userAgent);
-    var mac_geLion = /Mac OS X 1\d\D([7-9]|\d\d)\D/.test(navigator.userAgent);
-    var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent);
-    var phantom = /PhantomJS/.test(navigator.userAgent);
-
-    var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent);
-    // This is woefully incomplete. Suggestions for alternative methods welcome.
-    var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent);
-    var mac = ios || /Mac/.test(navigator.platform);
-    var windows = /win/i.test(navigator.platform);
-
-    var presto_version = presto && navigator.userAgent.match(/Version\/(\d*\.\d*)/);
-    if (presto_version)
-        presto_version = Number(presto_version[1]);
-    if (presto_version && presto_version >= 15) {
-        presto = false;
-        webkit = true;
-    }
-    // Some browsers use the wrong event properties to signal cmd/ctrl on OS X
-    var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));
-    var captureRightClick = gecko || (ie && !ie_upto8);
-
-    // Optimize some code when these features are not used.
-    var sawReadOnlySpans = false, sawCollapsedSpans = false;
-
-    // EDITOR CONSTRUCTOR
-
-    // A CodeMirror instance represents an editor. This is the object
-    // that user code is usually dealing with.
-
-    function CodeMirror(place, options) {
-        if (!(this instanceof CodeMirror))
-            return new CodeMirror(place, options);
-
-        this.options = options = options || {};
-        // Determine effective options based on given values and defaults.
-        for (var opt in defaults)
-            if (!options.hasOwnProperty(opt))
-                options[opt] = defaults[opt];
-        setGuttersForLineNumbers(options);
-
-        var doc = options.value;
-        if (typeof doc == "string")
-            doc = new Doc(doc, options.mode);
-        this.doc = doc;
-
-        var display = this.display = new Display(place, doc);
-        display.wrapper.CodeMirror = this;
-        updateGutters(this);
-        themeChanged(this);
-        if (options.lineWrapping)
-            this.display.wrapper.className += " CodeMirror-wrap";
-        if (options.autofocus && !mobile)
-            focusInput(this);
-
-        this.state = {
-            keyMaps: [], // stores maps added by addKeyMap
-            overlays: [], // highlighting overlays, as added by addOverlay
-            modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info
-            overwrite: false, focused: false,
-            suppressEdits: false, // used to disable editing during key handlers when in readOnly mode
-            pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in readInput
-            draggingText: false,
-            highlight: new Delayed() // stores highlight worker timeout
-        };
-
-        // Override magic textarea content restore that IE sometimes does
-        // on our hidden textarea on reload
-        if (ie_upto10)
-            setTimeout(bind(resetInput, this, true), 20);
-
-        registerEventHandlers(this);
-
-        var cm = this;
-        runInOp(this, function () {
-            cm.curOp.forceUpdate = true;
-            attachDoc(cm, doc);
-
-            if ((options.autofocus && !mobile) || activeElt() == display.input)
-                setTimeout(bind(onFocus, cm), 20);
-            else
-                onBlur(cm);
-
-            for (var opt in optionHandlers)
-                if (optionHandlers.hasOwnProperty(opt))
-                    optionHandlers[opt](cm, options[opt], Init);
-            for (var i = 0; i < initHooks.length; ++i)
-                initHooks[i](cm);
-        });
-    }
-
-    // DISPLAY CONSTRUCTOR
-
-    // The display handles the DOM integration, both for input reading
-    // and content drawing. It holds references to DOM nodes and
-    // display-related state.
-
-    function Display(place, doc) {
-        var d = this;
-
-        // The semihidden textarea that is focused when the editor is
-        // focused, and receives input.
-        var input = d.input = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none");
-        // The textarea is kept positioned near the cursor to prevent the
-        // fact that it'll be scrolled into view on input from scrolling
-        // our fake cursor out of view. On webkit, when wrap=off, paste is
-        // very slow. So make the area wide instead.
-        if (webkit)
-            input.style.width = "1000px";
-        else
-            input.setAttribute("wrap", "off");
-        // If border: 0; -- iOS fails to open keyboard (issue #1287)
-        if (ios)
-            input.style.border = "1px solid black";
-        input.setAttribute("autocorrect", "off");
-        input.setAttribute("autocapitalize", "off");
-        input.setAttribute("spellcheck", "false");
-
-        // Wraps and hides input textarea
-        d.inputDiv = elt("div", [input], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
-        // The fake scrollbar elements.
-        d.scrollbarH = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar");
-        d.scrollbarV = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar");
-        // Covers bottom-right square when both scrollbars are present.
-        d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler");
-        // Covers bottom of gutter when coverGutterNextToScrollbar is on
-        // and h scrollbar is present.
-        d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler");
-        // Will contain the actual code, positioned to cover the viewport.
-        d.lineDiv = elt("div", null, "CodeMirror-code");
-        // Elements are added to these to represent selection and cursors.
-        d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1");
-        d.cursorDiv = elt("div", null, "CodeMirror-cursors");
-        // A visibility: hidden element used to find the size of things.
-        d.measure = elt("div", null, "CodeMirror-measure");
-        // When lines outside of the viewport are measured, they are drawn in this.
-        d.lineMeasure = elt("div", null, "CodeMirror-measure");
-        // Wraps everything that needs to exist inside the vertically-padded coordinate system
-        d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],
-                null, "position: relative; outline: none");
-        // Moved around its parent to cover visible view.
-        d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative");
-        // Set to the height of the document, allowing scrolling.
-        d.sizer = elt("div", [d.mover], "CodeMirror-sizer");
-        // Behavior of elts with overflow: auto and padding is
-        // inconsistent across browsers. This is used to ensure the
-        // scrollable area is big enough.
-        d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerCutOff + "px; width: 1px;");
-        // Will contain the gutters, if any.
-        d.gutters = elt("div", null, "CodeMirror-gutters");
-        d.lineGutter = null;
-        // Actual scrollable element.
-        d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll");
-        d.scroller.setAttribute("tabIndex", "-1");
-        // The element in which the editor lives.
-        d.wrapper = elt("div", [d.inputDiv, d.scrollbarH, d.scrollbarV,
-            d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror");
-
-        // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)
-        if (ie_upto7) {
-            d.gutters.style.zIndex = -1;
-            d.scroller.style.paddingRight = 0;
-        }
-        // Needed to hide big blue blinking cursor on Mobile Safari
-        if (ios)
-            input.style.width = "0px";
-        if (!webkit)
-            d.scroller.draggable = true;
-        // Needed to handle Tab key in KHTML
-        if (khtml) {
-            d.inputDiv.style.height = "1px";
-            d.inputDiv.style.position = "absolute";
-        }
-        // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
-        if (ie_upto7)
-            d.scrollbarH.style.minHeight = d.scrollbarV.style.minWidth = "18px";
-
-        if (place.appendChild)
-            place.appendChild(d.wrapper);
-        else
-            place(d.wrapper);
-
-        // Current rendered range (may be bigger than the view window).
-        d.viewFrom = d.viewTo = doc.first;
-        // Information about the rendered lines.
-        d.view = [];
-        // Holds info about a single rendered line when it was rendered
-        // for measurement, while not in view.
-        d.externalMeasured = null;
-        // Empty space (in pixels) above the view
-        d.viewOffset = 0;
-        d.lastSizeC = 0;
-        d.updateLineNumbers = null;
-
-        // Used to only resize the line number gutter when necessary (when
-        // the amount of lines crosses a boundary that makes its width change)
-        d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;
-        // See readInput and resetInput
-        d.prevInput = "";
-        // Set to true when a non-horizontal-scrolling line widget is
-        // added. As an optimization, line widget aligning is skipped when
-        // this is false.
-        d.alignWidgets = false;
-        // Flag that indicates whether we expect input to appear real soon
-        // now (after some event like 'keypress' or 'input') and are
-        // polling intensively.
-        d.pollingFast = false;
-        // Self-resetting timeout for the poller
-        d.poll = new Delayed();
-
-        d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
-
-        // Tracks when resetInput has punted to just putting a short
-        // string into the textarea instead of the full selection.
-        d.inaccurateSelection = false;
-
-        // Tracks the maximum line length so that the horizontal scrollbar
-        // can be kept static when scrolling.
-        d.maxLine = null;
-        d.maxLineLength = 0;
-        d.maxLineChanged = false;
-
-        // Used for measuring wheel scrolling granularity
-        d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;
-
-        // True when shift is held down.
-        d.shift = false;
-    }
-
-    // STATE UPDATES
-
-    // Used to get the editor into a consistent state again when options change.
-
-    function loadMode(cm) {
-        cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption);
-        resetModeState(cm);
-    }
-
-    function resetModeState(cm) {
-        cm.doc.iter(function (line) {
-            if (line.stateAfter)
-                line.stateAfter = null;
-            if (line.styles)
-                line.styles = null;
-        });
-        cm.doc.frontier = cm.doc.first;
-        startWorker(cm, 100);
-        cm.state.modeGen++;
-        if (cm.curOp)
-            regChange(cm);
-    }
-
-    function wrappingChanged(cm) {
-        if (cm.options.lineWrapping) {
-            cm.display.wrapper.className += " CodeMirror-wrap";
-            cm.display.sizer.style.minWidth = "";
-        } else {
-            cm.display.wrapper.className = cm.display.wrapper.className.replace(" CodeMirror-wrap", "");
-            findMaxLine(cm);
-        }
-        estimateLineHeights(cm);
-        regChange(cm);
-        clearCaches(cm);
-        setTimeout(function () {
-            updateScrollbars(cm);
-        }, 100);
-    }
-
-    // Returns a function that estimates the height of a line, to use as
-    // first approximation until the line becomes visible (and is thus
-    // properly measurable).
-    function estimateHeight(cm) {
-        var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;
-        var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);
-        return function (line) {
-            if (lineIsHidden(cm.doc, line))
-                return 0;
-
-            var widgetsHeight = 0;
-            if (line.widgets)
-                for (var i = 0; i < line.widgets.length; i++) {
-                    if (line.widgets[i].height)
-                        widgetsHeight += line.widgets[i].height;
-                }
-
-            if (wrapping)
-                return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th;
-            else
-                return widgetsHeight + th;
-        };
-    }
-
-    function estimateLineHeights(cm) {
-        var doc = cm.doc, est = estimateHeight(cm);
-        doc.iter(function (line) {
-            var estHeight = est(line);
-            if (estHeight != line.height)
-                updateLineHeight(line, estHeight);
-        });
-    }
-
-    function keyMapChanged(cm) {
-        var map = keyMap[cm.options.keyMap], style = map.style;
-        cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-keymap-\S+/g, "") +
-                (style ? " cm-keymap-" + style : "");
-    }
-
-    function themeChanged(cm) {
-        cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
-                cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-");
-        clearCaches(cm);
-    }
-
-    function guttersChanged(cm) {
-        updateGutters(cm);
-        regChange(cm);
-        setTimeout(function () {
-            alignHorizontally(cm);
-        }, 20);
-    }
-
-    // Rebuild the gutter elements, ensure the margin to the left of the
-    // code matches their width.
-    function updateGutters(cm) {
-        var gutters = cm.display.gutters, specs = cm.options.gutters;
-        removeChildren(gutters);
-        for (var i = 0; i < specs.length; ++i) {
-            var gutterClass = specs[i];
-            var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass));
-            if (gutterClass == "CodeMirror-linenumbers") {
-                cm.display.lineGutter = gElt;
-                gElt.style.width = (cm.display.lineNumWidth || 1) + "px";
-            }
-        }
-        gutters.style.display = i ? "" : "none";
-        var width = gutters.offsetWidth;
-        cm.display.sizer.style.marginLeft = width + "px";
-        if (i)
-            cm.display.scrollbarH.style.left = cm.options.fixedGutter ? width + "px" : 0;
-    }
-
-    // Compute the character length of a line, taking into account
-    // collapsed ranges (see markText) that might hide parts, and join
-    // other lines onto it.
-    function lineLength(line) {
-        if (line.height == 0)
-            return 0;
-        var len = line.text.length, merged, cur = line;
-        while (merged = collapsedSpanAtStart(cur)) {
-            var found = merged.find(0, true);
-            cur = found.from.line;
-            len += found.from.ch - found.to.ch;
-        }
-        cur = line;
-        while (merged = collapsedSpanAtEnd(cur)) {
-            var found = merged.find(0, true);
-            len -= cur.text.length - found.from.ch;
-            cur = found.to.line;
-            len += cur.text.length - found.to.ch;
-        }
-        return len;
-    }
-
-    // Find the longest line in the document.
-    function findMaxLine(cm) {
-        var d = cm.display, doc = cm.doc;
-        d.maxLine = getLine(doc, doc.first);
-        d.maxLineLength = lineLength(d.maxLine);
-        d.maxLineChanged = true;
-        doc.iter(function (line) {
-            var len = lineLength(line);
-            if (len > d.maxLineLength) {
-                d.maxLineLength = len;
-                d.maxLine = line;
-            }
-        });
-    }
-
-    // Make sure the gutters options contains the element
-    // "CodeMirror-linenumbers" when the lineNumbers option is true.
-    function setGuttersForLineNumbers(options) {
-        var found = indexOf(options.gutters, "CodeMirror-linenumbers");
-        if (found == -1 && options.lineNumbers) {
-            options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]);
-        } else if (found > -1 && !options.lineNumbers) {
-            options.gutters = options.gutters.slice(0);
-            options.gutters.splice(found, 1);
-        }
-    }
-
-    // SCROLLBARS
-
-    // Prepare DOM reads needed to update the scrollbars. Done in one
-    // shot to minimize update/measure roundtrips.
-    function measureForScrollbars(cm) {
-        var scroll = cm.display.scroller;
-        return {
-            clientHeight: scroll.clientHeight,
-            barHeight: cm.display.scrollbarV.clientHeight,
-            scrollWidth: scroll.scrollWidth, clientWidth: scroll.clientWidth,
-            barWidth: cm.display.scrollbarH.clientWidth,
-            docHeight: Math.round(cm.doc.height + paddingVert(cm.display))
-        };
-    }
-
-    // Re-synchronize the fake scrollbars with the actual size of the
-    // content.
-    function updateScrollbars(cm, measure) {
-        if (!measure)
-            measure = measureForScrollbars(cm);
-        var d = cm.display;
-        var scrollHeight = measure.docHeight + scrollerCutOff;
-        var needsH = measure.scrollWidth > measure.clientWidth;
-        var needsV = scrollHeight > measure.clientHeight;
-        if (needsV) {
-            d.scrollbarV.style.display = "block";
-            d.scrollbarV.style.bottom = needsH ? scrollbarWidth(d.measure) + "px" : "0";
-            // A bug in IE8 can cause this value to be negative, so guard it.
-            d.scrollbarV.firstChild.style.height =
-                    Math.max(0, scrollHeight - measure.clientHeight + (measure.barHeight || d.scrollbarV.clientHeight)) + "px";
-        } else {
-            d.scrollbarV.style.display = "";
-            d.scrollbarV.firstChild.style.height = "0";
-        }
-        if (needsH) {
-            d.scrollbarH.style.display = "block";
-            d.scrollbarH.style.right = needsV ? scrollbarWidth(d.measure) + "px" : "0";
-            d.scrollbarH.firstChild.style.width =
-                    (measure.scrollWidth - measure.clientWidth + (measure.barWidth || d.scrollbarH.clientWidth)) + "px";
-        } else {
-            d.scrollbarH.style.display = "";
-            d.scrollbarH.firstChild.style.width = "0";
-        }
-        if (needsH && needsV) {
-            d.scrollbarFiller.style.display = "block";
-            d.scrollbarFiller.style.height = d.scrollbarFiller.style.width = scrollbarWidth(d.measure) + "px";
-        } else
-            d.scrollbarFiller.style.display = "";
-        if (needsH && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
-            d.gutterFiller.style.display = "block";
-            d.gutterFiller.style.height = scrollbarWidth(d.measure) + "px";
-            d.gutterFiller.style.width = d.gutters.offsetWidth + "px";
-        } else
-            d.gutterFiller.style.display = "";
-
-        if (mac_geLion && scrollbarWidth(d.measure) === 0) {
-            d.scrollbarV.style.minWidth = d.scrollbarH.style.minHeight = mac_geMountainLion ? "18px" : "12px";
-            var barMouseDown = function (e) {
-                if (e_target(e) != d.scrollbarV && e_target(e) != d.scrollbarH)
-                    operation(cm, onMouseDown)(e);
-            };
-            on(d.scrollbarV, "mousedown", barMouseDown);
-            on(d.scrollbarH, "mousedown", barMouseDown);
-        }
-    }
-
-    // Compute the lines that are visible in a given viewport (defaults
-    // the the current scroll position). viewPort may contain top,
-    // height, and ensure (see op.scrollToPos) properties.
-    function visibleLines(display, doc, viewPort) {
-        var top = viewPort && viewPort.top != null ? viewPort.top : display.scroller.scrollTop;
-        top = Math.floor(top - paddingTop(display));
-        var bottom = viewPort && viewPort.bottom != null ? viewPort.bottom : top + display.wrapper.clientHeight;
-
-        var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);
-        // Ensure is a {from: {line, ch}, to: {line, ch}} object, and
-        // forces those lines into the viewport (if possible).
-        if (viewPort && viewPort.ensure) {
-            var ensureFrom = viewPort.ensure.from.line, ensureTo = viewPort.ensure.to.line;
-            if (ensureFrom < from)
-                return {from: ensureFrom,
-                    to: lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight)};
-            if (Math.min(ensureTo, doc.lastLine()) >= to)
-                return {from: lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight),
-                    to: ensureTo};
-        }
-        return {from: from, to: to};
-    }
-
-    // LINE NUMBERS
-
-    // Re-align line numbers and gutter marks to compensate for
-    // horizontal scrolling.
-    function alignHorizontally(cm) {
-        var display = cm.display, view = display.view;
-        if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter))
-            return;
-        var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;
-        var gutterW = display.gutters.offsetWidth, left = comp + "px";
-        for (var i = 0; i < view.length; i++)
-            if (!view[i].hidden) {
-                if (cm.options.fixedGutter && view[i].gutter)
-                    view[i].gutter.style.left = left;
-                var align = view[i].alignable;
-                if (align)
-                    for (var j = 0; j < align.length; j++)
-                        align[j].style.left = left;
-            }
-        if (cm.options.fixedGutter)
-            display.gutters.style.left = (comp + gutterW) + "px";
-    }
-
-    // Used to ensure that the line number gutter is still the right
-    // size for the current document size. Returns true when an update
-    // is needed.
-    function maybeUpdateLineNumberWidth(cm) {
-        if (!cm.options.lineNumbers)
-            return false;
-        var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;
-        if (last.length != display.lineNumChars) {
-            var test = display.measure.appendChild(elt("div", [elt("div", last)],
-                    "CodeMirror-linenumber CodeMirror-gutter-elt"));
-            var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;
-            display.lineGutter.style.width = "";
-            display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding);
-            display.lineNumWidth = display.lineNumInnerWidth + padding;
-            display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;
-            display.lineGutter.style.width = display.lineNumWidth + "px";
-            var width = display.gutters.offsetWidth;
-            display.scrollbarH.style.left = cm.options.fixedGutter ? width + "px" : 0;
-            display.sizer.style.marginLeft = width + "px";
-            return true;
-        }
-        return false;
-    }
-
-    function lineNumberFor(options, i) {
-        return String(options.lineNumberFormatter(i + options.firstLineNumber));
-    }
-
-    // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,
-    // but using getBoundingClientRect to get a sub-pixel-accurate
-    // result.
-    function compensateForHScroll(display) {
-        return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left;
-    }
-
-    // DISPLAY DRAWING
-
-    // Updates the display, selection, and scrollbars, using the
-    // information in display.view to find out which nodes are no longer
-    // up-to-date. Tries to bail out early when no changes are needed,
-    // unless forced is true.
-    // Returns true if an actual update happened, false otherwise.
-    function updateDisplay(cm, viewPort, forced) {
-        var oldFrom = cm.display.viewFrom, oldTo = cm.display.viewTo, updated;
-        var visible = visibleLines(cm.display, cm.doc, viewPort);
-        for (var first = true; ; first = false) {
-            var oldWidth = cm.display.scroller.clientWidth;
-            if (!updateDisplayInner(cm, visible, forced))
-                break;
-            updated = true;
-
-            // If the max line changed since it was last measured, measure it,
-            // and ensure the document's width matches it.
-            if (cm.display.maxLineChanged && !cm.options.lineWrapping)
-                adjustContentWidth(cm);
-
-            var barMeasure = measureForScrollbars(cm);
-            updateSelection(cm);
-            setDocumentHeight(cm, barMeasure);
-            updateScrollbars(cm, barMeasure);
-            if (first && cm.options.lineWrapping && oldWidth != cm.display.scroller.clientWidth) {
-                forced = true;
-                continue;
-            }
-            forced = false;
-
-            // Clip forced viewport to actual scrollable area.
-            if (viewPort && viewPort.top != null)
-                viewPort = {top: Math.min(barMeasure.docHeight - scrollerCutOff - barMeasure.clientHeight, viewPort.top)};
-            // Updated line heights might result in the drawn area not
-            // actually covering the viewport. Keep looping until it does.
-            visible = visibleLines(cm.display, cm.doc, viewPort);
-            if (visible.from >= cm.display.viewFrom && visible.to <= cm.display.viewTo)
-                break;
-        }
-
-        cm.display.updateLineNumbers = null;
-        if (updated) {
-            signalLater(cm, "update", cm);
-            if (cm.display.viewFrom != oldFrom || cm.display.viewTo != oldTo)
-                signalLater(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo);
-        }
-        return updated;
-    }
-
-    // Does the actual updating of the line display. Bails out
-    // (returning false) when there is nothing to be done and forced is
-    // false.
-    function updateDisplayInner(cm, visible, forced) {
-        var display = cm.display, doc = cm.doc;
-        if (!display.wrapper.offsetWidth) {
-            resetView(cm);
-            return;
-        }
-
-        // Bail out if the visible area is already rendered and nothing changed.
-        if (!forced && visible.from >= display.viewFrom && visible.to <= display.viewTo &&
-                countDirtyView(cm) == 0)
-            return;
-
-        if (maybeUpdateLineNumberWidth(cm))
-            resetView(cm);
-        var dims = getDimensions(cm);
-
-        // Compute a suitable new viewport (from & to)
-        var end = doc.first + doc.size;
-        var from = Math.max(visible.from - cm.options.viewportMargin, doc.first);
-        var to = Math.min(end, visible.to + cm.options.viewportMargin);
-        if (display.viewFrom < from && from - display.viewFrom < 20)
-            from = Math.max(doc.first, display.viewFrom);
-        if (display.viewTo > to && display.viewTo - to < 20)
-            to = Math.min(end, display.viewTo);
-        if (sawCollapsedSpans) {
-            from = visualLineNo(cm.doc, from);
-            to = visualLineEndNo(cm.doc, to);
-        }
-
-        var different = from != display.viewFrom || to != display.viewTo ||
-                display.lastSizeC != display.wrapper.clientHeight;
-        adjustView(cm, from, to);
-
-        display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));
-        // Position the mover div to align with the current scroll position
-        cm.display.mover.style.top = display.viewOffset + "px";
-
-        var toUpdate = countDirtyView(cm);
-        if (!different && toUpdate == 0 && !forced)
-            return;
-
-        // For big changes, we hide the enclosing element during the
-        // update, since that speeds up the operations on most browsers.
-        var focused = activeElt();
-        if (toUpdate > 4)
-            display.lineDiv.style.display = "none";
-        patchDisplay(cm, display.updateLineNumbers, dims);
-        if (toUpdate > 4)
-            display.lineDiv.style.display = "";
-        // There might have been a widget with a focused element that got
-        // hidden or updated, if so re-focus it.
-        if (focused && activeElt() != focused && focused.offsetHeight)
-            focused.focus();
-
-        // Prevent selection and cursors from interfering with the scroll
-        // width.
-        removeChildren(display.cursorDiv);
-        removeChildren(display.selectionDiv);
-
-        if (different) {
-            display.lastSizeC = display.wrapper.clientHeight;
-            startWorker(cm, 400);
-        }
-
-        updateHeightsInViewport(cm);
-
-        return true;
-    }
-
-    function adjustContentWidth(cm) {
-        var display = cm.display;
-        var width = measureChar(cm, display.maxLine, display.maxLine.text.length).left;
-        display.maxLineChanged = false;
-        var minWidth = Math.max(0, width + 3);
-        var maxScrollLeft = Math.max(0, display.sizer.offsetLeft + minWidth + scrollerCutOff - display.scroller.clientWidth);
-        display.sizer.style.minWidth = minWidth + "px";
-        if (maxScrollLeft < cm.doc.scrollLeft)
-            setScrollLeft(cm, Math.min(display.scroller.scrollLeft, maxScrollLeft), true);
-    }
-
-    function setDocumentHeight(cm, measure) {
-        cm.display.sizer.style.minHeight = cm.display.heightForcer.style.top = measure.docHeight + "px";
-        cm.display.gutters.style.height = Math.max(measure.docHeight, measure.clientHeight - scrollerCutOff) + "px";
-    }
-
-    // Read the actual heights of the rendered lines, and update their
-    // stored heights to match.
-    function updateHeightsInViewport(cm) {
-        var display = cm.display;
-        var prevBottom = display.lineDiv.offsetTop;
-        for (var i = 0; i < display.view.length; i++) {
-            var cur = display.view[i], height;
-            if (cur.hidden)
-                continue;
-            if (ie_upto7) {
-                var bot = cur.node.offsetTop + cur.node.offsetHeight;
-                height = bot - prevBottom;
-                prevBottom = bot;
-            } else {
-                var box = cur.node.getBoundingClientRect();
-                height = box.bottom - box.top;
-            }
-            var diff = cur.line.height - height;
-            if (height < 2)
-                height = textHeight(display);
-            if (diff > .001 || diff < -.001) {
-                updateLineHeight(cur.line, height);
-                updateWidgetHeight(cur.line);
-                if (cur.rest)
-                    for (var j = 0; j < cur.rest.length; j++)
-                        updateWidgetHeight(cur.rest[j]);
-            }
-        }
-    }
-
-    // Read and store the height of line widgets associated with the
-    // given line.
-    function updateWidgetHeight(line) {
-        if (line.widgets)
-            for (var i = 0; i < line.widgets.length; ++i)
-                line.widgets[i].height = line.widgets[i].node.offsetHeight;
-    }
-
-    // Do a bulk-read of the DOM positions and sizes needed to draw the
-    // view, so that we don't interleave reading and writing to the DOM.
-    function getDimensions(cm) {
-        var d = cm.display, left = {}, width = {};
-        for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {
-            left[cm.options.gutters[i]] = n.offsetLeft;
-            width[cm.options.gutters[i]] = n.offsetWidth;
-        }
-        return {fixedPos: compensateForHScroll(d),
-            gutterTotalWidth: d.gutters.offsetWidth,
-            gutterLeft: left,
-            gutterWidth: width,
-            wrapperWidth: d.wrapper.clientWidth};
-    }
-
-    // Sync the actual display DOM structure with display.view, removing
-    // nodes for lines that are no longer in view, and creating the ones
-    // that are not there yet, and updating the ones that are out of
-    // date.
-    function patchDisplay(cm, updateNumbersFrom, dims) {
-        var display = cm.display, lineNumbers = cm.options.lineNumbers;
-        var container = display.lineDiv, cur = container.firstChild;
-
-        function rm(node) {
-            var next = node.nextSibling;
-            // Works around a throw-scroll bug in OS X Webkit
-            if (webkit && mac && cm.display.currentWheelTarget == node)
-                node.style.display = "none";
-            else
-                node.parentNode.removeChild(node);
-            return next;
-        }
-
-        var view = display.view, lineN = display.viewFrom;
-        // Loop over the elements in the view, syncing cur (the DOM nodes
-        // in display.lineDiv) with the view as we go.
-        for (var i = 0; i < view.length; i++) {
-            var lineView = view[i];
-            if (lineView.hidden) {
-            } else if (!lineView.node) { // Not drawn yet
-                var node = buildLineElement(cm, lineView, lineN, dims);
-                container.insertBefore(node, cur);
-            } else { // Already drawn
-                while (cur != lineView.node)
-                    cur = rm(cur);
-                var updateNumber = lineNumbers && updateNumbersFrom != null &&
-                        updateNumbersFrom <= lineN && lineView.lineNumber;
-                if (lineView.changes) {
-                    if (indexOf(lineView.changes, "gutter") > -1)
-                        updateNumber = false;
-                    updateLineForChanges(cm, lineView, lineN, dims);
-                }
-                if (updateNumber) {
-                    removeChildren(lineView.lineNumber);
-                    lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));
-                }
-                cur = lineView.node.nextSibling;
-            }
-            lineN += lineView.size;
-        }
-        while (cur)
-            cur = rm(cur);
-    }
-
-    // When an aspect of a line changes, a string is added to
-    // lineView.changes. This updates the relevant part of the line's
-    // DOM structure.
-    function updateLineForChanges(cm, lineView, lineN, dims) {
-        for (var j = 0; j < lineView.changes.length; j++) {
-            var type = lineView.changes[j];
-            if (type == "text")
-                updateLineText(cm, lineView);
-            else if (type == "gutter")
-                updateLineGutter(cm, lineView, lineN, dims);
-            else if (type == "class")
-                updateLineClasses(lineView);
-            else if (type == "widget")
-                updateLineWidgets(lineView, dims);
-        }
-        lineView.changes = null;
-    }
-
-    // Lines with gutter elements, widgets or a background class need to
-    // be wrapped, and have the extra elements added to the wrapper div
-    function ensureLineWrapped(lineView) {
-        if (lineView.node == lineView.text) {
-            lineView.node = elt("div", null, null, "position: relative");
-            if (lineView.text.parentNode)
-                lineView.text.parentNode.replaceChild(lineView.node, lineView.text);
-            lineView.node.appendChild(lineView.text);
-            if (ie_upto7)
-                lineView.node.style.zIndex = 2;
-        }
-        return lineView.node;
-    }
-
-    function updateLineBackground(lineView) {
-        var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass;
-        if (cls)
-            cls += " CodeMirror-linebackground";
-        if (lineView.background) {
-            if (cls)
-                lineView.background.className = cls;
-            else {
-                lineView.background.parentNode.removeChild(lineView.background);
-                lineView.background = null;
-            }
-        } else if (cls) {
-            var wrap = ensureLineWrapped(lineView);
-            lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild);
-        }
-    }
-
-    // Wrapper around buildLineContent which will reuse the structure
-    // in display.externalMeasured when possible.
-    function getLineContent(cm, lineView) {
-        var ext = cm.display.externalMeasured;
-        if (ext && ext.line == lineView.line) {
-            cm.display.externalMeasured = null;
-            lineView.measure = ext.measure;
-            return ext.built;
-        }
-        return buildLineContent(cm, lineView);
-    }
-
-    // Redraw the line's text. Interacts with the background and text
-    // classes because the mode may output tokens that influence these
-    // classes.
-    function updateLineText(cm, lineView) {
-        var cls = lineView.text.className;
-        var built = getLineContent(cm, lineView);
-        if (lineView.text == lineView.node)
-            lineView.node = built.pre;
-        lineView.text.parentNode.replaceChild(built.pre, lineView.text);
-        lineView.text = built.pre;
-        if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {
-            lineView.bgClass = built.bgClass;
-            lineView.textClass = built.textClass;
-            updateLineClasses(lineView);
-        } else if (cls) {
-            lineView.text.className = cls;
-        }
-    }
-
-    function updateLineClasses(lineView) {
-        updateLineBackground(lineView);
-        if (lineView.line.wrapClass)
-            ensureLineWrapped(lineView).className = lineView.line.wrapClass;
-        else if (lineView.node != lineView.text)
-            lineView.node.className = "";
-        var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass;
-        lineView.text.className = textClass || "";
-    }
-
-    function updateLineGutter(cm, lineView, lineN, dims) {
-        if (lineView.gutter) {
-            lineView.node.removeChild(lineView.gutter);
-            lineView.gutter = null;
-        }
-        var markers = lineView.line.gutterMarkers;
-        if (cm.options.lineNumbers || markers) {
-            var wrap = ensureLineWrapped(lineView);
-            var gutterWrap = lineView.gutter =
-                    wrap.insertBefore(elt("div", null, "CodeMirror-gutter-wrapper", "position: absolute; left: " +
-                            (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"),
-                            lineView.text);
-            if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
-                lineView.lineNumber = gutterWrap.appendChild(
-                        elt("div", lineNumberFor(cm.options, lineN),
-                                "CodeMirror-linenumber CodeMirror-gutter-elt",
-                                "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: "
-                                + cm.display.lineNumInnerWidth + "px"));
-            if (markers)
-                for (var k = 0; k < cm.options.gutters.length; ++k) {
-                    var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];
-                    if (found)
-                        gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " +
-                                dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px"));
-                }
-        }
-    }
-
-    function updateLineWidgets(lineView, dims) {
-        if (lineView.alignable)
-            lineView.alignable = null;
-        for (var node = lineView.node.firstChild, next; node; node = next) {
-            var next = node.nextSibling;
-            if (node.className == "CodeMirror-linewidget")
-                lineView.node.removeChild(node);
-        }
-        insertLineWidgets(lineView, dims);
-    }
-
-    // Build a line's DOM representation from scratch
-    function buildLineElement(cm, lineView, lineN, dims) {
-        var built = getLineContent(cm, lineView);
-        lineView.text = lineView.node = built.pre;
-        if (built.bgClass)
-            lineView.bgClass = built.bgClass;
-        if (built.textClass)
-            lineView.textClass = built.textClass;
-
-        updateLineClasses(lineView);
-        updateLineGutter(cm, lineView, lineN, dims);
-        insertLineWidgets(lineView, dims);
-        return lineView.node;
-    }
-
-    // A lineView may contain multiple logical lines (when merged by
-    // collapsed spans). The widgets for all of them need to be drawn.
-    function insertLineWidgets(lineView, dims) {
-        insertLineWidgetsFor(lineView.line, lineView, dims, true);
-        if (lineView.rest)
-            for (var i = 0; i < lineView.rest.length; i++)
-                insertLineWidgetsFor(lineView.rest[i], lineView, dims, false);
-    }
-
-    function insertLineWidgetsFor(line, lineView, dims, allowAbove) {
-        if (!line.widgets)
-            return;
-        var wrap = ensureLineWrapped(lineView);
-        for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
-            var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget");
-            if (!widget.handleMouseEvents)
-                node.ignoreEvents = true;
-            positionLineWidget(widget, node, lineView, dims);
-            if (allowAbove && widget.above)
-                wrap.insertBefore(node, lineView.gutter || lineView.text);
-            else
-                wrap.appendChild(node);
-            signalLater(widget, "redraw");
-        }
-    }
-
-    function positionLineWidget(widget, node, lineView, dims) {
-        if (widget.noHScroll) {
-            (lineView.alignable || (lineView.alignable = [])).push(node);
-            var width = dims.wrapperWidth;
-            node.style.left = dims.fixedPos + "px";
-            if (!widget.coverGutter) {
-                width -= dims.gutterTotalWidth;
-                node.style.paddingLeft = dims.gutterTotalWidth + "px";
-            }
-            node.style.width = width + "px";
-        }
-        if (widget.coverGutter) {
-            node.style.zIndex = 5;
-            node.style.position = "relative";
-            if (!widget.noHScroll)
-                node.style.marginLeft = -dims.gutterTotalWidth + "px";
-        }
-    }
-
-    // POSITION OBJECT
-
-    // A Pos instance represents a position within the text.
-    var Pos = CodeMirror.Pos = function (line, ch) {
-        if (!(this instanceof Pos))
-            return new Pos(line, ch);
-        this.line = line;
-        this.ch = ch;
-    };
-
-    // Compare two positions, return 0 if they are the same, a negative
-    // number when a is less, and a positive number otherwise.
-    var cmp = CodeMirror.cmpPos = function (a, b) {
-        return a.line - b.line || a.ch - b.ch;
-    };
-
-    function copyPos(x) {
-        return Pos(x.line, x.ch);
-    }
-    function maxPos(a, b) {
-        return cmp(a, b) < 0 ? b : a;
-    }
-    function minPos(a, b) {
-        return cmp(a, b) < 0 ? a : b;
-    }
-
-    // SELECTION / CURSOR
-
-    // Selection objects are immutable. A new one is created every time
-    // the selection changes. A selection is one or more non-overlapping
-    // (and non-touching) ranges, sorted, and an integer that indicates
-    // which one is the primary selection (the one that's scrolled into
-    // view, that getCursor returns, etc).
-    function Selection(ranges, primIndex) {
-        this.ranges = ranges;
-        this.primIndex = primIndex;
-    }
-
-    Selection.prototype = {
-        primary: function () {
-            return this.ranges[this.primIndex];
-        },
-        equals: function (other) {
-            if (other == this)
-                return true;
-            if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length)
-                return false;
-            for (var i = 0; i < this.ranges.length; i++) {
-                var here = this.ranges[i], there = other.ranges[i];
-                if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0)
-                    return false;
-            }
-            return true;
-        },
-        deepCopy: function () {
-            for (var out = [], i = 0; i < this.ranges.length; i++)
-                out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head));
-            return new Selection(out, this.primIndex);
-        },
-        somethingSelected: function () {
-            for (var i = 0; i < this.ranges.length; i++)
-                if (!this.ranges[i].empty())
-                    return true;
-            return false;
-        },
-        contains: function (pos, end) {
-            if (!end)
-                end = pos;
-            for (var i = 0; i < this.ranges.length; i++) {
-                var range = this.ranges[i];
-                if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)
-                    return i;
-            }
-            return -1;
-        }
-    };
-
-    function Range(anchor, head) {
-        this.anchor = anchor;
-        this.head = head;
-    }
-
-    Range.prototype = {
-        from: function () {
-            return minPos(this.anchor, this.head);
-        },
-        to: function () {
-            return maxPos(this.anchor, this.head);
-        },
-        empty: function () {
-            return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch;
-        }
-    };
-
-    // Take an unsorted, potentially overlapping set of ranges, and
-    // build a selection out of it. 'Consumes' ranges array (modifying
-    // it).
-    function normalizeSelection(ranges, primIndex) {
-        var prim = ranges[primIndex];
-        ranges.sort(function (a, b) {
-            return cmp(a.from(), b.from());
-        });
-        primIndex = indexOf(ranges, prim);
-        for (var i = 1; i < ranges.length; i++) {
-            var cur = ranges[i], prev = ranges[i - 1];
-            if (cmp(prev.to(), cur.from()) >= 0) {
-                var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());
-                var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;
-                if (i <= primIndex)
-                    --primIndex;
-                ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));
-            }
-        }
-        return new Selection(ranges, primIndex);
-    }
-
-    function simpleSelection(anchor, head) {
-        return new Selection([new Range(anchor, head || anchor)], 0);
-    }
-
-    // Most of the external API clips given positions to make sure they
-    // actually exist within the document.
-    function clipLine(doc, n) {
-        return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));
-    }
-    function clipPos(doc, pos) {
-        if (pos.line < doc.first)
-            return Pos(doc.first, 0);
-        var last = doc.first + doc.size - 1;
-        if (pos.line > last)
-            return Pos(last, getLine(doc, last).text.length);
-        return clipToLen(pos, getLine(doc, pos.line).text.length);
-    }
-    function clipToLen(pos, linelen) {
-        var ch = pos.ch;
-        if (ch == null || ch > linelen)
-            return Pos(pos.line, linelen);
-        else if (ch < 0)
-            return Pos(pos.line, 0);
-        else
-            return pos;
-    }
-    function isLine(doc, l) {
-        return l >= doc.first && l < doc.first + doc.size;
-    }
-    function clipPosArray(doc, array) {
-        for (var out = [], i = 0; i < array.length; i++)
-            out[i] = clipPos(doc, array[i]);
-        return out;
-    }
-
-    // SELECTION UPDATES
-
-    // The 'scroll' parameter given to many of these indicated whether
-    // the new cursor position should be scrolled into view after
-    // modifying the selection.
-
-    // If shift is held or the extend flag is set, extends a range to
-    // include a given position (and optionally a second position).
-    // Otherwise, simply returns the range between the given positions.
-    // Used for cursor motion and such.
-    function extendRange(doc, range, head, other) {
-        if (doc.cm && doc.cm.display.shift || doc.extend) {
-            var anchor = range.anchor;
-            if (other) {
-                var posBefore = cmp(head, anchor) < 0;
-                if (posBefore != (cmp(other, anchor) < 0)) {
-                    anchor = head;
-                    head = other;
-                } else if (posBefore != (cmp(head, other) < 0)) {
-                    head = other;
-                }
-            }
-            return new Range(anchor, head);
-        } else {
-            return new Range(other || head, head);
-        }
-    }
-
-    // Extend the primary selection range, discard the rest.
-    function extendSelection(doc, head, other, options) {
-        setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options);
-    }
-
-    // Extend all selections (pos is an array of selections with length
-    // equal the number of selections)
-    function extendSelections(doc, heads, options) {
-        for (var out = [], i = 0; i < doc.sel.ranges.length; i++)
-            out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null);
-        var newSel = normalizeSelection(out, doc.sel.primIndex);
-        setSelection(doc, newSel, options);
-    }
-
-    // Updates a single range in the selection.
-    function replaceOneSelection(doc, i, range, options) {
-        var ranges = doc.sel.ranges.slice(0);
-        ranges[i] = range;
-        setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options);
-    }
-
-    // Reset the selection to a single range.
-    function setSimpleSelection(doc, anchor, head, options) {
-        setSelection(doc, simpleSelection(anchor, head), options);
-    }
-
-    // Give beforeSelectionChange handlers a change to influence a
-    // selection update.
-    function filterSelectionChange(doc, sel) {
-        var obj = {
-            ranges: sel.ranges,
-            update: function (ranges) {
-                this.ranges = [];
-                for (var i = 0; i < ranges.length; i++)
-                    this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),
-                            clipPos(doc, ranges[i].head));
-            }
-        };
-        signal(doc, "beforeSelectionChange", doc, obj);
-        if (doc.cm)
-            signal(doc.cm, "beforeSelectionChange", doc.cm, obj);
-        if (obj.ranges != sel.ranges)
-            return normalizeSelection(obj.ranges, obj.ranges.length - 1);
-        else
-            return sel;
-    }
-
-    function setSelectionReplaceHistory(doc, sel, options) {
-        var done = doc.history.done, last = lst(done);
-        if (last && last.ranges) {
-            done[done.length - 1] = sel;
-            setSelectionNoUndo(doc, sel, options);
-        } else {
-            setSelection(doc, sel, options);
-        }
-    }
-
-    // Set a new selection.
-    function setSelection(doc, sel, options) {
-        setSelectionNoUndo(doc, sel, options);
-        addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);
-    }
-
-    function setSelectionNoUndo(doc, sel, options) {
-        if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange"))
-            sel = filterSelectionChange(doc, sel);
-
-        var bias = cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1;
-        setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));
-
-        if (!(options && options.scroll === false) && doc.cm)
-            ensureCursorVisible(doc.cm);
-    }
-
-    function setSelectionInner(doc, sel) {
-        if (sel.equals(doc.sel))
-            return;
-
-        doc.sel = sel;
-
-        if (doc.cm)
-            doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged =
-                    doc.cm.curOp.cursorActivity = true;
-        signalLater(doc, "cursorActivity", doc);
-    }
-
-    // Verify that the selection does not partially select any atomic
-    // marked ranges.
-    function reCheckSelection(doc) {
-        setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll);
-    }
-
-    // Return a selection that does not partially select any atomic
-    // ranges.
-    function skipAtomicInSelection(doc, sel, bias, mayClear) {
-        var out;
-        for (var i = 0; i < sel.ranges.length; i++) {
-            var range = sel.ranges[i];
-            var newAnchor = skipAtomic(doc, range.anchor, bias, mayClear);
-            var newHead = skipAtomic(doc, range.head, bias, mayClear);
-            if (out || newAnchor != range.anchor || newHead != range.head) {
-                if (!out)
-                    out = sel.ranges.slice(0, i);
-                out[i] = new Range(newAnchor, newHead);
-            }
-        }
-        return out ? normalizeSelection(out, sel.primIndex) : sel;
-    }
-
-    // Ensure a given position is not inside an atomic range.
-    function skipAtomic(doc, pos, bias, mayClear) {
-        var flipped = false, curPos = pos;
-        var dir = bias || 1;
-        doc.cantEdit = false;
-        search: for (; ; ) {
-            var line = getLine(doc, curPos.line);
-            if (line.markedSpans) {
-                for (var i = 0; i < line.markedSpans.length; ++i) {
-                    var sp = line.markedSpans[i], m = sp.marker;
-                    if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) &&
-                            (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) {
-                        if (mayClear) {
-                            signal(m, "beforeCursorEnter");
-                            if (m.explicitlyCleared) {
-                                if (!line.markedSpans)
-                                    break;
-                                else {
-                                    --i;
-                                    continue;
-                                }
-                            }
-                        }
-                        if (!m.atomic)
-                            continue;
-                        var newPos = m.find(dir < 0 ? -1 : 1);
-                        if (cmp(newPos, curPos) == 0) {
-                            newPos.ch += dir;
-                            if (newPos.ch < 0) {
-                                if (newPos.line > doc.first)
-                                    newPos = clipPos(doc, Pos(newPos.line - 1));
-                                else
-                                    newPos = null;
-                            } else if (newPos.ch > line.text.length) {
-                                if (newPos.line < doc.first + doc.size - 1)
-                                    newPos = Pos(newPos.line + 1, 0);
-                                else
-                                    newPos = null;
-                            }
-                            if (!newPos) {
-                                if (flipped) {
-                                    // Driven in a corner -- no valid cursor position found at all
-                                    // -- try again *with* clearing, if we didn't already
-                                    if (!mayClear)
-                                        return skipAtomic(doc, pos, bias, true);
-                                    // Otherwise, turn off editing until further notice, and return the start of the doc
-                                    doc.cantEdit = true;
-                                    return Pos(doc.first, 0);
-                                }
-                                flipped = true;
-                                newPos = pos;
-                                dir = -dir;
-                            }
-                        }
-                        curPos = newPos;
-                        continue search;
-                    }
-                }
-            }
-            return curPos;
-        }
-    }
-
-    // SELECTION DRAWING
-
-    // Redraw the selection and/or cursor
-    function updateSelection(cm) {
-        var display = cm.display, doc = cm.doc;
-        var curFragment = document.createDocumentFragment();
-        var selFragment = document.createDocumentFragment();
-
-        for (var i = 0; i < doc.sel.ranges.length; i++) {
-            var range = doc.sel.ranges[i];
-            var collapsed = range.empty();
-            if (collapsed || cm.options.showCursorWhenSelecting)
-                updateSelectionCursor(cm, range, curFragment);
-            if (!collapsed)
-                updateSelectionRange(cm, range, selFragment);
-        }
-
-        // Move the hidden textarea near the cursor to prevent scrolling artifacts
-        if (cm.options.moveInputWithCursor) {
-            var headPos = cursorCoords(cm, doc.sel.primary().head, "div");
-            var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();
-            var top = Math.max(0, Math.min(display.wrapper.clientHeight - 10,
-                    headPos.top + lineOff.top - wrapOff.top));
-            var left = Math.max(0, Math.min(display.wrapper.clientWidth - 10,
-                    headPos.left + lineOff.left - wrapOff.left));
-            display.inputDiv.style.top = top + "px";
-            display.inputDiv.style.left = left + "px";
-        }
-
-        removeChildrenAndAdd(display.cursorDiv, curFragment);
-        removeChildrenAndAdd(display.selectionDiv, selFragment);
-    }
-
-    // Draws a cursor for the given range
-    function updateSelectionCursor(cm, range, output) {
-        var pos = cursorCoords(cm, range.head, "div");
-
-        var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"));
-        cursor.style.left = pos.left + "px";
-        cursor.style.top = pos.top + "px";
-        cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px";
-
-        if (pos.other) {
-            // Secondary cursor, shown when on a 'jump' in bi-directional text
-            var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"));
-            otherCursor.style.display = "";
-            otherCursor.style.left = pos.other.left + "px";
-            otherCursor.style.top = pos.other.top + "px";
-            otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px";
-        }
-    }
-
-    // Draws the given range as a highlighted selection
-    function updateSelectionRange(cm, range, output) {
-        var display = cm.display, doc = cm.doc;
-        var fragment = document.createDocumentFragment();
-        var padding = paddingH(cm.display), leftSide = padding.left, rightSide = display.lineSpace.offsetWidth - padding.right;
-
-        function add(left, top, width, bottom) {
-            if (top < 0)
-                top = 0;
-            fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left +
-                    "px; top: " + top + "px; width: " + (width == null ? rightSide - left : width) +
-                    "px; height: " + (bottom - top) + "px"));
-        }
-
-        function drawForLine(line, fromArg, toArg) {
-            var lineObj = getLine(doc, line);
-            var lineLen = lineObj.text.length;
-            var start, end;
-            function coords(ch, bias) {
-                return charCoords(cm, Pos(line, ch), "div", lineObj, bias);
-            }
-
-            iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir) {
-                var leftPos = coords(from, "left"), rightPos, left, right;
-                if (from == to) {
-                    rightPos = leftPos;
-                    left = right = leftPos.left;
-                } else {
-                    rightPos = coords(to - 1, "right");
-                    if (dir == "rtl") {
-                        var tmp = leftPos;
-                        leftPos = rightPos;
-                        rightPos = tmp;
-                    }
-                    left = leftPos.left;
-                    right = rightPos.right;
-                }
-                if (fromArg == null && from == 0)
-                    left = leftSide;
-                if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part
-                    add(left, leftPos.top, null, leftPos.bottom);
-                    left = leftSide;
-                    if (leftPos.bottom < rightPos.top)
-                        add(left, leftPos.bottom, null, rightPos.top);
-                }
-                if (toArg == null && to == lineLen)
-                    right = rightSide;
-                if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left)
-                    start = leftPos;
-                if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right)
-                    end = rightPos;
-                if (left < leftSide + 1)
-                    left = leftSide;
-                add(left, rightPos.top, right - left, rightPos.bottom);
-            });
-            return {start: start, end: end};
-        }
-
-        var sFrom = range.from(), sTo = range.to();
-        if (sFrom.line == sTo.line) {
-            drawForLine(sFrom.line, sFrom.ch, sTo.ch);
-        } else {
-            var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);
-            var singleVLine = visualLine(fromLine) == visualLine(toLine);
-            var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;
-            var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;
-            if (singleVLine) {
-                if (leftEnd.top < rightStart.top - 2) {
-                    add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);
-                    add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);
-                } else {
-                    add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);
-                }
-            }
-            if (leftEnd.bottom < rightStart.top)
-                add(leftSide, leftEnd.bottom, null, rightStart.top);
-        }
-
-        output.appendChild(fragment);
-    }
-
-    // Cursor-blinking
-    function restartBlink(cm) {
-        if (!cm.state.focused)
-            return;
-        var display = cm.display;
-        clearInterval(display.blinker);
-        var on = true;
-        display.cursorDiv.style.visibility = "";
-        if (cm.options.cursorBlinkRate > 0)
-            display.blinker = setInterval(function () {
-                display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden";
-            }, cm.options.cursorBlinkRate);
-    }
-
-    // HIGHLIGHT WORKER
-
-    function startWorker(cm, time) {
-        if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo)
-            cm.state.highlight.set(time, bind(highlightWorker, cm));
-    }
-
-    function highlightWorker(cm) {
-        var doc = cm.doc;
-        if (doc.frontier < doc.first)
-            doc.frontier = doc.first;
-        if (doc.frontier >= cm.display.viewTo)
-            return;
-        var end = +new Date + cm.options.workTime;
-        var state = copyState(doc.mode, getStateBefore(cm, doc.frontier));
-
-        runInOp(cm, function () {
-            doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {
-                if (doc.frontier >= cm.display.viewFrom) { // Visible
-                    var oldStyles = line.styles;
-                    line.styles = highlightLine(cm, line, state, true);
-                    var ischange = !oldStyles || oldStyles.length != line.styles.length;
-                    for (var i = 0; !ischange && i < oldStyles.length; ++i)
-                        ischange = oldStyles[i] != line.styles[i];
-                    if (ischange)
-                        regLineChange(cm, doc.frontier, "text");
-                    line.stateAfter = copyState(doc.mode, state);
-                } else {
-                    processLine(cm, line.text, state);
-                    line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null;
-                }
-                ++doc.frontier;
-                if (+new Date > end) {
-                    startWorker(cm, cm.options.workDelay);
-                    return true;
-                }
-            });
-        });
-    }
-
-    // Finds the line to start with when starting a parse. Tries to
-    // find a line with a stateAfter, so that it can start with a
-    // valid state. If that fails, it returns the line with the
-    // smallest indentation, which tends to need the least context to
-    // parse correctly.
-    function findStartLine(cm, n, precise) {
-        var minindent, minline, doc = cm.doc;
-        var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);
-        for (var search = n; search > lim; --search) {
-            if (search <= doc.first)
-                return doc.first;
-            var line = getLine(doc, search - 1);
-            if (line.stateAfter && (!precise || search <= doc.frontier))
-                return search;
-            var indented = countColumn(line.text, null, cm.options.tabSize);
-            if (minline == null || minindent > indented) {
-                minline = search - 1;
-                minindent = indented;
-            }
-        }
-        return minline;
-    }
-
-    function getStateBefore(cm, n, precise) {
-        var doc = cm.doc, display = cm.display;
-        if (!doc.mode.startState)
-            return true;
-        var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos - 1).stateAfter;
-        if (!state)
-            state = startState(doc.mode);
-        else
-            state = copyState(doc.mode, state);
-        doc.iter(pos, n, function (line) {
-            processLine(cm, line.text, state);
-            var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo;
-            line.stateAfter = save ? copyState(doc.mode, state) : null;
-            ++pos;
-        });
-        if (precise)
-            doc.frontier = pos;
-        return state;
-    }
-
-    // POSITION MEASUREMENT
-
-    function paddingTop(display) {
-        return display.lineSpace.offsetTop;
-    }
-    function paddingVert(display) {
-        return display.mover.offsetHeight - display.lineSpace.offsetHeight;
-    }
-    function paddingH(display) {
-        if (display.cachedPaddingH)
-            return display.cachedPaddingH;
-        var e = removeChildrenAndAdd(display.measure, elt("pre", "x"));
-        var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;
-        return display.cachedPaddingH = {left: parseInt(style.paddingLeft),
-            right: parseInt(style.paddingRight)};
-    }
-
-    // Ensure the lineView.wrapping.heights array is populated. This is
-    // an array of bottom offsets for the lines that make up a drawn
-    // line. When lineWrapping is on, there might be more than one
-    // height.
-    function ensureLineHeights(cm, lineView, rect) {
-        var wrapping = cm.options.lineWrapping;
-        var curWidth = wrapping && cm.display.scroller.clientWidth;
-        if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {
-            var heights = lineView.measure.heights = [];
-            if (wrapping) {
-                lineView.measure.width = curWidth;
-                var rects = lineView.text.firstChild.getClientRects();
-                for (var i = 0; i < rects.length - 1; i++) {
-                    var cur = rects[i], next = rects[i + 1];
-                    if (Math.abs(cur.bottom - next.bottom) > 2)
-                        heights.push((cur.bottom + next.top) / 2 - rect.top);
-                }
-            }
-            heights.push(rect.bottom - rect.top);
-        }
-    }
-
-    // Find a line map (mapping character offsets to text nodes) and a
-    // measurement cache for the given line number. (A line view might
-    // contain multiple lines when collapsed ranges are present.)
-    function mapFromLineView(lineView, line, lineN) {
-        if (lineView.line == line)
-            return {map: lineView.measure.map, cache: lineView.measure.cache};
-        for (var i = 0; i < lineView.rest.length; i++)
-            if (lineView.rest[i] == line)
-                return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]};
-        for (var i = 0; i < lineView.rest.length; i++)
-            if (lineNo(lineView.rest[i]) > lineN)
-                return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true};
-    }
-
-    // Render a line into the hidden node display.externalMeasured. Used
-    // when measurement is needed for a line that's not in the viewport.
-    function updateExternalMeasurement(cm, line) {
-        line = visualLine(line);
-        var lineN = lineNo(line);
-        var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);
-        view.lineN = lineN;
-        var built = view.built = buildLineContent(cm, view);
-        view.text = built.pre;
-        removeChildrenAndAdd(cm.display.lineMeasure, built.pre);
-        return view;
-    }
-
-    // Get a {top, bottom, left, right} box (in line-local coordinates)
-    // for a given character.
-    function measureChar(cm, line, ch, bias) {
-        return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias);
-    }
-
-    // Find a line view that corresponds to the given line number.
-    function findViewForLine(cm, lineN) {
-        if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)
-            return cm.display.view[findViewIndex(cm, lineN)];
-        var ext = cm.display.externalMeasured;
-        if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)
-            return ext;
-    }
-
-    // Measurement can be split in two steps, the set-up work that
-    // applies to the whole line, and the measurement of the actual
-    // character. Functions like coordsChar, that need to do a lot of
-    // measurements in a row, can thus ensure that the set-up work is
-    // only done once.
-    function prepareMeasureForLine(cm, line) {
-        var lineN = lineNo(line);
-        var view = findViewForLine(cm, lineN);
-        if (view && !view.text)
-            view = null;
-        else if (view && view.changes)
-            updateLineForChanges(cm, view, lineN, getDimensions(cm));
-        if (!view)
-            view = updateExternalMeasurement(cm, line);
-
-        var info = mapFromLineView(view, line, lineN);
-        return {
-            line: line, view: view, rect: null,
-            map: info.map, cache: info.cache, before: info.before,
-            hasHeights: false
-        };
-    }
-
-    // Given a prepared measurement object, measures the position of an
-    // actual character (or fetches it from the cache).
-    function measureCharPrepared(cm, prepared, ch, bias) {
-        if (prepared.before)
-            ch = -1;
-        var key = ch + (bias || ""), found;
-        if (prepared.cache.hasOwnProperty(key)) {
-            found = prepared.cache[key];
-        } else {
-            if (!prepared.rect)
-                prepared.rect = prepared.view.text.getBoundingClientRect();
-            if (!prepared.hasHeights) {
-                ensureLineHeights(cm, prepared.view, prepared.rect);
-                prepared.hasHeights = true;
-            }
-            found = measureCharInner(cm, prepared, ch, bias);
-            if (!found.bogus)
-                prepared.cache[key] = found;
-        }
-        return {left: found.left, right: found.right, top: found.top, bottom: found.bottom};
-    }
-
-    var nullRect = {left: 0, right: 0, top: 0, bottom: 0};
-
-    function measureCharInner(cm, prepared, ch, bias) {
-        var map = prepared.map;
-
-        var node, start, end, collapse;
-        // First, search the line map for the text node corresponding to,
-        // or closest to, the target character.
-        for (var i = 0; i < map.length; i += 3) {
-            var mStart = map[i], mEnd = map[i + 1];
-            if (ch < mStart) {
-                start = 0;
-                end = 1;
-                collapse = "left";
-            } else if (ch < mEnd) {
-                start = ch - mStart;
-                end = start + 1;
-            } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {
-                end = mEnd - mStart;
-                start = end - 1;
-                if (ch >= mEnd)
-                    collapse = "right";
-            }
-            if (start != null) {
-                node = map[i + 2];
-                if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right"))
-                    collapse = bias;
-                if (bias == "left" && start == 0)
-                    while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {
-                        node = map[(i -= 3) + 2];
-                        collapse = "left";
-                    }
-                if (bias == "right" && start == mEnd - mStart)
-                    while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {
-                        node = map[(i += 3) + 2];
-                        collapse = "right";
-                    }
-                break;
-            }
-        }
-
-        var rect;
-        if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.
-            while (start && isExtendingChar(prepared.line.text.charAt(mStart + start)))
-                --start;
-            while (mStart + end < mEnd && isExtendingChar(prepared.line.text.charAt(mStart + end)))
-                ++end;
-            if (ie_upto8 && start == 0 && end == mEnd - mStart) {
-                rect = node.parentNode.getBoundingClientRect();
-            } else if (ie && cm.options.lineWrapping) {
-                var rects = range(node, start, end).getClientRects();
-                if (rects.length)
-                    rect = rects[bias == "right" ? rects.length - 1 : 0];
-                else
-                    rect = nullRect;
-            } else {
-                rect = range(node, start, end).getBoundingClientRect();
-            }
-        } else { // If it is a widget, simply get the box for the whole widget.
-            if (start > 0)
-                collapse = bias = "right";
-            var rects;
-            if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)
-                rect = rects[bias == "right" ? rects.length - 1 : 0];
-            else
-                rect = node.getBoundingClientRect();
-        }
-        if (ie_upto8 && !start && (!rect || !rect.left && !rect.right)) {
-            var rSpan = node.parentNode.getClientRects()[0];
-            if (rSpan)
-                rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom};
-            else
-                rect = nullRect;
-        }
-
-        var top, bot = (rect.bottom + rect.top) / 2 - prepared.rect.top;
-        var heights = prepared.view.measure.heights;
-        for (var i = 0; i < heights.length - 1; i++)
-            if (bot < heights[i])
-                break;
-        top = i ? heights[i - 1] : 0;
-        bot = heights[i];
-        var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left,
-            right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left,
-            top: top, bottom: bot};
-        if (!rect.left && !rect.right)
-            result.bogus = true;
-        return result;
-    }
-
-    function clearLineMeasurementCacheFor(lineView) {
-        if (lineView.measure) {
-            lineView.measure.cache = {};
-            lineView.measure.heights = null;
-            if (lineView.rest)
-                for (var i = 0; i < lineView.rest.length; i++)
-                    lineView.measure.caches[i] = {};
-        }
-    }
-
-    function clearLineMeasurementCache(cm) {
-        cm.display.externalMeasure = null;
-        removeChildren(cm.display.lineMeasure);
-        for (var i = 0; i < cm.display.view.length; i++)
-            clearLineMeasurementCacheFor(cm.display.view[i]);
-    }
-
-    function clearCaches(cm) {
-        clearLineMeasurementCache(cm);
-        cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;
-        if (!cm.options.lineWrapping)
-            cm.display.maxLineChanged = true;
-        cm.display.lineNumChars = null;
-    }
-
-    function pageScrollX() {
-        return window.pageXOffset || (document.documentElement || document.body).scrollLeft;
-    }
-    function pageScrollY() {
-        return window.pageYOffset || (document.documentElement || document.body).scrollTop;
-    }
-
-    // Converts a {top, bottom, left, right} box from line-local
-    // coordinates into another coordinate system. Context may be one of
-    // "line", "div" (display.lineDiv), "local"/null (editor), or "page".
-    function intoCoordSystem(cm, lineObj, rect, context) {
-        if (lineObj.widgets)
-            for (var i = 0; i < lineObj.widgets.length; ++i)
-                if (lineObj.widgets[i].above) {
-                    var size = widgetHeight(lineObj.widgets[i]);
-                    rect.top += size;
-                    rect.bottom += size;
-                }
-        if (context == "line")
-            return rect;
-        if (!context)
-            context = "local";
-        var yOff = heightAtLine(lineObj);
-        if (context == "local")
-            yOff += paddingTop(cm.display);
-        else
-            yOff -= cm.display.viewOffset;
-        if (context == "page" || context == "window") {
-            var lOff = cm.display.lineSpace.getBoundingClientRect();
-            yOff += lOff.top + (context == "window" ? 0 : pageScrollY());
-            var xOff = lOff.left + (context == "window" ? 0 : pageScrollX());
-            rect.left += xOff;
-            rect.right += xOff;
-        }
-        rect.top += yOff;
-        rect.bottom += yOff;
-        return rect;
-    }
-
-    // Coverts a box from "div" coords to another coordinate system.
-    // Context may be "window", "page", "div", or "local"/null.
-    function fromCoordSystem(cm, coords, context) {
-        if (context == "div")
-            return coords;
-        var left = coords.left, top = coords.top;
-        // First move into "page" coordinate system
-        if (context == "page") {
-            left -= pageScrollX();
-            top -= pageScrollY();
-        } else if (context == "local" || !context) {
-            var localBox = cm.display.sizer.getBoundingClientRect();
-            left += localBox.left;
-            top += localBox.top;
-        }
-
-        var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();
-        return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top};
-    }
-
-    function charCoords(cm, pos, context, lineObj, bias) {
-        if (!lineObj)
-            lineObj = getLine(cm.doc, pos.line);
-        return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context);
-    }
-
-    // Returns a box for a given cursor position, which may have an
-    // 'other' property containing the position of the secondary cursor
-    // on a bidi boundary.
-    function cursorCoords(cm, pos, context, lineObj, preparedMeasure) {
-        lineObj = lineObj || getLine(cm.doc, pos.line);
-        if (!preparedMeasure)
-            preparedMeasure = prepareMeasureForLine(cm, lineObj);
-        function get(ch, right) {
-            var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left");
-            if (right)
-                m.left = m.right;
-            else
-                m.right = m.left;
-            return intoCoordSystem(cm, lineObj, m, context);
-        }
-        function getBidi(ch, partPos) {
-            var part = order[partPos], right = part.level % 2;
-            if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) {
-                part = order[--partPos];
-                ch = bidiRight(part) - (part.level % 2 ? 0 : 1);
-                right = true;
-            } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) {
-                part = order[++partPos];
-                ch = bidiLeft(part) - part.level % 2;
-                right = false;
-            }
-            if (right && ch == part.to && ch > part.from)
-                return get(ch - 1);
-            return get(ch, right);
-        }
-        var order = getOrder(lineObj), ch = pos.ch;
-        if (!order)
-            return get(ch);
-        var partPos = getBidiPartAt(order, ch);
-        var val = getBidi(ch, partPos);
-        if (bidiOther != null)
-            val.other = getBidi(ch, bidiOther);
-        return val;
-    }
-
-    // Used to cheaply estimate the coordinates for a position. Used for
-    // intermediate scroll updates.
-    function estimateCoords(cm, pos) {
-        var left = 0, pos = clipPos(cm.doc, pos);
-        if (!cm.options.lineWrapping)
-            left = charWidth(cm.display) * pos.ch;
-        var lineObj = getLine(cm.doc, pos.line);
-        var top = heightAtLine(lineObj) + paddingTop(cm.display);
-        return {left: left, right: left, top: top, bottom: top + lineObj.height};
-    }
-
-    // Positions returned by coordsChar contain some extra information.
-    // xRel is the relative x position of the input coordinates compared
-    // to the found position (so xRel > 0 means the coordinates are to
-    // the right of the character position, for example). When outside
-    // is true, that means the coordinates lie outside the line's
-    // vertical range.
-    function PosWithInfo(line, ch, outside, xRel) {
-        var pos = Pos(line, ch);
-        pos.xRel = xRel;
-        if (outside)
-            pos.outside = true;
-        return pos;
-    }
-
-    // Compute the character position closest to the given coordinates.
-    // Input must be lineSpace-local ("div" coordinate system).
-    function coordsChar(cm, x, y) {
-        var doc = cm.doc;
-        y += cm.display.viewOffset;
-        if (y < 0)
-            return PosWithInfo(doc.first, 0, true, -1);
-        var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;
-        if (lineN > last)
-            return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1);
-        if (x < 0)
-            x = 0;
-
-        var lineObj = getLine(doc, lineN);
-        for (; ; ) {
-            var found = coordsCharInner(cm, lineObj, lineN, x, y);
-            var merged = collapsedSpanAtEnd(lineObj);
-            var mergedPos = merged && merged.find(0, true);
-            if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))
-                lineN = lineNo(lineObj = mergedPos.to.line);
-            else
-                return found;
-        }
-    }
-
-    function coordsCharInner(cm, lineObj, lineNo, x, y) {
-        var innerOff = y - heightAtLine(lineObj);
-        var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth;
-        var preparedMeasure = prepareMeasureForLine(cm, lineObj);
-
-        function getX(ch) {
-            var sp = cursorCoords(cm, Pos(lineNo, ch), "line", lineObj, preparedMeasure);
-            wrongLine = true;
-            if (innerOff > sp.bottom)
-                return sp.left - adjust;
-            else if (innerOff < sp.top)
-                return sp.left + adjust;
-            else
-                wrongLine = false;
-            return sp.left;
-        }
-
-        var bidi = getOrder(lineObj), dist = lineObj.text.length;
-        var from = lineLeft(lineObj), to = lineRight(lineObj);
-        var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine;
-
-        if (x > toX)
-            return PosWithInfo(lineNo, to, toOutside, 1);
-        // Do a binary search between these bounds.
-        for (; ; ) {
-            if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) {
-                var ch = x < fromX || x - fromX <= toX - x ? from : to;
-                var xDiff = x - (ch == from ? fromX : toX);
-                while (isExtendingChar(lineObj.text.charAt(ch)))
-                    ++ch;
-                var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside,
-                        xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0);
-                return pos;
-            }
-            var step = Math.ceil(dist / 2), middle = from + step;
-            if (bidi) {
-                middle = from;
-                for (var i = 0; i < step; ++i)
-                    middle = moveVisually(lineObj, middle, 1);
-            }
-            var middleX = getX(middle);
-            if (middleX > x) {
-                to = middle;
-                toX = middleX;
-                if (toOutside = wrongLine)
-                    toX += 1000;
-                dist = step;
-            }
-            else {
-                from = middle;
-                fromX = middleX;
-                fromOutside = wrongLine;
-                dist -= step;
-            }
-        }
-    }
-
-    var measureText;
-    // Compute the default text height.
-    function textHeight(display) {
-        if (display.cachedTextHeight != null)
-            return display.cachedTextHeight;
-        if (measureText == null) {
-            measureText = elt("pre");
-            // Measure a bunch of lines, for browsers that compute
-            // fractional heights.
-            for (var i = 0; i < 49; ++i) {
-                measureText.appendChild(document.createTextNode("x"));
-                measureText.appendChild(elt("br"));
-            }
-            measureText.appendChild(document.createTextNode("x"));
-        }
-        removeChildrenAndAdd(display.measure, measureText);
-        var height = measureText.offsetHeight / 50;
-        if (height > 3)
-      

<TRUNCATED>

[08/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of qtip2.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/658131de/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.js
index de35e9a..411a0f8 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.js
@@ -1,706 +1,5 @@
-/*
- * qTip2 - Pretty powerful tooltips
- * http://craigsworks.com/projects/qtip2/
- *
- * Version: 2.0.0pre
- * Copyright 2009-2010 Craig Michael Thompson - http://craigsworks.com
- *
- * Dual licensed under MIT or GPLv2 licenses
- *   http://en.wikipedia.org/wiki/MIT_License
- *   http://en.wikipedia.org/wiki/GNU_General_Public_License
- *
- * Date: Thu Apr 26 20:40:09 2012 +0100
- *//*jslint browser: true, onevar: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: true *//*global window: false, jQuery: false, console: false, define: false */// Uses AMD or browser globals to create a jQuery plugin.
-(function (a) {
-    typeof define == "function" && define.amd ? define(["jquery"], a) : a(jQuery)
-})(function (a) {
-    "use strict";
-    function v() {
-        v.history = v.history || [], v.history.push(arguments);
-        if ("object" == typeof console) {
-            var a = console[console.warn ? "warn" : "log"], b = Array.prototype.slice.call(arguments), c;
-            typeof arguments[0] == "string" && (b[0] = "qTip2: " + b[0]), c = a.apply ? a.apply(console, b) : a(b)
-        }
-    }
-    function w(b) {
-        var e;
-        if (!b || "object" != typeof b)
-            return c;
-        if (b.metadata === d || "object" != typeof b.metadata)
-            b.metadata = {type: b.metadata};
-        if ("content"in b) {
-            if (b.content === d || "object" != typeof b.content || b.content.jquery)
-                b.content = {text: b.content};
-            e = b.content.text || c, !a.isFunction(e) && (!e && !e.attr || e.length < 1 || "object" == typeof e && !e.jquery) && (b.content.text = c);
-            if ("title"in b.content) {
-                if (b.content.title === d || "object" != typeof b.content.title)
-                    b.content.title = {text: b.content.title};
-                e = b.content.title.text || c, !a.isFunction(e) && (!e && !e.attr || e.length < 1 || "object" == typeof e && !e.jquery) && (b.content.title.text = c)
-            }
-        }
-        return"position"in b && (b.position === d || "object" != typeof b.position) && (b.position = {my: b.position, at: b.position}), "show"in b && (b.show === d || "object" != typeof b.show) && (b.show.jquery ? b.show = {target: b.show} : b.show = {event: b.show}), "hide"in b && (b.hide === d || "object" != typeof b.hide) && (b.hide.jquery ? b.hide = {target: b.hide} : b.hide = {event: b.hide}), "style"in b && (b.style === d || "object" != typeof b.style) && (b.style = {classes: b.style}), a.each(g, function () {
-            this.sanitize && this.sanitize(b)
-        }), b
-    }
-    function x(r, s, v, x) {
-        function H(a) {
-            var b = 0, c, d = s, e = a.split(".");
-            while (d = d[e[b++]])
-                b < e.length && (c = d);
-            return[c || s, e.pop()]
-        }
-        function I() {
-            var a = s.style.widget;
-            D.toggleClass(k, a).toggleClass(n, s.style.def && !a), F.content.toggleClass(k + "-content", a), F.titlebar && F.titlebar.toggleClass(k + "-header", a), F.button && F.button.toggleClass(j + "-icon", !a)
-        }
-        function J(a) {
-            F.title && (F.titlebar.remove(), F.titlebar = F.title = F.button = d, a !== c && y.reposition())
-        }
-        function K() {
-            var b = s.content.title.button, d = typeof b == "string", e = d ? b : "Close tooltip";
-            F.button && F.button.remove(), b.jquery ? F.button = b : F.button = a("<a />", {"class": "ui-state-default ui-tooltip-close " + (s.style.widget ? "" : j + "-icon"), title: e, "aria-label": e}).prepend(a("<span />", {"class": "ui-icon ui-icon-close", html: "&times;"})), F.button.appendTo(F.titlebar).attr("role", "button").click(function (a) {
-                return D.hasClass(l) || y.hide(a), c
-            }), y.redraw()
-        }
-        function L() {
-            var c = A + "-title";
-            F.titlebar && J(), F.titlebar = a("<div />", {"class": j + "-titlebar " + (s.style.widget ? "ui-widget-header" : "")}).append(F.title = a("<div />", {id: c, "class": j + "-title", "aria-atomic": b})).insertBefore(F.content).delegate(".ui-tooltip-close", "mousedown keydown mouseup keyup mouseout", function (b) {
-                a(this).toggleClass("ui-state-active ui-state-focus", b.type.substr(-4) === "down")
-            }).delegate(".ui-tooltip-close", "mouseover mouseout", function (b) {
-                a(this).toggleClass("ui-state-hover", b.type === "mouseover")
-            }), s.content.title.button ? K() : y.rendered && y.redraw()
-        }
-        function M(a) {
-            var b = F.button, d = F.title;
-            if (!y.rendered)
-                return c;
-            a ? (d || L(), K()) : b.remove()
-        }
-        function N(b, d) {
-            var e = F.title;
-            if (!y.rendered || !b)
-                return c;
-            a.isFunction(b) && (b = b.call(r, G.event, y));
-            if (b === c || !b && b !== "")
-                return J(c);
-            b.jquery && b.length > 0 ? e.empty().append(b.css({display: "block"})) : e.html(b), y.redraw(), d !== c && y.rendered && D[0].offsetWidth > 0 && y.reposition(G.event)
-        }
-        function O(b, d) {
-            function g(b) {
-                function i(e) {
-                    e && (delete h[e.src], clearTimeout(y.timers.img[e.src]), a(e).unbind(E)), a.isEmptyObject(h) && (y.redraw(), d !== c && y.reposition(G.event), b())
-                }
-                var g, h = {};
-                if ((g = f.find("img[src]:not([height]):not([width])")).length === 0)
-                    return i();
-                g.each(function (b, c) {
-                    if (h[c.src] !== e)
-                        return;
-                    var d = 0, f = 3;
-                    (function g() {
-                        if (c.height || c.width || d > f)
-                            return i(c);
-                        d += 1, y.timers.img[c.src] = setTimeout(g, 700)
-                    })(), a(c).bind("error" + E + " load" + E, function () {
-                        i(this)
-                    }), h[c.src] = c
-                })
-            }
-            var f = F.content;
-            return!y.rendered || !b ? c : (a.isFunction(b) && (b = b.call(r, G.event, y) || ""), b.jquery && b.length > 0 ? f.empty().append(b.css({display: "block"})) : f.html(b), y.rendered < 0 ? D.queue("fx", g) : (C = 0, g(a.noop)), y)
-        }
-        function P() {
-            function j(a) {
-                if (D.hasClass(l))
-                    return c;
-                clearTimeout(y.timers.show), clearTimeout(y.timers.hide);
-                var d = function () {
-                    y.toggle(b, a)
-                };
-                s.show.delay > 0 ? y.timers.show = setTimeout(d, s.show.delay) : d()
-            }
-            function k(b) {
-                if (D.hasClass(l) || B || C)
-                    return c;
-                var f = a(b.relatedTarget || b.target), g = f.closest(m)[0] === D[0], h = f[0] === e.show[0];
-                clearTimeout(y.timers.show), clearTimeout(y.timers.hide);
-                if (d.target === "mouse" && g || s.hide.fixed && /mouse(out|leave|move)/.test(b.type) && (g || h)) {
-                    try {
-                        b.preventDefault(), b.stopImmediatePropagation()
-                    } catch (i) {
-                    }
-                    return
-                }
-                s.hide.delay > 0 ? y.timers.hide = setTimeout(function () {
-                    y.hide(b)
-                }, s.hide.delay) : y.hide(b)
-            }
-            function n(a) {
-                if (D.hasClass(l))
-                    return c;
-                clearTimeout(y.timers.inactive), y.timers.inactive = setTimeout(function () {
-                    y.hide(a)
-                }, s.hide.inactive)
-            }
-            function o(a) {
-                y.rendered && D[0].offsetWidth > 0 && y.reposition(a)
-            }
-            var d = s.position, e = {show: s.show.target, hide: s.hide.target, viewport: a(d.viewport), document: a(document), body: a(document.body), window: a(window)}, g = {show: a.trim("" + s.show.event).split(" "), hide: a.trim("" + s.hide.event).split(" ")}, i = a.browser.msie && parseInt(a.browser.version, 10) === 6;
-            D.bind("mouseenter" + E + " mouseleave" + E, function (a) {
-                var b = a.type === "mouseenter";
-                b && y.focus(a), D.toggleClass(p, b)
-            }), s.hide.fixed && (e.hide = e.hide.add(D), D.bind("mouseover" + E, function () {
-                D.hasClass(l) || clearTimeout(y.timers.hide)
-            })), /mouse(out|leave)/i.test(s.hide.event) ? s.hide.leave === "window" && e.window.bind("mouseout" + E + " blur" + E, function (a) {
-                /select|option/.test(a.target) && !a.relatedTarget && y.hide(a)
-            }) : /mouse(over|enter)/i.test(s.show.event) && e.hide.bind("mouseleave" + E, function (a) {
-                clearTimeout(y.timers.show)
-            }), ("" + s.hide.event).indexOf("unfocus") > -1 && d.container.closest("html").bind("mousedown" + E, function (b) {
-                var c = a(b.target), d = y.rendered && !D.hasClass(l) && D[0].offsetWidth > 0, e = c.parents(m).filter(D[0]).length > 0;
-                c[0] !== r[0] && c[0] !== D[0] && !e && !r.has(c[0]).length && !c.attr("disabled") && y.hide(b)
-            }), "number" == typeof s.hide.inactive && (e.show.bind("qtip-" + v + "-inactive", n), a.each(f.inactiveEvents, function (a, b) {
-                e.hide.add(F.tooltip).bind(b + E + "-inactive", n)
-            })), a.each(g.hide, function (b, c) {
-                var d = a.inArray(c, g.show), f = a(e.hide);
-                d > -1 && f.add(e.show).length === f.length || c === "unfocus" ? (e.show.bind(c + E, function (a) {
-                    D[0].offsetWidth > 0 ? k(a) : j(a)
-                }), delete g.show[d]) : e.hide.bind(c + E, k)
-            }), a.each(g.show, function (a, b) {
-                e.show.bind(b + E, j)
-            }), "number" == typeof s.hide.distance && e.show.add(D).bind("mousemove" + E, function (a) {
-                var b = G.origin || {}, c = s.hide.distance, d = Math.abs;
-                (d(a.pageX - b.pageX) >= c || d(a.pageY - b.pageY) >= c) && y.hide(a)
-            }), d.target === "mouse" && (e.show.bind("mousemove" + E, function (a) {
-                h = {pageX: a.pageX, pageY: a.pageY, type: "mousemove"}
-            }), d.adjust.mouse && (s.hide.event && (D.bind("mouseleave" + E, function (a) {
-                (a.relatedTarget || a.target) !== e.show[0] && y.hide(a)
-            }), F.target.bind("mouseenter" + E + " mouseleave" + E, function (a) {
-                G.onTarget = a.type === "mouseenter"
-            })), e.document.bind("mousemove" + E, function (a) {
-                y.rendered && G.onTarget && !D.hasClass(l) && D[0].offsetWidth > 0 && y.reposition(a || h)
-            }))), (d.adjust.resize || e.viewport.length) && (a.event.special.resize ? e.viewport : e.window).bind("resize" + E, o), (e.viewport.length || i && D.css("position") === "fixed") && e.viewport.bind("scroll" + E, o)
-        }
-        function Q() {
-            var b = [s.show.target[0], s.hide.target[0], y.rendered && F.tooltip[0], s.position.container[0], s.position.viewport[0], window, document];
-            y.rendered ? a([]).pushStack(a.grep(b, function (a) {
-                return typeof a == "object"
-            })).unbind(E) : s.show.target.unbind(E + "-create")
-        }
-        var y = this, z = document.body, A = j + "-" + v, B = 0, C = 0, D = a(), E = ".qtip-" + v, F, G;
-        y.id = v, y.rendered = c, y.destroyed = c, y.elements = F = {target: r}, y.timers = {img: {}}, y.options = s, y.checks = {}, y.plugins = {}, y.cache = G = {event: {}, target: a(), disabled: c, attr: x, onTarget: c}, y.checks.builtin = {"^id$": function (d, e, g) {
-                var h = g === b ? f.nextid : g, i = j + "-" + h;
-                h !== c && h.length > 0 && !a("#" + i).length && (D[0].id = i, F.content[0].id = i + "-content", F.title[0].id = i + "-title")
-            }, "^content.text$": function (a, b, c) {
-                O(c)
-            }, "^content.title.text$": function (a, b, c) {
-                if (!c)
-                    return J();
-                !F.title && c && L(), N(c)
-            }, "^content.title.button$": function (a, b, c) {
-                M(c)
-            }, "^position.(my|at)$": function (a, b, c) {
-                "string" == typeof c && (a[b] = new g.Corner(c))
-            }, "^position.container$": function (a, b, c) {
-                y.rendered && D.appendTo(c)
-            }, "^show.ready$": function () {
-                y.rendered ? y.toggle(b) : y.render(1)
-            }, "^style.classes$": function (a, b, c) {
-                D.attr("class", j + " qtip ui-helper-reset " + c)
-            }, "^style.widget|content.title": I, "^events.(render|show|move|hide|focus|blur)$": function (b, c, d) {
-                D[(a.isFunction(d) ? "" : "un") + "bind"]("tooltip" + c, d)
-            }, "^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)": function () {
-                var a = s.position;
-                D.attr("tracking", a.target === "mouse" && a.adjust.mouse), Q(), P()
-            }}, a.extend(y, {render: function (d) {
-                if (y.rendered)
-                    return y;
-                var e = s.content.text, f = s.content.title.text, h = s.position, i = a.Event("tooltiprender");
-                return a.attr(r[0], "aria-describedby", A), D = F.tooltip = a("<div/>", {id: A, "class": j + " qtip ui-helper-reset " + n + " " + s.style.classes + " " + j + "-pos-" + s.position.my.abbrev(), width: s.style.width || "", height: s.style.height || "", tracking: h.target === "mouse" && h.adjust.mouse, role: "alert", "aria-live": "polite", "aria-atomic": c, "aria-describedby": A + "-content", "aria-hidden": b}).toggleClass(l, G.disabled).data("qtip", y).appendTo(s.position.container).append(F.content = a("<div />", {"class": j + "-content", id: A + "-content", "aria-atomic": b})), y.rendered = -1, C = 1, B = 1, f && (L(), a.isFunction(f) || N(f, c)), a.isFunction(e) || O(e, c), y.rendered = b, I(), a.each(s.events, function (b, c) {
-                    a.isFunction(c) && D.bind(b === "toggle" ? "tooltipshow tooltiphide" : "tooltip" + b, c)
-                }), a.each(g, function () {
-                    this.initialize === "render" && this(y)
-                }), P(), D.queue("fx", function (a) {
-                    i.originalEvent = G.event, D.trigger(i, [y]), C = 0, B = 0, y.redraw(), (s.show.ready || d) && y.toggle(b, G.event, c), a()
-                }), y
-            }, get: function (a) {
-                var b, c;
-                switch (a.toLowerCase()) {
-                    case"dimensions":
-                        b = {height: D.outerHeight(), width: D.outerWidth()};
-                        break;
-                    case"offset":
-                        b = g.offset(D, s.position.container);
-                        break;
-                    default:
-                        c = H(a.toLowerCase()), b = c[0][c[1]], b = b.precedance ? b.string() : b
-                }
-                return b
-            }, set: function (e, f) {
-                function m(a, b) {
-                    var c, d, e;
-                    for (c in k)
-                        for (d in k[c])
-                            if (e = (new RegExp(d, "i")).exec(a))
-                                b.push(e), k[c][d].apply(y, b)
-                }
-                var g = /^position\.(my|at|adjust|target|container)|style|content|show\.ready/i, h = /^content\.(title|attr)|style/i, i = c, j = c, k = y.checks, l;
-                return"string" == typeof e ? (l = e, e = {}, e[l] = f) : e = a.extend(b, {}, e), a.each(e, function (b, c) {
-                    var d = H(b.toLowerCase()), f;
-                    f = d[0][d[1]], d[0][d[1]] = "object" == typeof c && c.nodeType ? a(c) : c, e[b] = [d[0], d[1], c, f], i = g.test(b) || i, j = h.test(b) || j
-                }), w(s), B = C = 1, a.each(e, m), B = C = 0, y.rendered && D[0].offsetWidth > 0 && (i && y.reposition(s.position.target === "mouse" ? d : G.event), j && y.redraw()), y
-            }, toggle: function (e, f) {
-                function t() {
-                    e ? (a.browser.msie && D[0].style.removeAttribute("filter"), D.css("overflow", ""), "string" == typeof i.autofocus && a(i.autofocus, D).focus(), i.target.trigger("qtip-" + v + "-inactive")) : D.css({display: "", visibility: "", opacity: "", left: "", top: ""}), r = a.Event("tooltip" + (e ? "visible" : "hidden")), r.originalEvent = f ? G.event : d, D.trigger(r, [y])
-                }
-                if (!y.rendered)
-                    return e ? y.render(1) : y;
-                var g = e ? "show" : "hide", i = s[g], j = s[e ? "hide" : "show"], k = s.position, l = s.content, n = D[0].offsetWidth > 0, o = e || i.target.length === 1, p = !f || i.target.length < 2 || G.target[0] === f.target, q, r;
-                (typeof e).search("boolean|number") && (e = !n);
-                if (!D.is(":animated") && n === e && p)
-                    return y;
-                if (f) {
-                    if (/over|enter/.test(f.type) && /out|leave/.test(G.event.type) && s.show.target.add(f.target).length === s.show.target.length && D.has(f.relatedTarget).length)
-                        return y;
-                    G.event = a.extend({}, f)
-                }
-                return r = a.Event("tooltip" + g), r.originalEvent = f ? G.event : d, D.trigger(r, [y, 90]), r.isDefaultPrevented() ? y : (a.attr(D[0], "aria-hidden", !e), e ? (G.origin = a.extend({}, h), y.focus(f), a.isFunction(l.text) && O(l.text, c), a.isFunction(l.title.text) && N(l.title.text, c), !u && k.target === "mouse" && k.adjust.mouse && (a(document).bind("mousemove.qtip", function (a) {
-                    h = {pageX: a.pageX, pageY: a.pageY, type: "mousemove"}
-                }), u = b), y.reposition(f, arguments[2]), (r.solo = !!i.solo) && a(m, i.solo).not(D).qtip("hide", r)) : (clearTimeout(y.timers.show), delete G.origin, u && !a(m + '[tracking="true"]:visible', i.solo).not(D).length && (a(document).unbind("mousemove.qtip"), u = c), y.blur(f)), i.effect === c || o === c ? (D[g](), t.call(D)) : a.isFunction(i.effect) ? (D.stop(1, 1), i.effect.call(D, y), D.queue("fx", function (a) {
-                    t(), a()
-                })) : D.fadeTo(90, e ? 1 : 0, t), e && i.target.trigger("qtip-" + v + "-inactive"), y)
-            }, show: function (a) {
-                return y.toggle(b, a)
-            }, hide: function (a) {
-                return y.toggle(c, a)
-            }, focus: function (b) {
-                if (!y.rendered)
-                    return y;
-                var c = a(m), d = parseInt(D[0].style.zIndex, 10), e = f.zindex + c.length, g = a.extend({}, b), h, i;
-                return D.hasClass(o) || (i = a.Event("tooltipfocus"), i.originalEvent = g, D.trigger(i, [y, e]), i.isDefaultPrevented() || (d !== e && (c.each(function () {
-                    this.style.zIndex > d && (this.style.zIndex = this.style.zIndex - 1)
-                }), c.filter("." + o).qtip("blur", g)), D.addClass(o)[0].style.zIndex = e)), y
-            }, blur: function (b) {
-                var c = a.extend({}, b), d;
-                return D.removeClass(o), d = a.Event("tooltipblur"), d.originalEvent = c, D.trigger(d, [y]), y
-            }, reposition: function (b, d) {
-                if (!y.rendered || B)
-                    return y;
-                B = 1;
-                var e = s.position.target, f = s.position, i = f.my, k = f.at, l = f.adjust, m = l.method.split(" "), n = D.outerWidth(), o = D.outerHeight(), p = 0, q = 0, r = a.Event("tooltipmove"), t = D.css("position") === "fixed", u = f.viewport, v = {left: 0, top: 0}, w = f.container, x = c, A = y.plugins.tip, C = D[0].offsetWidth > 0, E = {horizontal: m[0], vertical: m[1] = m[1] || m[0], enabled: u.jquery && e[0] !== window && e[0] !== z && l.method !== "none", left: function (a) {
-                        var b = E.horizontal === "shift", c = l.x * (E.horizontal.substr(-6) === "invert" ? 2 : 0), d = -w.offset.left + u.offset.left + u.scrollLeft, e = i.x === "left" ? n : i.x === "right" ? -n : -n / 2, f = k.x === "left" ? p : k.x === "right" ? -p : -p / 2, g = A && A.size ? A.size.width || 0 : 0, h = A && A.corner && A.corner.precedance === "x" && !b ? g : 0, j = d - a + h, m = a + n - u.width - d + h, o = e - (i.precedance === "x" || i.x === i.y ? f : 0) - (k.x === "center" ? p / 2 : 0), q = i.x === "center";
-                        return b ? (h = A && A.corner && A.corner.precedance === "y" ? g : 0, o = (i.x === "left" ? 1 : -1) * e - h, v.left += j > 0 ? j : m > 0 ? -m : 0, v.left = Math.max(-w.offset.left + u.offset.left + (h && A.corner.x === "center" ? A.offset : 0), a - o, Math.min(Math.max(-w.offset.left + u.offset.left + u.width, a + o), v.left))) : (j > 0 && (i.x !== "left" || m > 0) ? v.left -= o + c : m > 0 && (i.x !== "right" || j > 0) && (v.left -= (q ? -o : o) + c), v.left < d && -v.left > m && (v.left = a)), v.left - a
-                    }, top: function (a) {
-                        var b = E.vertical === "shift", c = l.y * (E.vertical.substr(-6) === "invert" ? 2 : 0), d = -w.offset.top + u.offset.top + u.scrollTop, e = i.y === "top" ? o : i.y === "bottom" ? -o : -o / 2, f = k.y === "top" ? q : k.y === "bottom" ? -q : -q / 2, g = A && A.size ? A.size.height || 0 : 0, h = A && A.corner && A.corner.precedance === "y" && !b ? g : 0, j = d - a + h, m = a + o - u.height - d + h, n = e - (i.precedance === "y" || i.x === i.y ? f : 0) - (k.y === "center" ? q / 2 : 0), p = i.y === "center";
-                        return b ? (h = A && A.corner && A.corner.precedance === "x" ? g : 0, n = (i.y === "top" ? 1 : -1) * e - h, v.top += j > 0 ? j : m > 0 ? -m : 0, v.top = Math.max(-w.offset.top + u.offset.top + (h && A.corner.x === "center" ? A.offset : 0), a - n, Math.min(Math.max(-w.offset.top + u.offset.top + u.height, a + n), v.top))) : (j > 0 && (i.y !== "top" || m > 0) ? v.top -= n + c : m > 0 && (i.y !== "bottom" || j > 0) && (v.top -= (p ? -n : n) + c), v.top < 0 && -v.top > m && (v.top = a)), v.top - a
-                    }}, H;
-                if (a.isArray(e) && e.length === 2)
-                    k = {x: "left", y: "top"}, v = {left: e[0], top: e[1]};
-                else if (e === "mouse" && (b && b.pageX || G.event.pageX))
-                    k = {x: "left", y: "top"}, b = (!b || b.type !== "resize" && b.type !== "scroll" ? b && b.pageX && b.type === "mousemove" ? b : h && h.pageX && (l.mouse || !b || !b.pageX) ? {pageX: h.pageX, pageY: h.pageY} : !l.mouse && G.origin && G.origin.pageX && s.show.distance ? G.origin : b : G.event) || b || G.event || h || {}, v = {top: b.pageY, left: b.pageX};
-                else {
-                    e === "event" ? b && b.target && b.type !== "scroll" && b.type !== "resize" ? e = G.target = a(b.target) : e = G.target : e = G.target = a(e.jquery ? e : F.target), e = a(e).eq(0);
-                    if (e.length === 0)
-                        return y;
-                    e[0] === document || e[0] === window ? (p = g.iOS ? window.innerWidth : e.width(), q = g.iOS ? window.innerHeight : e.height(), e[0] === window && (v = {top: (u || e).scrollTop(), left: (u || e).scrollLeft()})) : e.is("area") && g.imagemap ? v = g.imagemap(e, k, E.enabled ? m : c) : e[0].namespaceURI === "http://www.w3.org/2000/svg" && g.svg ? v = g.svg(e, k) : (p = e.outerWidth(), q = e.outerHeight(), v = g.offset(e, w)), v.offset && (p = v.width, q = v.height, x = v.flipoffset, v = v.offset);
-                    if (g.iOS < 4.1 && g.iOS > 3.1 || g.iOS == 4.3 || !g.iOS && t)
-                        H = a(window), v.left -= H.scrollLeft(), v.top -= H.scrollTop();
-                    v.left += k.x === "right" ? p : k.x === "center" ? p / 2 : 0, v.top += k.y === "bottom" ? q : k.y === "center" ? q / 2 : 0
-                }
-                return v.left += l.x + (i.x === "right" ? -n : i.x === "center" ? -n / 2 : 0), v.top += l.y + (i.y === "bottom" ? -o : i.y === "center" ? -o / 2 : 0), E.enabled ? (u = {elem: u, height: u[(u[0] === window ? "h" : "outerH") + "eight"](), width: u[(u[0] === window ? "w" : "outerW") + "idth"](), scrollLeft: t ? 0 : u.scrollLeft(), scrollTop: t ? 0 : u.scrollTop(), offset: u.offset() || {left: 0, top: 0}}, w = {elem: w, scrollLeft: w.scrollLeft(), scrollTop: w.scrollTop(), offset: w.offset() || {left: 0, top: 0}}, v.adjusted = {left: E.horizontal !== "none" ? E.left(v.left) : 0, top: E.vertical !== "none" ? E.top(v.top) : 0}, v.adjusted.left + v.adjusted.top && D.attr("class", D[0].className.replace(/ui-tooltip-pos-\w+/i, j + "-pos-" + i.abbrev())), x && v.adjusted.left && (v.left += x.left), x && v.adjusted.top && (v.top += x.top)) : v.adjusted = {left: 0, top: 0}, r.originalEvent = a.extend({}, b), D.trigger(r, [y, v, u.elem || u]), r.isDefaultPrevented() ? y : (delete
  v.adjusted, d === c || !C || isNaN(v.left) || isNaN(v.top) || e === "mouse" || !a.isFunction(f.effect) ? D.css(v) : a.isFunction(f.effect) && (f.effect.call(D, y, a.extend({}, v)), D.queue(function (b) {
-                    a(this).css({opacity: "", height: ""}), a.browser.msie && this.style.removeAttribute("filter"), b()
-                })), B = 0, y)
-            }, redraw: function () {
-                if (y.rendered < 1 || C)
-                    return y;
-                var a = s.position.container, b, c, d, e;
-                return C = 1, s.style.height && D.css("height", s.style.height), s.style.width ? D.css("width", s.style.width) : (D.css("width", "").addClass(q), c = D.width() + 1, d = D.css("max-width") || "", e = D.css("min-width") || "", b = (d + e).indexOf("%") > -1 ? a.width() / 100 : 0, d = (d.indexOf("%") > -1 ? b : 1) * parseInt(d, 10) || c, e = (e.indexOf("%") > -1 ? b : 1) * parseInt(e, 10) || 0, c = d + e ? Math.min(Math.max(c, e), d) : c, D.css("width", Math.round(c)).removeClass(q)), C = 0, y
-            }, disable: function (b) {
-                return"boolean" != typeof b && (b = !D.hasClass(l) && !G.disabled), y.rendered ? (D.toggleClass(l, b), a.attr(D[0], "aria-disabled", b)) : G.disabled = !!b, y
-            }, enable: function () {
-                return y.disable(c)
-            }, destroy: function () {
-                var c = r[0], d = a.attr(c, t), e = r.data("qtip");
-                y.destroyed = b, y.rendered && (D.stop(1, 0).remove(), a.each(y.plugins, function () {
-                    this.destroy && this.destroy()
-                })), clearTimeout(y.timers.show), clearTimeout(y.timers.hide), Q();
-                if (!e || y === e)
-                    a.removeData(c, "qtip"), s.suppress && d && (a.attr(c, "title", d), r.removeAttr(t)), r.removeAttr("aria-describedby");
-                return r.unbind(".qtip-" + v), delete i[y.id], r
-            }})
-    }
-    function y(e, h) {
-        var i, j, k, l, m, n = a(this), o = a(document.body), p = this === document ? o : n, q = n.metadata ? n.metadata(h.metadata) : d, r = h.metadata.type === "html5" && q ? q[h.metadata.name] : d, s = n.data(h.metadata.name || "qtipopts");
-        try {
-            s = typeof s == "string" ? (new Function("return " + s))() : s
-        } catch (u) {
-            v("Unable to parse HTML5 attribute data: " + s)
-        }
-        l = a.extend(b, {}, f.defaults, h, typeof s == "object" ? w(s) : d, w(r || q)), j = l.position, l.id = e;
-        if ("boolean" == typeof l.content.text) {
-            k = n.attr(l.content.attr);
-            if (l.content.attr === c || !k)
-                return v("Unable to locate content for tooltip! Aborting render of tooltip on element: ", n), c;
-            l.content.text = k
-        }
-        j.container.length || (j.container = o), j.target === c && (j.target = p), l.show.target === c && (l.show.target = p), l.show.solo === b && (l.show.solo = j.container.closest("body")), l.hide.target === c && (l.hide.target = p), l.position.viewport === b && (l.position.viewport = j.container), j.container = j.container.eq(0), j.at = new g.Corner(j.at), j.my = new g.Corner(j.my);
-        if (a.data(this, "qtip"))
-            if (l.overwrite)
-                n.qtip("destroy");
-            else if (l.overwrite === c)
-                return c;
-        return l.suppress && (m = a.attr(this, "title")) && a(this).removeAttr("title").attr(t, m), i = new x(n, l, e, !!k), a.data(this, "qtip", i), n.bind("remove.qtip-" + e + " removeqtip.qtip-" + e, function () {
-            i.destroy()
-        }), i
-    }
-    function z(d) {
-        var e = this, g = d.elements.tooltip, h = d.options.content.ajax, i = f.defaults.content.ajax, j = ".qtip-ajax", k = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, l = b, m = c, n;
-        d.checks.ajax = {"^content.ajax": function (a, b, c) {
-                b === "ajax" && (h = c), b === "once" ? e.init() : h && h.url ? e.load() : g.unbind(j)
-            }}, a.extend(e, {init: function () {
-                return h && h.url && g.unbind(j)[h.once ? "one" : "bind"]("tooltipshow" + j, e.load), e
-            }, load: function (f) {
-                function r() {
-                    var e;
-                    if (d.destroyed)
-                        return;
-                    l = c, p && (m = b, d.show(f.originalEvent)), (e = i.complete || h.complete) && a.isFunction(e) && e.apply(h.context || d, arguments)
-                }
-                function s(b, c, e) {
-                    var f;
-                    if (d.destroyed)
-                        return;
-                    o && (b = a("<div/>").append(b.replace(k, "")).find(o)), (f = i.success || h.success) && a.isFunction(f) ? f.call(h.context || d, b, c, e) : d.set("content.text", b)
-                }
-                function t(a, b, c) {
-                    if (d.destroyed || a.status === 0)
-                        return;
-                    d.set("content.text", b + ": " + c)
-                }
-                if (m) {
-                    m = c;
-                    return
-                }
-                var g = h.url.indexOf(" "), j = h.url, o, p = !h.loading && l;
-                if (p)
-                    try {
-                        f.preventDefault()
-                    } catch (q) {
-                    }
-                else if (f && f.isDefaultPrevented())
-                    return e;
-                n && n.abort && n.abort(), g > -1 && (o = j.substr(g), j = j.substr(0, g)), n = a.ajax(a.extend({error: i.error || t, context: d}, h, {url: j, success: s, complete: r}))
-            }, destroy: function () {
-                n && n.abort && n.abort(), d.destroyed = b
-            }}), e.init()
-    }
-    function A(b) {
-        var c = this, d = b.elements, e = d.tooltip, f = ".bgiframe-" + b.id;
-        a.extend(c, {init: function () {
-                d.bgiframe = a('<iframe class="ui-tooltip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';"  style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>'), d.bgiframe.appendTo(e), e.bind("tooltipmove" + f, c.adjust)
-            }, adjust: function () {
-                var a = b.get("dimensions"), c = b.plugins.tip, f = d.tip, g, h;
-                h = parseInt(e.css("border-left-width"), 10) || 0, h = {left: -h, top: -h}, c && f && (g = c.corner.precedance === "x" ? ["width", "left"] : ["height", "top"], h[g[1]] -= f[g[0]]()), d.bgiframe.css(h).css(a)
-            }, destroy: function () {
-                d.bgiframe.remove(), e.unbind(f)
-            }}), c.init()
-    }
-    function B(d) {
-        var e = this, f = d.options.show.modal, h = d.elements, i = h.tooltip, j = "#qtip-overlay", k = ".qtipmodal", l = k + d.id, n = "is-modal-qtip", p = a(document.body), q;
-        d.checks.modal = {"^show.modal.(on|blur)$": function () {
-                e.init(), h.overlay.toggle(i.is(":visible"))
-            }}, a.extend(e, {init: function () {
-                return f.on ? (q = e.create(), i.attr(n, b).css("z-index", g.modal.zindex + a(m + "[" + n + "]").length).unbind(k).unbind(l).bind("tooltipshow" + k + " tooltiphide" + k, function (b, c, d) {
-                    var f = b.originalEvent;
-                    if (b.target === i[0])
-                        if (f && b.type === "tooltiphide" && /mouse(leave|enter)/.test(f.type) && a(f.relatedTarget).closest(q[0]).length)
-                            try {
-                                b.preventDefault()
-                            } catch (g) {
-                            }
-                        else
-                            (!f || f && !f.solo) && e[b.type.replace("tooltip", "")](b, d)
-                }).bind("tooltipfocus" + k, function (b) {
-                    if (b.isDefaultPrevented() || b.target !== i[0])
-                        return;
-                    var c = a(m).filter("[" + n + "]"), d = g.modal.zindex + c.length, e = parseInt(i[0].style.zIndex, 10);
-                    q[0].style.zIndex = d - 1, c.each(function () {
-                        this.style.zIndex > e && (this.style.zIndex -= 1)
-                    }), c.end().filter("." + o).qtip("blur", b.originalEvent), i.addClass(o)[0].style.zIndex = d;
-                    try {
-                        b.preventDefault()
-                    } catch (f) {
-                    }
-                }).bind("tooltiphide" + k, function (b) {
-                    b.target === i[0] && a("[" + n + "]").filter(":visible").not(i).last().qtip("focus", b)
-                }), f.escape && a(window).unbind(l).bind("keydown" + l, function (a) {
-                    a.keyCode === 27 && i.hasClass(o) && d.hide(a)
-                }), f.blur && h.overlay.unbind(l).bind("click" + l, function (a) {
-                    i.hasClass(o) && d.hide(a)
-                }), e) : e
-            }, create: function () {
-                function d() {
-                    q.css({height: a(window).height(), width: a(window).width()})
-                }
-                var b = a(j);
-                return b.length ? h.overlay = b.insertAfter(a(m).last()) : (q = h.overlay = a("<div />", {id: j.substr(1), html: "<div></div>", mousedown: function () {
-                        return c
-                    }}).insertAfter(a(m).last()), a(window).unbind(k).bind("resize" + k, d), d(), q)
-            }, toggle: function (d, g, h) {
-                if (d && d.isDefaultPrevented())
-                    return e;
-                var j = f.effect, k = g ? "show" : "hide", o = q.is(":visible"), r = a("[" + n + "]").filter(":visible").not(i), s;
-                return q || (q = e.create()), q.is(":animated") && o === g || !g && r.length ? e : (g ? (q.css({left: 0, top: 0}), q.toggleClass("blurs", f.blur), p.bind("focusin" + l, function (b) {
-                    var d = a(b.target), e = d.closest(".qtip"), f = e.length < 1 ? c : parseInt(e[0].style.zIndex, 10) > parseInt(i[0].style.zIndex, 10);
-                    !f && a(b.target).closest(m)[0] !== i[0] && i.find("input:visible").filter(":first").focus()
-                })) : p.undelegate("*", "focusin" + l), q.stop(b, c), a.isFunction(j) ? j.call(q, g) : j === c ? q[k]() : q.fadeTo(parseInt(h, 10) || 90, g ? 1 : 0, function () {
-                    g || a(this).hide()
-                }), g || q.queue(function (a) {
-                    q.css({left: "", top: ""}), a()
-                }), e)
-            }, show: function (a, c) {
-                return e.toggle(a, b, c)
-            }, hide: function (a, b) {
-                return e.toggle(a, c, b)
-            }, destroy: function () {
-                var b = q;
-                return b && (b = a("[" + n + "]").not(i).length < 1, b ? (h.overlay.remove(), a(window).unbind(k)) : h.overlay.unbind(k + d.id), p.undelegate("*", "focusin" + l)), i.removeAttr(n).unbind(k)
-            }}), e.init()
-    }
-    function C(a, b, c) {
-        var d = Math.ceil(b / 2), e = Math.ceil(c / 2), f = {bottomright: [[0, 0], [b, c], [b, 0]], bottomleft: [[0, 0], [b, 0], [0, c]], topright: [[0, c], [b, 0], [b, c]], topleft: [[0, 0], [0, c], [b, c]], topcenter: [[0, c], [d, 0], [b, c]], bottomcenter: [[0, 0], [b, 0], [d, c]], rightcenter: [[0, 0], [b, e], [0, c]], leftcenter: [[b, 0], [b, c], [0, e]]};
-        return f.lefttop = f.bottomright, f.righttop = f.bottomleft, f.leftbottom = f.topright, f.rightbottom = f.topleft, f[a.string()]
-    }
-    function D(f, h) {
-        function t() {
-            var a = n.width;
-            n.width = n.height, n.height = a
-        }
-        function u() {
-            n.width = j.width, n.height = j.height
-        }
-        function v(a, d, g, h) {
-            if (!k.tip)
-                return;
-            var l = i.corner.clone(), n = g.adjusted, o = f.options.position.adjust.method.split(" "), p = o[0], q = o[1] || o[0], r = {left: c, top: c, x: 0, y: 0}, s, t = {}, u;
-            i.corner.fixed !== b && (p === "shift" && l.precedance === "x" && n.left && l.y !== "center" ? l.precedance = l.precedance === "x" ? "y" : "x" : p !== "shift" && n.left && (l.x = l.x === "center" ? n.left > 0 ? "left" : "right" : l.x === "left" ? "right" : "left"), q === "shift" && l.precedance === "y" && n.top && l.x !== "center" ? l.precedance = l.precedance === "y" ? "x" : "y" : q !== "shift" && n.top && (l.y = l.y === "center" ? n.top > 0 ? "top" : "bottom" : l.y === "top" ? "bottom" : "top"), l.string() !== m.corner.string() && (m.top !== n.top || m.left !== n.left) && i.update(l, c)), s = i.position(l, n), s.right !== e && (s.left = -s.right), s.bottom !== e && (s.top = -s.bottom), s.user = Math.max(0, j.offset);
-            if (r.left = p === "shift" && !!n.left)
-                l.x === "center" ? t["margin-left"] = r.x = s["margin-left"] - n.left : (u = s.right !== e ? [n.left, -s.left] : [-n.left, s.left], (r.x = Math.max(u[0], u[1])) > u[0] && (g.left -= n.left, r.left = c), t[s.right !== e ? "right" : "left"] = r.x);
-            if (r.top = q === "shift" && !!n.top)
-                l.y === "center" ? t["margin-top"] = r.y = s["margin-top"] - n.top : (u = s.bottom !== e ? [n.top, -s.top] : [-n.top, s.top], (r.y = Math.max(u[0], u[1])) > u[0] && (g.top -= n.top, r.top = c), t[s.bottom !== e ? "bottom" : "top"] = r.y);
-            k.tip.css(t).toggle(!(r.x && r.y || l.x === "center" && r.y || l.y === "center" && r.x)), g.left -= s.left.charAt ? s.user : p !== "shift" || r.top || !r.left && !r.top ? s.left : 0, g.top -= s.top.charAt ? s.user : q !== "shift" || r.left || !r.left && !r.top ? s.top : 0, m.left = n.left, m.top = n.top, m.corner = l.clone()
-        }
-        function w(a, b, c) {
-            b = b ? b : a[a.precedance];
-            var d = l.hasClass(q), e = k.titlebar && a.y === "top", f = e ? k.titlebar : k.content, g = "border-" + b + "-width", h;
-            return l.addClass(q), h = parseInt(f.css(g), 10), h = (c ? h || parseInt(l.css(g), 10) : h) || 0, l.toggleClass(q, d), h
-        }
-        function x(b) {
-            var c = k.titlebar && b.y === "top", d = c ? k.titlebar : k.content, e = a.browser.mozilla, f = e ? "-moz-" : a.browser.webkit ? "-webkit-" : "", g = b.y + (e ? "" : "-") + b.x, h = f + (e ? "border-radius-" + g : "border-" + g + "-radius");
-            return parseInt(d.css(h), 10) || parseInt(l.css(h), 10) || 0
-        }
-        function y(a) {
-            var b = a.precedance === "y", c = n[b ? "width" : "height"], d = n[b ? "height" : "width"], e = a.string().indexOf("center") > -1, f = c * (e ? .5 : 1), g = Math.pow, h = Math.round, i, j, k, l = Math.sqrt(g(f, 2) + g(d, 2)), m = [p / f * l, p / d * l];
-            return m[2] = Math.sqrt(g(m[0], 2) - g(p, 2)), m[3] = Math.sqrt(g(m[1], 2) - g(p, 2)), i = l + m[2] + m[3] + (e ? 0 : m[0]), j = i / l, k = [h(j * d), h(j * c)], {height: k[b ? 0 : 1], width: k[b ? 1 : 0]}
-        }
-        var i = this, j = f.options.style.tip, k = f.elements, l = k.tooltip, m = {top: 0, left: 0}, n = {width: j.width, height: j.height}, o = {}, p = j.border || 0, r = ".qtip-tip", s = !!(a("<canvas />")[0] || {}).getContext;
-        i.corner = d, i.mimic = d, i.border = p, i.offset = j.offset, i.size = n, f.checks.tip = {"^position.my|style.tip.(corner|mimic|border)$": function () {
-                i.init() || i.destroy(), f.reposition()
-            }, "^style.tip.(height|width)$": function () {
-                n = {width: j.width, height: j.height}, i.create(), i.update(), f.reposition()
-            }, "^content.title.text|style.(classes|widget)$": function () {
-                k.tip && k.tip.length && i.update()
-            }}, a.extend(i, {init: function () {
-                var b = i.detectCorner() && (s || a.browser.msie);
-                return b && (i.create(), i.update(), l.unbind(r).bind("tooltipmove" + r, v)), b
-            }, detectCorner: function () {
-                var a = j.corner, d = f.options.position, e = d.at, h = d.my.string ? d.my.string() : d.my;
-                return a === c || h === c && e === c ? c : (a === b ? i.corner = new g.Corner(h) : a.string || (i.corner = new g.Corner(a), i.corner.fixed = b), m.corner = new g.Corner(i.corner.string()), i.corner.string() !== "centercenter")
-            }, detectColours: function (b) {
-                var c, d, e, g = k.tip.css("cssText", ""), h = b || i.corner, m = h[h.precedance], p = "border-" + m + "-color", r = "border" + m.charAt(0) + m.substr(1) + "Color", s = /rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i, t = "background-color", u = "transparent", v = " !important", w = a(document.body).css("color"), x = f.elements.content.css("color"), y = k.titlebar && (h.y === "top" || h.y === "center" && g.position().top + n.height / 2 + j.offset < k.titlebar.outerHeight(1)), z = y ? k.titlebar : k.content;
-                l.addClass(q), o.fill = d = g.css(t), o.border = e = g[0].style[r] || g.css(p) || l.css(p);
-                if (!d || s.test(d))
-                    o.fill = z.css(t) || u, s.test(o.fill) && (o.fill = l.css(t) || d);
-                if (!e || s.test(e) || e === w)
-                    o.border = z.css(p) || u, s.test(o.border) && (o.border = e);
-                a("*", g).add(g).css("cssText", t + ":" + u + v + ";border:0" + v + ";"), l.removeClass(q)
-            }, create: function () {
-                var b = n.width, c = n.height, d;
-                k.tip && k.tip.remove(), k.tip = a("<div />", {"class": "ui-tooltip-tip"}).css({width: b, height: c}).prependTo(l), s ? a("<canvas />").appendTo(k.tip)[0].getContext("2d").save() : (d = '<vml:shape coordorigin="0,0" style="display:inline-block; position:absolute; behavior:url(#default#VML);"></vml:shape>', k.tip.html(d + d), a("*", k.tip).bind("click mousedown", function (a) {
-                    a.stopPropagation()
-                }))
-            }, update: function (e, f) {
-                var h = k.tip, l = h.children(), q = n.width, r = n.height, v = "px solid ", x = "px dashed transparent", z = j.mimic, A = Math.round, B, D, E, F, G;
-                e || (e = m.corner || i.corner), z === c ? z = e : (z = new g.Corner(z), z.precedance = e.precedance, z.x === "inherit" ? z.x = e.x : z.y === "inherit" ? z.y = e.y : z.x === z.y && (z[e.precedance] = e[e.precedance])), B = z.precedance, e.precedance === "x" ? t() : u(), k.tip.css({width: q = n.width, height: r = n.height}), i.detectColours(e), o.border !== "transparent" && o.border !== "#123456" ? (p = w(e, d, b), j.border === 0 && p > 0 && (o.fill = o.border), i.border = p = j.border !== b ? j.border : p) : i.border = p = 0, E = C(z, q, r), i.size = G = y(e), h.css(G), e.precedance === "y" ? F = [A(z.x === "left" ? p : z.x === "right" ? G.width - q - p : (G.width - q) / 2), A(z.y === "top" ? G.height - r : 0)] : F = [A(z.x === "left" ? G.width - q : 0), A(z.y === "top" ? p : z.y === "bottom" ? G.height - r - p : (G.height - r) / 2)], s ? (l.attr(G), D = l[0].getContext("2d"), D.restore(), D.save(), D.clearRect(0, 0, 3e3, 3e3), D.translate(F[0], F[1]), D.beginPath(),
  D.moveTo(E[0][0], E[0][1]), D.lineTo(E[1][0], E[1][1]), D.lineTo(E[2][0], E[2][1]), D.closePath(), D.fillStyle = o.fill, D.strokeStyle = o.border, D.lineWidth = p * 2, D.lineJoin = "miter", D.miterLimit = 100, p && D.stroke(), D.fill()) : (E = "m" + E[0][0] + "," + E[0][1] + " l" + E[1][0] + "," + E[1][1] + " " + E[2][0] + "," + E[2][1] + " xe", F[2] = p && /^(r|b)/i.test(e.string()) ? parseFloat(a.browser.version, 10) === 8 ? 2 : 1 : 0, l.css({antialias: "" + (z.string().indexOf("center") > -1), left: F[0] - F[2] * Number(B === "x"), top: F[1] - F[2] * Number(B === "y"), width: q + p, height: r + p}).each(function (b) {
-                    var c = a(this);
-                    c[c.prop ? "prop" : "attr"]({coordsize: q + p + " " + (r + p), path: E, fillcolor: o.fill, filled: !!b, stroked: !b}).css({display: p || b ? "block" : "none"}), !b && c.html() === "" && c.html('<vml:stroke weight="' + p * 2 + 'px" color="' + o.border + '" miterlimit="1000" joinstyle="miter" ' + ' style="behavior:url(#default#VML); display:inline-block;" />')
-                })), f !== c && i.position(e)
-            }, position: function (d) {
-                var e = k.tip, f = {}, g = Math.max(0, j.offset), h, l, m;
-                return j.corner === c || !e ? c : (d = d || i.corner, h = d.precedance, l = y(d), m = [d.x, d.y], h === "x" && m.reverse(), a.each(m, function (a, c) {
-                    var e, i;
-                    c === "center" ? (e = h === "y" ? "left" : "top", f[e] = "50%", f["margin-" + e] = -Math.round(l[h === "y" ? "width" : "height"] / 2) + g) : (e = w(d, c, b), i = x(d), f[c] = a ? p ? w(d, c) : 0 : g + (i > e ? i : 0))
-                }), f[d[h]] -= l[h === "x" ? "width" : "height"], e.css({top: "", bottom: "", left: "", right: "", margin: ""}).css(f), f)
-            }, destroy: function () {
-                k.tip && k.tip.remove(), k.tip = !1, l.unbind(r)
-            }}), i.init()
-    }
-    var b = !0, c = !1, d = null, e, f, g, h, i = {}, j = "ui-tooltip", k = "ui-widget", l = "ui-state-disabled", m = "div.qtip." + j, n = j + "-default", o = j + "-focus", p = j + "-hover", q = j + "-fluid", r = "-31000px", s = "_replacedByqTip", t = "oldtitle", u;
-    f = a.fn.qtip = function (g, h, i) {
-        var j = ("" + g).toLowerCase(), k = d, l = a.makeArray(arguments).slice(1), m = l[l.length - 1], n = this[0] ? a.data(this[0], "qtip") : d;
-        if (!arguments.length && n || j === "api")
-            return n;
-        if ("string" == typeof g)
-            return this.each(function () {
-                var d = a.data(this, "qtip");
-                if (!d)
-                    return b;
-                m && m.timeStamp && (d.cache.event = m);
-                if (j !== "option" && j !== "options" || !h)
-                    d[j] && d[j].apply(d[j], l);
-                else {
-                    if (!a.isPlainObject(h) && i === e)
-                        return k = d.get(h), c;
-                    d.set(h, i)
-                }
-            }), k !== d ? k : this;
-        if ("object" == typeof g || !arguments.length)
-            return n = w(a.extend(b, {}, g)), f.bind.call(this, n, m)
-    }, f.bind = function (d, j) {
-        return this.each(function (k) {
-            function r(b) {
-                function d() {
-                    p.render(typeof b == "object" || l.show.ready), m.show.add(m.hide).unbind(o)
-                }
-                if (p.cache.disabled)
-                    return c;
-                p.cache.event = a.extend({}, b), p.cache.target = b ? a(b.target) : [e], l.show.delay > 0 ? (clearTimeout(p.timers.show), p.timers.show = setTimeout(d, l.show.delay), n.show !== n.hide && m.hide.bind(n.hide, function () {
-                    clearTimeout(p.timers.show)
-                })) : d()
-            }
-            var l, m, n, o, p, q;
-            q = a.isArray(d.id) ? d.id[k] : d.id, q = !q || q === c || q.length < 1 || i[q] ? f.nextid++ : i[q] = q, o = ".qtip-" + q + "-create", p = y.call(this, q, d);
-            if (p === c)
-                return b;
-            l = p.options, a.each(g, function () {
-                this.initialize === "initialize" && this(p)
-            }), m = {show: l.show.target, hide: l.hide.target}, n = {show: a.trim("" + l.show.event).replace(/ /g, o + " ") + o, hide: a.trim("" + l.hide.event).replace(/ /g, o + " ") + o}, /mouse(over|enter)/i.test(n.show) && !/mouse(out|leave)/i.test(n.hide) && (n.hide += " mouseleave" + o), m.show.bind("mousemove" + o, function (a) {
-                h = {pageX: a.pageX, pageY: a.pageY, type: "mousemove"}, p.cache.onTarget = b
-            }), m.show.bind(n.show, r), (l.show.ready || l.prerender) && r(j)
-        })
-    }, g = f.plugins = {Corner: function (a) {
-            a = ("" + a).replace(/([A-Z])/, " $1").replace(/middle/gi, "center").toLowerCase(), this.x = (a.match(/left|right/i) || a.match(/center/) || ["inherit"])[0].toLowerCase(), this.y = (a.match(/top|bottom|center/i) || ["inherit"])[0].toLowerCase();
-            var b = a.charAt(0);
-            this.precedance = b === "t" || b === "b" ? "y" : "x", this.string = function () {
-                return this.precedance === "y" ? this.y + this.x : this.x + this.y
-            }, this.abbrev = function () {
-                var a = this.x.substr(0, 1), b = this.y.substr(0, 1);
-                return a === b ? a : a === "c" || a !== "c" && b !== "c" ? b + a : a + b
-            }, this.clone = function () {
-                return{x: this.x, y: this.y, precedance: this.precedance, string: this.string, abbrev: this.abbrev, clone: this.clone}
-            }
-        }, offset: function (b, c) {
-            function j(a, b) {
-                d.left += b * a.scrollLeft(), d.top += b * a.scrollTop()
-            }
-            var d = b.offset(), e = b.closest("body")[0], f = c, g, h, i;
-            if (f) {
-                do
-                    f.css("position") !== "static" && (h = f.position(), d.left -= h.left + (parseInt(f.css("borderLeftWidth"), 10) || 0) + (parseInt(f.css("marginLeft"), 10) || 0), d.top -= h.top + (parseInt(f.css("borderTopWidth"), 10) || 0) + (parseInt(f.css("marginTop"), 10) || 0), !g && (i = f.css("overflow")) !== "hidden" && i !== "visible" && (g = f));
-                while ((f = a(f[0].offsetParent)).length);
-                g && g[0] !== e && j(g, 1)
-            }
-            return d
-        }, iOS: parseFloat(("" + (/CPU.*OS ([0-9_]{1,3})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0, ""])[1]).replace("undefined", "3_2").replace("_", ".")) || c, fn: {attr: function (b, c) {
-                if (this.length) {
-                    var d = this[0], e = "title", f = a.data(d, "qtip");
-                    if (b === e && f && "object" == typeof f && f.options.suppress)
-                        return arguments.length < 2 ? a.attr(d, t) : (f && f.options.content.attr === e && f.cache.attr && f.set("content.text", c), this.attr(t, c))
-                }
-                return a.fn["attr" + s].apply(this, arguments)
-            }, clone: function (b) {
-                var c = a([]), d = "title", e = a.fn["clone" + s].apply(this, arguments);
-                return b || e.filter("[" + t + "]").attr("title", function () {
-                    return a.attr(this, t)
-                }).removeAttr(t), e
-            }}}, a.each(g.fn, function (c, d) {
-        if (!d || a.fn[c + s])
-            return b;
-        var e = a.fn[c + s] = a.fn[c];
-        a.fn[c] = function () {
-            return d.apply(this, arguments) || e.apply(this, arguments)
-        }
-    }), a.ui || (a["cleanData" + s] = a.cleanData, a.cleanData = function (b) {
-        for (var c = 0, d; (d = b[c]) !== e; c++)
-            try {
-                a(d).triggerHandler("removeqtip")
-            } catch (f) {
-            }
-        a["cleanData" + s](b)
-    }), f.version = "2.0.0pre", f.nextid = 0, f.inactiveEvents = "click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "), f.zindex = 15e3, f.defaults = {prerender: c, id: c, overwrite: b, suppress: b, content: {text: b, attr: "title", title: {text: c, button: c}}, position: {my: "top left", at: "bottom right", target: c, container: c, viewport: c, adjust: {x: 0, y: 0, mouse: b, resize: b, method: "flip flip"}, effect: function (b, d, e) {
-                a(this).animate(d, {duration: 200, queue: c})
-            }}, show: {target: c, event: "mouseenter", effect: b, delay: 90, solo: c, ready: c, autofocus: c}, hide: {target: c, event: "mouseleave", effect: b, delay: 0, fixed: c, inactive: c, leave: "window", distance: c}, style: {classes: "", widget: c, width: c, height: c, def: b}, events: {render: d, move: d, show: d, hide: d, toggle: d, visible: d, hidden: d, focus: d, blur: d}}, g.ajax = function (a) {
-        var b = a.plugins.ajax;
-        return"object" == typeof b ? b : a.plugins.ajax = new z(a)
-    }, g.ajax.initialize = "render", g.ajax.sanitize = function (a) {
-        var b = a.content, c;
-        b && "ajax"in b && (c = b.ajax, typeof c != "object" && (c = a.content.ajax = {url: c}), "boolean" != typeof c.once && c.once && (c.once = !!c.once))
-    }, a.extend(b, f.defaults, {content: {ajax: {loading: b, once: b}}}), g.bgiframe = function (b) {
-        var d = a.browser, e = b.plugins.bgiframe;
-        return a("select, object").length < 1 || !d.msie || ("" + d.version).charAt(0) !== "6" ? c : "object" == typeof e ? e : b.plugins.bgiframe = new A(b)
-    }, g.bgiframe.initialize = "render", g.imagemap = function (b, c, d) {
-        function n(a, b, c) {
-            var d = 0, e = 1, f = 1, g = 0, h = 0, i = a.width, j = a.height;
-            while (i > 0 && j > 0 && e > 0 && f > 0) {
-                i = Math.floor(i / 2), j = Math.floor(j / 2), c.x === "left" ? e = i : c.x === "right" ? e = a.width - i : e += Math.floor(i / 2), c.y === "top" ? f = j : c.y === "bottom" ? f = a.height - j : f += Math.floor(j / 2), d = b.length;
-                while (d--) {
-                    if (b.length < 2)
-                        break;
-                    g = b[d][0] - a.offset.left, h = b[d][1] - a.offset.top, (c.x === "left" && g >= e || c.x === "right" && g <= e || c.x === "center" && (g < e || g > a.width - e) || c.y === "top" && h >= f || c.y === "bottom" && h <= f || c.y === "center" && (h < f || h > a.height - f)) && b.splice(d, 1)
-                }
-            }
-            return{left: b[0][0], top: b[0][1]}
-        }
-        b.jquery || (b = a(b));
-        var e = (b[0].shape || b.attr("shape")).toLowerCase(), f = (b[0].coords || b.attr("coords")).split(","), g = [], h = a('img[usemap="#' + b.parent("map").attr("name") + '"]'), i = h.offset(), j = {width: 0, height: 0, offset: {top: 1e10, right: 0, bottom: 0, left: 1e10}}, k = 0, l = 0, m;
-        i.left += Math.ceil((h.outerWidth() - h.width()) / 2), i.top += Math.ceil((h.outerHeight() - h.height()) / 2);
-        if (e === "poly") {
-            k = f.length;
-            while (k--)
-                l = [parseInt(f[--k], 10), parseInt(f[k + 1], 10)], l[0] > j.offset.right && (j.offset.right = l[0]), l[0] < j.offset.left && (j.offset.left = l[0]), l[1] > j.offset.bottom && (j.offset.bottom = l[1]), l[1] < j.offset.top && (j.offset.top = l[1]), g.push(l)
-        } else
-            g = a.map(f, function (a) {
-                return parseInt(a, 10)
-            });
-        switch (e) {
-            case"rect":
-                j = {width: Math.abs(g[2] - g[0]), height: Math.abs(g[3] - g[1]), offset: {left: Math.min(g[0], g[2]), top: Math.min(g[1], g[3])}};
-                break;
-            case"circle":
-                j = {width: g[2] + 2, height: g[2] + 2, offset: {left: g[0], top: g[1]}};
-                break;
-            case"poly":
-                a.extend(j, {width: Math.abs(j.offset.right - j.offset.left), height: Math.abs(j.offset.bottom - j.offset.top)}), c.string() === "centercenter" ? j.offset = {left: j.offset.left + j.width / 2, top: j.offset.top + j.height / 2} : (j.offset = n(j, g.slice(), c), d && (d[0] === "flip" || d[1] === "flip") && (j.flipoffset = n(j, g.slice(), {x: c.x === "left" ? "right" : c.x === "right" ? "left" : "center", y: c.y === "top" ? "bottom" : c.y === "bottom" ? "top" : "center"}), j.flipoffset.left -= j.offset.left, j.flipoffset.top -= j.offset.top)), j.width = j.height = 0
-        }
-        return j.offset.left += i.left, j.offset.top += i.top, j
-    }, g.modal = function (a) {
-        var b = a.plugins.modal;
-        return"object" == typeof b ? b : a.plugins.modal = new B(a)
-    }, g.modal.initialize = "render", g.modal.sanitize = function (a) {
-        a.show && (typeof a.show.modal != "object" ? a.show.modal = {on: !!a.show.modal} : typeof a.show.modal.on == "undefined" && (a.show.modal.on = b))
-    }, g.modal.zindex = f.zindex + 1e3, a.extend(b, f.defaults, {show: {modal: {on: c, effect: b, blur: b, escape: b}}}), g.svg = function (b, c) {
-        var d = a(document), e = b[0], f = {width: 0, height: 0, offset: {top: 1e10, left: 1e10}}, g, h, i, j, k;
-        if (e.getBBox && e.parentNode) {
-            g = e.getBBox(), h = e.getScreenCTM(), i = e.farthestViewportElement || e;
-            if (!i.createSVGPoint)
-                return f;
-            j = i.createSVGPoint(), j.x = g.x, j.y = g.y, k = j.matrixTransform(h), f.offset.left = k.x, f.offset.top = k.y, j.x += g.width, j.y += g.height, k = j.matrixTransform(h), f.width = k.x - f.offset.left, f.height = k.y - f.offset.top, f.offset.left += d.scrollLeft(), f.offset.top += d.scrollTop()
-        }
-        return f
-    }, g.tip = function (a) {
-        var b = a.plugins.tip;
-        return"object" == typeof b ? b : a.plugins.tip = new D(a)
-    }, g.tip.initialize = "render", g.tip.sanitize = function (a) {
-        var c = a.style, d;
-        c && "tip"in c && (d = a.style.tip, typeof d != "object" && (a.style.tip = {corner: d}), /string|boolean/i.test(typeof d.corner) || (d.corner = b), typeof d.width != "number" && delete d.width, typeof d.height != "number" && delete d.height, typeof d.border != "number" && d.border !== b && delete d.border, typeof d.offset != "number" && delete d.offset)
-    }, a.extend(b, f.defaults, {style: {tip: {corner: b, mimic: c, width: 6, height: 6, border: b, offset: 0}}})
-});
\ No newline at end of file
+/* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */
+
+!function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=F,this.elements={target:a},this._id=S+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:E,attr:e,onTooltip:E,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=E}function f(a){return a===F||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?E:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?E:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==E,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context
 :b})).then(e.success,F,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(d.isPlainObject(b.title)&&(b.button=b.title.button,b.title=b.title.text),g(b.title||E)&&(b.title=E))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===D?{ready:D}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(R,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d<f.length&&(c=e);return[c||a,f.pop()]}function j(a,b){var c,d,e;for(c in this.checks)for(d in this.checks[c])(e=new RegExp(d,"i").exec(a))&&(b.push(e),("builtin"===c||this.plugins[c])&&this.checks[c][d].apply(this.plugins[c]||this,b))}function k(a){retu
 rn V.concat("").join(a?"-"+a+" ":" ")}function l(a,b){return b>0?setTimeout(d.proxy(a,this),b):void a.call(this)}function m(a){this.tooltip.hasClass(ab)||(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=l.call(this,function(){this.toggle(D,a)},this.options.show.delay))}function n(a){if(!this.tooltip.hasClass(ab)&&!this.destroyed){var b=d(a.relatedTarget),c=b.closest(W)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=l.call(this,function(){this.toggle(E,a)},this.options.hide.delay,this)}}function o(a){!this.tooltip.hasClass(ab)&&this.options.hide.inactive&&(clearTimeout(this.timers.inactive),this.timers.inactive=l.call(this,function(){this.hide(a)},this.options.hide.inactiv
 e))}function p(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function q(a,c,e){d(b.body).delegate(a,(c.split?c:c.join("."+S+" "))+"."+S,function(){var a=y.api[d.attr(this,U)];a&&!a.disabled&&e.apply(a,arguments)})}function r(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):F,p="html5"===f.metadata.type&&o?o[f.metadata.name]:F,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(D,{},y.defaults,f,"object"==typeof q?h(q):F,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===E||!j)return E;k.content.text=j}if(i.container.length||(i.container=m),i.target===E&&(i.target=n),k.show.target===E&&(k.show.target=n),k.show.solo===D&&(k.show.solo=i.container.closest("body")),k.hide.target===E&&(k.hide.target=n),k.position.viewport===D&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new A(i.at,D),i.my=new A(i.my),
 a.data(S))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===E)return E;return a.attr(T,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(cb,l).attr("title",""),g=new e(a,k,c,!!j),a.data(S,g),g}function s(a){return a.charAt(0).toUpperCase()+a.slice(1)}function t(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+rb.join(f+" ")+f).split(" "),h=0;if(qb[b])return a.css(qb[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return qb[b]=d,e}function u(a,b){return Math.ceil(parseFloat(t(a,b)))}function v(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.init(this.qtip=a)}function w(a,b){this.options=b,this._ns="-modal",this.init(this.qtip=a)}function x(a){this._ns="ie6",this.init(this.qtip=a)}var y,z,A,B,C,D=!0,E=!1,F=null,G="x",H="y",I="width",J="height",K="top",L="left",M="bottom",N="right",O="center",P="flipinvert",Q="shift",R={},S="qtip",T="data-hasqtip",U="data-qtip-id",V=["ui-widget","ui-tooltip"],W="."+S,X="click dblclick mo
 usedown mouseup mousemove mouseleave mouseenter".split(" "),Y=S+"-fixed",Z=S+"-default",$=S+"-focus",_=S+"-hover",ab=S+"-disabled",bb="_replacedByqTip",cb="oldtitle",db={ie:function(){for(var a=4,c=b.createElement("div");(c.innerHTML="<!--[if gt IE "+a+"]><i></i><![endif]-->")&&c.getElementsByTagName("i")[0];a+=1);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||E};z=e.prototype,z._when=function(a){return d.when.apply(d,a)},z.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),f.posClass=this._createPosClass((this.position={my:k.my,at:k.at}).my),this.tooltip=g.tooltip=b=d("<div/>",{id:this._id,"class":[S,Z,e.style.classes,
 f.posClass].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":E,"aria-describedby":this._id+"-content","aria-hidden":D}).toggleClass(ab,this.disabled).attr(U,this.id).data(S,this).appendTo(k.container).append(g.content=d("<div />",{"class":S+"-content",id:this._id+"-content","aria-atomic":D})),this.rendered=-1,this.positioning=D,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,E))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,E)),this.rendered=D,this._setWidget(),d.each(R,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=E,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(D,f.event,E),c.hiddenDuringWait=E}),y.api[this.id]=this,this},z.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=D;var
  a,b=this.target,c=b.attr(cb);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()});for(a in this.timers)clearTimeout(this.timers[a]);b.removeData(S).removeAttr(U).removeAttr(T).removeAttr("aria-describedby"),this.options.suppress&&c&&b.attr("title",c).removeAttr(cb),this._unassignEvents(),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=F,delete y.api[this.id]}}return this.destroyed?this.target:(a===D&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},B=z.checks={builtin:{"^id$":function(a,b,c,e){var f=c===D?y.nextid:c,g=S+"-"+f;f!==E&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(th
 is.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(this.position[b]=a[b]=new A(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(D)||this.toggle(D))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def"
 :function(a,b,c){this.rendered&&this.tooltip.toggleClass(Z,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},z.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var eb=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,fb=/^prerender|show\.ready/i;z.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=E,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&fb.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.n
 odeType?d(c):c,f=eb.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=D,d.each(a,d.proxy(j,this)),this.positioning=E,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?F:this.cache.event),this},z._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=D,a.then(function(a){return e.waiting=E,c._update(a,b)},F,function(a){return c._update(a,b)})):a===E||!a&&""!==a?E:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):E},z._waitForContent=function(a){var b=this.cache;return b.waiting=D,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=E}).promise()},z._updateContent=function(a,b){this._update(a,this.elements.content,b)},z._updateTi
 tle=function(a,b){this._update(a,this.elements.title,b)===E&&this._removeTitle(E)},z._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":S+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":S+"-title","aria-atomic":D})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},z._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=F,a!==E&&this.reposition())},z._createPosClass=function(a){return S+"-pos-"+(a||this.options.position.my).abbrev()},z.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)
 return this;this.positioning=D;var f,g,h,i,j=this.cache,k=this.tooltip,l=this.options.position,m=l.target,n=l.my,o=l.at,p=l.viewport,q=l.container,r=l.adjust,s=r.method.split(" "),t=k.outerWidth(E),u=k.outerHeight(E),v=0,w=0,x=k.css("position"),y={left:0,top:0},z=k[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=q[0].ownerDocument,F=this.mouse;if(d.isArray(m)&&2===m.length)o={x:L,y:K},y={left:m[0],top:m[1]};else if("mouse"===m)o={x:L,y:K},(!r.mouse||this.options.hide.distance)&&j.origin&&j.origin.pageX?c=j.origin:!c||c&&("resize"===c.type||"scroll"===c.type)?c=j.event:F&&F.pageX&&(c=F),"static"!==x&&(y=q.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),y={left:c.pageX-y.left+(g&&g.left||0),top:c.pageY-y.top+(g&&g.top||0)},r.mouse&&A&&F&&(y.left-=(F.scrollX||0)-B.scrollLeft(),y.top-=(F.scrollY||0)-B.scrollTop());else{if("event"===m?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?j.target=d(c.target):c.target||(j.target=this.eleme
 nts.target):"event"!==m&&(j.target=d(m.jquery?m:this.elements.target)),m=j.target,m=d(m).eq(0),0===m.length)return this;m[0]===b||m[0]===a?(v=db.iOS?a.innerWidth:m.width(),w=db.iOS?a.innerHeight:m.height(),m[0]===a&&(y={top:(p||m).scrollTop(),left:(p||m).scrollLeft()})):R.imagemap&&m.is("area")?f=R.imagemap(this,m,o,R.viewport?s:E):R.svg&&m&&m[0].ownerSVGElement?f=R.svg(this,m,o,R.viewport?s:E):(v=m.outerWidth(E),w=m.outerHeight(E),y=m.offset()),f&&(v=f.width,w=f.height,g=f.offset,y=f.position),y=this.reposition.offset(m,y,q),(db.iOS>3.1&&db.iOS<4.1||db.iOS>=4.3&&db.iOS<4.33||!db.iOS&&"fixed"===x)&&(y.left-=B.scrollLeft(),y.top-=B.scrollTop()),(!f||f&&f.adjustable!==E)&&(y.left+=o.x===N?v:o.x===O?v/2:0,y.top+=o.y===M?w:o.y===O?w/2:0)}return y.left+=r.x+(n.x===N?-t:n.x===O?-t/2:0),y.top+=r.y+(n.y===M?-u:n.y===O?-u/2:0),R.viewport?(h=y.adjusted=R.viewport(this,y,l,v,w,t,u),g&&h.left&&(y.left+=g.left),g&&h.top&&(y.top+=g.top),h.my&&(this.position.my=h.my)):y.adjusted={left:0,top:0},j.p
 osClass!==(i=this._createPosClass(this.position.my))&&k.removeClass(j.posClass).addClass(j.posClass=i),this._trigger("move",[y,p.elem||p],c)?(delete y.adjusted,e===E||!z||isNaN(y.left)||isNaN(y.top)||"mouse"===m||!d.isFunction(l.effect)?k.css(y):d.isFunction(l.effect)&&(l.effect.call(k,this,d.extend({},y)),k.queue(function(a){d(this).css({opacity:"",height:""}),db.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=E,this):this},z.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!db.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||
 "visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var gb=(A=z.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,O).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?H:G}).prototype;gb.invert=function(a,b){this[a]=this[a]===L?N:this[a]===N?L:b||this[a]},gb.string=function(a){var b=this.x,c=this.y,d=b!==c?"center"===b||"center"!==c&&(this.precedance===H||this.forceY)?[c,b]:[b,c]:[b];return a!==!1?d.join(" "):d},gb.abbrev=function(){var a=this.string(!1);return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},gb.clone=function(){return new A(this.string(),this.forceY)},z.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&e.event&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).le
 ngth===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=d.event.fix(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=D),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",l=this.options[k],m=(this.options[a?"hide":"show"],this.options.position),n=this.options.content,o=this.tooltip.css("width"),p=this.tooltip.is(":visible"),q=a||1===l.target.length,r=!c||l.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!p),h=!g.is(":animated")&&p===a&&r,i=h?F:!!this._trigger(k,[90]),this.destroyed?this:(i!==E&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(this.mouse&&(e.origin=d.event.fix(this.mouse)),d.isFunction(n.text)&&this._updateContent(n.text,E),d.isFunction(n.title)&&this._updateTitle(n.title,E),!C&&"mouse"===m.target&&m.adjust.mouse&&(d(b).bind("mousemove."+S,this._storeMouse),C=D),o||g.css("width",g.outerWidth(E)),this.reposition(c,arguments[2]),o||g
 .css("width",""),l.solo&&("string"==typeof l.solo?d(l.solo):d(W,l.solo)).not(g).not(l.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,C&&!d(W+'[tracking="true"]:visible',l.solo).not(g).length&&(d(b).unbind("mousemove."+S),C=E),this.blur(c)),j=d.proxy(function(){a?(db.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof l.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),l.effect===E||q===E?(g[k](),j()):d.isFunction(l.effect)?(g.stop(1,1),l.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&l.target.trigger("qtip-"+this.id+"-inactive"),this))},z.show=function(a){return this.toggle(D,a)},z.hide=function(a){return this.toggle(E,a)},z.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(W),c=this.tooltip,
 e=parseInt(c[0].style.zIndex,10),f=y.zindex+b.length;return c.hasClass($)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+$).qtip("blur",a)),c.addClass($)[0].style.zIndex=f),this},z.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass($),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},z.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(ab):this.disabled):"boolean"!=typeof a&&(a=D),this.rendered&&this.tooltip.toggleClass(ab,a).attr("aria-disabled",a),this.disabled=!!a,this)},z.enable=function(){return this.disable(E)},z._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("<a />",{"class":"qtip-close "+(this.options.style.widget?"":S+"-icon"),title:g,"aria-label":g}).prepend
 (d("<span />",{"class":"ui-icon ui-icon-close",html:"&times;"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(ab)||a.hide(b),E})},z._updateButton=function(a){if(!this.rendered)return E;var b=this.elements.button;a?this._createButton():b.remove()},z._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(ab);c.removeClass(ab),ab=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(ab,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Z,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(S+"-icon",!a)},z._storeMouse=function(a){return(this.mouse=d.event.fix(a)).type="mousemove",this},z._bind=function(a,b,c,e,f){if(a&&c&&b.length){var g="."+this._id+(e?"-"+e:"");return d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this)),this}},z._unbind=function(a,b){return a&&d(a).unbind("."+this._id+(b?"
 -"+b:"")),this},z._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||F,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=E,!e.isDefaultPrevented()},z._bindEvents=function(a,b,c,e,f,g){var h=c.filter(e).add(e.filter(c)),i=[];h.length&&(d.each(b,function(b,c){var e=d.inArray(c,a);e>-1&&i.push(a.splice(e,1)[0])}),i.length&&(this._bind(h,i,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)}),c=c.not(h),e=e.not(h))),this._bind(c,a,f),this._bind(e,b,g)},z._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?E:(this.cache.event=a&&d.event.fix(a),this.cache.target=a&&d(a.target),clearTimeout(this.timers.show),void(this.timers.show=l.call(this,function(){this.render("object"==typeof a||c.show.ready)},c.prerender?0:c.show.delay)))}var c=this.options,e=c.show.target,f=c.hide.target,g=c.show.event?d.trim(""+c.show.event).split(" "):[],h=c.hi
 de.event?d.trim(""+c.hide.event).split(" "):[];this._bind(this.elements.target,["remove","removeqtip"],function(){this.destroy(!0)},"destroy"),/mouse(over|enter)/i.test(c.show.event)&&!/mouse(out|leave)/i.test(c.hide.event)&&h.push("mouseleave"),this._bind(e,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=D}),this._bindEvents(g,h,e,f,b,function(){return this.timers?void clearTimeout(this.timers.show):E}),(c.show.ready||c.prerender)&&b.call(this,a)},z._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),q=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeNam
 e)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(Y)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0,e=b.parents(W).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",o,"inactive"),this._bind(i.add(g),y.inactiveEvents,o)),this._bindEvents(r,s,h,i,m,n),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mousee
 nter","mouseleave"],function(a){return this.cache?void(this.cache.onTarget="mouseenter"===a.type):E}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:q,"resize",p),f.adjust.scroll&&this._bind(q.add(f.container),"scroll",p)},z._unassignEvents=function(){var c=this.options,e=c.show.target,f=c.hide.target,g=d.grep([this.elements.target[0],this.rendered&&this.tooltip[0],c.position.container[0],c.position.viewport[0],c.position.container.closest("html")[0],a,b],function(a){return"object"==typeof a});e&&e.toArray&&(g=g.concat(e.toArray())),f&&f.toArray&&(g=g.concat(f.toArray())),this._unbind(g)._unbind(g,"destroy")._unbind(g,"inactive")},d(function(){q(W,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(Y)&&!c
 .hasClass(ab)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.position.adjust.mouse&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(_,b)}),q("["+U+"]",X,o)}),y=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=F,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],S):F;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,S);if(!a)return D;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),E;a.set(b,e)}}),g!==F?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(D,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===E||c.length<1||y.api[c]?y.nextid++:c,b=r(d(this),c,k),b===E?D:(y.api[c]=b,d.each(R,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,y.api={},d.each({attr
 :function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,cb):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(cb,b))}return d.fn["attr"+bb].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+bb].apply(this,arguments));return a||b.filter("["+cb+"]").attr("title",function(){return d.attr(this,cb)}).removeAttr(cb),b}},function(a,b){if(!b||d.fn[a+bb])return D;var c=d.fn[a+bb]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+bb]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(T))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+bb].apply(this,arguments)}),y.version="2.2.1",y.nextid=0,y.inactiveEvents=X,y.zindex=15e3,y.defaults={prerender:E,id:E,overwrite:D,suppress:D,content:{text:D,attr:"title",title:E,button:E},position:{my:"top left",at
 :"bottom right",target:E,container:E,viewport:E,adjust:{x:0,y:0,mouse:D,scroll:D,resize:D,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:E})}},show:{target:E,event:"mouseenter",effect:D,delay:90,solo:E,ready:E,autofocus:E},hide:{target:E,event:"mouseleave",effect:D,delay:0,fixed:E,inactive:E,leave:"window",distance:E},style:{classes:"",widget:E,width:E,height:E,def:D},events:{render:F,move:F,show:F,hide:F,toggle:F,visible:F,hidden:F,focus:F,blur:F}};var hb,ib="margin",jb="border",kb="color",lb="background-color",mb="transparent",nb=" !important",ob=!!b.createElement("canvas").getContext,pb=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,qb={},rb=["Webkit","O","Moz","ms"];if(ob)var sb=a.devicePixelRatio||1,tb=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),ub=sb/tb;else var vb=fu
 nction(a,b,c){return"<qtipvml:"+a+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(b||"")+' style="behavior: url(#default#VML); '+(c||"")+'" />'};d.extend(v.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("<div />",{"class":S+"-tip"}).prependTo(a.tooltip),ob?(b=d("<canvas />").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=vb("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(b+b),a._bind(d("*",c).add(c),["click","mousedown"],function(a){a.stopPropagation()},this._ns)),a._bind(a.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(a){var b=this.qtip.elements.titlebar;return b&&(a.y===K||a.y===O&&this.element.position().top+this.size[1]/2+this.options.offset<b.outerHeight(D))
 },_parseCorner:function(a){var b=this.qtip.options.position.my;return a===E||b===E?a=E:a===D?a=new A(b.string()):a.string||(a=new A(a),a.fixed=D),a},_parseWidth:function(a,b,c){var d=this.qtip.elements,e=jb+s(b)+"Width";return(c?u(c,e):u(d.content,e)||u(this._useTitle(a)&&d.titlebar||d.content,e)||u(d.tooltip,e))||0},_parseRadius:function(a){var b=this.qtip.elements,c=jb+s(a.y)+s(a.x)+"Radius";return db.ie<9?0:u(this._useTitle(a)&&b.titlebar||b.content,c)||u(b.tooltip,c)||0},_invalidColour:function(a,b,c){var d=a.css(b);return!d||c&&d===a.css(c)||pb.test(d)?E:d},_parseColours:function(a){var b=this.qtip.elements,c=this.element.css("cssText",""),e=jb+s(a[a.precedance])+s(kb),f=this._useTitle(a)&&b.titlebar||b.content,g=this._invalidColour,h=[];return h[0]=g(c,lb)||g(f,lb)||g(b.content,lb)||g(b.tooltip,lb)||c.css(lb),h[1]=g(c,e,kb)||g(f,e,kb)||g(b.content,e,kb)||g(b.tooltip,e,kb)||b.tooltip.css(e),d("*",c).add(c).css("cssText",lb+":"+mb+nb+";"+jb+":0"+nb+";"),h},_calculateSize:functio
 n(a){var b,c,d,e=a.precedance===H,f=this.options.width,g=this.options.height,h="c"===a.abbrev(),i=(e?f:g)*(h?.5:1),j=Math.pow,k=Math.round,l=Math.sqrt(j(i,2)+j(g,2)),m=[this.border/i*l,this.border/g*l];return m[2]=Math.sqrt(j(m[0],2)-j(this.border,2)),m[3]=Math.sqrt(j(m[1],2)-j(this.border,2)),b=l+m[2]+m[3]+(h?0:m[0]),c=b/l,d=[k(c*f),k(c*g)],e?d:d.reverse()},_calculateTip:function(a,b,c){c=c||1,b=b||this.size;var d=b[0]*c,e=b[1]*c,f=Math.ceil(d/2),g=Math.ceil(e/2),h={br:[0,0,d,e,d,0],bl:[0,0,d,0,0,e],tr:[0,e,d,0,d,e],tl:[0,0,0,e,d,e],tc:[0,e,f,0,d,e],bc:[0,0,d,0,f,e],rc:[0,0,d,g,0,e],lc:[d,0,d,e,0,g]};return h.lt=h.br,h.rt=h.bl,h.lb=h.tr,h.rb=h.tl,h[a.abbrev()]},_drawCoords:function(a,b){a.beginPath(),a.moveTo(b[0],b[1]),a.lineTo(b[2],b[3]),a.lineTo(b

<TRUNCATED>

[29/50] [abbrv] incubator-nifi git commit: NIFI-27: - Starting to upgrade jQuery and jQuery UI.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-2.1.1.min.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-2.1.1.min.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-2.1.1.min.js
new file mode 100644
index 0000000..e5ace11
--- /dev/null
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-2.1.1.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(
 this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:functi
 on(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){
 return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var 
 b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^
 "+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNod
 es),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)|
 |b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.lengt
 h;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getEle
 mentsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msall
 owclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocu
 mentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&
 &q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++
 ])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+"
  "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]==
 =w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){ret
 urn function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d
 .pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g
 ,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}funct
 ion tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}
 ];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d
 .push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|heigh
 t|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return 
 g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c
 [1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if
 (n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibl
 ing")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?
 i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"
 ),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[
 a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,
 f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cach
 e[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.h
 asData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
+},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):vo
 id 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.emp
 ty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=
 c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"
 ").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namesp
 ace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],
 k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:
 b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat
 (g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},
 n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindTyp
 e:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(func
 tion(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table
 ><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?
 a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace
 (ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b
 .appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.
 nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(
 f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^marg
 in/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:borde
 r-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",v
 isibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(
 a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&
 &(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"
 ",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.
 propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb
 .prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued
 =0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for
 (d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tween
 s.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.que
 ue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),
 d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.inte
 rval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!=
 =(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
+},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHo
 oks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},rem
 oveClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(
 var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;
 h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).
 mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b
 ="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)
 j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":St
 ring,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c
 &&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])
 ),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type
 ?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this)
 .wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(
 a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(
 yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.s
 end(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentTyp
 e||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h
 )),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)r
 eturn void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=fu
 nction(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var
  Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});


[34/50] [abbrv] incubator-nifi git commit: NIFI-27: - Better result normalization. - Updated styles.

Posted by mc...@apache.org.
NIFI-27:
- Better result normalization.
- Updated styles.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/d307a13c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/d307a13c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/d307a13c

Branch: refs/heads/develop
Commit: d307a13c5d4610dd3aa8bdeacab850725bedeb7d
Parents: 68e0898
Author: Matt Gilman <ma...@gmail.com>
Authored: Fri Dec 12 10:37:02 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Fri Dec 12 10:37:02 2014 -0500

----------------------------------------------------------------------
 .../framework/web/nifi-web-ui/src/main/webapp/css/header.css  | 1 +
 .../web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-search.js | 7 ++++++-
 2 files changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/d307a13c/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/header.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/header.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/header.css
index 6b096a1..0f08b47 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/header.css
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/header.css
@@ -456,6 +456,7 @@ input.search-flow {
     overflow: auto;
     border: 1px solid #aaaaaa;
     z-index: 1251;
+    border-radius: 0;
 }
 
 #search-flow-results .ui-menu .ui-menu-item a.ui-state-focus {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/d307a13c/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-search.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-search.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-search.js
index c1c4117..2016721 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-search.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-search.js
@@ -36,6 +36,11 @@ nf.Search = (function () {
                     var ul = this.menu.element;
                     ul.width(399);
                 },
+                _normalize: function(searchResults) {
+                    var items = [];
+                    items.push(searchResults);
+                    return items;
+                },
                 _renderMenu: function (ul, items) {
                     var self = this;
                     
@@ -130,7 +135,7 @@ nf.Search = (function () {
                         dataType: 'json',
                         url: config.urls.search
                     }).done(function (searchResponse) {
-                        response(searchResponse);
+                        response(searchResponse.searchResultsDTO);
                     });
                 },
                 select: function (event, ui) {


[11/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of slickgrid.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.editors.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.editors.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.editors.js
index 2d8a482..04b20d2 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.editors.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.editors.js
@@ -5,508 +5,508 @@
  */
 
 (function ($) {
-    // register namespace
-    $.extend(true, window, {
-        "Slick": {
-            "Editors": {
-                "Text": TextEditor,
-                "Integer": IntegerEditor,
-                "Date": DateEditor,
-                "YesNoSelect": YesNoSelectEditor,
-                "Checkbox": CheckboxEditor,
-                "PercentComplete": PercentCompleteEditor,
-                "LongText": LongTextEditor
-            }
-        }
-    });
-
-    function TextEditor(args) {
-        var $input;
-        var defaultValue;
-        var scope = this;
-
-        this.init = function () {
-            $input = $("<INPUT type=text class='editor-text' />")
-                    .appendTo(args.container)
-                    .bind("keydown.nav", function (e) {
-                        if (e.keyCode === $.ui.keyCode.LEFT || e.keyCode === $.ui.keyCode.RIGHT) {
-                            e.stopImmediatePropagation();
-                        }
-                    })
-                    .focus()
-                    .select();
-        };
-
-        this.destroy = function () {
-            $input.remove();
-        };
-
-        this.focus = function () {
-            $input.focus();
-        };
-
-        this.getValue = function () {
-            return $input.val();
-        };
-
-        this.setValue = function (val) {
-            $input.val(val);
-        };
-
-        this.loadValue = function (item) {
-            defaultValue = item[args.column.field] || "";
-            $input.val(defaultValue);
-            $input[0].defaultValue = defaultValue;
-            $input.select();
-        };
-
-        this.serializeValue = function () {
-            return $input.val();
-        };
-
-        this.applyValue = function (item, state) {
-            item[args.column.field] = state;
-        };
-
-        this.isValueChanged = function () {
-            return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);
-        };
-
-        this.validate = function () {
-            if (args.column.validator) {
-                var validationResults = args.column.validator($input.val());
-                if (!validationResults.valid) {
-                    return validationResults;
-                }
-            }
-
-            return {
-                valid: true,
-                msg: null
-            };
-        };
-
-        this.init();
-    }
-
-    function IntegerEditor(args) {
-        var $input;
-        var defaultValue;
-        var scope = this;
-
-        this.init = function () {
-            $input = $("<INPUT type=text class='editor-text' />");
-
-            $input.bind("keydown.nav", function (e) {
-                if (e.keyCode === $.ui.keyCode.LEFT || e.keyCode === $.ui.keyCode.RIGHT) {
-                    e.stopImmediatePropagation();
-                }
-            });
-
-            $input.appendTo(args.container);
-            $input.focus().select();
-        };
-
-        this.destroy = function () {
-            $input.remove();
-        };
-
-        this.focus = function () {
-            $input.focus();
-        };
-
-        this.loadValue = function (item) {
-            defaultValue = item[args.column.field];
-            $input.val(defaultValue);
-            $input[0].defaultValue = defaultValue;
-            $input.select();
-        };
-
-        this.serializeValue = function () {
-            return parseInt($input.val(), 10) || 0;
-        };
-
-        this.applyValue = function (item, state) {
-            item[args.column.field] = state;
-        };
-
-        this.isValueChanged = function () {
-            return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);
-        };
-
-        this.validate = function () {
-            if (isNaN($input.val())) {
-                return {
-                    valid: false,
-                    msg: "Please enter a valid integer"
-                };
-            }
-
-            return {
-                valid: true,
-                msg: null
-            };
-        };
-
-        this.init();
-    }
-
-    function DateEditor(args) {
-        var $input;
-        var defaultValue;
-        var scope = this;
-        var calendarOpen = false;
-
-        this.init = function () {
-            $input = $("<INPUT type=text class='editor-text' />");
-            $input.appendTo(args.container);
-            $input.focus().select();
-            $input.datepicker({
-                showOn: "button",
-                buttonImageOnly: true,
-                buttonImage: "../images/calendar.gif",
-                beforeShow: function () {
-                    calendarOpen = true
-                },
-                onClose: function () {
-                    calendarOpen = false
-                }
-            });
-            $input.width($input.width() - 18);
-        };
-
-        this.destroy = function () {
-            $.datepicker.dpDiv.stop(true, true);
-            $input.datepicker("hide");
-            $input.datepicker("destroy");
-            $input.remove();
-        };
-
-        this.show = function () {
-            if (calendarOpen) {
-                $.datepicker.dpDiv.stop(true, true).show();
-            }
-        };
-
-        this.hide = function () {
-            if (calendarOpen) {
-                $.datepicker.dpDiv.stop(true, true).hide();
-            }
-        };
-
-        this.position = function (position) {
-            if (!calendarOpen) {
-                return;
-            }
-            $.datepicker.dpDiv
-                    .css("top", position.top + 30)
-                    .css("left", position.left);
-        };
-
-        this.focus = function () {
-            $input.focus();
-        };
-
-        this.loadValue = function (item) {
-            defaultValue = item[args.column.field];
-            $input.val(defaultValue);
-            $input[0].defaultValue = defaultValue;
-            $input.select();
-        };
-
-        this.serializeValue = function () {
-            return $input.val();
-        };
-
-        this.applyValue = function (item, state) {
-            item[args.column.field] = state;
-        };
-
-        this.isValueChanged = function () {
-            return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);
-        };
-
-        this.validate = function () {
-            return {
-                valid: true,
-                msg: null
-            };
-        };
-
-        this.init();
-    }
-
-    function YesNoSelectEditor(args) {
-        var $select;
-        var defaultValue;
-        var scope = this;
-
-        this.init = function () {
-            $select = $("<SELECT tabIndex='0' class='editor-yesno'><OPTION value='yes'>Yes</OPTION><OPTION value='no'>No</OPTION></SELECT>");
-            $select.appendTo(args.container);
-            $select.focus();
-        };
-
-        this.destroy = function () {
-            $select.remove();
-        };
-
-        this.focus = function () {
-            $select.focus();
-        };
-
-        this.loadValue = function (item) {
-            $select.val((defaultValue = item[args.column.field]) ? "yes" : "no");
-            $select.select();
-        };
-
-        this.serializeValue = function () {
-            return ($select.val() == "yes");
-        };
-
-        this.applyValue = function (item, state) {
-            item[args.column.field] = state;
-        };
-
-        this.isValueChanged = function () {
-            return ($select.val() != defaultValue);
-        };
-
-        this.validate = function () {
-            return {
-                valid: true,
-                msg: null
-            };
-        };
-
-        this.init();
+  // register namespace
+  $.extend(true, window, {
+    "Slick": {
+      "Editors": {
+        "Text": TextEditor,
+        "Integer": IntegerEditor,
+        "Date": DateEditor,
+        "YesNoSelect": YesNoSelectEditor,
+        "Checkbox": CheckboxEditor,
+        "PercentComplete": PercentCompleteEditor,
+        "LongText": LongTextEditor
+      }
     }
-
-    function CheckboxEditor(args) {
-        var $select;
-        var defaultValue;
-        var scope = this;
-
-        this.init = function () {
-            $select = $("<INPUT type=checkbox value='true' class='editor-checkbox' hideFocus>");
-            $select.appendTo(args.container);
-            $select.focus();
-        };
-
-        this.destroy = function () {
-            $select.remove();
-        };
-
-        this.focus = function () {
-            $select.focus();
-        };
-
-        this.loadValue = function (item) {
-            defaultValue = item[args.column.field];
-            if (defaultValue) {
-                $select.attr("checked", "checked");
-            } else {
-                $select.removeAttr("checked");
+  });
+
+  function TextEditor(args) {
+    var $input;
+    var defaultValue;
+    var scope = this;
+
+    this.init = function () {
+      $input = $("<INPUT type=text class='editor-text' />")
+          .appendTo(args.container)
+          .bind("keydown.nav", function (e) {
+            if (e.keyCode === $.ui.keyCode.LEFT || e.keyCode === $.ui.keyCode.RIGHT) {
+              e.stopImmediatePropagation();
             }
-        };
-
-        this.serializeValue = function () {
-            return $select.attr("checked");
-        };
-
-        this.applyValue = function (item, state) {
-            item[args.column.field] = state;
-        };
-
-        this.isValueChanged = function () {
-            return ($select.attr("checked") != defaultValue);
-        };
-
-        this.validate = function () {
-            return {
-                valid: true,
-                msg: null
-            };
-        };
-
-        this.init();
-    }
-
-    function PercentCompleteEditor(args) {
-        var $input, $picker;
-        var defaultValue;
-        var scope = this;
-
-        this.init = function () {
-            $input = $("<INPUT type=text class='editor-percentcomplete' />");
-            $input.width($(args.container).innerWidth() - 25);
-            $input.appendTo(args.container);
-
-            $picker = $("<div class='editor-percentcomplete-picker' />").appendTo(args.container);
-            $picker.append("<div class='editor-percentcomplete-helper'><div class='editor-percentcomplete-wrapper'><div class='editor-percentcomplete-slider' /><div class='editor-percentcomplete-buttons' /></div></div>");
-
-            $picker.find(".editor-percentcomplete-buttons").append("<button val=0>Not started</button><br/><button val=50>In Progress</button><br/><button val=100>Complete</button>");
-
-            $input.focus().select();
-
-            $picker.find(".editor-percentcomplete-slider").slider({
-                orientation: "vertical",
-                range: "min",
-                value: defaultValue,
-                slide: function (event, ui) {
-                    $input.val(ui.value)
-                }
-            });
-
-            $picker.find(".editor-percentcomplete-buttons button").bind("click", function (e) {
-                $input.val($(this).attr("val"));
-                $picker.find(".editor-percentcomplete-slider").slider("value", $(this).attr("val"));
-            })
-        };
-
-        this.destroy = function () {
-            $input.remove();
-            $picker.remove();
-        };
-
-        this.focus = function () {
-            $input.focus();
-        };
-
-        this.loadValue = function (item) {
-            $input.val(defaultValue = item[args.column.field]);
-            $input.select();
-        };
-
-        this.serializeValue = function () {
-            return parseInt($input.val(), 10) || 0;
-        };
-
-        this.applyValue = function (item, state) {
-            item[args.column.field] = state;
-        };
-
-        this.isValueChanged = function () {
-            return (!($input.val() == "" && defaultValue == null)) && ((parseInt($input.val(), 10) || 0) != defaultValue);
-        };
-
-        this.validate = function () {
-            if (isNaN(parseInt($input.val(), 10))) {
-                return {
-                    valid: false,
-                    msg: "Please enter a valid positive number"
-                };
-            }
-
-            return {
-                valid: true,
-                msg: null
-            };
-        };
-
-        this.init();
-    }
-
-    /*
-     * An example of a "detached" editor.
-     * The UI is added onto document BODY and .position(), .show() and .hide() are implemented.
-     * KeyDown events are also handled to provide handling for Tab, Shift-Tab, Esc and Ctrl-Enter.
-     */
-    function LongTextEditor(args) {
-        var $input, $wrapper;
-        var defaultValue;
-        var scope = this;
-
-        this.init = function () {
-            var $container = $("body");
-
-            $wrapper = $("<DIV style='z-index:10000;position:absolute;background:white;padding:5px;border:3px solid gray; -moz-border-radius:10px; border-radius:10px;'/>")
-                    .appendTo($container);
-
-            $input = $("<TEXTAREA hidefocus rows=5 style='backround:white;width:250px;height:80px;border:0;outline:0'>")
-                    .appendTo($wrapper);
-
-            $("<DIV style='text-align:right'><BUTTON>Save</BUTTON><BUTTON>Cancel</BUTTON></DIV>")
-                    .appendTo($wrapper);
-
-            $wrapper.find("button:first").bind("click", this.save);
-            $wrapper.find("button:last").bind("click", this.cancel);
-            $input.bind("keydown", this.handleKeyDown);
-
-            scope.position(args.position);
-            $input.focus().select();
-        };
-
-        this.handleKeyDown = function (e) {
-            if (e.which == $.ui.keyCode.ENTER && e.ctrlKey) {
-                scope.save();
-            } else if (e.which == $.ui.keyCode.ESCAPE) {
-                e.preventDefault();
-                scope.cancel();
-            } else if (e.which == $.ui.keyCode.TAB && e.shiftKey) {
-                e.preventDefault();
-                grid.navigatePrev();
-            } else if (e.which == $.ui.keyCode.TAB) {
-                e.preventDefault();
-                grid.navigateNext();
-            }
-        };
-
-        this.save = function () {
-            args.commitChanges();
-        };
-
-        this.cancel = function () {
-            $input.val(defaultValue);
-            args.cancelChanges();
-        };
-
-        this.hide = function () {
-            $wrapper.hide();
-        };
-
-        this.show = function () {
-            $wrapper.show();
-        };
-
-        this.position = function (position) {
-            $wrapper
-                    .css("top", position.top - 5)
-                    .css("left", position.left - 5)
-        };
-
-        this.destroy = function () {
-            $wrapper.remove();
-        };
-
-        this.focus = function () {
-            $input.focus();
-        };
-
-        this.loadValue = function (item) {
-            $input.val(defaultValue = item[args.column.field]);
-            $input.select();
-        };
+          })
+          .focus()
+          .select();
+    };
+
+    this.destroy = function () {
+      $input.remove();
+    };
+
+    this.focus = function () {
+      $input.focus();
+    };
+
+    this.getValue = function () {
+      return $input.val();
+    };
+
+    this.setValue = function (val) {
+      $input.val(val);
+    };
+
+    this.loadValue = function (item) {
+      defaultValue = item[args.column.field] || "";
+      $input.val(defaultValue);
+      $input[0].defaultValue = defaultValue;
+      $input.select();
+    };
+
+    this.serializeValue = function () {
+      return $input.val();
+    };
+
+    this.applyValue = function (item, state) {
+      item[args.column.field] = state;
+    };
+
+    this.isValueChanged = function () {
+      return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);
+    };
+
+    this.validate = function () {
+      if (args.column.validator) {
+        var validationResults = args.column.validator($input.val());
+        if (!validationResults.valid) {
+          return validationResults;
+        }
+      }
 
-        this.serializeValue = function () {
-            return $input.val();
-        };
+      return {
+        valid: true,
+        msg: null
+      };
+    };
 
-        this.applyValue = function (item, state) {
-            item[args.column.field] = state;
-        };
+    this.init();
+  }
 
-        this.isValueChanged = function () {
-            return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);
-        };
+  function IntegerEditor(args) {
+    var $input;
+    var defaultValue;
+    var scope = this;
 
-        this.validate = function () {
-            return {
-                valid: true,
-                msg: null
-            };
-        };
+    this.init = function () {
+      $input = $("<INPUT type=text class='editor-text' />");
 
-        this.init();
-    }
+      $input.bind("keydown.nav", function (e) {
+        if (e.keyCode === $.ui.keyCode.LEFT || e.keyCode === $.ui.keyCode.RIGHT) {
+          e.stopImmediatePropagation();
+        }
+      });
+
+      $input.appendTo(args.container);
+      $input.focus().select();
+    };
+
+    this.destroy = function () {
+      $input.remove();
+    };
+
+    this.focus = function () {
+      $input.focus();
+    };
+
+    this.loadValue = function (item) {
+      defaultValue = item[args.column.field];
+      $input.val(defaultValue);
+      $input[0].defaultValue = defaultValue;
+      $input.select();
+    };
+
+    this.serializeValue = function () {
+      return parseInt($input.val(), 10) || 0;
+    };
+
+    this.applyValue = function (item, state) {
+      item[args.column.field] = state;
+    };
+
+    this.isValueChanged = function () {
+      return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);
+    };
+
+    this.validate = function () {
+      if (isNaN($input.val())) {
+        return {
+          valid: false,
+          msg: "Please enter a valid integer"
+        };
+      }
+
+      return {
+        valid: true,
+        msg: null
+      };
+    };
+
+    this.init();
+  }
+
+  function DateEditor(args) {
+    var $input;
+    var defaultValue;
+    var scope = this;
+    var calendarOpen = false;
+
+    this.init = function () {
+      $input = $("<INPUT type=text class='editor-text' />");
+      $input.appendTo(args.container);
+      $input.focus().select();
+      $input.datepicker({
+        showOn: "button",
+        buttonImageOnly: true,
+        buttonImage: "../images/calendar.gif",
+        beforeShow: function () {
+          calendarOpen = true
+        },
+        onClose: function () {
+          calendarOpen = false
+        }
+      });
+      $input.width($input.width() - 18);
+    };
+
+    this.destroy = function () {
+      $.datepicker.dpDiv.stop(true, true);
+      $input.datepicker("hide");
+      $input.datepicker("destroy");
+      $input.remove();
+    };
+
+    this.show = function () {
+      if (calendarOpen) {
+        $.datepicker.dpDiv.stop(true, true).show();
+      }
+    };
+
+    this.hide = function () {
+      if (calendarOpen) {
+        $.datepicker.dpDiv.stop(true, true).hide();
+      }
+    };
+
+    this.position = function (position) {
+      if (!calendarOpen) {
+        return;
+      }
+      $.datepicker.dpDiv
+          .css("top", position.top + 30)
+          .css("left", position.left);
+    };
+
+    this.focus = function () {
+      $input.focus();
+    };
+
+    this.loadValue = function (item) {
+      defaultValue = item[args.column.field];
+      $input.val(defaultValue);
+      $input[0].defaultValue = defaultValue;
+      $input.select();
+    };
+
+    this.serializeValue = function () {
+      return $input.val();
+    };
+
+    this.applyValue = function (item, state) {
+      item[args.column.field] = state;
+    };
+
+    this.isValueChanged = function () {
+      return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);
+    };
+
+    this.validate = function () {
+      return {
+        valid: true,
+        msg: null
+      };
+    };
+
+    this.init();
+  }
+
+  function YesNoSelectEditor(args) {
+    var $select;
+    var defaultValue;
+    var scope = this;
+
+    this.init = function () {
+      $select = $("<SELECT tabIndex='0' class='editor-yesno'><OPTION value='yes'>Yes</OPTION><OPTION value='no'>No</OPTION></SELECT>");
+      $select.appendTo(args.container);
+      $select.focus();
+    };
+
+    this.destroy = function () {
+      $select.remove();
+    };
+
+    this.focus = function () {
+      $select.focus();
+    };
+
+    this.loadValue = function (item) {
+      $select.val((defaultValue = item[args.column.field]) ? "yes" : "no");
+      $select.select();
+    };
+
+    this.serializeValue = function () {
+      return ($select.val() == "yes");
+    };
+
+    this.applyValue = function (item, state) {
+      item[args.column.field] = state;
+    };
+
+    this.isValueChanged = function () {
+      return ($select.val() != defaultValue);
+    };
+
+    this.validate = function () {
+      return {
+        valid: true,
+        msg: null
+      };
+    };
+
+    this.init();
+  }
+
+  function CheckboxEditor(args) {
+    var $select;
+    var defaultValue;
+    var scope = this;
+
+    this.init = function () {
+      $select = $("<INPUT type=checkbox value='true' class='editor-checkbox' hideFocus>");
+      $select.appendTo(args.container);
+      $select.focus();
+    };
+
+    this.destroy = function () {
+      $select.remove();
+    };
+
+    this.focus = function () {
+      $select.focus();
+    };
+
+    this.loadValue = function (item) {
+      defaultValue = !!item[args.column.field];
+      if (defaultValue) {
+        $select.prop('checked', true);
+      } else {
+        $select.prop('checked', false);
+      }
+    };
+
+    this.serializeValue = function () {
+      return $select.prop('checked');
+    };
+
+    this.applyValue = function (item, state) {
+      item[args.column.field] = state;
+    };
+
+    this.isValueChanged = function () {
+      return (this.serializeValue() !== defaultValue);
+    };
+
+    this.validate = function () {
+      return {
+        valid: true,
+        msg: null
+      };
+    };
+
+    this.init();
+  }
+
+  function PercentCompleteEditor(args) {
+    var $input, $picker;
+    var defaultValue;
+    var scope = this;
+
+    this.init = function () {
+      $input = $("<INPUT type=text class='editor-percentcomplete' />");
+      $input.width($(args.container).innerWidth() - 25);
+      $input.appendTo(args.container);
+
+      $picker = $("<div class='editor-percentcomplete-picker' />").appendTo(args.container);
+      $picker.append("<div class='editor-percentcomplete-helper'><div class='editor-percentcomplete-wrapper'><div class='editor-percentcomplete-slider' /><div class='editor-percentcomplete-buttons' /></div></div>");
+
+      $picker.find(".editor-percentcomplete-buttons").append("<button val=0>Not started</button><br/><button val=50>In Progress</button><br/><button val=100>Complete</button>");
+
+      $input.focus().select();
+
+      $picker.find(".editor-percentcomplete-slider").slider({
+        orientation: "vertical",
+        range: "min",
+        value: defaultValue,
+        slide: function (event, ui) {
+          $input.val(ui.value)
+        }
+      });
+
+      $picker.find(".editor-percentcomplete-buttons button").bind("click", function (e) {
+        $input.val($(this).attr("val"));
+        $picker.find(".editor-percentcomplete-slider").slider("value", $(this).attr("val"));
+      })
+    };
+
+    this.destroy = function () {
+      $input.remove();
+      $picker.remove();
+    };
+
+    this.focus = function () {
+      $input.focus();
+    };
+
+    this.loadValue = function (item) {
+      $input.val(defaultValue = item[args.column.field]);
+      $input.select();
+    };
+
+    this.serializeValue = function () {
+      return parseInt($input.val(), 10) || 0;
+    };
+
+    this.applyValue = function (item, state) {
+      item[args.column.field] = state;
+    };
+
+    this.isValueChanged = function () {
+      return (!($input.val() == "" && defaultValue == null)) && ((parseInt($input.val(), 10) || 0) != defaultValue);
+    };
+
+    this.validate = function () {
+      if (isNaN(parseInt($input.val(), 10))) {
+        return {
+          valid: false,
+          msg: "Please enter a valid positive number"
+        };
+      }
+
+      return {
+        valid: true,
+        msg: null
+      };
+    };
+
+    this.init();
+  }
+
+  /*
+   * An example of a "detached" editor.
+   * The UI is added onto document BODY and .position(), .show() and .hide() are implemented.
+   * KeyDown events are also handled to provide handling for Tab, Shift-Tab, Esc and Ctrl-Enter.
+   */
+  function LongTextEditor(args) {
+    var $input, $wrapper;
+    var defaultValue;
+    var scope = this;
+
+    this.init = function () {
+      var $container = $("body");
+
+      $wrapper = $("<DIV style='z-index:10000;position:absolute;background:white;padding:5px;border:3px solid gray; -moz-border-radius:10px; border-radius:10px;'/>")
+          .appendTo($container);
+
+      $input = $("<TEXTAREA hidefocus rows=5 style='backround:white;width:250px;height:80px;border:0;outline:0'>")
+          .appendTo($wrapper);
+
+      $("<DIV style='text-align:right'><BUTTON>Save</BUTTON><BUTTON>Cancel</BUTTON></DIV>")
+          .appendTo($wrapper);
+
+      $wrapper.find("button:first").bind("click", this.save);
+      $wrapper.find("button:last").bind("click", this.cancel);
+      $input.bind("keydown", this.handleKeyDown);
+
+      scope.position(args.position);
+      $input.focus().select();
+    };
+
+    this.handleKeyDown = function (e) {
+      if (e.which == $.ui.keyCode.ENTER && e.ctrlKey) {
+        scope.save();
+      } else if (e.which == $.ui.keyCode.ESCAPE) {
+        e.preventDefault();
+        scope.cancel();
+      } else if (e.which == $.ui.keyCode.TAB && e.shiftKey) {
+        e.preventDefault();
+        args.grid.navigatePrev();
+      } else if (e.which == $.ui.keyCode.TAB) {
+        e.preventDefault();
+        args.grid.navigateNext();
+      }
+    };
+
+    this.save = function () {
+      args.commitChanges();
+    };
+
+    this.cancel = function () {
+      $input.val(defaultValue);
+      args.cancelChanges();
+    };
+
+    this.hide = function () {
+      $wrapper.hide();
+    };
+
+    this.show = function () {
+      $wrapper.show();
+    };
+
+    this.position = function (position) {
+      $wrapper
+          .css("top", position.top - 5)
+          .css("left", position.left - 5)
+    };
+
+    this.destroy = function () {
+      $wrapper.remove();
+    };
+
+    this.focus = function () {
+      $input.focus();
+    };
+
+    this.loadValue = function (item) {
+      $input.val(defaultValue = item[args.column.field]);
+      $input.select();
+    };
+
+    this.serializeValue = function () {
+      return $input.val();
+    };
+
+    this.applyValue = function (item, state) {
+      item[args.column.field] = state;
+    };
+
+    this.isValueChanged = function () {
+      return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);
+    };
+
+    this.validate = function () {
+      return {
+        valid: true,
+        msg: null
+      };
+    };
+
+    this.init();
+  }
 })(jQuery);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.formatters.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.formatters.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.formatters.js
index cc30b8c..a31aaf9 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.formatters.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.formatters.js
@@ -1,55 +1,59 @@
 /***
  * Contains basic SlickGrid formatters.
+ * 
+ * NOTE:  These are merely examples.  You will most likely need to implement something more
+ *        robust/extensible/localizable/etc. for your use!
+ * 
  * @module Formatters
  * @namespace Slick
  */
 
 (function ($) {
-    // register namespace
-    $.extend(true, window, {
-        "Slick": {
-            "Formatters": {
-                "PercentComplete": PercentCompleteFormatter,
-                "PercentCompleteBar": PercentCompleteBarFormatter,
-                "YesNo": YesNoFormatter,
-                "Checkmark": CheckmarkFormatter
-            }
-        }
-    });
-
-    function PercentCompleteFormatter(row, cell, value, columnDef, dataContext) {
-        if (value == null || value === "") {
-            return "-";
-        } else if (value < 50) {
-            return "<span style='color:red;font-weight:bold;'>" + value + "%</span>";
-        } else {
-            return "<span style='color:green'>" + value + "%</span>";
-        }
+  // register namespace
+  $.extend(true, window, {
+    "Slick": {
+      "Formatters": {
+        "PercentComplete": PercentCompleteFormatter,
+        "PercentCompleteBar": PercentCompleteBarFormatter,
+        "YesNo": YesNoFormatter,
+        "Checkmark": CheckmarkFormatter
+      }
     }
+  });
+
+  function PercentCompleteFormatter(row, cell, value, columnDef, dataContext) {
+    if (value == null || value === "") {
+      return "-";
+    } else if (value < 50) {
+      return "<span style='color:red;font-weight:bold;'>" + value + "%</span>";
+    } else {
+      return "<span style='color:green'>" + value + "%</span>";
+    }
+  }
 
-    function PercentCompleteBarFormatter(row, cell, value, columnDef, dataContext) {
-        if (value == null || value === "") {
-            return "";
-        }
-
-        var color;
+  function PercentCompleteBarFormatter(row, cell, value, columnDef, dataContext) {
+    if (value == null || value === "") {
+      return "";
+    }
 
-        if (value < 30) {
-            color = "red";
-        } else if (value < 70) {
-            color = "silver";
-        } else {
-            color = "green";
-        }
+    var color;
 
-        return "<span class='percent-complete-bar' style='background:" + color + ";width:" + value + "%'></span>";
+    if (value < 30) {
+      color = "red";
+    } else if (value < 70) {
+      color = "silver";
+    } else {
+      color = "green";
     }
 
-    function YesNoFormatter(row, cell, value, columnDef, dataContext) {
-        return value ? "Yes" : "No";
-    }
+    return "<span class='percent-complete-bar' style='background:" + color + ";width:" + value + "%'></span>";
+  }
 
-    function CheckmarkFormatter(row, cell, value, columnDef, dataContext) {
-        return value ? "<img src='../images/tick.png'>" : "";
-    }
-})(jQuery);
\ No newline at end of file
+  function YesNoFormatter(row, cell, value, columnDef, dataContext) {
+    return value ? "Yes" : "No";
+  }
+
+  function CheckmarkFormatter(row, cell, value, columnDef, dataContext) {
+    return value ? "<img src='../images/tick.png'>" : "";
+  }
+})(jQuery);


[42/50] [abbrv] incubator-nifi git commit: NIFI-27: - Upgrading jQuery and jQuery UI. - Replacing all instances of Deferred.then with Deferred.done/fail due to API change introduced in 1.8. - Restoring line returns between public methods. - Upgrading jqu

Posted by mc...@apache.org.
NIFI-27:
- Upgrading jQuery and jQuery UI.
- Replacing all instances of Deferred.then with Deferred.done/fail due to API change introduced in 1.8.
- Restoring line returns between public methods.
- Upgrading jquery.form and jquery.minicolors.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/2965258e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/2965258e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/2965258e

Branch: refs/heads/develop
Commit: 2965258e5da192b8a54dc36f84089be90bc0f1f7
Parents: fc78752
Author: Matt Gilman <ma...@gmail.com>
Authored: Tue Dec 16 08:42:13 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Tue Dec 16 08:42:13 2014 -0500

----------------------------------------------------------------------
 .../webapp/WEB-INF/pages/bulletin-board.jsp     |     3 +-
 .../src/main/webapp/WEB-INF/pages/canvas.jsp    |     3 +-
 .../src/main/webapp/WEB-INF/pages/cluster.jsp   |     1 -
 .../src/main/webapp/WEB-INF/pages/counters.jsp  |     1 -
 .../src/main/webapp/WEB-INF/pages/history.jsp   |     1 -
 .../main/webapp/WEB-INF/pages/provenance.jsp    |     1 -
 .../src/main/webapp/WEB-INF/pages/summary.jsp   |     1 -
 .../src/main/webapp/WEB-INF/pages/templates.jsp |     3 +-
 .../src/main/webapp/WEB-INF/pages/users.jsp     |     1 -
 .../src/main/webapp/js/jquery/jquery.form.js    |  1118 --
 .../main/webapp/js/jquery/jquery.form.min.js    |    11 +
 .../js/jquery/minicolors/jquery.minicolors.css  |    40 +-
 .../jquery/minicolors/jquery.minicolors.min.js  |   421 +-
 .../jquery/ui-smoothness/jquery-ui-1.10.4.css   |  1178 --
 .../js/jquery/ui-smoothness/jquery-ui-1.10.4.js | 15008 -----------------
 .../js/nf/bulletin-board/nf-bulletin-board.js   |    16 +-
 .../src/main/webapp/js/nf/canvas/nf-actions.js  |    65 +-
 .../src/main/webapp/js/nf/canvas/nf-birdseye.js |     1 +
 .../webapp/js/nf/canvas/nf-canvas-header.js     |    12 +-
 .../webapp/js/nf/canvas/nf-canvas-toolbar.js    |     1 +
 .../webapp/js/nf/canvas/nf-canvas-toolbox.js    |    45 +-
 .../main/webapp/js/nf/canvas/nf-canvas-utils.js |    73 +-
 .../src/main/webapp/js/nf/canvas/nf-canvas.js   |    59 +-
 .../main/webapp/js/nf/canvas/nf-clipboard.js    |     4 +
 .../main/webapp/js/nf/canvas/nf-connectable.js  |     1 +
 .../js/nf/canvas/nf-connection-configuration.js |    43 +-
 .../main/webapp/js/nf/canvas/nf-connection.js   |    20 +-
 .../main/webapp/js/nf/canvas/nf-context-menu.js |     2 +
 .../main/webapp/js/nf/canvas/nf-draggable.js    |     9 +-
 .../src/main/webapp/js/nf/canvas/nf-funnel.js   |     8 +
 .../src/main/webapp/js/nf/canvas/nf-go-to.js    |    50 +-
 .../src/main/webapp/js/nf/canvas/nf-graph.js    |     6 +
 .../js/nf/canvas/nf-label-configuration.js      |     5 +-
 .../src/main/webapp/js/nf/canvas/nf-label.js    |    14 +-
 .../js/nf/canvas/nf-port-configuration.js       |     5 +-
 .../main/webapp/js/nf/canvas/nf-port-details.js |     1 +
 .../src/main/webapp/js/nf/canvas/nf-port.js     |    10 +
 .../nf/canvas/nf-process-group-configuration.js |     5 +-
 .../js/nf/canvas/nf-process-group-details.js    |     1 +
 .../webapp/js/nf/canvas/nf-process-group.js     |    10 +
 .../js/nf/canvas/nf-processor-configuration.js  |    13 +-
 .../js/nf/canvas/nf-processor-property-table.js |    14 +
 .../main/webapp/js/nf/canvas/nf-processor.js    |    11 +
 .../main/webapp/js/nf/canvas/nf-registration.js |     4 +-
 .../nf-remote-process-group-configuration.js    |     5 +-
 .../canvas/nf-remote-process-group-details.js   |     1 +
 .../nf/canvas/nf-remote-process-group-ports.js  |    13 +-
 .../js/nf/canvas/nf-remote-process-group.js     |    10 +
 .../nf/canvas/nf-secure-port-configuration.js   |     5 +-
 .../js/nf/canvas/nf-secure-port-details.js      |     1 +
 .../main/webapp/js/nf/canvas/nf-selectable.js   |     2 +
 .../src/main/webapp/js/nf/canvas/nf-settings.js |    13 +-
 .../src/main/webapp/js/nf/canvas/nf-snippet.js  |     6 +
 .../src/main/webapp/js/nf/canvas/nf-storage.js  |     3 +
 .../webapp/js/nf/cluster/nf-cluster-table.js    |    31 +-
 .../src/main/webapp/js/nf/cluster/nf-cluster.js |    12 +-
 .../webapp/js/nf/counters/nf-counters-table.js  |    11 +-
 .../main/webapp/js/nf/counters/nf-counters.js   |    12 +-
 .../webapp/js/nf/history/nf-history-model.js    |     4 +-
 .../webapp/js/nf/history/nf-history-table.js    |     7 +-
 .../src/main/webapp/js/nf/history/nf-history.js |    12 +-
 .../src/main/webapp/js/nf/nf-common.js          |    40 +
 .../main/webapp/js/nf/nf-connection-details.js  |    19 +-
 .../src/main/webapp/js/nf/nf-dialog.js          |     1 +
 .../main/webapp/js/nf/nf-processor-details.js   |     5 +-
 .../src/main/webapp/js/nf/nf-shell.js           |     1 +
 .../src/main/webapp/js/nf/nf-status-history.js  |    40 +-
 .../js/nf/provenance/nf-provenance-lineage.js   |    17 +-
 .../js/nf/provenance/nf-provenance-table.js     |    37 +-
 .../webapp/js/nf/provenance/nf-provenance.js    |    20 +-
 .../webapp/js/nf/summary/nf-summary-table.js    |    62 +-
 .../src/main/webapp/js/nf/summary/nf-summary.js |    20 +-
 .../js/nf/templates/nf-templates-table.js       |    12 +-
 .../main/webapp/js/nf/templates/nf-templates.js |    12 +-
 .../main/webapp/js/nf/users/nf-users-table.js   |    46 +-
 .../src/main/webapp/js/nf/users/nf-users.js     |    12 +-
 76 files changed, 719 insertions(+), 18072 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
index 297a331..62569ef 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
@@ -25,9 +25,8 @@
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/ui-smoothness/jquery-ui-1.10.4.css" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.css" type="text/css" />
         <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
-        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/combo/jquery.combo.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/modal/jquery.modal.js?${project.version}"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
index 5dc2b87..8f50c1f 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
@@ -35,8 +35,7 @@
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
         <script type="text/javascript" src="js/codemirror/lib/codemirror-compressed.js"></script>
         <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
-        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
-        <script type="text/javascript" src="js/jquery/ui-smoothness/jquery-ui-1.10.4.js"></script>
+        <script type="text/javascript" src="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.count.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.ellipsis.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
index 121aebc..867ea3f 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
@@ -29,7 +29,6 @@
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
         <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
-        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/combo/jquery.combo.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/modal/jquery.modal.js?${project.version}"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
index 0d0c527..2d3576d 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
@@ -29,7 +29,6 @@
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
         <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
-        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/combo/jquery.combo.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/modal/jquery.modal.js?${project.version}"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
index 7d588fe..db064ff 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
@@ -29,7 +29,6 @@
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
         <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
-        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/modal/jquery.modal.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/combo/jquery.combo.js?${project.version}"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
index e014b93..59e8512 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
@@ -30,7 +30,6 @@
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
         <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
-        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/modal/jquery.modal.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/tabbs/jquery.tabbs.js?${project.version}"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
index fca5506..0c57e65 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
@@ -30,7 +30,6 @@
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
         <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
-        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/tabbs/jquery.tabbs.js?${project.version}"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
index e2eb7e1..da479d6 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
@@ -29,9 +29,8 @@
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
         <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
-        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery.form.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery.form.min.js"></script>
         <script type="text/javascript" src="js/jquery/combo/jquery.combo.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/modal/jquery.modal.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/jquery.ellipsis.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
index 39b7e15..ff2bbf1 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
@@ -30,7 +30,6 @@
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
         <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
-        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/tabbs/jquery.tabbs.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/combo/jquery.combo.js?${project.version}"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.form.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.form.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.form.js
deleted file mode 100755
index 4604aa9..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.form.js
+++ /dev/null
@@ -1,1118 +0,0 @@
-/*!
- * jQuery Form Plugin
- * version: 3.15 (09-SEP-2012)
- * @requires jQuery v1.3.2 or later
- *
- * Examples and documentation at: http://malsup.com/jquery/form/
- * Project repository: https://github.com/malsup/form
- * Dual licensed under the MIT and GPL licenses:
- *    http://malsup.github.com/mit-license.txt
- *    http://malsup.github.com/gpl-license-v2.txt
- */
-/*global ActiveXObject alert */
-;
-(function ($) {
-    "use strict";
-
-    /*
-     Usage Note:
-     -----------
-     Do not use both ajaxSubmit and ajaxForm on the same form.  These
-     functions are mutually exclusive.  Use ajaxSubmit if you want
-     to bind your own submit handler to the form.  For example,
-     
-     $(document).ready(function() {
-     $('#myForm').on('submit', function(e) {
-     e.preventDefault(); // <-- important
-     $(this).ajaxSubmit({
-     target: '#output'
-     });
-     });
-     });
-     
-     Use ajaxForm when you want the plugin to manage all the event binding
-     for you.  For example,
-     
-     $(document).ready(function() {
-     $('#myForm').ajaxForm({
-     target: '#output'
-     });
-     });
-     
-     You can also use ajaxForm with delegation (requires jQuery v1.7+), so the
-     form does not have to exist when you invoke ajaxForm:
-     
-     $('#myForm').ajaxForm({
-     delegation: true,
-     target: '#output'
-     });
-     
-     When using ajaxForm, the ajaxSubmit function will be invoked for you
-     at the appropriate time.
-     */
-
-    /**
-     * Feature detection
-     */
-    var feature = {};
-    feature.fileapi = $("<input type='file'/>").get(0).files !== undefined;
-    feature.formdata = window.FormData !== undefined;
-
-    /**
-     * ajaxSubmit() provides a mechanism for immediately submitting
-     * an HTML form using AJAX.
-     */
-    $.fn.ajaxSubmit = function (options) {
-        /*jshint scripturl:true */
-
-        // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
-        if (!this.length) {
-            log('ajaxSubmit: skipping submit process - no element selected');
-            return this;
-        }
-
-        var method, action, url, $form = this;
-
-        if (typeof options == 'function') {
-            options = {success: options};
-        }
-
-        method = this.attr('method');
-        action = this.attr('action');
-        url = (typeof action === 'string') ? $.trim(action) : '';
-        url = url || window.location.href || '';
-        if (url) {
-            // clean url (don't include hash vaue)
-            url = (url.match(/^([^#]+)/) || [])[1];
-        }
-
-        options = $.extend(true, {
-            url: url,
-            success: $.ajaxSettings.success,
-            type: method || 'GET',
-            iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
-        }, options);
-
-        // hook for manipulating the form data before it is extracted;
-        // convenient for use with rich editors like tinyMCE or FCKEditor
-        var veto = {};
-        this.trigger('form-pre-serialize', [this, options, veto]);
-        if (veto.veto) {
-            log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
-            return this;
-        }
-
-        // provide opportunity to alter form data before it is serialized
-        if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
-            log('ajaxSubmit: submit aborted via beforeSerialize callback');
-            return this;
-        }
-
-        var traditional = options.traditional;
-        if (traditional === undefined) {
-            traditional = $.ajaxSettings.traditional;
-        }
-
-        var elements = [];
-        var qx, a = this.formToArray(options.semantic, elements);
-        if (options.data) {
-            options.extraData = options.data;
-            qx = $.param(options.data, traditional);
-        }
-
-        // give pre-submit callback an opportunity to abort the submit
-        if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
-            log('ajaxSubmit: submit aborted via beforeSubmit callback');
-            return this;
-        }
-
-        // fire vetoable 'validate' event
-        this.trigger('form-submit-validate', [a, this, options, veto]);
-        if (veto.veto) {
-            log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
-            return this;
-        }
-
-        var q = $.param(a, traditional);
-        if (qx) {
-            q = (q ? (q + '&' + qx) : qx);
-        }
-        if (options.type.toUpperCase() == 'GET') {
-            options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
-            options.data = null;  // data is null for 'get'
-        }
-        else {
-            options.data = q; // data is the query string for 'post'
-        }
-
-        var callbacks = [];
-        if (options.resetForm) {
-            callbacks.push(function () {
-                $form.resetForm();
-            });
-        }
-        if (options.clearForm) {
-            callbacks.push(function () {
-                $form.clearForm(options.includeHidden);
-            });
-        }
-
-        // perform a load on the target only if dataType is not provided
-        if (!options.dataType && options.target) {
-            var oldSuccess = options.success || function () {
-            };
-            callbacks.push(function (data) {
-                var fn = options.replaceTarget ? 'replaceWith' : 'html';
-                $(options.target)[fn](data).each(oldSuccess, arguments);
-            });
-        }
-        else if (options.success) {
-            callbacks.push(options.success);
-        }
-
-        options.success = function (data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
-            var context = options.context || this;    // jQuery 1.4+ supports scope context 
-            for (var i = 0, max = callbacks.length; i < max; i++) {
-                callbacks[i].apply(context, [data, status, xhr || $form, $form]);
-            }
-        };
-
-        // are there files to upload?
-        var fileInputs = $('input:file:enabled[value]', this); // [value] (issue #113)
-        var hasFileInputs = fileInputs.length > 0;
-        var mp = 'multipart/form-data';
-        var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);
-
-        var fileAPI = feature.fileapi && feature.formdata;
-        log("fileAPI :" + fileAPI);
-        var shouldUseFrame = (hasFileInputs || multipart) && !fileAPI;
-
-        // options.iframe allows user to force iframe mode
-        // 06-NOV-09: now defaulting to iframe mode if file input is detected
-        if (options.iframe !== false && (options.iframe || shouldUseFrame)) {
-            // hack to fix Safari hang (thanks to Tim Molendijk for this)
-            // see:  http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
-            if (options.closeKeepAlive) {
-                $.get(options.closeKeepAlive, function () {
-                    fileUploadIframe(a);
-                });
-            }
-            else {
-                fileUploadIframe(a);
-            }
-        }
-        else if ((hasFileInputs || multipart) && fileAPI) {
-            fileUploadXhr(a);
-        }
-        else {
-            $.ajax(options);
-        }
-
-        // clear element array
-        for (var k = 0; k < elements.length; k++)
-            elements[k] = null;
-
-        // fire 'notify' event
-        this.trigger('form-submit-notify', [this, options]);
-        return this;
-
-        // utility fn for deep serialization
-        function deepSerialize(extraData) {
-            var serialized = $.param(extraData).split('&');
-            var len = serialized.length;
-            var result = {};
-            var i, part;
-            for (i = 0; i < len; i++) {
-                part = serialized[i].split('=');
-                result[decodeURIComponent(part[0])] = decodeURIComponent(part[1]);
-            }
-            return result;
-        }
-
-        // XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz)
-        function fileUploadXhr(a) {
-            var formdata = new FormData();
-
-            for (var i = 0; i < a.length; i++) {
-                formdata.append(a[i].name, a[i].value);
-            }
-
-            if (options.extraData) {
-                var serializedData = deepSerialize(options.extraData);
-                for (var p in serializedData)
-                    if (serializedData.hasOwnProperty(p))
-                        formdata.append(p, serializedData[p]);
-            }
-
-            options.data = null;
-
-            var s = $.extend(true, {}, $.ajaxSettings, options, {
-                contentType: false,
-                processData: false,
-                cache: false,
-                type: 'POST'
-            });
-
-            if (options.uploadProgress) {
-                // workaround because jqXHR does not expose upload property
-                s.xhr = function () {
-                    var xhr = jQuery.ajaxSettings.xhr();
-                    if (xhr.upload) {
-                        xhr.upload.onprogress = function (event) {
-                            var percent = 0;
-                            var position = event.loaded || event.position; /*event.position is deprecated*/
-                            var total = event.total;
-                            if (event.lengthComputable) {
-                                percent = Math.ceil(position / total * 100);
-                            }
-                            options.uploadProgress(event, position, total, percent);
-                        };
-                    }
-                    return xhr;
-                };
-            }
-
-            s.data = null;
-            var beforeSend = s.beforeSend;
-            s.beforeSend = function (xhr, o) {
-                o.data = formdata;
-                if (beforeSend)
-                    beforeSend.call(this, xhr, o);
-            };
-            $.ajax(s);
-        }
-
-        // private function for handling file uploads (hat tip to YAHOO!)
-        function fileUploadIframe(a) {
-            var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle;
-            var useProp = !!$.fn.prop;
-
-            if ($(':input[name=submit],:input[id=submit]', form).length) {
-                // if there is an input with a name or id of 'submit' then we won't be
-                // able to invoke the submit fn on the form (at least not x-browser)
-                alert('Error: Form elements must not have name or id of "submit".');
-                return;
-            }
-
-            if (a) {
-                // ensure that every serialized input is still enabled
-                for (i = 0; i < elements.length; i++) {
-                    el = $(elements[i]);
-                    if (useProp)
-                        el.prop('disabled', false);
-                    else
-                        el.removeAttr('disabled');
-                }
-            }
-
-            s = $.extend(true, {}, $.ajaxSettings, options);
-            s.context = s.context || s;
-            id = 'jqFormIO' + (new Date().getTime());
-            if (s.iframeTarget) {
-                $io = $(s.iframeTarget);
-                n = $io.attr('name');
-                if (!n)
-                    $io.attr('name', id);
-                else
-                    id = n;
-            }
-            else {
-                $io = $('<iframe name="' + id + '" src="' + s.iframeSrc + '" />');
-                $io.css({position: 'absolute', top: '-1000px', left: '-1000px'});
-            }
-            io = $io[0];
-
-
-            xhr = {// mock object
-                aborted: 0,
-                responseText: null,
-                responseXML: null,
-                status: 0,
-                statusText: 'n/a',
-                getAllResponseHeaders: function () {
-                },
-                getResponseHeader: function () {
-                },
-                setRequestHeader: function () {
-                },
-                abort: function (status) {
-                    var e = (status === 'timeout' ? 'timeout' : 'aborted');
-                    log('aborting upload... ' + e);
-                    this.aborted = 1;
-                    // #214
-                    if (io.contentWindow.document.execCommand) {
-                        try { // #214
-                            io.contentWindow.document.execCommand('Stop');
-                        } catch (ignore) {
-                        }
-                    }
-                    $io.attr('src', s.iframeSrc); // abort op in progress
-                    xhr.error = e;
-                    if (s.error)
-                        s.error.call(s.context, xhr, e, status);
-                    if (g)
-                        $.event.trigger("ajaxError", [xhr, s, e]);
-                    if (s.complete)
-                        s.complete.call(s.context, xhr, e);
-                }
-            };
-
-            g = s.global;
-            // trigger ajax global events so that activity/block indicators work like normal
-            if (g && 0 === $.active++) {
-                $.event.trigger("ajaxStart");
-            }
-            if (g) {
-                $.event.trigger("ajaxSend", [xhr, s]);
-            }
-
-            if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) {
-                if (s.global) {
-                    $.active--;
-                }
-                return;
-            }
-            if (xhr.aborted) {
-                return;
-            }
-
-            // add submitting element to data if we know it
-            sub = form.clk;
-            if (sub) {
-                n = sub.name;
-                if (n && !sub.disabled) {
-                    s.extraData = s.extraData || {};
-                    s.extraData[n] = sub.value;
-                    if (sub.type == "image") {
-                        s.extraData[n + '.x'] = form.clk_x;
-                        s.extraData[n + '.y'] = form.clk_y;
-                    }
-                }
-            }
-
-            var CLIENT_TIMEOUT_ABORT = 1;
-            var SERVER_ABORT = 2;
-
-            function getDoc(frame) {
-                var doc = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument ? frame.contentDocument : frame.document;
-                return doc;
-            }
-
-            // Rails CSRF hack (thanks to Yvan Barthelemy)
-            var csrf_token = $('meta[name=csrf-token]').attr('content');
-            var csrf_param = $('meta[name=csrf-param]').attr('content');
-            if (csrf_param && csrf_token) {
-                s.extraData = s.extraData || {};
-                s.extraData[csrf_param] = csrf_token;
-            }
-
-            // take a breath so that pending repaints get some cpu time before the upload starts
-            function doSubmit() {
-                // make sure form attrs are set
-                var t = $form.attr('target'), a = $form.attr('action');
-
-                // update form attrs in IE friendly way
-                form.setAttribute('target', id);
-                if (!method) {
-                    form.setAttribute('method', 'POST');
-                }
-                if (a != s.url) {
-                    form.setAttribute('action', s.url);
-                }
-
-                // ie borks in some cases when setting encoding
-                if (!s.skipEncodingOverride && (!method || /post/i.test(method))) {
-                    $form.attr({
-                        encoding: 'multipart/form-data',
-                        enctype: 'multipart/form-data'
-                    });
-                }
-
-                // support timout
-                if (s.timeout) {
-                    timeoutHandle = setTimeout(function () {
-                        timedOut = true;
-                        cb(CLIENT_TIMEOUT_ABORT);
-                    }, s.timeout);
-                }
-
-                // look for server aborts
-                function checkState() {
-                    try {
-                        var state = getDoc(io).readyState;
-                        log('state = ' + state);
-                        if (state && state.toLowerCase() == 'uninitialized')
-                            setTimeout(checkState, 50);
-                    }
-                    catch (e) {
-                        log('Server abort: ', e, ' (', e.name, ')');
-                        cb(SERVER_ABORT);
-                        if (timeoutHandle)
-                            clearTimeout(timeoutHandle);
-                        timeoutHandle = undefined;
-                    }
-                }
-
-                // add "extra" data to form if provided in options
-                var extraInputs = [];
-                try {
-                    if (s.extraData) {
-                        for (var n in s.extraData) {
-                            if (s.extraData.hasOwnProperty(n)) {
-                                // if using the $.param format that allows for multiple values with the same name
-                                if ($.isPlainObject(s.extraData[n]) && s.extraData[n].hasOwnProperty('name') && s.extraData[n].hasOwnProperty('value')) {
-                                    extraInputs.push(
-                                            $('<input type="hidden" name="' + s.extraData[n].name + '">').attr('value', s.extraData[n].value)
-                                            .appendTo(form)[0]);
-                                } else {
-                                    extraInputs.push(
-                                            $('<input type="hidden" name="' + n + '">').attr('value', s.extraData[n])
-                                            .appendTo(form)[0]);
-                                }
-                            }
-                        }
-                    }
-
-                    if (!s.iframeTarget) {
-                        // add iframe to doc and submit the form
-                        $io.appendTo('body');
-                        if (io.attachEvent)
-                            io.attachEvent('onload', cb);
-                        else
-                            io.addEventListener('load', cb, false);
-                    }
-                    setTimeout(checkState, 15);
-                    form.submit();
-                }
-                finally {
-                    // reset attrs and remove "extra" input elements
-                    form.setAttribute('action', a);
-                    if (t) {
-                        form.setAttribute('target', t);
-                    } else {
-                        $form.removeAttr('target');
-                    }
-                    $(extraInputs).remove();
-                }
-            }
-
-            if (s.forceSync) {
-                doSubmit();
-            }
-            else {
-                setTimeout(doSubmit, 10); // this lets dom updates render
-            }
-
-            var data, doc, domCheckCount = 50, callbackProcessed;
-
-            function cb(e) {
-                if (xhr.aborted || callbackProcessed) {
-                    return;
-                }
-                try {
-                    doc = getDoc(io);
-                }
-                catch (ex) {
-                    log('cannot access response document: ', ex);
-                    e = SERVER_ABORT;
-                }
-                if (e === CLIENT_TIMEOUT_ABORT && xhr) {
-                    xhr.abort('timeout');
-                    return;
-                }
-                else if (e == SERVER_ABORT && xhr) {
-                    xhr.abort('server abort');
-                    return;
-                }
-
-                if (!doc || doc.location.href == s.iframeSrc) {
-                    // response not received yet
-                    if (!timedOut)
-                        return;
-                }
-                if (io.detachEvent)
-                    io.detachEvent('onload', cb);
-                else
-                    io.removeEventListener('load', cb, false);
-
-                var status = 'success', errMsg;
-                try {
-                    if (timedOut) {
-                        throw 'timeout';
-                    }
-
-                    var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
-                    log('isXml=' + isXml);
-                    if (!isXml && window.opera && (doc.body === null || !doc.body.innerHTML)) {
-                        if (--domCheckCount) {
-                            // in some browsers (Opera) the iframe DOM is not always traversable when
-                            // the onload callback fires, so we loop a bit to accommodate
-                            log('requeing onLoad callback, DOM not available');
-                            setTimeout(cb, 250);
-                            return;
-                        }
-                        // let this fall through because server response could be an empty document
-                        //log('Could not access iframe DOM after mutiple tries.');
-                        //throw 'DOMException: not available';
-                    }
-
-                    //log('response detected');
-                    var docRoot = doc.body ? doc.body : doc.documentElement;
-                    xhr.responseText = docRoot ? docRoot.innerHTML : null;
-                    xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
-                    if (isXml)
-                        s.dataType = 'xml';
-                    xhr.getResponseHeader = function (header) {
-                        var headers = {'content-type': s.dataType};
-                        return headers[header];
-                    };
-                    // support for XHR 'status' & 'statusText' emulation :
-                    if (docRoot) {
-                        xhr.status = Number(docRoot.getAttribute('status')) || xhr.status;
-                        xhr.statusText = docRoot.getAttribute('statusText') || xhr.statusText;
-                    }
-
-                    var dt = (s.dataType || '').toLowerCase();
-                    var scr = /(json|script|text)/.test(dt);
-                    if (scr || s.textarea) {
-                        // see if user embedded response in textarea
-                        var ta = doc.getElementsByTagName('textarea')[0];
-                        if (ta) {
-                            xhr.responseText = ta.value;
-                            // support for XHR 'status' & 'statusText' emulation :
-                            xhr.status = Number(ta.getAttribute('status')) || xhr.status;
-                            xhr.statusText = ta.getAttribute('statusText') || xhr.statusText;
-                        }
-                        else if (scr) {
-                            // account for browsers injecting pre around json response
-                            var pre = doc.getElementsByTagName('pre')[0];
-                            var b = doc.getElementsByTagName('body')[0];
-                            if (pre) {
-                                xhr.responseText = pre.textContent ? pre.textContent : pre.innerText;
-                            }
-                            else if (b) {
-                                xhr.responseText = b.textContent ? b.textContent : b.innerText;
-                            }
-                        }
-                    }
-                    else if (dt == 'xml' && !xhr.responseXML && xhr.responseText) {
-                        xhr.responseXML = toXml(xhr.responseText);
-                    }
-
-                    try {
-                        data = httpData(xhr, dt, s);
-                    }
-                    catch (e) {
-                        status = 'parsererror';
-                        xhr.error = errMsg = (e || status);
-                    }
-                }
-                catch (e) {
-                    log('error caught: ', e);
-                    status = 'error';
-                    xhr.error = errMsg = (e || status);
-                }
-
-                if (xhr.aborted) {
-                    log('upload aborted');
-                    status = null;
-                }
-
-                if (xhr.status) { // we've set xhr.status
-                    status = (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) ? 'success' : 'error';
-                }
-
-                // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
-                if (status === 'success') {
-                    if (s.success)
-                        s.success.call(s.context, data, 'success', xhr);
-                    if (g)
-                        $.event.trigger("ajaxSuccess", [xhr, s]);
-                }
-                else if (status) {
-                    if (errMsg === undefined)
-                        errMsg = xhr.statusText;
-                    if (s.error)
-                        s.error.call(s.context, xhr, status, errMsg);
-                    if (g)
-                        $.event.trigger("ajaxError", [xhr, s, errMsg]);
-                }
-
-                if (g)
-                    $.event.trigger("ajaxComplete", [xhr, s]);
-
-                if (g && !--$.active) {
-                    $.event.trigger("ajaxStop");
-                }
-
-                if (s.complete)
-                    s.complete.call(s.context, xhr, status);
-
-                callbackProcessed = true;
-                if (s.timeout)
-                    clearTimeout(timeoutHandle);
-
-                // clean up
-                setTimeout(function () {
-                    if (!s.iframeTarget)
-                        $io.remove();
-                    xhr.responseXML = null;
-                }, 100);
-            }
-
-            var toXml = $.parseXML || function (s, doc) { // use parseXML if available (jQuery 1.5+)
-                if (window.ActiveXObject) {
-                    doc = new ActiveXObject('Microsoft.XMLDOM');
-                    doc.async = 'false';
-                    doc.loadXML(s);
-                }
-                else {
-                    doc = (new DOMParser()).parseFromString(s, 'text/xml');
-                }
-                return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null;
-            };
-            var parseJSON = $.parseJSON || function (s) {
-                /*jslint evil:true */
-                return window['eval']('(' + s + ')');
-            };
-
-            var httpData = function (xhr, type, s) { // mostly lifted from jq1.4.4
-
-                var ct = xhr.getResponseHeader('content-type') || '',
-                        xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,
-                        data = xml ? xhr.responseXML : xhr.responseText;
-
-                if (xml && data.documentElement.nodeName === 'parsererror') {
-                    if ($.error)
-                        $.error('parsererror');
-                }
-                if (s && s.dataFilter) {
-                    data = s.dataFilter(data, type);
-                }
-                if (typeof data === 'string') {
-                    if (type === 'json' || !type && ct.indexOf('json') >= 0) {
-                        data = parseJSON(data);
-                    } else if (type === "script" || !type && ct.indexOf("javascript") >= 0) {
-                        $.globalEval(data);
-                    }
-                }
-                return data;
-            };
-        }
-    };
-
-    /**
-     * ajaxForm() provides a mechanism for fully automating form submission.
-     *
-     * The advantages of using this method instead of ajaxSubmit() are:
-     *
-     * 1: This method will include coordinates for <input type="image" /> elements (if the element
-     *    is used to submit the form).
-     * 2. This method will include the submit element's name/value data (for the element that was
-     *    used to submit the form).
-     * 3. This method binds the submit() method to the form for you.
-     *
-     * The options argument for ajaxForm works exactly as it does for ajaxSubmit.  ajaxForm merely
-     * passes the options argument along after properly binding events for submit elements and
-     * the form itself.
-     */
-    $.fn.ajaxForm = function (options) {
-        options = options || {};
-        options.delegation = options.delegation && $.isFunction($.fn.on);
-
-        // in jQuery 1.3+ we can fix mistakes with the ready state
-        if (!options.delegation && this.length === 0) {
-            var o = {s: this.selector, c: this.context};
-            if (!$.isReady && o.s) {
-                log('DOM not ready, queuing ajaxForm');
-                $(function () {
-                    $(o.s, o.c).ajaxForm(options);
-                });
-                return this;
-            }
-            // is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
-            log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
-            return this;
-        }
-
-        if (options.delegation) {
-            $(document)
-                    .off('submit.form-plugin', this.selector, doAjaxSubmit)
-                    .off('click.form-plugin', this.selector, captureSubmittingElement)
-                    .on('submit.form-plugin', this.selector, options, doAjaxSubmit)
-                    .on('click.form-plugin', this.selector, options, captureSubmittingElement);
-            return this;
-        }
-
-        return this.ajaxFormUnbind()
-                .bind('submit.form-plugin', options, doAjaxSubmit)
-                .bind('click.form-plugin', options, captureSubmittingElement);
-    };
-
-// private event handlers    
-    function doAjaxSubmit(e) {
-        /*jshint validthis:true */
-        var options = e.data;
-        if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
-            e.preventDefault();
-            $(this).ajaxSubmit(options);
-        }
-    }
-
-    function captureSubmittingElement(e) {
-        /*jshint validthis:true */
-        var target = e.target;
-        var $el = $(target);
-        if (!($el.is(":submit,input:image"))) {
-            // is this a child element of the submit el?  (ex: a span within a button)
-            var t = $el.closest(':submit');
-            if (t.length === 0) {
-                return;
-            }
-            target = t[0];
-        }
-        var form = this;
-        form.clk = target;
-        if (target.type == 'image') {
-            if (e.offsetX !== undefined) {
-                form.clk_x = e.offsetX;
-                form.clk_y = e.offsetY;
-            } else if (typeof $.fn.offset == 'function') {
-                var offset = $el.offset();
-                form.clk_x = e.pageX - offset.left;
-                form.clk_y = e.pageY - offset.top;
-            } else {
-                form.clk_x = e.pageX - target.offsetLeft;
-                form.clk_y = e.pageY - target.offsetTop;
-            }
-        }
-        // clear form vars
-        setTimeout(function () {
-            form.clk = form.clk_x = form.clk_y = null;
-        }, 100);
-    }
-
-
-// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
-    $.fn.ajaxFormUnbind = function () {
-        return this.unbind('submit.form-plugin click.form-plugin');
-    };
-
-    /**
-     * formToArray() gathers form element data into an array of objects that can
-     * be passed to any of the following ajax functions: $.get, $.post, or load.
-     * Each object in the array has both a 'name' and 'value' property.  An example of
-     * an array for a simple login form might be:
-     *
-     * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
-     *
-     * It is this array that is passed to pre-submit callback functions provided to the
-     * ajaxSubmit() and ajaxForm() methods.
-     */
-    $.fn.formToArray = function (semantic, elements) {
-        var a = [];
-        if (this.length === 0) {
-            return a;
-        }
-
-        var form = this[0];
-        var els = semantic ? form.getElementsByTagName('*') : form.elements;
-        if (!els) {
-            return a;
-        }
-
-        var i, j, n, v, el, max, jmax;
-        for (i = 0, max = els.length; i < max; i++) {
-            el = els[i];
-            n = el.name;
-            if (!n) {
-                continue;
-            }
-
-            if (semantic && form.clk && el.type == "image") {
-                // handle image inputs on the fly when semantic == true
-                if (!el.disabled && form.clk == el) {
-                    a.push({name: n, value: $(el).val(), type: el.type});
-                    a.push({name: n + '.x', value: form.clk_x}, {name: n + '.y', value: form.clk_y});
-                }
-                continue;
-            }
-
-            v = $.fieldValue(el, true);
-            if (v && v.constructor == Array) {
-                if (elements)
-                    elements.push(el);
-                for (j = 0, jmax = v.length; j < jmax; j++) {
-                    a.push({name: n, value: v[j]});
-                }
-            }
-            else if (feature.fileapi && el.type == 'file' && !el.disabled) {
-                if (elements)
-                    elements.push(el);
-                var files = el.files;
-                if (files.length) {
-                    for (j = 0; j < files.length; j++) {
-                        a.push({name: n, value: files[j], type: el.type});
-                    }
-                }
-                else {
-                    // #180
-                    a.push({name: n, value: '', type: el.type});
-                }
-            }
-            else if (v !== null && typeof v != 'undefined') {
-                if (elements)
-                    elements.push(el);
-                a.push({name: n, value: v, type: el.type, required: el.required});
-            }
-        }
-
-        if (!semantic && form.clk) {
-            // input type=='image' are not found in elements array! handle it here
-            var $input = $(form.clk), input = $input[0];
-            n = input.name;
-            if (n && !input.disabled && input.type == 'image') {
-                a.push({name: n, value: $input.val()});
-                a.push({name: n + '.x', value: form.clk_x}, {name: n + '.y', value: form.clk_y});
-            }
-        }
-        return a;
-    };
-
-    /**
-     * Serializes form data into a 'submittable' string. This method will return a string
-     * in the format: name1=value1&amp;name2=value2
-     */
-    $.fn.formSerialize = function (semantic) {
-        //hand off to jQuery.param for proper encoding
-        return $.param(this.formToArray(semantic));
-    };
-
-    /**
-     * Serializes all field elements in the jQuery object into a query string.
-     * This method will return a string in the format: name1=value1&amp;name2=value2
-     */
-    $.fn.fieldSerialize = function (successful) {
-        var a = [];
-        this.each(function () {
-            var n = this.name;
-            if (!n) {
-                return;
-            }
-            var v = $.fieldValue(this, successful);
-            if (v && v.constructor == Array) {
-                for (var i = 0, max = v.length; i < max; i++) {
-                    a.push({name: n, value: v[i]});
-                }
-            }
-            else if (v !== null && typeof v != 'undefined') {
-                a.push({name: this.name, value: v});
-            }
-        });
-        //hand off to jQuery.param for proper encoding
-        return $.param(a);
-    };
-
-    /**
-     * Returns the value(s) of the element in the matched set.  For example, consider the following form:
-     *
-     *  <form><fieldset>
-     *      <input name="A" type="text" />
-     *      <input name="A" type="text" />
-     *      <input name="B" type="checkbox" value="B1" />
-     *      <input name="B" type="checkbox" value="B2"/>
-     *      <input name="C" type="radio" value="C1" />
-     *      <input name="C" type="radio" value="C2" />
-     *  </fieldset></form>
-     *
-     *  var v = $(':text').fieldValue();
-     *  // if no values are entered into the text inputs
-     *  v == ['','']
-     *  // if values entered into the text inputs are 'foo' and 'bar'
-     *  v == ['foo','bar']
-     *
-     *  var v = $(':checkbox').fieldValue();
-     *  // if neither checkbox is checked
-     *  v === undefined
-     *  // if both checkboxes are checked
-     *  v == ['B1', 'B2']
-     *
-     *  var v = $(':radio').fieldValue();
-     *  // if neither radio is checked
-     *  v === undefined
-     *  // if first radio is checked
-     *  v == ['C1']
-     *
-     * The successful argument controls whether or not the field element must be 'successful'
-     * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
-     * The default value of the successful argument is true.  If this value is false the value(s)
-     * for each element is returned.
-     *
-     * Note: This method *always* returns an array.  If no valid value can be determined the
-     *    array will be empty, otherwise it will contain one or more values.
-     */
-    $.fn.fieldValue = function (successful) {
-        for (var val = [], i = 0, max = this.length; i < max; i++) {
-            var el = this[i];
-            var v = $.fieldValue(el, successful);
-            if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) {
-                continue;
-            }
-            if (v.constructor == Array)
-                $.merge(val, v);
-            else
-                val.push(v);
-        }
-        return val;
-    };
-
-    /**
-     * Returns the value of the field element.
-     */
-    $.fieldValue = function (el, successful) {
-        var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
-        if (successful === undefined) {
-            successful = true;
-        }
-
-        if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
-                (t == 'checkbox' || t == 'radio') && !el.checked ||
-                (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
-                tag == 'select' && el.selectedIndex == -1)) {
-            return null;
-        }
-
-        if (tag == 'select') {
-            var index = el.selectedIndex;
-            if (index < 0) {
-                return null;
-            }
-            var a = [], ops = el.options;
-            var one = (t == 'select-one');
-            var max = (one ? index + 1 : ops.length);
-            for (var i = (one ? index : 0); i < max; i++) {
-                var op = ops[i];
-                if (op.selected) {
-                    var v = op.value;
-                    if (!v) { // extra pain for IE...
-                        v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
-                    }
-                    if (one) {
-                        return v;
-                    }
-                    a.push(v);
-                }
-            }
-            return a;
-        }
-        return $(el).val();
-    };
-
-    /**
-     * Clears the form data.  Takes the following actions on the form's input fields:
-     *  - input text fields will have their 'value' property set to the empty string
-     *  - select elements will have their 'selectedIndex' property set to -1
-     *  - checkbox and radio inputs will have their 'checked' property set to false
-     *  - inputs of type submit, button, reset, and hidden will *not* be effected
-     *  - button elements will *not* be effected
-     */
-    $.fn.clearForm = function (includeHidden) {
-        return this.each(function () {
-            $('input,select,textarea', this).clearFields(includeHidden);
-        });
-    };
-
-    /**
-     * Clears the selected form elements.
-     */
-    $.fn.clearFields = $.fn.clearInputs = function (includeHidden) {
-        var re = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i; // 'hidden' is not in this list
-        return this.each(function () {
-            var t = this.type, tag = this.tagName.toLowerCase();
-            if (re.test(t) || tag == 'textarea') {
-                this.value = '';
-            }
-            else if (t == 'checkbox' || t == 'radio') {
-                this.checked = false;
-            }
-            else if (tag == 'select') {
-                this.selectedIndex = -1;
-            }
-            else if (includeHidden) {
-                // includeHidden can be the value true, or it can be a selector string
-                // indicating a special test; for example:
-                //  $('#myForm').clearForm('.special:hidden')
-                // the above would clean hidden inputs that have the class of 'special'
-                if ((includeHidden === true && /hidden/.test(t)) ||
-                        (typeof includeHidden == 'string' && $(this).is(includeHidden)))
-                    this.value = '';
-            }
-        });
-    };
-
-    /**
-     * Resets the form data.  Causes all form elements to be reset to their original value.
-     */
-    $.fn.resetForm = function () {
-        return this.each(function () {
-            // guard against an input with the name of 'reset'
-            // note that IE reports the reset function as an 'object'
-            if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) {
-                this.reset();
-            }
-        });
-    };
-
-    /**
-     * Enables or disables any matching elements.
-     */
-    $.fn.enable = function (b) {
-        if (b === undefined) {
-            b = true;
-        }
-        return this.each(function () {
-            this.disabled = !b;
-        });
-    };
-
-    /**
-     * Checks/unchecks any matching checkboxes or radio buttons and
-     * selects/deselects and matching option elements.
-     */
-    $.fn.selected = function (select) {
-        if (select === undefined) {
-            select = true;
-        }
-        return this.each(function () {
-            var t = this.type;
-            if (t == 'checkbox' || t == 'radio') {
-                this.checked = select;
-            }
-            else if (this.tagName.toLowerCase() == 'option') {
-                var $sel = $(this).parent('select');
-                if (select && $sel[0] && $sel[0].type == 'select-one') {
-                    // deselect all other options
-                    $sel.find('option').selected(false);
-                }
-                this.selected = select;
-            }
-        });
-    };
-
-// expose debug var
-    $.fn.ajaxSubmit.debug = false;
-
-// helper fn for console logging
-    function log() {
-        if (!$.fn.ajaxSubmit.debug)
-            return;
-        var msg = '[jquery.form] ' + Array.prototype.join.call(arguments, '');
-        if (window.console && window.console.log) {
-            window.console.log(msg);
-        }
-        else if (window.opera && window.opera.postError) {
-            window.opera.postError(msg);
-        }
-    }
-
-})(jQuery);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.form.min.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.form.min.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.form.min.js
new file mode 100644
index 0000000..7321a3b
--- /dev/null
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.form.min.js
@@ -0,0 +1,11 @@
+/*!
+ * jQuery Form Plugin
+ * version: 3.51.0-2014.06.20
+ * Requires jQuery v1.5 or later
+ * Copyright (c) 2014 M. Alsup
+ * Examples and documentation at: http://malsup.com/jquery/form/
+ * Project repository: https://github.com/malsup/form
+ * Dual licensed under the MIT and GPL licenses.
+ * https://github.com/malsup/form#copyright-and-license
+ */
+!function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):e("undefined"!=typeof jQuery?jQuery:window.Zepto)}(function(e){"use strict";function t(t){var r=t.data;t.isDefaultPrevented()||(t.preventDefault(),e(t.target).ajaxSubmit(r))}function r(t){var r=t.target,a=e(r);if(!a.is("[type=submit],[type=image]")){var n=a.closest("[type=submit]");if(0===n.length)return;r=n[0]}var i=this;if(i.clk=r,"image"==r.type)if(void 0!==t.offsetX)i.clk_x=t.offsetX,i.clk_y=t.offsetY;else if("function"==typeof e.fn.offset){var o=a.offset();i.clk_x=t.pageX-o.left,i.clk_y=t.pageY-o.top}else i.clk_x=t.pageX-r.offsetLeft,i.clk_y=t.pageY-r.offsetTop;setTimeout(function(){i.clk=i.clk_x=i.clk_y=null},100)}function a(){if(e.fn.ajaxSubmit.debug){var t="[jquery.form] "+Array.prototype.join.call(arguments,"");window.console&&window.console.log?window.console.log(t):window.opera&&window.opera.postError&&window.opera.postError(t)}}var n={};n.fileapi=void 0!==e("<input type='file'/>").get(0)
 .files,n.formdata=void 0!==window.FormData;var i=!!e.fn.prop;e.fn.attr2=function(){if(!i)return this.attr.apply(this,arguments);var e=this.prop.apply(this,arguments);return e&&e.jquery||"string"==typeof e?e:this.attr.apply(this,arguments)},e.fn.ajaxSubmit=function(t){function r(r){var a,n,i=e.param(r,t.traditional).split("&"),o=i.length,s=[];for(a=0;o>a;a++)i[a]=i[a].replace(/\+/g," "),n=i[a].split("="),s.push([decodeURIComponent(n[0]),decodeURIComponent(n[1])]);return s}function o(a){for(var n=new FormData,i=0;i<a.length;i++)n.append(a[i].name,a[i].value);if(t.extraData){var o=r(t.extraData);for(i=0;i<o.length;i++)o[i]&&n.append(o[i][0],o[i][1])}t.data=null;var s=e.extend(!0,{},e.ajaxSettings,t,{contentType:!1,processData:!1,cache:!1,type:u||"POST"});t.uploadProgress&&(s.xhr=function(){var r=e.ajaxSettings.xhr();return r.upload&&r.upload.addEventListener("progress",function(e){var r=0,a=e.loaded||e.position,n=e.total;e.lengthComputable&&(r=Math.ceil(a/n*100)),t.uploadProgress(e,a,n
 ,r)},!1),r}),s.data=null;var c=s.beforeSend;return s.beforeSend=function(e,r){r.data=t.formData?t.formData:n,c&&c.call(this,e,r)},e.ajax(s)}function s(r){function n(e){var t=null;try{e.contentWindow&&(t=e.contentWindow.document)}catch(r){a("cannot get iframe.contentWindow document: "+r)}if(t)return t;try{t=e.contentDocument?e.contentDocument:e.document}catch(r){a("cannot get iframe.contentDocument: "+r),t=e.document}return t}function o(){function t(){try{var e=n(g).readyState;a("state = "+e),e&&"uninitialized"==e.toLowerCase()&&setTimeout(t,50)}catch(r){a("Server abort: ",r," (",r.name,")"),s(k),j&&clearTimeout(j),j=void 0}}var r=f.attr2("target"),i=f.attr2("action"),o="multipart/form-data",c=f.attr("enctype")||f.attr("encoding")||o;w.setAttribute("target",p),(!u||/post/i.test(u))&&w.setAttribute("method","POST"),i!=m.url&&w.setAttribute("action",m.url),m.skipEncodingOverride||u&&!/post/i.test(u)||f.attr({encoding:"multipart/form-data",enctype:"multipart/form-data"}),m.timeout&&(j=s
 etTimeout(function(){T=!0,s(D)},m.timeout));var l=[];try{if(m.extraData)for(var d in m.extraData)m.extraData.hasOwnProperty(d)&&l.push(e.isPlainObject(m.extraData[d])&&m.extraData[d].hasOwnProperty("name")&&m.extraData[d].hasOwnProperty("value")?e('<input type="hidden" name="'+m.extraData[d].name+'">').val(m.extraData[d].value).appendTo(w)[0]:e('<input type="hidden" name="'+d+'">').val(m.extraData[d]).appendTo(w)[0]);m.iframeTarget||v.appendTo("body"),g.attachEvent?g.attachEvent("onload",s):g.addEventListener("load",s,!1),setTimeout(t,15);try{w.submit()}catch(h){var x=document.createElement("form").submit;x.apply(w)}}finally{w.setAttribute("action",i),w.setAttribute("enctype",c),r?w.setAttribute("target",r):f.removeAttr("target"),e(l).remove()}}function s(t){if(!x.aborted&&!F){if(M=n(g),M||(a("cannot access response document"),t=k),t===D&&x)return x.abort("timeout"),void S.reject(x,"timeout");if(t==k&&x)return x.abort("server abort"),void S.reject(x,"error","server abort");if(M&&M.l
 ocation.href!=m.iframeSrc||T){g.detachEvent?g.detachEvent("onload",s):g.removeEventListener("load",s,!1);var r,i="success";try{if(T)throw"timeout";var o="xml"==m.dataType||M.XMLDocument||e.isXMLDoc(M);if(a("isXml="+o),!o&&window.opera&&(null===M.body||!M.body.innerHTML)&&--O)return a("requeing onLoad callback, DOM not available"),void setTimeout(s,250);var u=M.body?M.body:M.documentElement;x.responseText=u?u.innerHTML:null,x.responseXML=M.XMLDocument?M.XMLDocument:M,o&&(m.dataType="xml"),x.getResponseHeader=function(e){var t={"content-type":m.dataType};return t[e.toLowerCase()]},u&&(x.status=Number(u.getAttribute("status"))||x.status,x.statusText=u.getAttribute("statusText")||x.statusText);var c=(m.dataType||"").toLowerCase(),l=/(json|script|text)/.test(c);if(l||m.textarea){var f=M.getElementsByTagName("textarea")[0];if(f)x.responseText=f.value,x.status=Number(f.getAttribute("status"))||x.status,x.statusText=f.getAttribute("statusText")||x.statusText;else if(l){var p=M.getElementsBy
 TagName("pre")[0],h=M.getElementsByTagName("body")[0];p?x.responseText=p.textContent?p.textContent:p.innerText:h&&(x.responseText=h.textContent?h.textContent:h.innerText)}}else"xml"==c&&!x.responseXML&&x.responseText&&(x.responseXML=X(x.responseText));try{E=_(x,c,m)}catch(y){i="parsererror",x.error=r=y||i}}catch(y){a("error caught: ",y),i="error",x.error=r=y||i}x.aborted&&(a("upload aborted"),i=null),x.status&&(i=x.status>=200&&x.status<300||304===x.status?"success":"error"),"success"===i?(m.success&&m.success.call(m.context,E,"success",x),S.resolve(x.responseText,"success",x),d&&e.event.trigger("ajaxSuccess",[x,m])):i&&(void 0===r&&(r=x.statusText),m.error&&m.error.call(m.context,x,i,r),S.reject(x,"error",r),d&&e.event.trigger("ajaxError",[x,m,r])),d&&e.event.trigger("ajaxComplete",[x,m]),d&&!--e.active&&e.event.trigger("ajaxStop"),m.complete&&m.complete.call(m.context,x,i),F=!0,m.timeout&&clearTimeout(j),setTimeout(function(){m.iframeTarget?v.attr("src",m.iframeSrc):v.remove(),x.r
 esponseXML=null},100)}}}var c,l,m,d,p,v,g,x,y,b,T,j,w=f[0],S=e.Deferred();if(S.abort=function(e){x.abort(e)},r)for(l=0;l<h.length;l++)c=e(h[l]),i?c.prop("disabled",!1):c.removeAttr("disabled");if(m=e.extend(!0,{},e.ajaxSettings,t),m.context=m.context||m,p="jqFormIO"+(new Date).getTime(),m.iframeTarget?(v=e(m.iframeTarget),b=v.attr2("name"),b?p=b:v.attr2("name",p)):(v=e('<iframe name="'+p+'" src="'+m.iframeSrc+'" />'),v.css({position:"absolute",top:"-1000px",left:"-1000px"})),g=v[0],x={aborted:0,responseText:null,responseXML:null,status:0,statusText:"n/a",getAllResponseHeaders:function(){},getResponseHeader:function(){},setRequestHeader:function(){},abort:function(t){var r="timeout"===t?"timeout":"aborted";a("aborting upload... "+r),this.aborted=1;try{g.contentWindow.document.execCommand&&g.contentWindow.document.execCommand("Stop")}catch(n){}v.attr("src",m.iframeSrc),x.error=r,m.error&&m.error.call(m.context,x,r,t),d&&e.event.trigger("ajaxError",[x,m,r]),m.complete&&m.complete.call(
 m.context,x,r)}},d=m.global,d&&0===e.active++&&e.event.trigger("ajaxStart"),d&&e.event.trigger("ajaxSend",[x,m]),m.beforeSend&&m.beforeSend.call(m.context,x,m)===!1)return m.global&&e.active--,S.reject(),S;if(x.aborted)return S.reject(),S;y=w.clk,y&&(b=y.name,b&&!y.disabled&&(m.extraData=m.extraData||{},m.extraData[b]=y.value,"image"==y.type&&(m.extraData[b+".x"]=w.clk_x,m.extraData[b+".y"]=w.clk_y)));var D=1,k=2,A=e("meta[name=csrf-token]").attr("content"),L=e("meta[name=csrf-param]").attr("content");L&&A&&(m.extraData=m.extraData||{},m.extraData[L]=A),m.forceSync?o():setTimeout(o,10);var E,M,F,O=50,X=e.parseXML||function(e,t){return window.ActiveXObject?(t=new ActiveXObject("Microsoft.XMLDOM"),t.async="false",t.loadXML(e)):t=(new DOMParser).parseFromString(e,"text/xml"),t&&t.documentElement&&"parsererror"!=t.documentElement.nodeName?t:null},C=e.parseJSON||function(e){return window.eval("("+e+")")},_=function(t,r,a){var n=t.getResponseHeader("content-type")||"",i="xml"===r||!r&&n.i
 ndexOf("xml")>=0,o=i?t.responseXML:t.responseText;return i&&"parsererror"===o.documentElement.nodeName&&e.error&&e.error("parsererror"),a&&a.dataFilter&&(o=a.dataFilter(o,r)),"string"==typeof o&&("json"===r||!r&&n.indexOf("json")>=0?o=C(o):("script"===r||!r&&n.indexOf("javascript")>=0)&&e.globalEval(o)),o};return S}if(!this.length)return a("ajaxSubmit: skipping submit process - no element selected"),this;var u,c,l,f=this;"function"==typeof t?t={success:t}:void 0===t&&(t={}),u=t.type||this.attr2("method"),c=t.url||this.attr2("action"),l="string"==typeof c?e.trim(c):"",l=l||window.location.href||"",l&&(l=(l.match(/^([^#]+)/)||[])[1]),t=e.extend(!0,{url:l,success:e.ajaxSettings.success,type:u||e.ajaxSettings.type,iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank"},t);var m={};if(this.trigger("form-pre-serialize",[this,t,m]),m.veto)return a("ajaxSubmit: submit vetoed via form-pre-serialize trigger"),this;if(t.beforeSerialize&&t.beforeSerialize(this,t)===
 !1)return a("ajaxSubmit: submit aborted via beforeSerialize callback"),this;var d=t.traditional;void 0===d&&(d=e.ajaxSettings.traditional);var p,h=[],v=this.formToArray(t.semantic,h);if(t.data&&(t.extraData=t.data,p=e.param(t.data,d)),t.beforeSubmit&&t.beforeSubmit(v,this,t)===!1)return a("ajaxSubmit: submit aborted via beforeSubmit callback"),this;if(this.trigger("form-submit-validate",[v,this,t,m]),m.veto)return a("ajaxSubmit: submit vetoed via form-submit-validate trigger"),this;var g=e.param(v,d);p&&(g=g?g+"&"+p:p),"GET"==t.type.toUpperCase()?(t.url+=(t.url.indexOf("?")>=0?"&":"?")+g,t.data=null):t.data=g;var x=[];if(t.resetForm&&x.push(function(){f.resetForm()}),t.clearForm&&x.push(function(){f.clearForm(t.includeHidden)}),!t.dataType&&t.target){var y=t.success||function(){};x.push(function(r){var a=t.replaceTarget?"replaceWith":"html";e(t.target)[a](r).each(y,arguments)})}else t.success&&x.push(t.success);if(t.success=function(e,r,a){for(var n=t.context||this,i=0,o=x.length;o>
 i;i++)x[i].apply(n,[e,r,a||f,f])},t.error){var b=t.error;t.error=function(e,r,a){var n=t.context||this;b.apply(n,[e,r,a,f])}}if(t.complete){var T=t.complete;t.complete=function(e,r){var a=t.context||this;T.apply(a,[e,r,f])}}var j=e("input[type=file]:enabled",this).filter(function(){return""!==e(this).val()}),w=j.length>0,S="multipart/form-data",D=f.attr("enctype")==S||f.attr("encoding")==S,k=n.fileapi&&n.formdata;a("fileAPI :"+k);var A,L=(w||D)&&!k;t.iframe!==!1&&(t.iframe||L)?t.closeKeepAlive?e.get(t.closeKeepAlive,function(){A=s(v)}):A=s(v):A=(w||D)&&k?o(v):e.ajax(t),f.removeData("jqxhr").data("jqxhr",A);for(var E=0;E<h.length;E++)h[E]=null;return this.trigger("form-submit-notify",[this,t]),this},e.fn.ajaxForm=function(n){if(n=n||{},n.delegation=n.delegation&&e.isFunction(e.fn.on),!n.delegation&&0===this.length){var i={s:this.selector,c:this.context};return!e.isReady&&i.s?(a("DOM not ready, queuing ajaxForm"),e(function(){e(i.s,i.c).ajaxForm(n)}),this):(a("terminating; zero elemen
 ts found by selector"+(e.isReady?"":" (DOM not ready)")),this)}return n.delegation?(e(document).off("submit.form-plugin",this.selector,t).off("click.form-plugin",this.selector,r).on("submit.form-plugin",this.selector,n,t).on("click.form-plugin",this.selector,n,r),this):this.ajaxFormUnbind().bind("submit.form-plugin",n,t).bind("click.form-plugin",n,r)},e.fn.ajaxFormUnbind=function(){return this.unbind("submit.form-plugin click.form-plugin")},e.fn.formToArray=function(t,r){var a=[];if(0===this.length)return a;var i,o=this[0],s=this.attr("id"),u=t?o.getElementsByTagName("*"):o.elements;if(u&&!/MSIE [678]/.test(navigator.userAgent)&&(u=e(u).get()),s&&(i=e(':input[form="'+s+'"]').get(),i.length&&(u=(u||[]).concat(i))),!u||!u.length)return a;var c,l,f,m,d,p,h;for(c=0,p=u.length;p>c;c++)if(d=u[c],f=d.name,f&&!d.disabled)if(t&&o.clk&&"image"==d.type)o.clk==d&&(a.push({name:f,value:e(d).val(),type:d.type}),a.push({name:f+".x",value:o.clk_x},{name:f+".y",value:o.clk_y}));else if(m=e.fieldValu
 e(d,!0),m&&m.constructor==Array)for(r&&r.push(d),l=0,h=m.length;h>l;l++)a.push({name:f,value:m[l]});else if(n.fileapi&&"file"==d.type){r&&r.push(d);var v=d.files;if(v.length)for(l=0;l<v.length;l++)a.push({name:f,value:v[l],type:d.type});else a.push({name:f,value:"",type:d.type})}else null!==m&&"undefined"!=typeof m&&(r&&r.push(d),a.push({name:f,value:m,type:d.type,required:d.required}));if(!t&&o.clk){var g=e(o.clk),x=g[0];f=x.name,f&&!x.disabled&&"image"==x.type&&(a.push({name:f,value:g.val()}),a.push({name:f+".x",value:o.clk_x},{name:f+".y",value:o.clk_y}))}return a},e.fn.formSerialize=function(t){return e.param(this.formToArray(t))},e.fn.fieldSerialize=function(t){var r=[];return this.each(function(){var a=this.name;if(a){var n=e.fieldValue(this,t);if(n&&n.constructor==Array)for(var i=0,o=n.length;o>i;i++)r.push({name:a,value:n[i]});else null!==n&&"undefined"!=typeof n&&r.push({name:this.name,value:n})}}),e.param(r)},e.fn.fieldValue=function(t){for(var r=[],a=0,n=this.length;n>a;a
 ++){var i=this[a],o=e.fieldValue(i,t);null===o||"undefined"==typeof o||o.constructor==Array&&!o.length||(o.constructor==Array?e.merge(r,o):r.push(o))}return r},e.fieldValue=function(t,r){var a=t.name,n=t.type,i=t.tagName.toLowerCase();if(void 0===r&&(r=!0),r&&(!a||t.disabled||"reset"==n||"button"==n||("checkbox"==n||"radio"==n)&&!t.checked||("submit"==n||"image"==n)&&t.form&&t.form.clk!=t||"select"==i&&-1==t.selectedIndex))return null;if("select"==i){var o=t.selectedIndex;if(0>o)return null;for(var s=[],u=t.options,c="select-one"==n,l=c?o+1:u.length,f=c?o:0;l>f;f++){var m=u[f];if(m.selected){var d=m.value;if(d||(d=m.attributes&&m.attributes.value&&!m.attributes.value.specified?m.text:m.value),c)return d;s.push(d)}}return s}return e(t).val()},e.fn.clearForm=function(t){return this.each(function(){e("input,select,textarea",this).clearFields(t)})},e.fn.clearFields=e.fn.clearInputs=function(t){var r=/^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week
 )$/i;return this.each(function(){var a=this.type,n=this.tagName.toLowerCase();r.test(a)||"textarea"==n?this.value="":"checkbox"==a||"radio"==a?this.checked=!1:"select"==n?this.selectedIndex=-1:"file"==a?/MSIE/.test(navigator.userAgent)?e(this).replaceWith(e(this).clone(!0)):e(this).val(""):t&&(t===!0&&/hidden/.test(a)||"string"==typeof t&&e(this).is(t))&&(this.value="")})},e.fn.resetForm=function(){return this.each(function(){("function"==typeof this.reset||"object"==typeof this.reset&&!this.reset.nodeType)&&this.reset()})},e.fn.enable=function(e){return void 0===e&&(e=!0),this.each(function(){this.disabled=!e})},e.fn.selected=function(t){return void 0===t&&(t=!0),this.each(function(){var r=this.type;if("checkbox"==r||"radio"==r)this.checked=t;else if("option"==this.tagName.toLowerCase()){var a=e(this).parent("select");t&&a[0]&&"select-one"==a[0].type&&a.find("option").selected(!1),this.selected=t}})},e.fn.ajaxSubmit.debug=!1});
\ No newline at end of file


[40/50] [abbrv] incubator-nifi git commit: NIFI-27: - Upgrading jQuery and jQuery UI. - Replacing all instances of Deferred.then with Deferred.done/fail due to API change introduced in 1.8. - Restoring line returns between public methods. - Upgrading jqu

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.min.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.min.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.min.js
index d06749e..938d85e 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.min.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/minicolors/jquery.minicolors.min.js
@@ -1,420 +1,11 @@
 /*
  * jQuery MiniColors: A tiny color picker built on jQuery
  *
- * Copyright Cory LaViska for A Beautiful Site, LLC. (http://www.abeautifulsite.net/)
+ * Copyright: Cory LaViska for A Beautiful Site, LLC
  *
- * Licensed under the MIT license: http://opensource.org/licenses/MIT
+ * Contributions and bug reports: https://github.com/claviska/jquery-minicolors
  *
- */jQuery && function (e) {
-    function t(t, n) {
-        var r = e('<div class="minicolors" />'), i = e.minicolors.defaults;
-        if (t.data("minicolors-initialized"))
-            return;
-        n = e.extend(!0, {}, i, n);
-        r.addClass("minicolors-theme-" + n.theme).toggleClass("minicolors-with-opacity", n.opacity);
-        n.position !== undefined && e.each(n.position.split(" "), function () {
-            r.addClass("minicolors-position-" + this)
-        });
-        t.addClass("minicolors-input").data("minicolors-initialized", !1).data("minicolors-settings", n).prop("size", 7).wrap(r).after('<div class="minicolors-panel minicolors-slider-' + n.control + '">' + '<div class="minicolors-slider">' + '<div class="minicolors-picker"></div>' + "</div>" + '<div class="minicolors-opacity-slider">' + '<div class="minicolors-picker"></div>' + "</div>" + '<div class="minicolors-grid">' + '<div class="minicolors-grid-inner"></div>' + '<div class="minicolors-picker"><div></div></div>' + "</div>" + "</div>");
-        if (!n.inline) {
-            t.after('<span class="minicolors-swatch"><span class="minicolors-swatch-color"></span></span>');
-            t.next(".minicolors-swatch").on("click", function (e) {
-                e.preventDefault();
-                t.focus()
-            })
-        }
-        t.parent().find(".minicolors-panel").on("selectstart", function () {
-            return!1
-        }).end();
-        n.inline && t.parent().addClass("minicolors-inline");
-        u(t, !1);
-        t.data("minicolors-initialized", !0)
-    }
-    function n(e) {
-        var t = e.parent();
-        e.removeData("minicolors-initialized").removeData("minicolors-settings").removeProp("size").removeClass("minicolors-input");
-        t.before(e).remove()
-    }
-    function r(e) {
-        var t = e.parent(), n = t.find(".minicolors-panel"), r = e.data("minicolors-settings");
-        if (!e.data("minicolors-initialized") || e.prop("disabled") || t.hasClass("minicolors-inline") || t.hasClass("minicolors-focus"))
-            return;
-        i();
-        t.addClass("minicolors-focus");
-        n.stop(!0, !0).fadeIn(r.showSpeed, function () {
-            r.show && r.show.call(e.get(0))
-        })
-    }
-    function i() {
-        e(".minicolors-focus").each(function () {
-            var t = e(this), n = t.find(".minicolors-input"), r = t.find(".minicolors-panel"), i = n.data("minicolors-settings");
-            r.fadeOut(i.hideSpeed, function () {
-                i.hide && i.hide.call(n.get(0));
-                t.removeClass("minicolors-focus")
-            })
-        })
-    }
-    function s(e, t, n) {
-        var r = e.parents(".minicolors").find(".minicolors-input"), i = r.data("minicolors-settings"), s = e.find("[class$=-picker]"), u = e.offset().left, a = e.offset().top, f = Math.round(t.pageX - u), l = Math.round(t.pageY - a), c = n ? i.animationSpeed : 0, h, p, d, v;
-        if (t.originalEvent.changedTouches) {
-            f = t.originalEvent.changedTouches[0].pageX - u;
-            l = t.originalEvent.changedTouches[0].pageY - a
-        }
-        f < 0 && (f = 0);
-        l < 0 && (l = 0);
-        f > e.width() && (f = e.width());
-        l > e.height() && (l = e.height());
-        if (e.parent().is(".minicolors-slider-wheel") && s.parent().is(".minicolors-grid")) {
-            h = 75 - f;
-            p = 75 - l;
-            d = Math.sqrt(h * h + p * p);
-            v = Math.atan2(p, h);
-            v < 0 && (v += Math.PI * 2);
-            if (d > 75) {
-                d = 75;
-                f = 75 - 75 * Math.cos(v);
-                l = 75 - 75 * Math.sin(v)
-            }
-            f = Math.round(f);
-            l = Math.round(l)
-        }
-        e.is(".minicolors-grid") ? s.stop(!0).animate({top: l + "px", left: f + "px"}, c, i.animationEasing, function () {
-            o(r, e)
-        }) : s.stop(!0).animate({top: l + "px"}, c, i.animationEasing, function () {
-            o(r, e)
-        })
-    }
-    function o(e, t) {
-        function n(e, t) {
-            var n, r;
-            if (!e.length || !t)
-                return null;
-            n = e.offset().left;
-            r = e.offset().top;
-            return{x: n - t.offset().left + e.outerWidth() / 2, y: r - t.offset().top + e.outerHeight() / 2}
-        }
-        var r, i, s, o, u, f, l, h = e.val(), d = e.attr("data-opacity"), v = e.parent(), g = e.data("minicolors-settings"), y = v.find(".minicolors-swatch"), b = v.find(".minicolors-grid"), w = v.find(".minicolors-slider"), E = v.find(".minicolors-opacity-slider"), S = b.find("[class$=-picker]"), x = w.find("[class$=-picker]"), T = E.find("[class$=-picker]"), N = n(S, b), C = n(x, w), k = n(T, E);
-        if (t.is(".minicolors-grid, .minicolors-slider")) {
-            switch (g.control) {
-                case"wheel":
-                    o = b.width() / 2 - N.x;
-                    u = b.height() / 2 - N.y;
-                    f = Math.sqrt(o * o + u * u);
-                    l = Math.atan2(u, o);
-                    l < 0 && (l += Math.PI * 2);
-                    if (f > 75) {
-                        f = 75;
-                        N.x = 69 - 75 * Math.cos(l);
-                        N.y = 69 - 75 * Math.sin(l)
-                    }
-                    i = p(f / .75, 0, 100);
-                    r = p(l * 180 / Math.PI, 0, 360);
-                    s = p(100 - Math.floor(C.y * (100 / w.height())), 0, 100);
-                    h = m({h: r, s: i, b: s});
-                    w.css("backgroundColor", m({h: r, s: i, b: 100}));
-                    break;
-                case"saturation":
-                    r = p(parseInt(N.x * (360 / b.width()), 10), 0, 360);
-                    i = p(100 - Math.floor(C.y * (100 / w.height())), 0, 100);
-                    s = p(100 - Math.floor(N.y * (100 / b.height())), 0, 100);
-                    h = m({h: r, s: i, b: s});
-                    w.css("backgroundColor", m({h: r, s: 100, b: s}));
-                    v.find(".minicolors-grid-inner").css("opacity", i / 100);
-                    break;
-                case"brightness":
-                    r = p(parseInt(N.x * (360 / b.width()), 10), 0, 360);
-                    i = p(100 - Math.floor(N.y * (100 / b.height())), 0, 100);
-                    s = p(100 - Math.floor(C.y * (100 / w.height())), 0, 100);
-                    h = m({h: r, s: i, b: s});
-                    w.css("backgroundColor", m({h: r, s: i, b: 100}));
-                    v.find(".minicolors-grid-inner").css("opacity", 1 - s / 100);
-                    break;
-                default:
-                    r = p(360 - parseInt(C.y * (360 / w.height()), 10), 0, 360);
-                    i = p(Math.floor(N.x * (100 / b.width())), 0, 100);
-                    s = p(100 - Math.floor(N.y * (100 / b.height())), 0, 100);
-                    h = m({h: r, s: i, b: s});
-                    b.css("backgroundColor", m({h: r, s: 100, b: 100}))
-            }
-            e.val(c(h, g.letterCase))
-        }
-        if (t.is(".minicolors-opacity-slider")) {
-            g.opacity ? d = parseFloat(1 - k.y / E.height()).toFixed(2) : d = 1;
-            g.opacity && e.attr("data-opacity", d)
-        }
-        y.find("SPAN").css({backgroundColor: h, opacity: d});
-        a(e, h, d)
-    }
-    function u(e, t) {
-        var n, r, i, s, o, u, f, l = e.parent(), d = e.data("minicolors-settings"), v = l.find(".minicolors-swatch"), y = l.find(".minicolors-grid"), b = l.find(".minicolors-slider"), w = l.find(".minicolors-opacity-slider"), E = y.find("[class$=-picker]"), S = b.find("[class$=-picker]"), x = w.find("[class$=-picker]");
-        n = c(h(e.val(), !0), d.letterCase);
-        n || (n = c(h(d.defaultValue, !0), d.letterCase));
-        r = g(n);
-        t || e.val(n);
-        if (d.opacity) {
-            i = e.attr("data-opacity") === "" ? 1 : p(parseFloat(e.attr("data-opacity")).toFixed(2), 0, 1);
-            isNaN(i) && (i = 1);
-            e.attr("data-opacity", i);
-            v.find("SPAN").css("opacity", i);
-            o = p(w.height() - w.height() * i, 0, w.height());
-            x.css("top", o + "px")
-        }
-        v.find("SPAN").css("backgroundColor", n);
-        switch (d.control) {
-            case"wheel":
-                u = p(Math.ceil(r.s * .75), 0, y.height() / 2);
-                f = r.h * Math.PI / 180;
-                s = p(75 - Math.cos(f) * u, 0, y.width());
-                o = p(75 - Math.sin(f) * u, 0, y.height());
-                E.css({top: o + "px", left: s + "px"});
-                o = 150 - r.b / (100 / y.height());
-                n === "" && (o = 0);
-                S.css("top", o + "px");
-                b.css("backgroundColor", m({h: r.h, s: r.s, b: 100}));
-                break;
-            case"saturation":
-                s = p(5 * r.h / 12, 0, 150);
-                o = p(y.height() - Math.ceil(r.b / (100 / y.height())), 0, y.height());
-                E.css({top: o + "px", left: s + "px"});
-                o = p(b.height() - r.s * (b.height() / 100), 0, b.height());
-                S.css("top", o + "px");
-                b.css("backgroundColor", m({h: r.h, s: 100, b: r.b}));
-                l.find(".minicolors-grid-inner").css("opacity", r.s / 100);
-                break;
-            case"brightness":
-                s = p(5 * r.h / 12, 0, 150);
-                o = p(y.height() - Math.ceil(r.s / (100 / y.height())), 0, y.height());
-                E.css({top: o + "px", left: s + "px"});
-                o = p(b.height() - r.b * (b.height() / 100), 0, b.height());
-                S.css("top", o + "px");
-                b.css("backgroundColor", m({h: r.h, s: r.s, b: 100}));
-                l.find(".minicolors-grid-inner").css("opacity", 1 - r.b / 100);
-                break;
-            default:
-                s = p(Math.ceil(r.s / (100 / y.width())), 0, y.width());
-                o = p(y.height() - Math.ceil(r.b / (100 / y.height())), 0, y.height());
-                E.css({top: o + "px", left: s + "px"});
-                o = p(b.height() - r.h / (360 / b.height()), 0, b.height());
-                S.css("top", o + "px");
-                y.css("backgroundColor", m({h: r.h, s: 100, b: 100}))
-        }
-        e.data("minicolors-initialized") && a(e, n, i)
-    }
-    function a(e, t, n) {
-        var r = e.data("minicolors-settings"), i = e.data("minicolors-lastChange");
-        if (!i || i.hex !== t || i.opacity !== n) {
-            e.data("minicolors-lastChange", {hex: t, opacity: n});
-            if (r.change)
-                if (r.changeDelay) {
-                    clearTimeout(e.data("minicolors-changeTimeout"));
-                    e.data("minicolors-changeTimeout", setTimeout(function () {
-                        r.change.call(e.get(0), t, n)
-                    }, r.changeDelay))
-                } else
-                    r.change.call(e.get(0), t, n);
-            e.trigger("change").trigger("input")
-        }
-    }
-    function f(t) {
-        var n = h(e(t).val(), !0), r = b(n), i = e(t).attr("data-opacity");
-        if (!r)
-            return null;
-        i !== undefined && e.extend(r, {a: parseFloat(i)});
-        return r
-    }
-    function l(t, n) {
-        var r = h(e(t).val(), !0), i = b(r), s = e(t).attr("data-opacity");
-        if (!i)
-            return null;
-        s === undefined && (s = 1);
-        return n ? "rgba(" + i.r + ", " + i.g + ", " + i.b + ", " + parseFloat(s) + ")" : "rgb(" + i.r + ", " + i.g + ", " + i.b + ")"
-    }
-    function c(e, t) {
-        return t === "uppercase" ? e.toUpperCase() : e.toLowerCase()
-    }
-    function h(e, t) {
-        e = e.replace(/[^A-F0-9]/ig, "");
-        if (e.length !== 3 && e.length !== 6)
-            return"";
-        e.length === 3 && t && (e = e[0] + e[0] + e[1] + e[1] + e[2] + e[2]);
-        return"#" + e
-    }
-    function p(e, t, n) {
-        e < t && (e = t);
-        e > n && (e = n);
-        return e
-    }
-    function d(e) {
-        var t = {}, n = Math.round(e.h), r = Math.round(e.s * 255 / 100), i = Math.round(e.b * 255 / 100);
-        if (r === 0)
-            t.r = t.g = t.b = i;
-        else {
-            var s = i, o = (255 - r) * i / 255, u = (s - o) * (n % 60) / 60;
-            n === 360 && (n = 0);
-            if (n < 60) {
-                t.r = s;
-                t.b = o;
-                t.g = o + u
-            } else if (n < 120) {
-                t.g = s;
-                t.b = o;
-                t.r = s - u
-            } else if (n < 180) {
-                t.g = s;
-                t.r = o;
-                t.b = o + u
-            } else if (n < 240) {
-                t.b = s;
-                t.r = o;
-                t.g = s - u
-            } else if (n < 300) {
-                t.b = s;
-                t.g = o;
-                t.r = o + u
-            } else if (n < 360) {
-                t.r = s;
-                t.g = o;
-                t.b = s - u
-            } else {
-                t.r = 0;
-                t.g = 0;
-                t.b = 0
-            }
-        }
-        return{r: Math.round(t.r), g: Math.round(t.g), b: Math.round(t.b)}
-    }
-    function v(t) {
-        var n = [t.r.toString(16), t.g.toString(16), t.b.toString(16)];
-        e.each(n, function (e, t) {
-            t.length === 1 && (n[e] = "0" + t)
-        });
-        return"#" + n.join("")
-    }
-    function m(e) {
-        return v(d(e))
-    }
-    function g(e) {
-        var t = y(b(e));
-        t.s === 0 && (t.h = 360);
-        return t
-    }
-    function y(e) {
-        var t = {h: 0, s: 0, b: 0}, n = Math.min(e.r, e.g, e.b), r = Math.max(e.r, e.g, e.b), i = r - n;
-        t.b = r;
-        t.s = r !== 0 ? 255 * i / r : 0;
-        t.s !== 0 ? e.r === r ? t.h = (e.g - e.b) / i : e.g === r ? t.h = 2 + (e.b - e.r) / i : t.h = 4 + (e.r - e.g) / i : t.h = -1;
-        t.h *= 60;
-        t.h < 0 && (t.h += 360);
-        t.s *= 100 / 255;
-        t.b *= 100 / 255;
-        return t
-    }
-    function b(e) {
-        e = parseInt(e.indexOf("#") > -1 ? e.substring(1) : e, 16);
-        return{r: e >> 16, g: (e & 65280) >> 8, b: e & 255}
-    }
-    e.minicolors = {defaults: {animationSpeed: 50, animationEasing: "swing", change: null, changeDelay: 0, control: "hue", defaultValue: "", hide: null, hideSpeed: 100, inline: !1, letterCase: "lowercase", opacity: !1, position: "bottom left", show: null, showSpeed: 100, theme: "default"}};
-    e.extend(e.fn, {minicolors: function (s, o) {
-            switch (s) {
-                case"destroy":
-                    e(this).each(function () {
-                        n(e(this))
-                    });
-                    return e(this);
-                case"hide":
-                    i();
-                    return e(this);
-                case"opacity":
-                    if (o === undefined)
-                        return e(this).attr("data-opacity");
-                    e(this).each(function () {
-                        u(e(this).attr("data-opacity", o))
-                    });
-                    return e(this);
-                case"rgbObject":
-                    return f(e(this), s === "rgbaObject");
-                case"rgbString":
-                case"rgbaString":
-                    return l(e(this), s === "rgbaString");
-                case"settings":
-                    if (o === undefined)
-                        return e(this).data("minicolors-settings");
-                    e(this).each(function () {
-                        var t = e(this).data("minicolors-settings") || {};
-                        n(e(this));
-                        e(this).minicolors(e.extend(!0, t, o))
-                    });
-                    return e(this);
-                case"show":
-                    r(e(this).eq(0));
-                    return e(this);
-                case"value":
-                    if (o === undefined)
-                        return e(this).val();
-                    e(this).each(function () {
-                        u(e(this).val(o))
-                    });
-                    return e(this);
-                default:
-                    s !== "create" && (o = s);
-                    e(this).each(function () {
-                        t(e(this), o)
-                    });
-                    return e(this)
-            }
-        }});
-    e(document).on("mousedown.minicolors touchstart.minicolors", function (t) {
-        e(t.target).parents().add(t.target).hasClass("minicolors") || i()
-    }).on("mousedown.minicolors touchstart.minicolors", ".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider", function (t) {
-        var n = e(this);
-        t.preventDefault();
-        e(document).data("minicolors-target", n);
-        s(n, t, !0)
-    }).on("mousemove.minicolors touchmove.minicolors", function (t) {
-        var n = e(document).data("minicolors-target");
-        n && s(n, t)
-    }).on("mouseup.minicolors touchend.minicolors", function () {
-        e(this).removeData("minicolors-target")
-    }).on("mousedown.minicolors touchstart.minicolors", ".minicolors-swatch", function (t) {
-        var n = e(this).parent().find(".minicolors-input");
-        t.preventDefault();
-        r(n)
-    }).on("focus.minicolors", ".minicolors-input", function () {
-        var t = e(this);
-        if (!t.data("minicolors-initialized"))
-            return;
-        r(t)
-    }).on("blur.minicolors", ".minicolors-input", function () {
-        var t = e(this), n = t.data("minicolors-settings");
-        if (!t.data("minicolors-initialized"))
-            return;
-        t.val(h(t.val(), !0));
-        t.val() === "" && t.val(h(n.defaultValue, !0));
-        t.val(c(t.val(), n.letterCase))
-    }).on("keydown.minicolors", ".minicolors-input", function (t) {
-        var n = e(this);
-        if (!n.data("minicolors-initialized"))
-            return;
-        switch (t.keyCode) {
-            case 9:
-                i();
-                break;
-            case 13:
-            case 27:
-                i();
-                n.blur()
-        }
-    }).on("keyup.minicolors", ".minicolors-input", function () {
-        var t = e(this);
-        if (!t.data("minicolors-initialized"))
-            return;
-        u(t, !0)
-    }).on("paste.minicolors", ".minicolors-input", function () {
-        var t = e(this);
-        if (!t.data("minicolors-initialized"))
-            return;
-        setTimeout(function () {
-            u(t, !0)
-        }, 1)
-    })
-}(jQuery);
\ No newline at end of file
+ * @license: http://opensource.org/licenses/MIT
+ *
+ */
+jQuery&&function($){function i(i,t){var o=$('<div class="minicolors" />'),n=$.minicolors.defaults;i.data("minicolors-initialized")||(t=$.extend(!0,{},n,t),o.addClass("minicolors-theme-"+t.theme).toggleClass("minicolors-with-opacity",t.opacity).toggleClass("minicolors-no-data-uris",t.dataUris!==!0),void 0!==t.position&&$.each(t.position.split(" "),function(){o.addClass("minicolors-position-"+this)}),i.addClass("minicolors-input").data("minicolors-initialized",!1).data("minicolors-settings",t).prop("size",7).wrap(o).after('<div class="minicolors-panel minicolors-slider-'+t.control+'"><div class="minicolors-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-opacity-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-grid minicolors-sprite"><div class="minicolors-grid-inner"></div><div class="minicolors-picker"><div></div></div></div></div>'),t.inline||(i.after('<span class="minicolors-swatch minicolors-spr
 ite"><span class="minicolors-swatch-color"></span></span>'),i.next(".minicolors-swatch").on("click",function(t){t.preventDefault(),i.focus()})),i.parent().find(".minicolors-panel").on("selectstart",function(){return!1}).end(),t.inline&&i.parent().addClass("minicolors-inline"),e(i,!1),i.data("minicolors-initialized",!0))}function t(i){var t=i.parent();i.removeData("minicolors-initialized").removeData("minicolors-settings").removeProp("size").removeClass("minicolors-input"),t.before(i).remove()}function o(i){var t=i.parent(),o=t.find(".minicolors-panel"),s=i.data("minicolors-settings");!i.data("minicolors-initialized")||i.prop("disabled")||t.hasClass("minicolors-inline")||t.hasClass("minicolors-focus")||(n(),t.addClass("minicolors-focus"),o.stop(!0,!0).fadeIn(s.showSpeed,function(){s.show&&s.show.call(i.get(0))}))}function n(){$(".minicolors-focus").each(function(){var i=$(this),t=i.find(".minicolors-input"),o=i.find(".minicolors-panel"),n=t.data("minicolors-settings");o.fadeOut(n.hid
 eSpeed,function(){n.hide&&n.hide.call(t.get(0)),i.removeClass("minicolors-focus")})})}function s(i,t,o){var n=i.parents(".minicolors").find(".minicolors-input"),s=n.data("minicolors-settings"),e=i.find("[class$=-picker]"),r=i.offset().left,c=i.offset().top,l=Math.round(t.pageX-r),h=Math.round(t.pageY-c),d=o?s.animationSpeed:0,u,g,m,p;t.originalEvent.changedTouches&&(l=t.originalEvent.changedTouches[0].pageX-r,h=t.originalEvent.changedTouches[0].pageY-c),0>l&&(l=0),0>h&&(h=0),l>i.width()&&(l=i.width()),h>i.height()&&(h=i.height()),i.parent().is(".minicolors-slider-wheel")&&e.parent().is(".minicolors-grid")&&(u=75-l,g=75-h,m=Math.sqrt(u*u+g*g),p=Math.atan2(g,u),0>p&&(p+=2*Math.PI),m>75&&(m=75,l=75-75*Math.cos(p),h=75-75*Math.sin(p)),l=Math.round(l),h=Math.round(h)),i.is(".minicolors-grid")?e.stop(!0).animate({top:h+"px",left:l+"px"},d,s.animationEasing,function(){a(n,i)}):e.stop(!0).animate({top:h+"px"},d,s.animationEasing,function(){a(n,i)})}function a(i,t){function o(i,t){var o,n;re
 turn i.length&&t?(o=i.offset().left,n=i.offset().top,{x:o-t.offset().left+i.outerWidth()/2,y:n-t.offset().top+i.outerHeight()/2}):null}var n,s,a,e,c,l,d,g=i.val(),m=i.attr("data-opacity"),f=i.parent(),v=i.data("minicolors-settings"),b=f.find(".minicolors-swatch"),y=f.find(".minicolors-grid"),M=f.find(".minicolors-slider"),w=f.find(".minicolors-opacity-slider"),x=y.find("[class$=-picker]"),C=M.find("[class$=-picker]"),k=w.find("[class$=-picker]"),S=o(x,y),z=o(C,M),D=o(k,w);if(t.is(".minicolors-grid, .minicolors-slider")){switch(v.control){case"wheel":e=y.width()/2-S.x,c=y.height()/2-S.y,l=Math.sqrt(e*e+c*c),d=Math.atan2(c,e),0>d&&(d+=2*Math.PI),l>75&&(l=75,S.x=69-75*Math.cos(d),S.y=69-75*Math.sin(d)),s=u(l/.75,0,100),n=u(180*d/Math.PI,0,360),a=u(100-Math.floor(z.y*(100/M.height())),0,100),g=p({h:n,s:s,b:a}),M.css("backgroundColor",p({h:n,s:s,b:100}));break;case"saturation":n=u(parseInt(S.x*(360/y.width()),10),0,360),s=u(100-Math.floor(z.y*(100/M.height())),0,100),a=u(100-Math.floor(S
 .y*(100/y.height())),0,100),g=p({h:n,s:s,b:a}),M.css("backgroundColor",p({h:n,s:100,b:a})),f.find(".minicolors-grid-inner").css("opacity",s/100);break;case"brightness":n=u(parseInt(S.x*(360/y.width()),10),0,360),s=u(100-Math.floor(S.y*(100/y.height())),0,100),a=u(100-Math.floor(z.y*(100/M.height())),0,100),g=p({h:n,s:s,b:a}),M.css("backgroundColor",p({h:n,s:s,b:100})),f.find(".minicolors-grid-inner").css("opacity",1-a/100);break;default:n=u(360-parseInt(z.y*(360/M.height()),10),0,360),s=u(Math.floor(S.x*(100/y.width())),0,100),a=u(100-Math.floor(S.y*(100/y.height())),0,100),g=p({h:n,s:s,b:a}),y.css("backgroundColor",p({h:n,s:100,b:100}))}i.val(h(g,v.letterCase))}t.is(".minicolors-opacity-slider")&&(m=v.opacity?parseFloat(1-D.y/w.height()).toFixed(2):1,v.opacity&&i.attr("data-opacity",m)),b.find("SPAN").css({backgroundColor:g,opacity:m}),r(i,g,m)}function e(i,t){var o,n,s,a,e,c,l,g=i.parent(),m=i.data("minicolors-settings"),v=g.find(".minicolors-swatch"),b=g.find(".minicolors-grid"),
 y=g.find(".minicolors-slider"),M=g.find(".minicolors-opacity-slider"),w=b.find("[class$=-picker]"),x=y.find("[class$=-picker]"),C=M.find("[class$=-picker]");switch(o=h(d(i.val(),!0),m.letterCase),o||(o=h(d(m.defaultValue,!0),m.letterCase)),n=f(o),t||i.val(o),m.opacity&&(s=""===i.attr("data-opacity")?1:u(parseFloat(i.attr("data-opacity")).toFixed(2),0,1),isNaN(s)&&(s=1),i.attr("data-opacity",s),v.find("SPAN").css("opacity",s),e=u(M.height()-M.height()*s,0,M.height()),C.css("top",e+"px")),v.find("SPAN").css("backgroundColor",o),m.control){case"wheel":c=u(Math.ceil(.75*n.s),0,b.height()/2),l=n.h*Math.PI/180,a=u(75-Math.cos(l)*c,0,b.width()),e=u(75-Math.sin(l)*c,0,b.height()),w.css({top:e+"px",left:a+"px"}),e=150-n.b/(100/b.height()),""===o&&(e=0),x.css("top",e+"px"),y.css("backgroundColor",p({h:n.h,s:n.s,b:100}));break;case"saturation":a=u(5*n.h/12,0,150),e=u(b.height()-Math.ceil(n.b/(100/b.height())),0,b.height()),w.css({top:e+"px",left:a+"px"}),e=u(y.height()-n.s*(y.height()/100),0,y
 .height()),x.css("top",e+"px"),y.css("backgroundColor",p({h:n.h,s:100,b:n.b})),g.find(".minicolors-grid-inner").css("opacity",n.s/100);break;case"brightness":a=u(5*n.h/12,0,150),e=u(b.height()-Math.ceil(n.s/(100/b.height())),0,b.height()),w.css({top:e+"px",left:a+"px"}),e=u(y.height()-n.b*(y.height()/100),0,y.height()),x.css("top",e+"px"),y.css("backgroundColor",p({h:n.h,s:n.s,b:100})),g.find(".minicolors-grid-inner").css("opacity",1-n.b/100);break;default:a=u(Math.ceil(n.s/(100/b.width())),0,b.width()),e=u(b.height()-Math.ceil(n.b/(100/b.height())),0,b.height()),w.css({top:e+"px",left:a+"px"}),e=u(y.height()-n.h/(360/y.height()),0,y.height()),x.css("top",e+"px"),b.css("backgroundColor",p({h:n.h,s:100,b:100}))}i.data("minicolors-initialized")&&r(i,o,s)}function r(i,t,o){var n=i.data("minicolors-settings"),s=i.data("minicolors-lastChange");s&&s.hex===t&&s.opacity===o||(i.data("minicolors-lastChange",{hex:t,opacity:o}),n.change&&(n.changeDelay?(clearTimeout(i.data("minicolors-changeTi
 meout")),i.data("minicolors-changeTimeout",setTimeout(function(){n.change.call(i.get(0),t,o)},n.changeDelay))):n.change.call(i.get(0),t,o)),i.trigger("change").trigger("input"))}function c(i){var t=d($(i).val(),!0),o=b(t),n=$(i).attr("data-opacity");return o?(void 0!==n&&$.extend(o,{a:parseFloat(n)}),o):null}function l(i,t){var o=d($(i).val(),!0),n=b(o),s=$(i).attr("data-opacity");return n?(void 0===s&&(s=1),t?"rgba("+n.r+", "+n.g+", "+n.b+", "+parseFloat(s)+")":"rgb("+n.r+", "+n.g+", "+n.b+")"):null}function h(i,t){return"uppercase"===t?i.toUpperCase():i.toLowerCase()}function d(i,t){return i=i.replace(/[^A-F0-9]/gi,""),3!==i.length&&6!==i.length?"":(3===i.length&&t&&(i=i[0]+i[0]+i[1]+i[1]+i[2]+i[2]),"#"+i)}function u(i,t,o){return t>i&&(i=t),i>o&&(i=o),i}function g(i){var t={},o=Math.round(i.h),n=Math.round(255*i.s/100),s=Math.round(255*i.b/100);if(0===n)t.r=t.g=t.b=s;else{var a=s,e=(255-n)*s/255,r=(a-e)*(o%60)/60;360===o&&(o=0),60>o?(t.r=a,t.b=e,t.g=e+r):120>o?(t.g=a,t.b=e,t.r=a-
 r):180>o?(t.g=a,t.r=e,t.b=e+r):240>o?(t.b=a,t.r=e,t.g=a-r):300>o?(t.b=a,t.g=e,t.r=e+r):360>o?(t.r=a,t.g=e,t.b=a-r):(t.r=0,t.g=0,t.b=0)}return{r:Math.round(t.r),g:Math.round(t.g),b:Math.round(t.b)}}function m(i){var t=[i.r.toString(16),i.g.toString(16),i.b.toString(16)];return $.each(t,function(i,o){1===o.length&&(t[i]="0"+o)}),"#"+t.join("")}function p(i){return m(g(i))}function f(i){var t=v(b(i));return 0===t.s&&(t.h=360),t}function v(i){var t={h:0,s:0,b:0},o=Math.min(i.r,i.g,i.b),n=Math.max(i.r,i.g,i.b),s=n-o;return t.b=n,t.s=0!==n?255*s/n:0,t.h=0!==t.s?i.r===n?(i.g-i.b)/s:i.g===n?2+(i.b-i.r)/s:4+(i.r-i.g)/s:-1,t.h*=60,t.h<0&&(t.h+=360),t.s*=100/255,t.b*=100/255,t}function b(i){return i=parseInt(i.indexOf("#")>-1?i.substring(1):i,16),{r:i>>16,g:(65280&i)>>8,b:255&i}}$.minicolors={defaults:{animationSpeed:50,animationEasing:"swing",change:null,changeDelay:0,control:"hue",dataUris:!0,defaultValue:"",hide:null,hideSpeed:100,inline:!1,letterCase:"lowercase",opacity:!1,position:"bottom
  left",show:null,showSpeed:100,theme:"default"}},$.extend($.fn,{minicolors:function(s,a){switch(s){case"destroy":return $(this).each(function(){t($(this))}),$(this);case"hide":return n(),$(this);case"opacity":return void 0===a?$(this).attr("data-opacity"):($(this).each(function(){e($(this).attr("data-opacity",a))}),$(this));case"rgbObject":return c($(this),"rgbaObject"===s);case"rgbString":case"rgbaString":return l($(this),"rgbaString"===s);case"settings":return void 0===a?$(this).data("minicolors-settings"):($(this).each(function(){var i=$(this).data("minicolors-settings")||{};t($(this)),$(this).minicolors($.extend(!0,i,a))}),$(this));case"show":return o($(this).eq(0)),$(this);case"value":return void 0===a?$(this).val():($(this).each(function(){e($(this).val(a))}),$(this));default:return"create"!==s&&(a=s),$(this).each(function(){i($(this),a)}),$(this)}}}),$(document).on("mousedown.minicolors touchstart.minicolors",function(i){$(i.target).parents().add(i.target).hasClass("minicolor
 s")||n()}).on("mousedown.minicolors touchstart.minicolors",".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider",function(i){var t=$(this);i.preventDefault(),$(document).data("minicolors-target",t),s(t,i,!0)}).on("mousemove.minicolors touchmove.minicolors",function(i){var t=$(document).data("minicolors-target");t&&s(t,i)}).on("mouseup.minicolors touchend.minicolors",function(){$(this).removeData("minicolors-target")}).on("mousedown.minicolors touchstart.minicolors",".minicolors-swatch",function(i){var t=$(this).parent().find(".minicolors-input");i.preventDefault(),o(t)}).on("focus.minicolors",".minicolors-input",function(){var i=$(this);i.data("minicolors-initialized")&&o(i)}).on("blur.minicolors",".minicolors-input",function(){var i=$(this),t=i.data("minicolors-settings");i.data("minicolors-initialized")&&(i.val(d(i.val(),!0)),""===i.val()&&i.val(d(t.defaultValue,!0)),i.val(h(i.val(),t.letterCase)))}).on("keydown.minicolors",".minicolors-input",function(i){var t=$(this
 );if(t.data("minicolors-initialized"))switch(i.keyCode){case 9:n();break;case 13:case 27:n(),t.blur()}}).on("keyup.minicolors",".minicolors-input",function(){var i=$(this);i.data("minicolors-initialized")&&e(i,!0)}).on("paste.minicolors",".minicolors-input",function(){var i=$(this);i.data("minicolors-initialized")&&setTimeout(function(){e(i,!0)},1)})}(jQuery);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.css
deleted file mode 100755
index 1ab6052..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.css
+++ /dev/null
@@ -1,1178 +0,0 @@
-/*! jQuery UI - v1.10.4 - 2014-12-11
-* http://jqueryui.com
-* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureE
 rror=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden {
-	display: none;
-}
-.ui-helper-hidden-accessible {
-	border: 0;
-	clip: rect(0 0 0 0);
-	height: 1px;
-	margin: -1px;
-	overflow: hidden;
-	padding: 0;
-	position: absolute;
-	width: 1px;
-}
-.ui-helper-reset {
-	margin: 0;
-	padding: 0;
-	border: 0;
-	outline: 0;
-	line-height: 1.3;
-	text-decoration: none;
-	font-size: 100%;
-	list-style: none;
-}
-.ui-helper-clearfix:before,
-.ui-helper-clearfix:after {
-	content: "";
-	display: table;
-	border-collapse: collapse;
-}
-.ui-helper-clearfix:after {
-	clear: both;
-}
-.ui-helper-clearfix {
-	min-height: 0; /* support: IE7 */
-}
-.ui-helper-zfix {
-	width: 100%;
-	height: 100%;
-	top: 0;
-	left: 0;
-	position: absolute;
-	opacity: 0;
-	filter:Alpha(Opacity=0);
-}
-
-.ui-front {
-	z-index: 100;
-}
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled {
-	cursor: default !important;
-}
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
-	display: block;
-	text-indent: -99999px;
-	overflow: hidden;
-	background-repeat: no-repeat;
-}
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay {
-	position: fixed;
-	top: 0;
-	left: 0;
-	width: 100%;
-	height: 100%;
-}
-.ui-resizable {
-	position: relative;
-}
-.ui-resizable-handle {
-	position: absolute;
-	font-size: 0.1px;
-	display: block;
-}
-.ui-resizable-disabled .ui-resizable-handle,
-.ui-resizable-autohide .ui-resizable-handle {
-	display: none;
-}
-.ui-resizable-n {
-	cursor: n-resize;
-	height: 7px;
-	width: 100%;
-	top: -5px;
-	left: 0;
-}
-.ui-resizable-s {
-	cursor: s-resize;
-	height: 7px;
-	width: 100%;
-	bottom: -5px;
-	left: 0;
-}
-.ui-resizable-e {
-	cursor: e-resize;
-	width: 7px;
-	right: -5px;
-	top: 0;
-	height: 100%;
-}
-.ui-resizable-w {
-	cursor: w-resize;
-	width: 7px;
-	left: -5px;
-	top: 0;
-	height: 100%;
-}
-.ui-resizable-se {
-	cursor: se-resize;
-	width: 12px;
-	height: 12px;
-	right: 1px;
-	bottom: 1px;
-}
-.ui-resizable-sw {
-	cursor: sw-resize;
-	width: 9px;
-	height: 9px;
-	left: -5px;
-	bottom: -5px;
-}
-.ui-resizable-nw {
-	cursor: nw-resize;
-	width: 9px;
-	height: 9px;
-	left: -5px;
-	top: -5px;
-}
-.ui-resizable-ne {
-	cursor: ne-resize;
-	width: 9px;
-	height: 9px;
-	right: -5px;
-	top: -5px;
-}
-.ui-selectable-helper {
-	position: absolute;
-	z-index: 100;
-	border: 1px dotted black;
-}
-.ui-accordion .ui-accordion-header {
-	display: block;
-	cursor: pointer;
-	position: relative;
-	margin-top: 2px;
-	padding: .5em .5em .5em .7em;
-	min-height: 0; /* support: IE7 */
-}
-.ui-accordion .ui-accordion-icons {
-	padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-noicons {
-	padding-left: .7em;
-}
-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
-	padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
-	position: absolute;
-	left: .5em;
-	top: 50%;
-	margin-top: -8px;
-}
-.ui-accordion .ui-accordion-content {
-	padding: 1em 2.2em;
-	border-top: 0;
-	overflow: auto;
-}
-.ui-autocomplete {
-	position: absolute;
-	top: 0;
-	left: 0;
-	cursor: default;
-}
-.ui-button {
-	display: inline-block;
-	position: relative;
-	padding: 0;
-	line-height: normal;
-	margin-right: .1em;
-	cursor: pointer;
-	vertical-align: middle;
-	text-align: center;
-	overflow: visible; /* removes extra width in IE */
-}
-.ui-button,
-.ui-button:link,
-.ui-button:visited,
-.ui-button:hover,
-.ui-button:active {
-	text-decoration: none;
-}
-/* to make room for the icon, a width needs to be set here */
-.ui-button-icon-only {
-	width: 2.2em;
-}
-/* button elements seem to need a little more width */
-button.ui-button-icon-only {
-	width: 2.4em;
-}
-.ui-button-icons-only {
-	width: 3.4em;
-}
-button.ui-button-icons-only {
-	width: 3.7em;
-}
-
-/* button text element */
-.ui-button .ui-button-text {
-	display: block;
-	line-height: normal;
-}
-.ui-button-text-only .ui-button-text {
-	padding: .4em 1em;
-}
-.ui-button-icon-only .ui-button-text,
-.ui-button-icons-only .ui-button-text {
-	padding: .4em;
-	text-indent: -9999999px;
-}
-.ui-button-text-icon-primary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
-	padding: .4em 1em .4em 2.1em;
-}
-.ui-button-text-icon-secondary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
-	padding: .4em 2.1em .4em 1em;
-}
-.ui-button-text-icons .ui-button-text {
-	padding-left: 2.1em;
-	padding-right: 2.1em;
-}
-/* no icon support for input elements, provide padding by default */
-input.ui-button {
-	padding: .4em 1em;
-}
-
-/* button icon element(s) */
-.ui-button-icon-only .ui-icon,
-.ui-button-text-icon-primary .ui-icon,
-.ui-button-text-icon-secondary .ui-icon,
-.ui-button-text-icons .ui-icon,
-.ui-button-icons-only .ui-icon {
-	position: absolute;
-	top: 50%;
-	margin-top: -8px;
-}
-.ui-button-icon-only .ui-icon {
-	left: 50%;
-	margin-left: -8px;
-}
-.ui-button-text-icon-primary .ui-button-icon-primary,
-.ui-button-text-icons .ui-button-icon-primary,
-.ui-button-icons-only .ui-button-icon-primary {
-	left: .5em;
-}
-.ui-button-text-icon-secondary .ui-button-icon-secondary,
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
-	right: .5em;
-}
-
-/* button sets */
-.ui-buttonset {
-	margin-right: 7px;
-}
-.ui-buttonset .ui-button {
-	margin-left: 0;
-	margin-right: -.3em;
-}
-
-/* workarounds */
-/* reset extra padding in Firefox, see h5bp.com/l */
-input.ui-button::-moz-focus-inner,
-button.ui-button::-moz-focus-inner {
-	border: 0;
-	padding: 0;
-}
-.ui-datepicker {
-	width: 17em;
-	padding: .2em .2em 0;
-	display: none;
-}
-.ui-datepicker .ui-datepicker-header {
-	position: relative;
-	padding: .2em 0;
-}
-.ui-datepicker .ui-datepicker-prev,
-.ui-datepicker .ui-datepicker-next {
-	position: absolute;
-	top: 2px;
-	width: 1.8em;
-	height: 1.8em;
-}
-.ui-datepicker .ui-datepicker-prev-hover,
-.ui-datepicker .ui-datepicker-next-hover {
-	top: 1px;
-}
-.ui-datepicker .ui-datepicker-prev {
-	left: 2px;
-}
-.ui-datepicker .ui-datepicker-next {
-	right: 2px;
-}
-.ui-datepicker .ui-datepicker-prev-hover {
-	left: 1px;
-}
-.ui-datepicker .ui-datepicker-next-hover {
-	right: 1px;
-}
-.ui-datepicker .ui-datepicker-prev span,
-.ui-datepicker .ui-datepicker-next span {
-	display: block;
-	position: absolute;
-	left: 50%;
-	margin-left: -8px;
-	top: 50%;
-	margin-top: -8px;
-}
-.ui-datepicker .ui-datepicker-title {
-	margin: 0 2.3em;
-	line-height: 1.8em;
-	text-align: center;
-}
-.ui-datepicker .ui-datepicker-title select {
-	font-size: 1em;
-	margin: 1px 0;
-}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year {
-	width: 49%;
-}
-.ui-datepicker table {
-	width: 100%;
-	font-size: .9em;
-	border-collapse: collapse;
-	margin: 0 0 .4em;
-}
-.ui-datepicker th {
-	padding: .7em .3em;
-	text-align: center;
-	font-weight: bold;
-	border: 0;
-}
-.ui-datepicker td {
-	border: 0;
-	padding: 1px;
-}
-.ui-datepicker td span,
-.ui-datepicker td a {
-	display: block;
-	padding: .2em;
-	text-align: right;
-	text-decoration: none;
-}
-.ui-datepicker .ui-datepicker-buttonpane {
-	background-image: none;
-	margin: .7em 0 0 0;
-	padding: 0 .2em;
-	border-left: 0;
-	border-right: 0;
-	border-bottom: 0;
-}
-.ui-datepicker .ui-datepicker-buttonpane button {
-	float: right;
-	margin: .5em .2em .4em;
-	cursor: pointer;
-	padding: .2em .6em .3em .6em;
-	width: auto;
-	overflow: visible;
-}
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
-	float: left;
-}
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi {
-	width: auto;
-}
-.ui-datepicker-multi .ui-datepicker-group {
-	float: left;
-}
-.ui-datepicker-multi .ui-datepicker-group table {
-	width: 95%;
-	margin: 0 auto .4em;
-}
-.ui-datepicker-multi-2 .ui-datepicker-group {
-	width: 50%;
-}
-.ui-datepicker-multi-3 .ui-datepicker-group {
-	width: 33.3%;
-}
-.ui-datepicker-multi-4 .ui-datepicker-group {
-	width: 25%;
-}
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
-	border-left-width: 0;
-}
-.ui-datepicker-multi .ui-datepicker-buttonpane {
-	clear: left;
-}
-.ui-datepicker-row-break {
-	clear: both;
-	width: 100%;
-	font-size: 0;
-}
-
-/* RTL support */
-.ui-datepicker-rtl {
-	direction: rtl;
-}
-.ui-datepicker-rtl .ui-datepicker-prev {
-	right: 2px;
-	left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next {
-	left: 2px;
-	right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
-	right: 1px;
-	left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next:hover {
-	left: 1px;
-	right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
-	clear: right;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
-	float: left;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
-.ui-datepicker-rtl .ui-datepicker-group {
-	float: right;
-}
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
-	border-right-width: 0;
-	border-left-width: 1px;
-}
-.ui-dialog {
-	overflow: hidden;
-	position: absolute;
-	top: 0;
-	left: 0;
-	padding: .2em;
-	outline: 0;
-}
-.ui-dialog .ui-dialog-titlebar {
-	padding: .4em 1em;
-	position: relative;
-}
-.ui-dialog .ui-dialog-title {
-	float: left;
-	margin: .1em 0;
-	white-space: nowrap;
-	width: 90%;
-	overflow: hidden;
-	text-overflow: ellipsis;
-}
-.ui-dialog .ui-dialog-titlebar-close {
-	position: absolute;
-	right: .3em;
-	top: 50%;
-	width: 20px;
-	margin: -10px 0 0 0;
-	padding: 1px;
-	height: 20px;
-}
-.ui-dialog .ui-dialog-content {
-	position: relative;
-	border: 0;
-	padding: .5em 1em;
-	background: none;
-	overflow: auto;
-}
-.ui-dialog .ui-dialog-buttonpane {
-	text-align: left;
-	border-width: 1px 0 0 0;
-	background-image: none;
-	margin-top: .5em;
-	padding: .3em 1em .5em .4em;
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
-	float: right;
-}
-.ui-dialog .ui-dialog-buttonpane button {
-	margin: .5em .4em .5em 0;
-	cursor: pointer;
-}
-.ui-dialog .ui-resizable-se {
-	width: 12px;
-	height: 12px;
-	right: -5px;
-	bottom: -5px;
-	background-position: 16px 16px;
-}
-.ui-draggable .ui-dialog-titlebar {
-	cursor: move;
-}
-.ui-menu {
-	list-style: none;
-	padding: 2px;
-	margin: 0;
-	display: block;
-	outline: none;
-}
-.ui-menu .ui-menu {
-	margin-top: -3px;
-	position: absolute;
-}
-.ui-menu .ui-menu-item {
-	margin: 0;
-	padding: 0;
-	width: 100%;
-	/* support: IE10, see #8844 */
-	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
-}
-.ui-menu .ui-menu-divider {
-	margin: 5px -2px 5px -2px;
-	height: 0;
-	font-size: 0;
-	line-height: 0;
-	border-width: 1px 0 0 0;
-}
-.ui-menu .ui-menu-item a {
-	text-decoration: none;
-	display: block;
-	padding: 2px .4em;
-	line-height: 1.5;
-	min-height: 0; /* support: IE7 */
-	font-weight: normal;
-}
-.ui-menu .ui-menu-item a.ui-state-focus,
-.ui-menu .ui-menu-item a.ui-state-active {
-	font-weight: normal;
-	margin: -1px;
-}
-
-.ui-menu .ui-state-disabled {
-	font-weight: normal;
-	margin: .4em 0 .2em;
-	line-height: 1.5;
-}
-.ui-menu .ui-state-disabled a {
-	cursor: default;
-}
-
-/* icon support */
-.ui-menu-icons {
-	position: relative;
-}
-.ui-menu-icons .ui-menu-item a {
-	position: relative;
-	padding-left: 2em;
-}
-
-/* left-aligned */
-.ui-menu .ui-icon {
-	position: absolute;
-	top: .2em;
-	left: .2em;
-}
-
-/* right-aligned */
-.ui-menu .ui-menu-icon {
-	position: static;
-	float: right;
-}
-.ui-progressbar {
-	height: 2em;
-	text-align: left;
-	overflow: hidden;
-}
-.ui-progressbar .ui-progressbar-value {
-	margin: -1px;
-	height: 100%;
-}
-.ui-progressbar .ui-progressbar-overlay {
-	background: url("images/animated-overlay.gif");
-	height: 100%;
-	filter: alpha(opacity=25);
-	opacity: 0.25;
-}
-.ui-progressbar-indeterminate .ui-progressbar-value {
-	background-image: none;
-}
-.ui-slider {
-	position: relative;
-	text-align: left;
-}
-.ui-slider .ui-slider-handle {
-	position: absolute;
-	z-index: 2;
-	width: 1.2em;
-	height: 1.2em;
-	cursor: default;
-}
-.ui-slider .ui-slider-range {
-	position: absolute;
-	z-index: 1;
-	font-size: .7em;
-	display: block;
-	border: 0;
-	background-position: 0 0;
-}
-
-/* For IE8 - See #6727 */
-.ui-slider.ui-state-disabled .ui-slider-handle,
-.ui-slider.ui-state-disabled .ui-slider-range {
-	filter: inherit;
-}
-
-.ui-slider-horizontal {
-	height: .8em;
-}
-.ui-slider-horizontal .ui-slider-handle {
-	top: -.3em;
-	margin-left: -.6em;
-}
-.ui-slider-horizontal .ui-slider-range {
-	top: 0;
-	height: 100%;
-}
-.ui-slider-horizontal .ui-slider-range-min {
-	left: 0;
-}
-.ui-slider-horizontal .ui-slider-range-max {
-	right: 0;
-}
-
-.ui-slider-vertical {
-	width: .8em;
-	height: 100px;
-}
-.ui-slider-vertical .ui-slider-handle {
-	left: -.3em;
-	margin-left: 0;
-	margin-bottom: -.6em;
-}
-.ui-slider-vertical .ui-slider-range {
-	left: 0;
-	width: 100%;
-}
-.ui-slider-vertical .ui-slider-range-min {
-	bottom: 0;
-}
-.ui-slider-vertical .ui-slider-range-max {
-	top: 0;
-}
-.ui-spinner {
-	position: relative;
-	display: inline-block;
-	overflow: hidden;
-	padding: 0;
-	vertical-align: middle;
-}
-.ui-spinner-input {
-	border: none;
-	background: none;
-	color: inherit;
-	padding: 0;
-	margin: .2em 0;
-	vertical-align: middle;
-	margin-left: .4em;
-	margin-right: 22px;
-}
-.ui-spinner-button {
-	width: 16px;
-	height: 50%;
-	font-size: .5em;
-	padding: 0;
-	margin: 0;
-	text-align: center;
-	position: absolute;
-	cursor: default;
-	display: block;
-	overflow: hidden;
-	right: 0;
-}
-/* more specificity required here to override default borders */
-.ui-spinner a.ui-spinner-button {
-	border-top: none;
-	border-bottom: none;
-	border-right: none;
-}
-/* vertically center icon */
-.ui-spinner .ui-icon {
-	position: absolute;
-	margin-top: -8px;
-	top: 50%;
-	left: 0;
-}
-.ui-spinner-up {
-	top: 0;
-}
-.ui-spinner-down {
-	bottom: 0;
-}
-
-/* TR overrides */
-.ui-spinner .ui-icon-triangle-1-s {
-	/* need to fix icons sprite */
-	background-position: -65px -16px;
-}
-.ui-tabs {
-	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
-	padding: .2em;
-}
-.ui-tabs .ui-tabs-nav {
-	margin: 0;
-	padding: .2em .2em 0;
-}
-.ui-tabs .ui-tabs-nav li {
-	list-style: none;
-	float: left;
-	position: relative;
-	top: 0;
-	margin: 1px .2em 0 0;
-	border-bottom-width: 0;
-	padding: 0;
-	white-space: nowrap;
-}
-.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
-	float: left;
-	padding: .5em 1em;
-	text-decoration: none;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
-	margin-bottom: -1px;
-	padding-bottom: 1px;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
-	cursor: text;
-}
-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
-	cursor: pointer;
-}
-.ui-tabs .ui-tabs-panel {
-	display: block;
-	border-width: 0;
-	padding: 1em 1.4em;
-	background: none;
-}
-.ui-tooltip {
-	padding: 8px;
-	position: absolute;
-	z-index: 9999;
-	max-width: 300px;
-	-webkit-box-shadow: 0 0 5px #aaa;
-	box-shadow: 0 0 5px #aaa;
-}
-body .ui-tooltip {
-	border-width: 2px;
-}
-
-/* Component containers
-----------------------------------*/
-.ui-widget {
-	font-family: Verdana,Arial,sans-serif;
-	font-size: 1.1em;
-}
-.ui-widget .ui-widget {
-	font-size: 1em;
-}
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
-	font-family: Verdana,Arial,sans-serif;
-	font-size: 1em;
-}
-.ui-widget-content {
-	border: 1px solid #aaaaaa;
-	background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;
-	color: #222222;
-}
-.ui-widget-content a {
-	color: #222222;
-}
-.ui-widget-header {
-	border: 1px solid #aaaaaa;
-	background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;
-	color: #222222;
-	font-weight: bold;
-}
-.ui-widget-header a {
-	color: #222222;
-}
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default,
-.ui-widget-content .ui-state-default,
-.ui-widget-header .ui-state-default {
-	border: 1px solid #d3d3d3;
-	background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
-	font-weight: normal;
-	color: #555555;
-}
-.ui-state-default a,
-.ui-state-default a:link,
-.ui-state-default a:visited {
-	color: #555555;
-	text-decoration: none;
-}
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus {
-	border: 1px solid #999999;
-	background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
-	font-weight: normal;
-	color: #212121;
-}
-.ui-state-hover a,
-.ui-state-hover a:hover,
-.ui-state-hover a:link,
-.ui-state-hover a:visited,
-.ui-state-focus a,
-.ui-state-focus a:hover,
-.ui-state-focus a:link,
-.ui-state-focus a:visited {
-	color: #212121;
-	text-decoration: none;
-}
-.ui-state-active,
-.ui-widget-content .ui-state-active,
-.ui-widget-header .ui-state-active {
-	border: 1px solid #aaaaaa;
-	background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
-	font-weight: normal;
-	color: #212121;
-}
-.ui-state-active a,
-.ui-state-active a:link,
-.ui-state-active a:visited {
-	color: #212121;
-	text-decoration: none;
-}
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight,
-.ui-widget-content .ui-state-highlight,
-.ui-widget-header .ui-state-highlight {
-	border: 1px solid #fcefa1;
-	background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
-	color: #363636;
-}
-.ui-state-highlight a,
-.ui-widget-content .ui-state-highlight a,
-.ui-widget-header .ui-state-highlight a {
-	color: #363636;
-}
-.ui-state-error,
-.ui-widget-content .ui-state-error,
-.ui-widget-header .ui-state-error {
-	border: 1px solid #cd0a0a;
-	background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;
-	color: #cd0a0a;
-}
-.ui-state-error a,
-.ui-widget-content .ui-state-error a,
-.ui-widget-header .ui-state-error a {
-	color: #cd0a0a;
-}
-.ui-state-error-text,
-.ui-widget-content .ui-state-error-text,
-.ui-widget-header .ui-state-error-text {
-	color: #cd0a0a;
-}
-.ui-priority-primary,
-.ui-widget-content .ui-priority-primary,
-.ui-widget-header .ui-priority-primary {
-	font-weight: bold;
-}
-.ui-priority-secondary,
-.ui-widget-content .ui-priority-secondary,
-.ui-widget-header .ui-priority-secondary {
-	opacity: .7;
-	filter:Alpha(Opacity=70);
-	font-weight: normal;
-}
-.ui-state-disabled,
-.ui-widget-content .ui-state-disabled,
-.ui-widget-header .ui-state-disabled {
-	opacity: .35;
-	filter:Alpha(Opacity=35);
-	background-image: none;
-}
-.ui-state-disabled .ui-icon {
-	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
-}
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
-	width: 16px;
-	height: 16px;
-}
-.ui-icon,
-.ui-widget-content .ui-icon {
-	background-image: url("images/ui-icons_222222_256x240.png");
-}
-.ui-widget-header .ui-icon {
-	background-image: url("images/ui-icons_222222_256x240.png");
-}
-.ui-state-default .ui-icon {
-	background-image: url("images/ui-icons_888888_256x240.png");
-}
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon {
-	background-image: url("images/ui-icons_454545_256x240.png");
-}
-.ui-state-active .ui-icon {
-	background-image: url("images/ui-icons_454545_256x240.png");
-}
-.ui-state-highlight .ui-icon {
-	background-image: url("images/ui-icons_2e83ff_256x240.png");
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
-	background-image: url("images/ui-icons_cd0a0a_256x240.png");
-}
-
-/* positioning */
-.ui-icon-blank { background-position: 16px 16px; }
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-on { background-position: -96px -144px; }
-.ui-icon-radio-off { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
-	border-top-left-radius: 4px;
-}
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
-	border-top-right-radius: 4px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
-	border-bottom-left-radius: 4px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
-	border-bottom-right-radius: 4px;
-}
-
-/* Overlays */
-.ui-widget-overlay {
-	background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
-	opacity: .3;
-	filter: Alpha(Opacity=30);
-}
-.ui-widget-shadow {
-	margin: -8px 0 0 -8px;
-	padding: 8px;
-	background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
-	opacity: .3;
-	filter: Alpha(Opacity=30);
-	border-radius: 8px;
-}


[05/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of codemirror.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9180b7d4/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror-compressed.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror-compressed.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror-compressed.js
new file mode 100644
index 0000000..11b3fbc
--- /dev/null
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror-compressed.js
@@ -0,0 +1,16 @@
+/* CodeMirror - Minified & Bundled
+   Generated on 12/10/2014 with http://codemirror.net/doc/compress.html
+   Version: 4.8
+
+   CodeMirror Library:
+   - codemirror.js
+   Add-ons:
+   - matchbrackets.js
+   - show-hint.js
+ */
+
+!function(a){if("object"==typeof exports&&"object"==typeof module)module.exports=a();else{if("function"==typeof define&&define.amd)return define([],a);this.CodeMirror=a()}}(function(){"use strict";function w(a,b){if(!(this instanceof w))return new w(a,b);this.options=b=b?Qg(b):{},Qg(ie,b,!1),J(b);var c=b.value;"string"==typeof c&&(c=new Lf(c,b.mode)),this.doc=c;var f=this.display=new x(a,c);f.wrapper.CodeMirror=this,F(this),D(this),b.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),b.autofocus&&!o&&_c(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,draggingText:!1,highlight:new Gg,keySeq:null},d&&11>e&&setTimeout(Rg($c,this,!0),20),cd(this),ih(),Ac(this),this.curOp.forceUpdate=!0,Pf(this,c),b.autofocus&&!o||bh()==f.input?setTimeout(Rg(Hd,this),20):Id(this);for(var g in je)je.hasOwnProperty(g)&&je[g](this,b[g],le);P(this);for(var h=0;h<pe.length;++h)pe[h](this);Cc(this)}function x(a,b){var c
 =this,g=c.input=Yg("textarea",null,null,"position: absolute; padding: 0; width: 1px; height: 1em; outline: none");f?g.style.width="1000px":g.setAttribute("wrap","off"),n&&(g.style.border="1px solid black"),g.setAttribute("autocorrect","off"),g.setAttribute("autocapitalize","off"),g.setAttribute("spellcheck","false"),c.inputDiv=Yg("div",[g],null,"overflow: hidden; position: relative; width: 3px; height: 0px;"),c.scrollbarH=Yg("div",[Yg("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar"),c.scrollbarV=Yg("div",[Yg("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),c.scrollbarFiller=Yg("div",null,"CodeMirror-scrollbar-filler"),c.gutterFiller=Yg("div",null,"CodeMirror-gutter-filler"),c.lineDiv=Yg("div",null,"CodeMirror-code"),c.selectionDiv=Yg("div",null,null,"position: relative; z-index: 1"),c.cursorDiv=Yg("div",null,"CodeMirror-cursors"),c.measure=Yg("div",null,"CodeMirror-measure"),c.lineMeasure=Yg("div",null,"CodeMirror-measure"),c.lineSpace=Yg("div",[
 c.measure,c.lineMeasure,c.selectionDiv,c.cursorDiv,c.lineDiv],null,"position: relative; outline: none"),c.mover=Yg("div",[Yg("div",[c.lineSpace],"CodeMirror-lines")],null,"position: relative"),c.sizer=Yg("div",[c.mover],"CodeMirror-sizer"),c.heightForcer=Yg("div",null,null,"position: absolute; height: "+Bg+"px; width: 1px;"),c.gutters=Yg("div",null,"CodeMirror-gutters"),c.lineGutter=null,c.scroller=Yg("div",[c.sizer,c.heightForcer,c.gutters],"CodeMirror-scroll"),c.scroller.setAttribute("tabIndex","-1"),c.wrapper=Yg("div",[c.inputDiv,c.scrollbarH,c.scrollbarV,c.scrollbarFiller,c.gutterFiller,c.scroller],"CodeMirror"),d&&8>e&&(c.gutters.style.zIndex=-1,c.scroller.style.paddingRight=0),n&&(g.style.width="0px"),f||(c.scroller.draggable=!0),k&&(c.inputDiv.style.height="1px",c.inputDiv.style.position="absolute"),d&&8>e&&(c.scrollbarH.style.minHeight=c.scrollbarV.style.minWidth="18px"),a&&(a.appendChild?a.appendChild(c.wrapper):a(c.wrapper)),c.viewFrom=c.viewTo=b.first,c.view=[],c.external
 Measured=null,c.viewOffset=0,c.lastWrapHeight=c.lastWrapWidth=0,c.updateLineNumbers=null,c.lineNumWidth=c.lineNumInnerWidth=c.lineNumChars=null,c.prevInput="",c.alignWidgets=!1,c.pollingFast=!1,c.poll=new Gg,c.cachedCharWidth=c.cachedTextHeight=c.cachedPaddingH=null,c.inaccurateSelection=!1,c.maxLine=null,c.maxLineLength=0,c.maxLineChanged=!1,c.wheelDX=c.wheelDY=c.wheelStartX=c.wheelStartY=null,c.shift=!1,c.selForContextMenu=null}function y(a){a.doc.mode=w.getMode(a.options,a.doc.modeOption),z(a)}function z(a){a.doc.iter(function(a){a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null)}),a.doc.frontier=a.doc.first,Tb(a,100),a.state.modeGen++,a.curOp&&Pc(a)}function A(a){a.options.lineWrapping?(eh(a.display.wrapper,"CodeMirror-wrap"),a.display.sizer.style.minWidth=""):(dh(a.display.wrapper,"CodeMirror-wrap"),I(a)),C(a),Pc(a),kc(a),setTimeout(function(){M(a)},100)}function B(a){var b=wc(a.display),c=a.options.lineWrapping,d=c&&Math.max(5,a.display.scroller.clientWidth/xc(a.displ
 ay)-3);return function(e){if(ef(a.doc,e))return 0;var f=0;if(e.widgets)for(var g=0;g<e.widgets.length;g++)e.widgets[g].height&&(f+=e.widgets[g].height);return c?f+(Math.ceil(e.text.length/d)||1)*b:f+b}}function C(a){var b=a.doc,c=B(a);b.iter(function(a){var b=c(a);b!=a.height&&Tf(a,b)})}function D(a){a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+a.options.theme.replace(/(^|\s)\s*/g," cm-s-"),kc(a)}function E(a){F(a),Pc(a),setTimeout(function(){O(a)},20)}function F(a){var b=a.display.gutters,c=a.options.gutters;$g(b);for(var d=0;d<c.length;++d){var e=c[d],f=b.appendChild(Yg("div",null,"CodeMirror-gutter "+e));"CodeMirror-linenumbers"==e&&(a.display.lineGutter=f,f.style.width=(a.display.lineNumWidth||1)+"px")}b.style.display=d?"":"none",G(a)}function G(a){var b=a.display.gutters.offsetWidth;a.display.sizer.style.marginLeft=b+"px",a.display.scrollbarH.style.left=a.options.fixedGutter?b+"px":0}function H(a){if(0==a.height)return 0;for(var c,b=a.text.
 length,d=a;c=Ze(d);){var e=c.find(0,!0);d=e.from.line,b+=e.from.ch-e.to.ch}for(d=a;c=$e(d);){var e=c.find(0,!0);b-=d.text.length-e.from.ch,d=e.to.line,b+=d.text.length-e.to.ch}return b}function I(a){var b=a.display,c=a.doc;b.maxLine=Qf(c,c.first),b.maxLineLength=H(b.maxLine),b.maxLineChanged=!0,c.iter(function(a){var c=H(a);c>b.maxLineLength&&(b.maxLineLength=c,b.maxLine=a)})}function J(a){var b=Ng(a.gutters,"CodeMirror-linenumbers");-1==b&&a.lineNumbers?a.gutters=a.gutters.concat(["CodeMirror-linenumbers"]):b>-1&&!a.lineNumbers&&(a.gutters=a.gutters.slice(0),a.gutters.splice(b,1))}function K(a){return a.display.scroller.clientHeight-a.display.wrapper.clientHeight<Bg-3}function L(a){var b=a.display.scroller;return{clientHeight:b.clientHeight,barHeight:a.display.scrollbarV.clientHeight,scrollWidth:b.scrollWidth,clientWidth:b.clientWidth,hScrollbarTakesSpace:K(a),barWidth:a.display.scrollbarH.clientWidth,docHeight:Math.round(a.doc.height+Yb(a.display))}}function M(a,b){b||(b=L(a));var
  c=a.display,d=mh(c.measure),e=b.docHeight+Bg,f=b.scrollWidth>b.clientWidth;f&&b.scrollWidth<=b.clientWidth+1&&d>0&&!b.hScrollbarTakesSpace&&(f=!1);var g=e>b.clientHeight;if(g?(c.scrollbarV.style.display="block",c.scrollbarV.style.bottom=f?d+"px":"0",c.scrollbarV.firstChild.style.height=Math.max(0,e-b.clientHeight+(b.barHeight||c.scrollbarV.clientHeight))+"px"):(c.scrollbarV.style.display="",c.scrollbarV.firstChild.style.height="0"),f?(c.scrollbarH.style.display="block",c.scrollbarH.style.right=g?d+"px":"0",c.scrollbarH.firstChild.style.width=b.scrollWidth-b.clientWidth+(b.barWidth||c.scrollbarH.clientWidth)+"px"):(c.scrollbarH.style.display="",c.scrollbarH.firstChild.style.width="0"),f&&g?(c.scrollbarFiller.style.display="block",c.scrollbarFiller.style.height=c.scrollbarFiller.style.width=d+"px"):c.scrollbarFiller.style.display="",f&&a.options.coverGutterNextToScrollbar&&a.options.fixedGutter?(c.gutterFiller.style.display="block",c.gutterFiller.style.height=d+"px",c.gutterFiller.st
 yle.width=c.gutters.offsetWidth+"px"):c.gutterFiller.style.display="",!a.state.checkedOverlayScrollbar&&b.clientHeight>0){if(0===d){var h=p&&!l?"12px":"18px";c.scrollbarV.style.minWidth=c.scrollbarH.style.minHeight=h;var i=function(b){pg(b)!=c.scrollbarV&&pg(b)!=c.scrollbarH&&Kc(a,gd)(b)};rg(c.scrollbarV,"mousedown",i),rg(c.scrollbarH,"mousedown",i)}a.state.checkedOverlayScrollbar=!0}}function N(a,b,c){var d=c&&null!=c.top?Math.max(0,c.top):a.scroller.scrollTop;d=Math.floor(d-Xb(a));var e=c&&null!=c.bottom?c.bottom:d+a.wrapper.clientHeight,f=Vf(b,d),g=Vf(b,e);if(c&&c.ensure){var h=c.ensure.from.line,i=c.ensure.to.line;if(f>h)return{from:h,to:Vf(b,Wf(Qf(b,h))+a.wrapper.clientHeight)};if(Math.min(i,b.lastLine())>=g)return{from:Vf(b,Wf(Qf(b,i))-a.wrapper.clientHeight),to:i}}return{from:f,to:Math.max(g,f+1)}}function O(a){var b=a.display,c=b.view;if(b.alignWidgets||b.gutters.firstChild&&a.options.fixedGutter){for(var d=R(b)-b.scroller.scrollLeft+a.doc.scrollLeft,e=b.gutters.offsetWidth,
 f=d+"px",g=0;g<c.length;g++)if(!c[g].hidden){a.options.fixedGutter&&c[g].gutter&&(c[g].gutter.style.left=f);var h=c[g].alignable;if(h)for(var i=0;i<h.length;i++)h[i].style.left=f}a.options.fixedGutter&&(b.gutters.style.left=d+e+"px")}}function P(a){if(!a.options.lineNumbers)return!1;var b=a.doc,c=Q(a.options,b.first+b.size-1),d=a.display;if(c.length!=d.lineNumChars){var e=d.measure.appendChild(Yg("div",[Yg("div",c)],"CodeMirror-linenumber CodeMirror-gutter-elt")),f=e.firstChild.offsetWidth,g=e.offsetWidth-f;return d.lineGutter.style.width="",d.lineNumInnerWidth=Math.max(f,d.lineGutter.offsetWidth-g),d.lineNumWidth=d.lineNumInnerWidth+g,d.lineNumChars=d.lineNumInnerWidth?c.length:-1,d.lineGutter.style.width=d.lineNumWidth+"px",G(a),!0}return!1}function Q(a,b){return String(a.lineNumberFormatter(b+a.firstLineNumber))}function R(a){return a.scroller.getBoundingClientRect().left-a.sizer.getBoundingClientRect().left}function S(a,b,c){var d=a.display;this.viewport=b,this.visible=N(d,a.doc
 ,b),this.editorIsHidden=!d.wrapper.offsetWidth,this.wrapperHeight=d.wrapper.clientHeight,this.wrapperWidth=d.wrapper.clientWidth,this.oldViewFrom=d.viewFrom,this.oldViewTo=d.viewTo,this.oldScrollerWidth=d.scroller.clientWidth,this.force=c,this.dims=$(a)}function T(a,b){var c=a.display,d=a.doc;if(b.editorIsHidden)return Rc(a),!1;if(!b.force&&b.visible.from>=c.viewFrom&&b.visible.to<=c.viewTo&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo)&&0==Vc(a))return!1;P(a)&&(Rc(a),b.dims=$(a));var e=d.first+d.size,f=Math.max(b.visible.from-a.options.viewportMargin,d.first),g=Math.min(e,b.visible.to+a.options.viewportMargin);c.viewFrom<f&&f-c.viewFrom<20&&(f=Math.max(d.first,c.viewFrom)),c.viewTo>g&&c.viewTo-g<20&&(g=Math.min(e,c.viewTo)),v&&(f=cf(a.doc,f),g=df(a.doc,g));var h=f!=c.viewFrom||g!=c.viewTo||c.lastWrapHeight!=b.wrapperHeight||c.lastWrapWidth!=b.wrapperWidth;Uc(a,f,g),c.viewOffset=Wf(Qf(a.doc,c.viewFrom)),a.display.mover.style.top=c.viewOffset+"px";var i=Vc(a);if(!h&&0==i
 &&!b.force&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo))return!1;var j=bh();return i>4&&(c.lineDiv.style.display="none"),_(a,c.updateLineNumbers,b.dims),i>4&&(c.lineDiv.style.display=""),j&&bh()!=j&&j.offsetHeight&&j.focus(),$g(c.cursorDiv),$g(c.selectionDiv),h&&(c.lastWrapHeight=b.wrapperHeight,c.lastWrapWidth=b.wrapperWidth,Tb(a,400)),c.updateLineNumbers=null,!0}function U(a,b){for(var c=b.force,d=b.viewport,e=!0;;e=!1){if(e&&a.options.lineWrapping&&b.oldScrollerWidth!=a.display.scroller.clientWidth)c=!0;else if(c=!1,d&&null!=d.top&&(d={top:Math.min(a.doc.height+Yb(a.display)-Bg-a.display.scroller.clientHeight,d.top)}),b.visible=N(a.display,a.doc,d),b.visible.from>=a.display.viewFrom&&b.visible.to<=a.display.viewTo)break;if(!T(a,b))break;Y(a);var f=L(a);Pb(a),W(a,f),M(a,f)}vg(a,"update",a),(a.display.viewFrom!=b.oldViewFrom||a.display.viewTo!=b.oldViewTo)&&vg(a,"viewportChange",a,a.display.viewFrom,a.display.viewTo)}function V(a,b){var c=new S(a,b);if(T(a,c)){Y(a),U
 (a,c);var d=L(a);Pb(a),W(a,d),M(a,d)}}function W(a,b){a.display.sizer.style.minHeight=a.display.heightForcer.style.top=b.docHeight+"px",a.display.gutters.style.height=Math.max(b.docHeight,b.clientHeight-Bg)+"px"}function X(a,b){a.display.sizer.offsetWidth+a.display.gutters.offsetWidth<a.display.scroller.clientWidth-1&&(a.display.sizer.style.minHeight=a.display.heightForcer.style.top="0px",a.display.gutters.style.height=b.docHeight+"px")}function Y(a){for(var b=a.display,c=b.lineDiv.offsetTop,f=0;f<b.view.length;f++){var h,g=b.view[f];if(!g.hidden){if(d&&8>e){var i=g.node.offsetTop+g.node.offsetHeight;h=i-c,c=i}else{var j=g.node.getBoundingClientRect();h=j.bottom-j.top}var k=g.line.height-h;if(2>h&&(h=wc(b)),(k>.001||-.001>k)&&(Tf(g.line,h),Z(g.line),g.rest))for(var l=0;l<g.rest.length;l++)Z(g.rest[l])}}}function Z(a){if(a.widgets)for(var b=0;b<a.widgets.length;++b)a.widgets[b].height=a.widgets[b].node.offsetHeight}function $(a){for(var b=a.display,c={},d={},e=b.gutters.clientLeft,f=
 b.gutters.firstChild,g=0;f;f=f.nextSibling,++g)c[a.options.gutters[g]]=f.offsetLeft+f.clientLeft+e,d[a.options.gutters[g]]=f.clientWidth;return{fixedPos:R(b),gutterTotalWidth:b.gutters.offsetWidth,gutterLeft:c,gutterWidth:d,wrapperWidth:b.wrapper.clientWidth}}function _(a,b,c){function i(b){var c=b.nextSibling;return f&&p&&a.display.currentWheelTarget==b?b.style.display="none":b.parentNode.removeChild(b),c}for(var d=a.display,e=a.options.lineNumbers,g=d.lineDiv,h=g.firstChild,j=d.view,k=d.viewFrom,l=0;l<j.length;l++){var m=j[l];if(m.hidden);else if(m.node){for(;h!=m.node;)h=i(h);var o=e&&null!=b&&k>=b&&m.lineNumber;m.changes&&(Ng(m.changes,"gutter")>-1&&(o=!1),ab(a,m,k,c)),o&&($g(m.lineNumber),m.lineNumber.appendChild(document.createTextNode(Q(a.options,k)))),h=m.node.nextSibling}else{var n=ib(a,m,k,c);g.insertBefore(n,h)}k+=m.size}for(;h;)h=i(h)}function ab(a,b,c,d){for(var e=0;e<b.changes.length;e++){var f=b.changes[e];"text"==f?eb(a,b):"gutter"==f?gb(a,b,c,d):"class"==f?fb(b):"wi
 dget"==f&&hb(b,d)}b.changes=null}function bb(a){return a.node==a.text&&(a.node=Yg("div",null,null,"position: relative"),a.text.parentNode&&a.text.parentNode.replaceChild(a.node,a.text),a.node.appendChild(a.text),d&&8>e&&(a.node.style.zIndex=2)),a.node}function cb(a){var b=a.bgClass?a.bgClass+" "+(a.line.bgClass||""):a.line.bgClass;if(b&&(b+=" CodeMirror-linebackground"),a.background)b?a.background.className=b:(a.background.parentNode.removeChild(a.background),a.background=null);else if(b){var c=bb(a);a.background=c.insertBefore(Yg("div",null,b),c.firstChild)}}function db(a,b){var c=a.display.externalMeasured;return c&&c.line==b.line?(a.display.externalMeasured=null,b.measure=c.measure,c.built):zf(a,b)}function eb(a,b){var c=b.text.className,d=db(a,b);b.text==b.node&&(b.node=d.pre),b.text.parentNode.replaceChild(d.pre,b.text),b.text=d.pre,d.bgClass!=b.bgClass||d.textClass!=b.textClass?(b.bgClass=d.bgClass,b.textClass=d.textClass,fb(b)):c&&(b.text.className=c)}function fb(a){cb(a),a.l
 ine.wrapClass?bb(a).className=a.line.wrapClass:a.node!=a.text&&(a.node.className="");var b=a.textClass?a.textClass+" "+(a.line.textClass||""):a.line.textClass;a.text.className=b||""}function gb(a,b,c,d){b.gutter&&(b.node.removeChild(b.gutter),b.gutter=null);var e=b.line.gutterMarkers;if(a.options.lineNumbers||e){var f=bb(b),g=b.gutter=f.insertBefore(Yg("div",null,"CodeMirror-gutter-wrapper","left: "+(a.options.fixedGutter?d.fixedPos:-d.gutterTotalWidth)+"px; width: "+d.gutterTotalWidth+"px"),b.text);if(b.line.gutterClass&&(g.className+=" "+b.line.gutterClass),!a.options.lineNumbers||e&&e["CodeMirror-linenumbers"]||(b.lineNumber=g.appendChild(Yg("div",Q(a.options,c),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+d.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+a.display.lineNumInnerWidth+"px"))),e)for(var h=0;h<a.options.gutters.length;++h){var i=a.options.gutters[h],j=e.hasOwnProperty(i)&&e[i];j&&g.appendChild(Yg("div",[j],"CodeMirror-gutter-elt","left: "+d.gutterLeft[i]
 +"px; width: "+d.gutterWidth[i]+"px"))}}}function hb(a,b){a.alignable&&(a.alignable=null);for(var d,c=a.node.firstChild;c;c=d){var d=c.nextSibling;"CodeMirror-linewidget"==c.className&&a.node.removeChild(c)}jb(a,b)}function ib(a,b,c,d){var e=db(a,b);return b.text=b.node=e.pre,e.bgClass&&(b.bgClass=e.bgClass),e.textClass&&(b.textClass=e.textClass),fb(b),gb(a,b,c,d),jb(b,d),b.node}function jb(a,b){if(kb(a.line,a,b,!0),a.rest)for(var c=0;c<a.rest.length;c++)kb(a.rest[c],a,b,!1)}function kb(a,b,c,d){if(a.widgets)for(var e=bb(b),f=0,g=a.widgets;f<g.length;++f){var h=g[f],i=Yg("div",[h.node],"CodeMirror-linewidget");h.handleMouseEvents||(i.ignoreEvents=!0),lb(h,i,b,c),d&&h.above?e.insertBefore(i,b.gutter||b.text):e.appendChild(i),vg(h,"redraw")}}function lb(a,b,c,d){if(a.noHScroll){(c.alignable||(c.alignable=[])).push(b);var e=d.wrapperWidth;b.style.left=d.fixedPos+"px",a.coverGutter||(e-=d.gutterTotalWidth,b.style.paddingLeft=d.gutterTotalWidth+"px"),b.style.width=e+"px"}a.coverGutter&&(
 b.style.zIndex=5,b.style.position="relative",a.noHScroll||(b.style.marginLeft=-d.gutterTotalWidth+"px"))}function ob(a){return mb(a.line,a.ch)}function pb(a,b){return nb(a,b)<0?b:a}function qb(a,b){return nb(a,b)<0?a:b}function rb(a,b){this.ranges=a,this.primIndex=b}function sb(a,b){this.anchor=a,this.head=b}function tb(a,b){var c=a[b];a.sort(function(a,b){return nb(a.from(),b.from())}),b=Ng(a,c);for(var d=1;d<a.length;d++){var e=a[d],f=a[d-1];if(nb(f.to(),e.from())>=0){var g=qb(f.from(),e.from()),h=pb(f.to(),e.to()),i=f.empty()?e.from()==e.head:f.from()==f.head;b>=d&&--b,a.splice(--d,2,new sb(i?h:g,i?g:h))}}return new rb(a,b)}function ub(a,b){return new rb([new sb(a,b||a)],0)}function vb(a,b){return Math.max(a.first,Math.min(b,a.first+a.size-1))}function wb(a,b){if(b.line<a.first)return mb(a.first,0);var c=a.first+a.size-1;return b.line>c?mb(c,Qf(a,c).text.length):xb(b,Qf(a,b.line).text.length)}function xb(a,b){var c=a.ch;return null==c||c>b?mb(a.line,b):0>c?mb(a.line,0):a}function
  yb(a,b){return b>=a.first&&b<a.first+a.size}function zb(a,b){for(var c=[],d=0;d<b.length;d++)c[d]=wb(a,b[d]);return c}function Ab(a,b,c,d){if(a.cm&&a.cm.display.shift||a.extend){var e=b.anchor;if(d){var f=nb(c,e)<0;f!=nb(d,e)<0?(e=c,c=d):f!=nb(c,d)<0&&(c=d)}return new sb(e,c)}return new sb(d||c,c)}function Bb(a,b,c,d){Hb(a,new rb([Ab(a,a.sel.primary(),b,c)],0),d)}function Cb(a,b,c){for(var d=[],e=0;e<a.sel.ranges.length;e++)d[e]=Ab(a,a.sel.ranges[e],b[e],null);var f=tb(d,a.sel.primIndex);Hb(a,f,c)}function Db(a,b,c,d){var e=a.sel.ranges.slice(0);e[b]=c,Hb(a,tb(e,a.sel.primIndex),d)}function Eb(a,b,c,d){Hb(a,ub(b,c),d)}function Fb(a,b){var c={ranges:b.ranges,update:function(b){this.ranges=[];for(var c=0;c<b.length;c++)this.ranges[c]=new sb(wb(a,b[c].anchor),wb(a,b[c].head))}};return tg(a,"beforeSelectionChange",a,c),a.cm&&tg(a.cm,"beforeSelectionChange",a.cm,c),c.ranges!=b.ranges?tb(c.ranges,c.ranges.length-1):b}function Gb(a,b,c){var d=a.history.done,e=Lg(d);e&&e.ranges?(d[d.length
 -1]=b,Ib(a,b,c)):Hb(a,b,c)}function Hb(a,b,c){Ib(a,b,c),cg(a,a.sel,a.cm?a.cm.curOp.id:0/0,c)}function Ib(a,b,c){(zg(a,"beforeSelectionChange")||a.cm&&zg(a.cm,"beforeSelectionChange"))&&(b=Fb(a,b));var d=c&&c.bias||(nb(b.primary().head,a.sel.primary().head)<0?-1:1);Jb(a,Lb(a,b,d,!0)),c&&c.scroll===!1||!a.cm||be(a.cm)}function Jb(a,b){b.equals(a.sel)||(a.sel=b,a.cm&&(a.cm.curOp.updateInput=a.cm.curOp.selectionChanged=!0,yg(a.cm)),vg(a,"cursorActivity",a))}function Kb(a){Jb(a,Lb(a,a.sel,null,!1),Dg)}function Lb(a,b,c,d){for(var e,f=0;f<b.ranges.length;f++){var g=b.ranges[f],h=Mb(a,g.anchor,c,d),i=Mb(a,g.head,c,d);(e||h!=g.anchor||i!=g.head)&&(e||(e=b.ranges.slice(0,f)),e[f]=new sb(h,i))}return e?tb(e,b.primIndex):b}function Mb(a,b,c,d){var e=!1,f=b,g=c||1;a.cantEdit=!1;a:for(;;){var h=Qf(a,f.line);if(h.markedSpans)for(var i=0;i<h.markedSpans.length;++i){var j=h.markedSpans[i],k=j.marker;if((null==j.from||(k.inclusiveLeft?j.from<=f.ch:j.from<f.ch))&&(null==j.to||(k.inclusiveRight?j.to>=
 f.ch:j.to>f.ch))){if(d&&(tg(k,"beforeCursorEnter"),k.explicitlyCleared)){if(h.markedSpans){--i;continue}break}if(!k.atomic)continue;var l=k.find(0>g?-1:1);if(0==nb(l,f)&&(l.ch+=g,l.ch<0?l=l.line>a.first?wb(a,mb(l.line-1)):null:l.ch>h.text.length&&(l=l.line<a.first+a.size-1?mb(l.line+1,0):null),!l)){if(e)return d?(a.cantEdit=!0,mb(a.first,0)):Mb(a,b,c,!0);e=!0,l=b,g=-g}f=l;continue a}}return f}}function Nb(a){for(var b=a.display,c=a.doc,d={},e=d.cursors=document.createDocumentFragment(),f=d.selection=document.createDocumentFragment(),g=0;g<c.sel.ranges.length;g++){var h=c.sel.ranges[g],i=h.empty();(i||a.options.showCursorWhenSelecting)&&Qb(a,h,e),i||Rb(a,h,f)}if(a.options.moveInputWithCursor){var j=qc(a,c.sel.primary().head,"div"),k=b.wrapper.getBoundingClientRect(),l=b.lineDiv.getBoundingClientRect();d.teTop=Math.max(0,Math.min(b.wrapper.clientHeight-10,j.top+l.top-k.top)),d.teLeft=Math.max(0,Math.min(b.wrapper.clientWidth-10,j.left+l.left-k.left))}return d}function Ob(a,b){_g(a.dis
 play.cursorDiv,b.cursors),_g(a.display.selectionDiv,b.selection),null!=b.teTop&&(a.display.inputDiv.style.top=b.teTop+"px",a.display.inputDiv.style.left=b.teLeft+"px")}function Pb(a){Ob(a,Nb(a))}function Qb(a,b,c){var d=qc(a,b.head,"div",null,null,!a.options.singleCursorHeightPerLine),e=c.appendChild(Yg("div","\xa0","CodeMirror-cursor"));if(e.style.left=d.left+"px",e.style.top=d.top+"px",e.style.height=Math.max(0,d.bottom-d.top)*a.options.cursorHeight+"px",d.other){var f=c.appendChild(Yg("div","\xa0","CodeMirror-cursor CodeMirror-secondarycursor"));f.style.display="",f.style.left=d.other.left+"px",f.style.top=d.other.top+"px",f.style.height=.85*(d.other.bottom-d.other.top)+"px"}}function Rb(a,b,c){function j(a,b,c,d){0>b&&(b=0),b=Math.round(b),d=Math.round(d),f.appendChild(Yg("div",null,"CodeMirror-selected","position: absolute; left: "+a+"px; top: "+b+"px; width: "+(null==c?i-a:c)+"px; height: "+(d-b)+"px"))}function k(b,c,d){function m(c,d){return pc(a,mb(b,c),"div",f,d)}var k,l,f
 =Qf(e,b),g=f.text.length;return xh(Xf(f),c||0,null==d?g:d,function(a,b,e){var n,o,p,f=m(a,"left");if(a==b)n=f,o=p=f.left;else{if(n=m(b-1,"right"),"rtl"==e){var q=f;f=n,n=q}o=f.left,p=n.right}null==c&&0==a&&(o=h),n.top-f.top>3&&(j(o,f.top,null,f.bottom),o=h,f.bottom<n.top&&j(o,f.bottom,null,n.top)),null==d&&b==g&&(p=i),(!k||f.top<k.top||f.top==k.top&&f.left<k.left)&&(k=f),(!l||n.bottom>l.bottom||n.bottom==l.bottom&&n.right>l.right)&&(l=n),h+1>o&&(o=h),j(o,n.top,p-o,n.bottom)}),{start:k,end:l}}var d=a.display,e=a.doc,f=document.createDocumentFragment(),g=Zb(a.display),h=g.left,i=d.lineSpace.offsetWidth-g.right,l=b.from(),m=b.to();if(l.line==m.line)k(l.line,l.ch,m.ch);else{var n=Qf(e,l.line),o=Qf(e,m.line),p=af(n)==af(o),q=k(l.line,l.ch,p?n.text.length+1:null).end,r=k(m.line,p?0:null,m.ch).start;p&&(q.top<r.top-2?(j(q.right,q.top,null,q.bottom),j(h,r.top,r.left,r.bottom)):j(q.right,q.top,r.left-q.right,q.bottom)),q.bottom<r.top&&j(h,q.bottom,null,r.top)}c.appendChild(f)}function Sb(a){
 if(a.state.focused){var b=a.display;clearInterval(b.blinker);var c=!0;b.cursorDiv.style.visibility="",a.options.cursorBlinkRate>0?b.blinker=setInterval(function(){b.cursorDiv.style.visibility=(c=!c)?"":"hidden"},a.options.cursorBlinkRate):a.options.cursorBlinkRate<0&&(b.cursorDiv.style.visibility="hidden")}}function Tb(a,b){a.doc.mode.startState&&a.doc.frontier<a.display.viewTo&&a.state.highlight.set(b,Rg(Ub,a))}function Ub(a){var b=a.doc;if(b.frontier<b.first&&(b.frontier=b.first),!(b.frontier>=a.display.viewTo)){var c=+new Date+a.options.workTime,d=re(b.mode,Wb(a,b.frontier)),e=[];b.iter(b.frontier,Math.min(b.first+b.size,a.display.viewTo+500),function(f){if(b.frontier>=a.display.viewFrom){var g=f.styles,h=tf(a,f,d,!0);f.styles=h.styles;var i=f.styleClasses,j=h.classes;j?f.styleClasses=j:i&&(f.styleClasses=null);for(var k=!g||g.length!=f.styles.length||i!=j&&(!i||!j||i.bgClass!=j.bgClass||i.textClass!=j.textClass),l=0;!k&&l<g.length;++l)k=g[l]!=f.styles[l];k&&e.push(b.frontier),f.
 stateAfter=re(b.mode,d)}else vf(a,f.text,d),f.stateAfter=0==b.frontier%5?re(b.mode,d):null;return++b.frontier,+new Date>c?(Tb(a,a.options.workDelay),!0):void 0}),e.length&&Jc(a,function(){for(var b=0;b<e.length;b++)Qc(a,e[b],"text")})}}function Vb(a,b,c){for(var d,e,f=a.doc,g=c?-1:b-(a.doc.mode.innerMode?1e3:100),h=b;h>g;--h){if(h<=f.first)return f.first;var i=Qf(f,h-1);if(i.stateAfter&&(!c||h<=f.frontier))return h;var j=Hg(i.text,null,a.options.tabSize);(null==e||d>j)&&(e=h-1,d=j)}return e}function Wb(a,b,c){var d=a.doc,e=a.display;if(!d.mode.startState)return!0;var f=Vb(a,b,c),g=f>d.first&&Qf(d,f-1).stateAfter;return g=g?re(d.mode,g):se(d.mode),d.iter(f,b,function(c){vf(a,c.text,g);var h=f==b-1||0==f%5||f>=e.viewFrom&&f<e.viewTo;c.stateAfter=h?re(d.mode,g):null,++f}),c&&(d.frontier=f),g}function Xb(a){return a.lineSpace.offsetTop}function Yb(a){return a.mover.offsetHeight-a.lineSpace.offsetHeight}function Zb(a){if(a.cachedPaddingH)return a.cachedPaddingH;var b=_g(a.measure,Yg("pre
 ","x")),c=window.getComputedStyle?window.getComputedStyle(b):b.currentStyle,d={left:parseInt(c.paddingLeft),right:parseInt(c.paddingRight)};return isNaN(d.left)||isNaN(d.right)||(a.cachedPaddingH=d),d}function $b(a,b,c){var d=a.options.lineWrapping,e=d&&a.display.scroller.clientWidth;if(!b.measure.heights||d&&b.measure.width!=e){var f=b.measure.heights=[];if(d){b.measure.width=e;for(var g=b.text.firstChild.getClientRects(),h=0;h<g.length-1;h++){var i=g[h],j=g[h+1];Math.abs(i.bottom-j.bottom)>2&&f.push((i.bottom+j.top)/2-c.top)}}f.push(c.bottom-c.top)}}function _b(a,b,c){if(a.line==b)return{map:a.measure.map,cache:a.measure.cache};for(var d=0;d<a.rest.length;d++)if(a.rest[d]==b)return{map:a.measure.maps[d],cache:a.measure.caches[d]};for(var d=0;d<a.rest.length;d++)if(Uf(a.rest[d])>c)return{map:a.measure.maps[d],cache:a.measure.caches[d],before:!0}}function ac(a,b){b=af(b);var c=Uf(b),d=a.display.externalMeasured=new Nc(a.doc,b,c);d.lineN=c;var e=d.built=zf(a,d);return d.text=e.pre,_g
 (a.display.lineMeasure,e.pre),d}function bc(a,b,c,d){return ec(a,dc(a,b),c,d)}function cc(a,b){if(b>=a.display.viewFrom&&b<a.display.viewTo)return a.display.view[Sc(a,b)];var c=a.display.externalMeasured;return c&&b>=c.lineN&&b<c.lineN+c.size?c:void 0}function dc(a,b){var c=Uf(b),d=cc(a,c);d&&!d.text?d=null:d&&d.changes&&ab(a,d,c,$(a)),d||(d=ac(a,b));var e=_b(d,b,c);return{line:b,view:d,rect:null,map:e.map,cache:e.cache,before:e.before,hasHeights:!1}}function ec(a,b,c,d,e){b.before&&(c=-1);var g,f=c+(d||"");return b.cache.hasOwnProperty(f)?g=b.cache[f]:(b.rect||(b.rect=b.view.text.getBoundingClientRect()),b.hasHeights||($b(a,b.view,b.rect),b.hasHeights=!0),g=gc(a,b,c,d),g.bogus||(b.cache[f]=g)),{left:g.left,right:g.right,top:e?g.rtop:g.top,bottom:e?g.rbottom:g.bottom}}function gc(a,b,c,f){for(var h,i,j,k,g=b.map,l=0;l<g.length;l+=3){var m=g[l],n=g[l+1];if(m>c?(i=0,j=1,k="left"):n>c?(i=c-m,j=i+1):(l==g.length-3||c==n&&g[l+3]>c)&&(j=n-m,i=j-1,c>=n&&(k="right")),null!=i){if(h=g[l+2],m=
 =n&&f==(h.insertLeft?"left":"right")&&(k=f),"left"==f&&0==i)for(;l&&g[l-2]==g[l-3]&&g[l-1].insertLeft;)h=g[(l-=3)+2],k="left";if("right"==f&&i==n-m)for(;l<g.length-3&&g[l+3]==g[l+4]&&!g[l+5].insertLeft;)h=g[(l+=3)+2],k="right";break}}var o;if(3==h.nodeType){for(var l=0;4>l;l++){for(;i&&Xg(b.line.text.charAt(m+i));)--i;for(;n>m+j&&Xg(b.line.text.charAt(m+j));)++j;if(d&&9>e&&0==i&&j==n-m)o=h.parentNode.getBoundingClientRect();else if(d&&a.options.lineWrapping){var p=Zg(h,i,j).getClientRects();o=p.length?p["right"==f?p.length-1:0]:fc}else o=Zg(h,i,j).getBoundingClientRect()||fc;if(o.left||o.right||0==i)break;j=i,i-=1,k="right"}d&&11>e&&(o=hc(a.display.measure,o))}else{i>0&&(k=f="right");var p;o=a.options.lineWrapping&&(p=h.getClientRects()).length>1?p["right"==f?p.length-1:0]:h.getBoundingClientRect()}if(d&&9>e&&!i&&(!o||!o.left&&!o.right)){var q=h.parentNode.getClientRects()[0];o=q?{left:q.left,right:q.left+xc(a.display),top:q.top,bottom:q.bottom}:fc}for(var r=o.top-b.rect.top,s=o.bot
 tom-b.rect.top,t=(r+s)/2,u=b.view.measure.heights,l=0;l<u.length-1&&!(t<u[l]);l++);var v=l?u[l-1]:0,w=u[l],x={left:("right"==k?o.right:o.left)-b.rect.left,right:("left"==k?o.left:o.right)-b.rect.left,top:v,bottom:w};return o.left||o.right||(x.bogus=!0),a.options.singleCursorHeightPerLine||(x.rtop=r,x.rbottom=s),x}function hc(a,b){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!vh(a))return b;var c=screen.logicalXDPI/screen.deviceXDPI,d=screen.logicalYDPI/screen.deviceYDPI;return{left:b.left*c,right:b.right*c,top:b.top*d,bottom:b.bottom*d}}function ic(a){if(a.measure&&(a.measure.cache={},a.measure.heights=null,a.rest))for(var b=0;b<a.rest.length;b++)a.measure.caches[b]={}}function jc(a){a.display.externalMeasure=null,$g(a.display.lineMeasure);for(var b=0;b<a.display.view.length;b++)ic(a.display.view[b])}function kc(a){jc(a),a.display.cachedCharWidth=a.display.cachedTextHeight=a.display.cachedPaddingH=null,a.options.lineWrapping||(a.display.maxLine
 Changed=!0),a.display.lineNumChars=null}function lc(){return window.pageXOffset||(document.documentElement||document.body).scrollLeft}function mc(){return window.pageYOffset||(document.documentElement||document.body).scrollTop}function nc(a,b,c,d){if(b.widgets)for(var e=0;e<b.widgets.length;++e)if(b.widgets[e].above){var f=jf(b.widgets[e]);c.top+=f,c.bottom+=f}if("line"==d)return c;d||(d="local");var g=Wf(b);if("local"==d?g+=Xb(a.display):g-=a.display.viewOffset,"page"==d||"window"==d){var h=a.display.lineSpace.getBoundingClientRect();g+=h.top+("window"==d?0:mc());var i=h.left+("window"==d?0:lc());c.left+=i,c.right+=i}return c.top+=g,c.bottom+=g,c}function oc(a,b,c){if("div"==c)return b;var d=b.left,e=b.top;if("page"==c)d-=lc(),e-=mc();else if("local"==c||!c){var f=a.display.sizer.getBoundingClientRect();d+=f.left,e+=f.top}var g=a.display.lineSpace.getBoundingClientRect();return{left:d-g.left,top:e-g.top}}function pc(a,b,c,d,e){return d||(d=Qf(a.doc,b.line)),nc(a,d,bc(a,d,b.ch,e),c)
 }function qc(a,b,c,d,e,f){function g(b,g){var h=ec(a,e,b,g?"right":"left",f);return g?h.left=h.right:h.right=h.left,nc(a,d,h,c)}function h(a,b){var c=i[b],d=c.level%2;return a==yh(c)&&b&&c.level<i[b-1].level?(c=i[--b],a=zh(c)-(c.level%2?0:1),d=!0):a==zh(c)&&b<i.length-1&&c.level<i[b+1].level&&(c=i[++b],a=yh(c)-c.level%2,d=!1),d&&a==c.to&&a>c.from?g(a-1):g(a,d)}d=d||Qf(a.doc,b.line),e||(e=dc(a,d));var i=Xf(d),j=b.ch;if(!i)return g(j);var k=Hh(i,j),l=h(j,k);return null!=Gh&&(l.other=h(j,Gh)),l}function rc(a,b){var c=0,b=wb(a.doc,b);a.options.lineWrapping||(c=xc(a.display)*b.ch);var d=Qf(a.doc,b.line),e=Wf(d)+Xb(a.display);return{left:c,right:c,top:e,bottom:e+d.height}}function sc(a,b,c,d){var e=mb(a,b);return e.xRel=d,c&&(e.outside=!0),e}function tc(a,b,c){var d=a.doc;if(c+=a.display.viewOffset,0>c)return sc(d.first,0,!0,-1);var e=Vf(d,c),f=d.first+d.size-1;if(e>f)return sc(d.first+d.size-1,Qf(d,f).text.length,!0,1);0>b&&(b=0);for(var g=Qf(d,e);;){var h=uc(a,g,e,b,c),i=$e(g),j=i&&i.fi
 nd(0,!0);if(!i||!(h.ch>j.from.ch||h.ch==j.from.ch&&h.xRel>0))return h;e=Uf(g=j.to.line)}}function uc(a,b,c,d,e){function j(d){var e=qc(a,mb(c,d),"line",b,i);return g=!0,f>e.bottom?e.left-h:f<e.top?e.left+h:(g=!1,e.left)}var f=e-Wf(b),g=!1,h=2*a.display.wrapper.clientWidth,i=dc(a,b),k=Xf(b),l=b.text.length,m=Ah(b),n=Bh(b),o=j(m),p=g,q=j(n),r=g;if(d>q)return sc(c,n,r,1);for(;;){if(k?n==m||n==Jh(b,m,1):1>=n-m){for(var s=o>d||q-d>=d-o?m:n,t=d-(s==m?o:q);Xg(b.text.charAt(s));)++s;var u=sc(c,s,s==m?p:r,-1>t?-1:t>1?1:0);return u}var v=Math.ceil(l/2),w=m+v;if(k){w=m;for(var x=0;v>x;++x)w=Jh(b,w,1)}var y=j(w);y>d?(n=w,q=y,(r=g)&&(q+=1e3),l=v):(m=w,o=y,p=g,l-=v)}}function wc(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(null==vc){vc=Yg("pre");for(var b=0;49>b;++b)vc.appendChild(document.createTextNode("x")),vc.appendChild(Yg("br"));vc.appendChild(document.createTextNode("x"))}_g(a.measure,vc);var c=vc.offsetHeight/50;return c>3&&(a.cachedTextHeight=c),$g(a.measure),c||1}function
  xc(a){if(null!=a.cachedCharWidth)return a.cachedCharWidth;var b=Yg("span","xxxxxxxxxx"),c=Yg("pre",[b]);_g(a.measure,c);var d=b.getBoundingClientRect(),e=(d.right-d.left)/10;return e>2&&(a.cachedCharWidth=e),e||10}function Ac(a){a.curOp={cm:a,viewChanged:!1,startHeight:a.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,id:++zc},yc?yc.ops.push(a.curOp):a.curOp.ownsGroup=yc={ops:[a.curOp],delayedCallbacks:[]}}function Bc(a){var b=a.delayedCallbacks,c=0;do{for(;c<b.length;c++)b[c]();for(var d=0;d<a.ops.length;d++){var e=a.ops[d];if(e.cursorActivityHandlers)for(;e.cursorActivityCalled<e.cursorActivityHandlers.length;)e.cursorActivityHandlers[e.cursorActivityCalled++](e.cm)}}while(c<b.length)}function Cc(a){var b=a.curOp,c=b.ownsGroup;if(c)try{Bc(c)}finally{yc=null;for(var d=0;d<c.ops.length;d++)c.ops[d].cm.curOp=null;Dc(c)}}function
  Dc(a){for(var b=a.ops,c=0;c<b.length;c++)Ec(b[c]);for(var c=0;c<b.length;c++)Fc(b[c]);for(var c=0;c<b.length;c++)Gc(b[c]);
+for(var c=0;c<b.length;c++)Hc(b[c]);for(var c=0;c<b.length;c++)Ic(b[c])}function Ec(a){var b=a.cm,c=b.display;a.updateMaxLine&&I(b),a.mustUpdate=a.viewChanged||a.forceUpdate||null!=a.scrollTop||a.scrollToPos&&(a.scrollToPos.from.line<c.viewFrom||a.scrollToPos.to.line>=c.viewTo)||c.maxLineChanged&&b.options.lineWrapping,a.update=a.mustUpdate&&new S(b,a.mustUpdate&&{top:a.scrollTop,ensure:a.scrollToPos},a.forceUpdate)}function Fc(a){a.updatedDisplay=a.mustUpdate&&T(a.cm,a.update)}function Gc(a){var b=a.cm,c=b.display;a.updatedDisplay&&Y(b),a.barMeasure=L(b),c.maxLineChanged&&!b.options.lineWrapping&&(a.adjustWidthTo=bc(b,c.maxLine,c.maxLine.text.length).left+3,a.maxScrollLeft=Math.max(0,c.sizer.offsetLeft+a.adjustWidthTo+Bg-c.scroller.clientWidth)),(a.updatedDisplay||a.selectionChanged)&&(a.newSelectionNodes=Nb(b))}function Hc(a){var b=a.cm;null!=a.adjustWidthTo&&(b.display.sizer.style.minWidth=a.adjustWidthTo+"px",a.maxScrollLeft<b.doc.scrollLeft&&sd(b,Math.min(b.display.scroller.scr
 ollLeft,a.maxScrollLeft),!0),b.display.maxLineChanged=!1),a.newSelectionNodes&&Ob(b,a.newSelectionNodes),a.updatedDisplay&&W(b,a.barMeasure),(a.updatedDisplay||a.startHeight!=b.doc.height)&&M(b,a.barMeasure),a.selectionChanged&&Sb(b),b.state.focused&&a.updateInput&&$c(b,a.typing)}function Ic(a){var b=a.cm,c=b.display,d=b.doc;if(null!=a.adjustWidthTo&&Math.abs(a.barMeasure.scrollWidth-b.display.scroller.scrollWidth)>1&&M(b),a.updatedDisplay&&U(b,a.update),null==c.wheelStartX||null==a.scrollTop&&null==a.scrollLeft&&!a.scrollToPos||(c.wheelStartX=c.wheelStartY=null),null!=a.scrollTop&&(c.scroller.scrollTop!=a.scrollTop||a.forceScroll)){var e=Math.max(0,Math.min(c.scroller.scrollHeight-c.scroller.clientHeight,a.scrollTop));c.scroller.scrollTop=c.scrollbarV.scrollTop=d.scrollTop=e}if(null!=a.scrollLeft&&(c.scroller.scrollLeft!=a.scrollLeft||a.forceScroll)){var g=Math.max(0,Math.min(c.scroller.scrollWidth-c.scroller.clientWidth,a.scrollLeft));c.scroller.scrollLeft=c.scrollbarH.scrollLeft=
 d.scrollLeft=g,O(b)}if(a.scrollToPos){var h=Zd(b,wb(d,a.scrollToPos.from),wb(d,a.scrollToPos.to),a.scrollToPos.margin);a.scrollToPos.isCursor&&b.state.focused&&Yd(b,h)}var i=a.maybeHiddenMarkers,j=a.maybeUnhiddenMarkers;if(i)for(var k=0;k<i.length;++k)i[k].lines.length||tg(i[k],"hide");if(j)for(var k=0;k<j.length;++k)j[k].lines.length&&tg(j[k],"unhide");c.wrapper.offsetHeight&&(d.scrollTop=b.display.scroller.scrollTop),a.updatedDisplay&&f&&(b.options.lineWrapping&&X(b,a.barMeasure),a.barMeasure.scrollWidth>a.barMeasure.clientWidth&&a.barMeasure.scrollWidth<a.barMeasure.clientWidth+1&&!K(b)&&M(b)),a.changeObjs&&tg(b,"changes",b,a.changeObjs)}function Jc(a,b){if(a.curOp)return b();Ac(a);try{return b()}finally{Cc(a)}}function Kc(a,b){return function(){if(a.curOp)return b.apply(a,arguments);Ac(a);try{return b.apply(a,arguments)}finally{Cc(a)}}}function Lc(a){return function(){if(this.curOp)return a.apply(this,arguments);Ac(this);try{return a.apply(this,arguments)}finally{Cc(this)}}}func
 tion Mc(a){return function(){var b=this.cm;if(!b||b.curOp)return a.apply(this,arguments);Ac(b);try{return a.apply(this,arguments)}finally{Cc(b)}}}function Nc(a,b,c){this.line=b,this.rest=bf(b),this.size=this.rest?Uf(Lg(this.rest))-c+1:1,this.node=this.text=null,this.hidden=ef(a,b)}function Oc(a,b,c){for(var e,d=[],f=b;c>f;f=e){var g=new Nc(a.doc,Qf(a.doc,f),f);e=f+g.size,d.push(g)}return d}function Pc(a,b,c,d){null==b&&(b=a.doc.first),null==c&&(c=a.doc.first+a.doc.size),d||(d=0);var e=a.display;if(d&&c<e.viewTo&&(null==e.updateLineNumbers||e.updateLineNumbers>b)&&(e.updateLineNumbers=b),a.curOp.viewChanged=!0,b>=e.viewTo)v&&cf(a.doc,b)<e.viewTo&&Rc(a);else if(c<=e.viewFrom)v&&df(a.doc,c+d)>e.viewFrom?Rc(a):(e.viewFrom+=d,e.viewTo+=d);else if(b<=e.viewFrom&&c>=e.viewTo)Rc(a);else if(b<=e.viewFrom){var f=Tc(a,c,c+d,1);f?(e.view=e.view.slice(f.index),e.viewFrom=f.lineN,e.viewTo+=d):Rc(a)}else if(c>=e.viewTo){var f=Tc(a,b,b,-1);f?(e.view=e.view.slice(0,f.index),e.viewTo=f.lineN):Rc(a)}e
 lse{var g=Tc(a,b,b,-1),h=Tc(a,c,c+d,1);g&&h?(e.view=e.view.slice(0,g.index).concat(Oc(a,g.lineN,h.lineN)).concat(e.view.slice(h.index)),e.viewTo+=d):Rc(a)}var i=e.externalMeasured;i&&(c<i.lineN?i.lineN+=d:b<i.lineN+i.size&&(e.externalMeasured=null))}function Qc(a,b,c){a.curOp.viewChanged=!0;var d=a.display,e=a.display.externalMeasured;if(e&&b>=e.lineN&&b<e.lineN+e.size&&(d.externalMeasured=null),!(b<d.viewFrom||b>=d.viewTo)){var f=d.view[Sc(a,b)];if(null!=f.node){var g=f.changes||(f.changes=[]);-1==Ng(g,c)&&g.push(c)}}}function Rc(a){a.display.viewFrom=a.display.viewTo=a.doc.first,a.display.view=[],a.display.viewOffset=0}function Sc(a,b){if(b>=a.display.viewTo)return null;if(b-=a.display.viewFrom,0>b)return null;for(var c=a.display.view,d=0;d<c.length;d++)if(b-=c[d].size,0>b)return d}function Tc(a,b,c,d){var f,e=Sc(a,b),g=a.display.view;if(!v||c==a.doc.first+a.doc.size)return{index:e,lineN:c};for(var h=0,i=a.display.viewFrom;e>h;h++)i+=g[h].size;if(i!=b){if(d>0){if(e==g.length-1)ret
 urn null;f=i+g[e].size-b,e++}else f=i-b;b+=f,c+=f}for(;cf(a.doc,c)!=c;){if(e==(0>d?0:g.length-1))return null;c+=d*g[e-(0>d?1:0)].size,e+=d}return{index:e,lineN:c}}function Uc(a,b,c){var d=a.display,e=d.view;0==e.length||b>=d.viewTo||c<=d.viewFrom?(d.view=Oc(a,b,c),d.viewFrom=b):(d.viewFrom>b?d.view=Oc(a,b,d.viewFrom).concat(d.view):d.viewFrom<b&&(d.view=d.view.slice(Sc(a,b))),d.viewFrom=b,d.viewTo<c?d.view=d.view.concat(Oc(a,d.viewTo,c)):d.viewTo>c&&(d.view=d.view.slice(0,Sc(a,c)))),d.viewTo=c}function Vc(a){for(var b=a.display.view,c=0,d=0;d<b.length;d++){var e=b[d];e.hidden||e.node&&!e.changes||++c}return c}function Wc(a){a.display.pollingFast||a.display.poll.set(a.options.pollInterval,function(){Zc(a),a.state.focused&&Wc(a)})}function Xc(a){function c(){var d=Zc(a);d||b?(a.display.pollingFast=!1,Wc(a)):(b=!0,a.display.poll.set(60,c))}var b=!1;a.display.pollingFast=!0,a.display.poll.set(20,c)}function Zc(a){var b=a.display.input,c=a.display.prevInput,f=a.doc;if(!a.state.focused||s
 h(b)&&!c||bd(a)||a.options.disableInput||a.state.keySeq)return!1;a.state.pasteIncoming&&a.state.fakedLastChar&&(b.value=b.value.substring(0,b.value.length-1),a.state.fakedLastChar=!1);var g=b.value;if(g==c&&!a.somethingSelected())return!1;if(d&&e>=9&&a.display.inputHasSelection===g||p&&/[\uf700-\uf7ff]/.test(g))return $c(a),!1;var h=!a.curOp;h&&Ac(a),a.display.shift=!1,8203!=g.charCodeAt(0)||f.sel!=a.display.selForContextMenu||c||(c="\u200b");for(var i=0,j=Math.min(c.length,g.length);j>i&&c.charCodeAt(i)==g.charCodeAt(i);)++i;var k=g.slice(i),l=rh(k),m=null;a.state.pasteIncoming&&f.sel.ranges.length>1&&(Yc&&Yc.join("\n")==k?m=0==f.sel.ranges.length%Yc.length&&Og(Yc,rh):l.length==f.sel.ranges.length&&(m=Og(l,function(a){return[a]})));for(var n=f.sel.ranges.length-1;n>=0;n--){var o=f.sel.ranges[n],q=o.from(),r=o.to();i<c.length?q=mb(q.line,q.ch-(c.length-i)):a.state.overwrite&&o.empty()&&!a.state.pasteIncoming&&(r=mb(r.line,Math.min(Qf(f,r.line).text.length,r.ch+Lg(l).length)));var s=
 a.curOp.updateInput,t={from:q,to:r,text:m?m[n%m.length]:l,origin:a.state.pasteIncoming?"paste":a.state.cutIncoming?"cut":"+input"};if(Rd(a.doc,t),vg(a,"inputRead",a,t),k&&!a.state.pasteIncoming&&a.options.electricChars&&a.options.smartIndent&&o.head.ch<100&&(!n||f.sel.ranges[n-1].head.line!=o.head.line)){var u=a.getModeAt(o.head),v=Ld(t);if(u.electricChars){for(var w=0;w<u.electricChars.length;w++)if(k.indexOf(u.electricChars.charAt(w))>-1){de(a,v.line,"smart");break}}else u.electricInput&&u.electricInput.test(Qf(f,v.line).text.slice(0,v.ch))&&de(a,v.line,"smart")}}return be(a),a.curOp.updateInput=s,a.curOp.typing=!0,g.length>1e3||g.indexOf("\n")>-1?b.value=a.display.prevInput="":a.display.prevInput=g,h&&Cc(a),a.state.pasteIncoming=a.state.cutIncoming=!1,!0}function $c(a,b){var c,f,g=a.doc;if(a.somethingSelected()){a.display.prevInput="";var h=g.sel.primary();c=th&&(h.to().line-h.from().line>100||(f=a.getSelection()).length>1e3);var i=c?"-":f||a.getSelection();a.display.input.value=
 i,a.state.focused&&Mg(a.display.input),d&&e>=9&&(a.display.inputHasSelection=i)}else b||(a.display.prevInput=a.display.input.value="",d&&e>=9&&(a.display.inputHasSelection=null));a.display.inaccurateSelection=c}function _c(a){"nocursor"==a.options.readOnly||o&&bh()==a.display.input||a.display.input.focus()}function ad(a){a.state.focused||(_c(a),Hd(a))}function bd(a){return a.options.readOnly||a.doc.cantEdit}function cd(a){function c(){a.state.focused&&setTimeout(Rg(_c,a),0)}function g(b){xg(a,b)||og(b)}function h(c){if(a.somethingSelected())Yc=a.getSelections(),b.inaccurateSelection&&(b.prevInput="",b.inaccurateSelection=!1,b.input.value=Yc.join("\n"),Mg(b.input));else{for(var d=[],e=[],f=0;f<a.doc.sel.ranges.length;f++){var g=a.doc.sel.ranges[f].head.line,h={anchor:mb(g,0),head:mb(g+1,0)};e.push(h),d.push(a.getRange(h.anchor,h.head))}"cut"==c.type?a.setSelections(e,null,Dg):(b.prevInput="",b.input.value=d.join("\n"),Mg(b.input)),Yc=d}"cut"==c.type&&(a.state.cutIncoming=!0)}var b=a.
 display;rg(b.scroller,"mousedown",Kc(a,gd)),d&&11>e?rg(b.scroller,"dblclick",Kc(a,function(b){if(!xg(a,b)){var c=fd(a,b);if(c&&!nd(a,b)&&!ed(a.display,b)){lg(b);var d=a.findWordAt(c);Bb(a.doc,d.anchor,d.head)}}})):rg(b.scroller,"dblclick",function(b){xg(a,b)||lg(b)}),rg(b.lineSpace,"selectstart",function(a){ed(b,a)||lg(a)}),t||rg(b.scroller,"contextmenu",function(b){Jd(a,b)}),rg(b.scroller,"scroll",function(){b.scroller.clientHeight&&(rd(a,b.scroller.scrollTop),sd(a,b.scroller.scrollLeft,!0),tg(a,"scroll",a))}),rg(b.scrollbarV,"scroll",function(){b.scroller.clientHeight&&rd(a,b.scrollbarV.scrollTop)}),rg(b.scrollbarH,"scroll",function(){b.scroller.clientHeight&&sd(a,b.scrollbarH.scrollLeft)}),rg(b.scroller,"mousewheel",function(b){vd(a,b)}),rg(b.scroller,"DOMMouseScroll",function(b){vd(a,b)}),rg(b.scrollbarH,"mousedown",c),rg(b.scrollbarV,"mousedown",c),rg(b.wrapper,"scroll",function(){b.wrapper.scrollTop=b.wrapper.scrollLeft=0}),rg(b.input,"keyup",function(b){Fd.call(a,b)}),rg(b.in
 put,"input",function(){d&&e>=9&&a.display.inputHasSelection&&(a.display.inputHasSelection=null),Xc(a)}),rg(b.input,"keydown",Kc(a,Dd)),rg(b.input,"keypress",Kc(a,Gd)),rg(b.input,"focus",Rg(Hd,a)),rg(b.input,"blur",Rg(Id,a)),a.options.dragDrop&&(rg(b.scroller,"dragstart",function(b){qd(a,b)}),rg(b.scroller,"dragenter",g),rg(b.scroller,"dragover",g),rg(b.scroller,"drop",Kc(a,pd))),rg(b.scroller,"paste",function(c){ed(b,c)||(a.state.pasteIncoming=!0,_c(a),Xc(a))}),rg(b.input,"paste",function(){if(f&&!a.state.fakedLastChar&&!(new Date-a.state.lastMiddleDown<200)){var c=b.input.selectionStart,d=b.input.selectionEnd;b.input.value+="$",b.input.selectionEnd=d,b.input.selectionStart=c,a.state.fakedLastChar=!0}a.state.pasteIncoming=!0,Xc(a)}),rg(b.input,"cut",h),rg(b.input,"copy",h),k&&rg(b.sizer,"mouseup",function(){bh()==b.input&&b.input.blur(),_c(a)})}function dd(a){var b=a.display;(b.lastWrapHeight!=b.wrapper.clientHeight||b.lastWrapWidth!=b.wrapper.clientWidth)&&(b.cachedCharWidth=b.cach
 edTextHeight=b.cachedPaddingH=null,a.setSize())}function ed(a,b){for(var c=pg(b);c!=a.wrapper;c=c.parentNode)if(!c||c.ignoreEvents||c.parentNode==a.sizer&&c!=a.mover)return!0}function fd(a,b,c,d){var e=a.display;if(!c){var f=pg(b);if(f==e.scrollbarH||f==e.scrollbarV||f==e.scrollbarFiller||f==e.gutterFiller)return null}var g,h,i=e.lineSpace.getBoundingClientRect();try{g=b.clientX-i.left,h=b.clientY-i.top}catch(b){return null}var k,j=tc(a,g,h);if(d&&1==j.xRel&&(k=Qf(a.doc,j.line).text).length==j.ch){var l=Hg(k,k.length,a.options.tabSize)-k.length;j=mb(j.line,Math.max(0,Math.round((g-Zb(a.display).left)/xc(a.display))-l))}return j}function gd(a){if(!xg(this,a)){var b=this,c=b.display;if(c.shift=a.shiftKey,ed(c,a))return f||(c.scroller.draggable=!1,setTimeout(function(){c.scroller.draggable=!0},100)),void 0;if(!nd(b,a)){var d=fd(b,a);switch(window.focus(),qg(a)){case 1:d?jd(b,a,d):pg(a)==c.scroller&&lg(a);break;case 2:f&&(b.state.lastMiddleDown=+new Date),d&&Bb(b.doc,d),setTimeout(Rg(_c
 ,b),20),lg(a);break;case 3:t&&Jd(b,a)}}}}function jd(a,b,c){setTimeout(Rg(ad,a),0);var e,d=+new Date;id&&id.time>d-400&&0==nb(id.pos,c)?e="triple":hd&&hd.time>d-400&&0==nb(hd.pos,c)?(e="double",id={time:d,pos:c}):(e="single",hd={time:d,pos:c});var f=a.doc.sel,g=p?b.metaKey:b.ctrlKey;a.options.dragDrop&&kh&&!bd(a)&&"single"==e&&f.contains(c)>-1&&f.somethingSelected()?kd(a,b,c,g):ld(a,b,c,e,g)}function kd(a,b,c,g){var h=a.display,i=Kc(a,function(j){f&&(h.scroller.draggable=!1),a.state.draggingText=!1,sg(document,"mouseup",i),sg(h.scroller,"drop",i),Math.abs(b.clientX-j.clientX)+Math.abs(b.clientY-j.clientY)<10&&(lg(j),g||Bb(a.doc,c),_c(a),d&&9==e&&setTimeout(function(){document.body.focus(),_c(a)},20))});f&&(h.scroller.draggable=!0),a.state.draggingText=i,h.scroller.dragDrop&&h.scroller.dragDrop(),rg(document,"mouseup",i),rg(h.scroller,"drop",i)}function ld(a,b,c,d,e){function n(b){if(0!=nb(m,b))if(m=b,"rect"==d){for(var e=[],f=a.options.tabSize,k=Hg(Qf(g,c.line).text,c.ch,f),l=Hg(Qf(
 g,b.line).text,b.ch,f),n=Math.min(k,l),o=Math.max(k,l),p=Math.min(c.line,b.line),q=Math.min(a.lastLine(),Math.max(c.line,b.line));q>=p;p++){var r=Qf(g,p).text,s=Ig(r,n,f);n==o?e.push(new sb(mb(p,s),mb(p,s))):r.length>s&&e.push(new sb(mb(p,s),mb(p,Ig(r,o,f))))}e.length||e.push(new sb(c,c)),Hb(g,tb(j.ranges.slice(0,i).concat(e),i),{origin:"*mouse",scroll:!1}),a.scrollIntoView(b)}else{var t=h,u=t.anchor,v=b;if("single"!=d){if("double"==d)var w=a.findWordAt(b);else var w=new sb(mb(b.line,0),wb(g,mb(b.line+1,0)));nb(w.anchor,u)>0?(v=w.head,u=qb(t.from(),w.anchor)):(v=w.anchor,u=pb(t.to(),w.head))}var e=j.ranges.slice(0);e[i]=new sb(wb(g,u),v),Hb(g,tb(e,i),Eg)}}function q(b){var c=++p,e=fd(a,b,!0,"rect"==d);if(e)if(0!=nb(e,m)){ad(a),n(e);var h=N(f,g);(e.line>=h.to||e.line<h.from)&&setTimeout(Kc(a,function(){p==c&&q(b)}),150)}else{var i=b.clientY<o.top?-20:b.clientY>o.bottom?20:0;i&&setTimeout(Kc(a,function(){p==c&&(f.scroller.scrollTop+=i,q(b))}),50)}}function r(b){p=1/0,lg(b),_c(a),sg(do
 cument,"mousemove",s),sg(document,"mouseup",t),g.history.lastSelOrigin=null}var f=a.display,g=a.doc;lg(b);var h,i,j=g.sel;if(e&&!b.shiftKey?(i=g.sel.contains(c),h=i>-1?g.sel.ranges[i]:new sb(c,c)):h=g.sel.primary(),b.altKey)d="rect",e||(h=new sb(c,c)),c=fd(a,b,!0,!0),i=-1;else if("double"==d){var k=a.findWordAt(c);h=a.display.shift||g.extend?Ab(g,h,k.anchor,k.head):k}else if("triple"==d){var l=new sb(mb(c.line,0),wb(g,mb(c.line+1,0)));h=a.display.shift||g.extend?Ab(g,h,l.anchor,l.head):l}else h=Ab(g,h,c);e?i>-1?Db(g,i,h,Eg):(i=g.sel.ranges.length,Hb(g,tb(g.sel.ranges.concat([h]),i),{scroll:!1,origin:"*mouse"})):(i=0,Hb(g,new rb([h],0),Eg),j=g.sel);var m=c,o=f.wrapper.getBoundingClientRect(),p=0,s=Kc(a,function(a){qg(a)?q(a):r(a)}),t=Kc(a,r);rg(document,"mousemove",s),rg(document,"mouseup",t)}function md(a,b,c,d,e){try{var f=b.clientX,g=b.clientY}catch(b){return!1}if(f>=Math.floor(a.display.gutters.getBoundingClientRect().right))return!1;d&&lg(b);var h=a.display,i=h.lineDiv.getBoundi
 ngClientRect();if(g>i.bottom||!zg(a,c))return ng(b);g-=i.top-h.viewOffset;for(var j=0;j<a.options.gutters.length;++j){var k=h.gutters.childNodes[j];if(k&&k.getBoundingClientRect().right>=f){var l=Vf(a.doc,g),m=a.options.gutters[j];return e(a,c,a,l,m,b),ng(b)}}}function nd(a,b){return md(a,b,"gutterClick",!0,vg)}function pd(a){var b=this;if(!xg(b,a)&&!ed(b.display,a)){lg(a),d&&(od=+new Date);var c=fd(b,a,!0),e=a.dataTransfer.files;if(c&&!bd(b))if(e&&e.length&&window.FileReader&&window.File)for(var f=e.length,g=Array(f),h=0,i=function(a,d){var e=new FileReader;e.onload=Kc(b,function(){if(g[d]=e.result,++h==f){c=wb(b.doc,c);var a={from:c,to:c,text:rh(g.join("\n")),origin:"paste"};Rd(b.doc,a),Gb(b.doc,ub(c,Ld(a)))}}),e.readAsText(a)},j=0;f>j;++j)i(e[j],j);else{if(b.state.draggingText&&b.doc.sel.contains(c)>-1)return b.state.draggingText(a),setTimeout(Rg(_c,b),20),void 0;try{var g=a.dataTransfer.getData("Text");if(g){if(b.state.draggingText&&!(p?a.metaKey:a.ctrlKey))var k=b.listSelection
 s();if(Ib(b.doc,ub(c,c)),k)for(var j=0;j<k.length;++j)Xd(b.doc,"",k[j].anchor,k[j].head,"drag");b.replaceSelection(g,"around","paste"),_c(b)}}catch(a){}}}}function qd(a,b){if(d&&(!a.state.draggingText||+new Date-od<100))return og(b),void 0;if(!xg(a,b)&&!ed(a.display,b)&&(b.dataTransfer.setData("Text",a.getSelection()),b.dataTransfer.setDragImage&&!j)){var c=Yg("img",null,null,"position: fixed; left: 0; top: 0;");c.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",i&&(c.width=c.height=1,a.display.wrapper.appendChild(c),c._top=c.offsetTop),b.dataTransfer.setDragImage(c,0,0),i&&c.parentNode.removeChild(c)}}function rd(b,c){Math.abs(b.doc.scrollTop-c)<2||(b.doc.scrollTop=c,a||V(b,{top:c}),b.display.scroller.scrollTop!=c&&(b.display.scroller.scrollTop=c),b.display.scrollbarV.scrollTop!=c&&(b.display.scrollbarV.scrollTop=c),a&&V(b),Tb(b,100))}function sd(a,b,c){(c?b==a.doc.scrollLeft:Math.abs(a.doc.scrollLeft-b)<2)||(b=Math.min(b,a.display.scroller.scrollWid
 th-a.display.scroller.clientWidth),a.doc.scrollLeft=b,O(a),a.display.scroller.scrollLeft!=b&&(a.display.scroller.scrollLeft=b),a.display.scrollbarH.scrollLeft!=b&&(a.display.scrollbarH.scrollLeft=b))}function vd(b,c){var d=c.wheelDeltaX,e=c.wheelDeltaY;null==d&&c.detail&&c.axis==c.HORIZONTAL_AXIS&&(d=c.detail),null==e&&c.detail&&c.axis==c.VERTICAL_AXIS?e=c.detail:null==e&&(e=c.wheelDelta);var g=b.display,h=g.scroller;if(d&&h.scrollWidth>h.clientWidth||e&&h.scrollHeight>h.clientHeight){if(e&&p&&f)a:for(var j=c.target,k=g.view;j!=h;j=j.parentNode)for(var l=0;l<k.length;l++)if(k[l].node==j){b.display.currentWheelTarget=j;break a}if(d&&!a&&!i&&null!=ud)return e&&rd(b,Math.max(0,Math.min(h.scrollTop+e*ud,h.scrollHeight-h.clientHeight))),sd(b,Math.max(0,Math.min(h.scrollLeft+d*ud,h.scrollWidth-h.clientWidth))),lg(c),g.wheelStartX=null,void 0;if(e&&null!=ud){var m=e*ud,n=b.doc.scrollTop,o=n+g.wrapper.clientHeight;0>m?n=Math.max(0,n+m-50):o=Math.min(b.doc.height,o+m+50),V(b,{top:n,bottom:o}
 )}20>td&&(null==g.wheelStartX?(g.wheelStartX=h.scrollLeft,g.wheelStartY=h.scrollTop,g.wheelDX=d,g.wheelDY=e,setTimeout(function(){if(null!=g.wheelStartX){var a=h.scrollLeft-g.wheelStartX,b=h.scrollTop-g.wheelStartY,c=b&&g.wheelDY&&b/g.wheelDY||a&&g.wheelDX&&a/g.wheelDX;g.wheelStartX=g.wheelStartY=null,c&&(ud=(ud*td+c)/(td+1),++td)}},200)):(g.wheelDX+=d,g.wheelDY+=e))}}function wd(a,b,c){if("string"==typeof b&&(b=te[b],!b))return!1;a.display.pollingFast&&Zc(a)&&(a.display.pollingFast=!1);var d=a.display.shift,e=!1;try{bd(a)&&(a.state.suppressEdits=!0),c&&(a.display.shift=!1),e=b(a)!=Cg}finally{a.display.shift=d,a.state.suppressEdits=!1}return e}function xd(a,b,c){for(var d=0;d<a.state.keyMaps.length;d++){var e=we(b,a.state.keyMaps[d],c);if(e)return e}return a.options.extraKeys&&we(b,a.options.extraKeys,c)||we(b,a.options.keyMap,c)}function zd(a,b,c,d){var e=a.state.keySeq;if(e){if(xe(b))return"handled";yd.set(50,function(){a.state.keySeq==e&&(a.state.keySeq=null,$c(a))}),b=e+" "+b}va
 r f=xd(a,b,d);return"multi"==f&&(a.state.keySeq=b),"handled"==f&&vg(a,"keyHandled",a,b,c),("handled"==f||"multi"==f)&&(lg(c),Sb(a)),e&&!f&&/\'$/.test(b)?(lg(c),!0):!!f}function Ad(a,b){var c=ye(b,!0);return c?b.shiftKey&&!a.state.keySeq?zd(a,"Shift-"+c,b,function(b){return wd(a,b,!0)})||zd(a,c,b,function(b){return("string"==typeof b?/^go[A-Z]/.test(b):b.motion)?wd(a,b):void 0}):zd(a,c,b,function(b){return wd(a,b)}):!1}function Bd(a,b,c){return zd(a,"'"+c+"'",b,function(b){return wd(a,b,!0)})}function Dd(a){var b=this;if(ad(b),!xg(b,a)){d&&11>e&&27==a.keyCode&&(a.returnValue=!1);var c=a.keyCode;b.display.shift=16==c||a.shiftKey;var f=Ad(b,a);i&&(Cd=f?c:null,!f&&88==c&&!th&&(p?a.metaKey:a.ctrlKey)&&b.replaceSelection("",null,"cut")),18!=c||/\bCodeMirror-crosshair\b/.test(b.display.lineDiv.className)||Ed(b)}}function Ed(a){function c(a){18!=a.keyCode&&a.altKey||(dh(b,"CodeMirror-crosshair"),sg(document,"keyup",c),sg(document,"mouseover",c))}var b=a.display.lineDiv;eh(b,"CodeMirror-cros
 shair"),rg(document,"keyup",c),rg(document,"mouseover",c)}function Fd(a){16==a.keyCode&&(this.doc.sel.shift=!1),xg(this,a)}function Gd(a){var b=this;if(!(xg(b,a)||a.ctrlKey&&!a.altKey||p&&a.metaKey)){var c=a.keyCode,f=a.charCode;if(i&&c==Cd)return Cd=null,lg(a),void 0;if(!(i&&(!a.which||a.which<10)||k)||!Ad(b,a)){var g=String.fromCharCode(null==f?c:f);Bd(b,a,g)||(d&&e>=9&&(b.display.inputHasSelection=null),Xc(b))}}}function Hd(a){"nocursor"!=a.options.readOnly&&(a.state.focused||(tg(a,"focus",a),a.state.focused=!0,eh(a.display.wrapper,"CodeMirror-focused"),a.curOp||a.display.selForContextMenu==a.doc.sel||($c(a),f&&setTimeout(Rg($c,a,!0),0))),Wc(a),Sb(a))}function Id(a){a.state.focused&&(tg(a,"blur",a),a.state.focused=!1,dh(a.display.wrapper,"CodeMirror-focused")),clearInterval(a.display.blinker),setTimeout(function(){a.state.focused||(a.display.shift=!1)},150)}function Jd(a,b){function m(){if(null!=c.input.selectionStart){var b=a.somethingSelected(),d=c.input.value="\u200b"+(b?c.inp
 ut.value:"");c.prevInput=b?"":"\u200b",c.input.selectionStart=1,c.input.selectionEnd=d.length,c.selForContextMenu=a.doc.sel}}function n(){if(c.inputDiv.style.position="relative",c.input.style.cssText=k,d&&9>e&&(c.scrollbarV.scrollTop=c.scroller.scrollTop=h),Wc(a),null!=c.input.selectionStart){(!d||d&&9>e)&&m();var b=0,f=function(){c.selForContextMenu==a.doc.sel&&0==c.input.selectionStart?Kc(a,te.selectAll)(a):b++<10?c.detectingSelectAll=setTimeout(f,500):$c(a)};c.detectingSelectAll=setTimeout(f,200)}}if(!xg(a,b,"contextmenu")){var c=a.display;if(!ed(c,b)&&!Kd(a,b)){var g=fd(a,b),h=c.scroller.scrollTop;if(g&&!i){var j=a.options.resetSelectionOnContextMenu;j&&-1==a.doc.sel.contains(g)&&Kc(a,Hb)(a.doc,ub(g),Dg);var k=c.input.style.cssText;if(c.inputDiv.style.position="absolute",c.input.style.cssText="position: fixed; width: 30px; height: 30px; top: "+(b.clientY-5)+"px; left: "+(b.clientX-5)+"px; z-index: 1000; background: "+(d?"rgba(255, 255, 255, .05)":"transparent")+"; outline: none;
  border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",f)var l=window.scrollY;if(_c(a),f&&window.scrollTo(null,l),$c(a),a.somethingSelected()||(c.input.value=c.prevInput=" "),c.selForContextMenu=a.doc.sel,clearTimeout(c.detectingSelectAll),d&&e>=9&&m(),t){og(b);var o=function(){sg(window,"mouseup",o),setTimeout(n,20)};rg(window,"mouseup",o)}else setTimeout(n,50)}}}}function Kd(a,b){return zg(a,"gutterContextMenu")?md(a,b,"gutterContextMenu",!1,tg):!1}function Md(a,b){if(nb(a,b.from)<0)return a;if(nb(a,b.to)<=0)return Ld(b);var c=a.line+b.text.length-(b.to.line-b.from.line)-1,d=a.ch;return a.line==b.to.line&&(d+=Ld(b).ch-b.to.ch),mb(c,d)}function Nd(a,b){for(var c=[],d=0;d<a.sel.ranges.length;d++){var e=a.sel.ranges[d];c.push(new sb(Md(e.anchor,b),Md(e.head,b)))}return tb(c,a.sel.primIndex)}function Od(a,b,c){return a.line==b.line?mb(c.line,a.ch-b.ch+c.ch):mb(c.line+(a.line-b.line),a.ch)}function Pd(a,b,c){for(var d=[],e=mb(a.first,0),f=e,g=0;g<b.
 length;g++){var h=b[g],i=Od(h.from,e,f),j=Od(Ld(h),e,f);if(e=h.to,f=j,"around"==c){var k=a.sel.ranges[g],l=nb(k.head,k.anchor)<0;d[g]=new sb(l?j:i,l?i:j)}else d[g]=new sb(i,i)}return new rb(d,a.sel.primIndex)}function Qd(a,b,c){var d={canceled:!1,from:b.from,to:b.to,text:b.text,origin:b.origin,cancel:function(){this.canceled=!0}};return c&&(d.update=function(b,c,d,e){b&&(this.from=wb(a,b)),c&&(this.to=wb(a,c)),d&&(this.text=d),void 0!==e&&(this.origin=e)}),tg(a,"beforeChange",a,d),a.cm&&tg(a.cm,"beforeChange",a.cm,d),d.canceled?null:{from:d.from,to:d.to,text:d.text,origin:d.origin}}function Rd(a,b,c){if(a.cm){if(!a.cm.curOp)return Kc(a.cm,Rd)(a,b,c);if(a.cm.state.suppressEdits)return}if(!(zg(a,"beforeChange")||a.cm&&zg(a.cm,"beforeChange"))||(b=Qd(a,b,!0))){var d=u&&!c&&Se(a,b.from,b.to);if(d)for(var e=d.length-1;e>=0;--e)Sd(a,{from:d[e].from,to:d[e].to,text:e?[""]:b.text});else Sd(a,b)}}function Sd(a,b){if(1!=b.text.length||""!=b.text[0]||0!=nb(b.from,b.to)){var c=Nd(a,b);ag(a,b,c,
 a.cm?a.cm.curOp.id:0/0),Vd(a,b,c,Pe(a,b));var d=[];Of(a,function(a,c){c||-1!=Ng(d,a.history)||(kg(a.history,b),d.push(a.history)),Vd(a,b,null,Pe(a,b))})}}function Td(a,b,c){if(!a.cm||!a.cm.state.suppressEdits){for(var e,d=a.history,f=a.sel,g="undo"==b?d.done:d.undone,h="undo"==b?d.undone:d.done,i=0;i<g.length&&(e=g[i],c?!e.ranges||e.equals(a.sel):e.ranges);i++);if(i!=g.length){for(d.lastOrigin=d.lastSelOrigin=null;e=g.pop(),e.ranges;){if(dg(e,h),c&&!e.equals(a.sel))return Hb(a,e,{clearRedo:!1}),void 0;f=e}var j=[];dg(f,h),h.push({changes:j,generation:d.generation}),d.generation=e.generation||++d.maxGeneration;for(var k=zg(a,"beforeChange")||a.cm&&zg(a.cm,"beforeChange"),i=e.changes.length-1;i>=0;--i){var l=e.changes[i];if(l.origin=b,k&&!Qd(a,l,!1))return g.length=0,void 0;j.push(Zf(a,l));var m=i?Nd(a,l):Lg(g);Vd(a,l,m,Re(a,l)),!i&&a.cm&&a.cm.scrollIntoView({from:l.from,to:Ld(l)});var n=[];Of(a,function(a,b){b||-1!=Ng(n,a.history)||(kg(a.history,l),n.push(a.history)),Vd(a,l,null,Re(a
 ,l))})}}}}function Ud(a,b){if(0!=b&&(a.first+=b,a.sel=new rb(Og(a.sel.ranges,function(a){return new sb(mb(a.anchor.line+b,a.anchor.ch),mb(a.head.line+b,a.head.ch))}),a.sel.primIndex),a.cm)){Pc(a.cm,a.first,a.first-b,b);for(var c=a.cm.display,d=c.viewFrom;d<c.viewTo;d++)Qc(a.cm,d,"gutter")}}function Vd(a,b,c,d){if(a.cm&&!a.cm.curOp)return Kc(a.cm,Vd)(a,b,c,d);if(b.to.line<a.first)return Ud(a,b.text.length-1-(b.to.line-b.from.line)),void 0;if(!(b.from.line>a.lastLine())){if(b.from.line<a.first){var e=b.text.length-1-(a.first-b.from.line);Ud(a,e),b={from:mb(a.first,0),to:mb(b.to.line+e,b.to.ch),text:[Lg(b.text)],origin:b.origin}}var f=a.lastLine();b.to.line>f&&(b={from:b.from,to:mb(f,Qf(a,f).text.length),text:[b.text[0]],origin:b.origin}),b.removed=Rf(a,b.from,b.to),c||(c=Nd(a,b)),a.cm?Wd(a.cm,b,d):Hf(a,b,d),Ib(a,c,Dg)}}function Wd(a,b,c){var d=a.doc,e=a.display,f=b.from,g=b.to,h=!1,i=f.line;a.options.lineWrapping||(i=Uf(af(Qf(d,f.line))),d.iter(i,g.line+1,function(a){return a==e.maxLi
 ne?(h=!0,!0):void 0})),d.sel.contains(b.from,b.to)>-1&&yg(a),Hf(d,b,c,B(a)),a.options.lineWrapping||(d.iter(i,f.line+b.text.length,function(a){var b=H(a);b>e.maxLineLength&&(e.maxLine=a,e.maxLineLength=b,e.maxLineChanged=!0,h=!1)}),h&&(a.curOp.updateMaxLine=!0)),d.frontier=Math.min(d.frontier,f.line),Tb(a,400);var j=b.text.length-(g.line-f.line)-1;f.line!=g.line||1!=b.text.length||Gf(a.doc,b)?Pc(a,f.line,g.line+1,j):Qc(a,f.line,"text");var k=zg(a,"changes"),l=zg(a,"change");if(l||k){var m={from:f,to:g,text:b.text,removed:b.removed,origin:b.origin};l&&vg(a,"change",a,m),k&&(a.curOp.changeObjs||(a.curOp.changeObjs=[])).push(m)}a.display.selForContextMenu=null}function Xd(a,b,c,d,e){if(d||(d=c),nb(d,c)<0){var f=d;d=c,c=f}"string"==typeof b&&(b=rh(b)),Rd(a,{from:c,to:d,text:b,origin:e})}function Yd(a,b){if(!xg(a,"scrollCursorIntoView")){var c=a.display,d=c.sizer.getBoundingClientRect(),e=null;if(b.top+d.top<0?e=!0:b.bottom+d.top>(window.innerHeight||document.documentElement.clientHeight
 )&&(e=!1),null!=e&&!m){var f=Yg("div","\u200b",null,"position: absolute; top: "+(b.top-c.viewOffset-Xb(a.display))+"px; height: "+(b.bottom-b.top+Bg)+"px; left: "+b.left+"px; width: 2px;");a.display.lineSpace.appendChild(f),f.scrollIntoView(e),a.display.lineSpace.removeChild(f)}}}function Zd(a,b,c,d){null==d&&(d=0);for(var e=0;5>e;e++){var f=!1,g=qc(a,b),h=c&&c!=b?qc(a,c):g,i=_d(a,Math.min(g.left,h.left),Math.min(g.top,h.top)-d,Math.max(g.left,h.left),Math.max(g.bottom,h.bottom)+d),j=a.doc.scrollTop,k=a.doc.scrollLeft;if(null!=i.scrollTop&&(rd(a,i.scrollTop),Math.abs(a.doc.scrollTop-j)>1&&(f=!0)),null!=i.scrollLeft&&(sd(a,i.scrollLeft),Math.abs(a.doc.scrollLeft-k)>1&&(f=!0)),!f)return g}}function $d(a,b,c,d,e){var f=_d(a,b,c,d,e);null!=f.scrollTop&&rd(a,f.scrollTop),null!=f.scrollLeft&&sd(a,f.scrollLeft)}function _d(a,b,c,d,e){var f=a.display,g=wc(a.display);0>c&&(c=0);var h=a.curOp&&null!=a.curOp.scrollTop?a.curOp.scrollTop:f.scroller.scrollTop,i=f.scroller.clientHeight-Bg,j={};e-c
 >i&&(e=c+i);var k=a.doc.height+Yb(f),l=g>c,m=e>k-g;if(h>c)j.scrollTop=l?0:c;else if(e>h+i){var n=Math.min(c,(m?k:e)-i);n!=h&&(j.scrollTop=n)}var o=a.curOp&&null!=a.curOp.scrollLeft?a.curOp.scrollLeft:f.scroller.scrollLeft,p=f.scroller.clientWidth-Bg-f.gutters.offsetWidth,q=d-b>p;return q&&(d=b+p),10>b?j.scrollLeft=0:o>b?j.scrollLeft=Math.max(0,b-(q?0:10)):d>p+o-3&&(j.scrollLeft=d+(q?0:10)-p),j}function ae(a,b,c){(null!=b||null!=c)&&ce(a),null!=b&&(a.curOp.scrollLeft=(null==a.curOp.scrollLeft?a.doc.scrollLeft:a.curOp.scrollLeft)+b),null!=c&&(a.curOp.scrollTop=(null==a.curOp.scrollTop?a.doc.scrollTop:a.curOp.scrollTop)+c)}function be(a){ce(a);var b=a.getCursor(),c=b,d=b;a.options.lineWrapping||(c=b.ch?mb(b.line,b.ch-1):b,d=mb(b.line,b.ch+1)),a.curOp.scrollToPos={from:c,to:d,margin:a.options.cursorScrollMargin,isCursor:!0}}function ce(a){var b=a.curOp.scrollToPos;if(b){a.curOp.scrollToPos=null;var c=rc(a,b.from),d=rc(a,b.to),e=_d(a,Math.min(c.left,d.left),Math.min(c.top,d.top)-b.margin
 ,Math.max(c.right,d.right),Math.max(c.bottom,d.bottom)+b.margin);a.scrollTo(e.scrollLeft,e.scrollTop)}}function de(a,b,c,d){var f,e=a.doc;null==c&&(c="add"),"smart"==c&&(e.mode.indent?f=Wb(a,b):c="prev");var g=a.options.tabSize,h=Qf(e,b),i=Hg(h.text,null,g);h.stateAfter&&(h.stateAfter=null);var k,j=h.text.match(/^\s*/)[0];if(d||/\S/.test(h.text)){if("smart"==c&&(k=e.mode.indent(f,h.text.slice(j.length),h.text),k==Cg||k>150)){if(!d)return;c="prev"}}else k=0,c="not";"prev"==c?k=b>e.first?Hg(Qf(e,b-1).text,null,g):0:"add"==c?k=i+a.options.indentUnit:"subtract"==c?k=i-a.options.indentUnit:"number"==typeof c&&(k=i+c),k=Math.max(0,k);var l="",m=0;if(a.options.indentWithTabs)for(var n=Math.floor(k/g);n;--n)m+=g,l+="	";if(k>m&&(l+=Kg(k-m)),l!=j)Xd(e,l,mb(b,0),mb(b,j.length),"+input");else for(var n=0;n<e.sel.ranges.length;n++){var o=e.sel.ranges[n];if(o.head.line==b&&o.head.ch<j.length){var m=mb(b,j.length);Db(e,n,new sb(m,m));break}}h.stateAfter=null}function ee(a,b,c,d){var e=b,f=b;return
 "number"==typeof b?f=Qf(a,vb(a,b)):e=Uf(b),null==e?null:(d(f,e)&&a.cm&&Qc(a.cm,e,c),f)}function fe(a,b){for(var c=a.doc.sel.ranges,d=[],e=0;e<c.length;e++){for(var f=b(c[e]);d.length&&nb(f.from,Lg(d).to)<=0;){var g=d.pop();if(nb(g.from,f.from)<0){f.from=g.from;break}}d.push(f)}Jc(a,function(){for(var b=d.length-1;b>=0;b--)Xd(a.doc,"",d[b].from,d[b].to,"+delete");be(a)})}function ge(a,b,c,d,e){function k(){var b=f+c;return b<a.first||b>=a.first+a.size?j=!1:(f=b,i=Qf(a,b))}function l(a){var b=(e?Jh:Kh)(i,g,c,!0);if(null==b){if(a||!k())return j=!1;g=e?(0>c?Bh:Ah)(i):0>c?i.text.length:0}else g=b;return!0}var f=b.line,g=b.ch,h=c,i=Qf(a,f),j=!0;if("char"==d)l();else if("column"==d)l(!0);else if("word"==d||"group"==d)for(var m=null,n="group"==d,o=a.cm&&a.cm.getHelper(b,"wordChars"),p=!0;!(0>c)||l(!p);p=!1){var q=i.text.charAt(g)||"\n",r=Ug(q,o)?"w":n&&"\n"==q?"n":!n||/\s/.test(q)?null:"p";if(!n||p||r||(r="s"),m&&m!=r){0>c&&(c=1,l());break}if(r&&(m=r),c>0&&!l(!p))break}var s=Mb(a,mb(f,g),h,
 !0);return j||(s.hitSide=!0),s}function he(a,b,c,d){var g,e=a.doc,f=b.left;if("page"==d){var h=Math.min(a.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight);g=b.top+c*(h-(0>c?1.5:.5)*wc(a.display))}else"line"==d&&(g=c>0?b.bottom+3:b.top-3);for(;;){var i=tc(a,f,g);if(!i.outside)break;if(0>c?0>=g:g>=e.height){i.hitSide=!0;break}g+=5*c}return i}function ke(a,b,c,d){w.defaults[a]=b,c&&(je[a]=d?function(a,b,d){d!=le&&c(a,b,d)}:c)}function ve(a){for(var c,d,e,f,b=a.split(/-(?!$)/),a=b[b.length-1],g=0;g<b.length-1;g++){var h=b[g];if(/^(cmd|meta|m)$/i.test(h))f=!0;else if(/^a(lt)?$/i.test(h))c=!0;else if(/^(c|ctrl|control)$/i.test(h))d=!0;else{if(!/^s(hift)$/i.test(h))throw new Error("Unrecognized modifier name: "+h);e=!0}}return c&&(a="Alt-"+a),d&&(a="Ctrl-"+a),f&&(a="Cmd-"+a),e&&(a="Shift-"+a),a}function ze(a){return"string"==typeof a?ue[a]:a}function De(a,b,c,d,e){if(d&&d.shared)return Fe(a,b,c,d,e);if(a.cm&&!a.cm.curOp)return Kc(a.cm,De)(a,b,c,d,e);v
 ar f=new Be(a,e),g=nb(b,c);if(d&&Qg(d,f,!1),g>0||0==g&&f.clearWhenEmpty!==!1)return f;if(f.replacedWith&&(f.collapsed=!0,f.widgetNode=Yg("span",[f.replacedWith],"CodeMirror-widget"),d.handleMouseEvents||(f.widgetNode.ignoreEvents=!0),d.insertLeft&&(f.widgetNode.insertLeft=!0)),f.collapsed){if(_e(a,b.line,b,c,f)||b.line!=c.line&&_e(a,c.line,b,c,f))throw new Error("Inserting collapsed marker partially overlapping an existing one");
+v=!0}f.addToHistory&&ag(a,{from:b,to:c,origin:"markText"},a.sel,0/0);var j,h=b.line,i=a.cm;if(a.iter(h,c.line+1,function(a){i&&f.collapsed&&!i.options.lineWrapping&&af(a)==i.display.maxLine&&(j=!0),f.collapsed&&h!=b.line&&Tf(a,0),Me(a,new Je(f,h==b.line?b.ch:null,h==c.line?c.ch:null)),++h}),f.collapsed&&a.iter(b.line,c.line+1,function(b){ef(a,b)&&Tf(b,0)}),f.clearOnEnter&&rg(f,"beforeCursorEnter",function(){f.clear()}),f.readOnly&&(u=!0,(a.history.done.length||a.history.undone.length)&&a.clearHistory()),f.collapsed&&(f.id=++Ce,f.atomic=!0),i){if(j&&(i.curOp.updateMaxLine=!0),f.collapsed)Pc(i,b.line,c.line+1);else if(f.className||f.title||f.startStyle||f.endStyle)for(var k=b.line;k<=c.line;k++)Qc(i,k,"text");f.atomic&&Kb(i.doc),vg(i,"markerAdded",i,f)}return f}function Fe(a,b,c,d,e){d=Qg(d),d.shared=!1;var f=[De(a,b,c,d,e)],g=f[0],h=d.widgetNode;return Of(a,function(a){h&&(d.widgetNode=h.cloneNode(!0)),f.push(De(a,wb(a,b),wb(a,c),d,e));for(var i=0;i<a.linked.length;++i)if(a.linked[i]
 .isParent)return;g=Lg(f)}),new Ee(f,g)}function Ge(a){return a.findMarks(mb(a.first,0),a.clipPos(mb(a.lastLine())),function(a){return a.parent})}function He(a,b){for(var c=0;c<b.length;c++){var d=b[c],e=d.find(),f=a.clipPos(e.from),g=a.clipPos(e.to);if(nb(f,g)){var h=De(a,f,g,d.primary,d.primary.type);d.markers.push(h),h.parent=d}}}function Ie(a){for(var b=0;b<a.length;b++){var c=a[b],d=[c.primary.doc];Of(c.primary.doc,function(a){d.push(a)});for(var e=0;e<c.markers.length;e++){var f=c.markers[e];-1==Ng(d,f.doc)&&(f.parent=null,c.markers.splice(e--,1))}}}function Je(a,b,c){this.marker=a,this.from=b,this.to=c}function Ke(a,b){if(a)for(var c=0;c<a.length;++c){var d=a[c];if(d.marker==b)return d}}function Le(a,b){for(var c,d=0;d<a.length;++d)a[d]!=b&&(c||(c=[])).push(a[d]);return c}function Me(a,b){a.markedSpans=a.markedSpans?a.markedSpans.concat([b]):[b],b.marker.attachLine(a)}function Ne(a,b,c){if(a)for(var e,d=0;d<a.length;++d){var f=a[d],g=f.marker,h=null==f.from||(g.inclusiveLeft?f
 .from<=b:f.from<b);if(h||f.from==b&&"bookmark"==g.type&&(!c||!f.marker.insertLeft)){var i=null==f.to||(g.inclusiveRight?f.to>=b:f.to>b);(e||(e=[])).push(new Je(g,f.from,i?null:f.to))}}return e}function Oe(a,b,c){if(a)for(var e,d=0;d<a.length;++d){var f=a[d],g=f.marker,h=null==f.to||(g.inclusiveRight?f.to>=b:f.to>b);if(h||f.from==b&&"bookmark"==g.type&&(!c||f.marker.insertLeft)){var i=null==f.from||(g.inclusiveLeft?f.from<=b:f.from<b);(e||(e=[])).push(new Je(g,i?null:f.from-b,null==f.to?null:f.to-b))}}return e}function Pe(a,b){var c=yb(a,b.from.line)&&Qf(a,b.from.line).markedSpans,d=yb(a,b.to.line)&&Qf(a,b.to.line).markedSpans;if(!c&&!d)return null;var e=b.from.ch,f=b.to.ch,g=0==nb(b.from,b.to),h=Ne(c,e,g),i=Oe(d,f,g),j=1==b.text.length,k=Lg(b.text).length+(j?e:0);if(h)for(var l=0;l<h.length;++l){var m=h[l];if(null==m.to){var n=Ke(i,m.marker);n?j&&(m.to=null==n.to?null:n.to+k):m.to=e}}if(i)for(var l=0;l<i.length;++l){var m=i[l];if(null!=m.to&&(m.to+=k),null==m.from){var n=Ke(h,m.mark
 er);n||(m.from=k,j&&(h||(h=[])).push(m))}else m.from+=k,j&&(h||(h=[])).push(m)}h&&(h=Qe(h)),i&&i!=h&&(i=Qe(i));var o=[h];if(!j){var q,p=b.text.length-2;if(p>0&&h)for(var l=0;l<h.length;++l)null==h[l].to&&(q||(q=[])).push(new Je(h[l].marker,null,null));for(var l=0;p>l;++l)o.push(q);o.push(i)}return o}function Qe(a){for(var b=0;b<a.length;++b){var c=a[b];null!=c.from&&c.from==c.to&&c.marker.clearWhenEmpty!==!1&&a.splice(b--,1)}return a.length?a:null}function Re(a,b){var c=gg(a,b),d=Pe(a,b);if(!c)return d;if(!d)return c;for(var e=0;e<c.length;++e){var f=c[e],g=d[e];if(f&&g)a:for(var h=0;h<g.length;++h){for(var i=g[h],j=0;j<f.length;++j)if(f[j].marker==i.marker)continue a;f.push(i)}else g&&(c[e]=g)}return c}function Se(a,b,c){var d=null;if(a.iter(b.line,c.line+1,function(a){if(a.markedSpans)for(var b=0;b<a.markedSpans.length;++b){var c=a.markedSpans[b].marker;!c.readOnly||d&&-1!=Ng(d,c)||(d||(d=[])).push(c)}}),!d)return null;for(var e=[{from:b,to:c}],f=0;f<d.length;++f)for(var g=d[f],h=
 g.find(0),i=0;i<e.length;++i){var j=e[i];if(!(nb(j.to,h.from)<0||nb(j.from,h.to)>0)){var k=[i,1],l=nb(j.from,h.from),m=nb(j.to,h.to);(0>l||!g.inclusiveLeft&&!l)&&k.push({from:j.from,to:h.from}),(m>0||!g.inclusiveRight&&!m)&&k.push({from:h.to,to:j.to}),e.splice.apply(e,k),i+=k.length-1}}return e}function Te(a){var b=a.markedSpans;if(b){for(var c=0;c<b.length;++c)b[c].marker.detachLine(a);a.markedSpans=null}}function Ue(a,b){if(b){for(var c=0;c<b.length;++c)b[c].marker.attachLine(a);a.markedSpans=b}}function Ve(a){return a.inclusiveLeft?-1:0}function We(a){return a.inclusiveRight?1:0}function Xe(a,b){var c=a.lines.length-b.lines.length;if(0!=c)return c;var d=a.find(),e=b.find(),f=nb(d.from,e.from)||Ve(a)-Ve(b);if(f)return-f;var g=nb(d.to,e.to)||We(a)-We(b);return g?g:b.id-a.id}function Ye(a,b){var d,c=v&&a.markedSpans;if(c)for(var e,f=0;f<c.length;++f)e=c[f],e.marker.collapsed&&null==(b?e.from:e.to)&&(!d||Xe(d,e.marker)<0)&&(d=e.marker);return d}function Ze(a){return Ye(a,!0)}function
  $e(a){return Ye(a,!1)}function _e(a,b,c,d,e){var f=Qf(a,b),g=v&&f.markedSpans;if(g)for(var h=0;h<g.length;++h){var i=g[h];if(i.marker.collapsed){var j=i.marker.find(0),k=nb(j.from,c)||Ve(i.marker)-Ve(e),l=nb(j.to,d)||We(i.marker)-We(e);if(!(k>=0&&0>=l||0>=k&&l>=0)&&(0>=k&&(nb(j.to,c)>0||i.marker.inclusiveRight&&e.inclusiveLeft)||k>=0&&(nb(j.from,d)<0||i.marker.inclusiveLeft&&e.inclusiveRight)))return!0}}}function af(a){for(var b;b=Ze(a);)a=b.find(-1,!0).line;return a}function bf(a){for(var b,c;b=$e(a);)a=b.find(1,!0).line,(c||(c=[])).push(a);return c}function cf(a,b){var c=Qf(a,b),d=af(c);return c==d?b:Uf(d)}function df(a,b){if(b>a.lastLine())return b;var d,c=Qf(a,b);if(!ef(a,c))return b;for(;d=$e(c);)c=d.find(1,!0).line;return Uf(c)+1}function ef(a,b){var c=v&&b.markedSpans;if(c)for(var d,e=0;e<c.length;++e)if(d=c[e],d.marker.collapsed){if(null==d.from)return!0;if(!d.marker.widgetNode&&0==d.from&&d.marker.inclusiveLeft&&ff(a,b,d))return!0}}function ff(a,b,c){if(null==c.to){var d=c
 .marker.find(1,!0);return ff(a,d.line,Ke(d.line.markedSpans,c.marker))}if(c.marker.inclusiveRight&&c.to==b.text.length)return!0;for(var e,f=0;f<b.markedSpans.length;++f)if(e=b.markedSpans[f],e.marker.collapsed&&!e.marker.widgetNode&&e.from==c.to&&(null==e.to||e.to!=c.from)&&(e.marker.inclusiveLeft||c.marker.inclusiveRight)&&ff(a,b,e))return!0}function hf(a,b,c){Wf(b)<(a.curOp&&a.curOp.scrollTop||a.doc.scrollTop)&&ae(a,null,c)}function jf(a){if(null!=a.height)return a.height;if(!ah(document.body,a.node)){var b="position: relative;";a.coverGutter&&(b+="margin-left: -"+a.cm.getGutterElement().offsetWidth+"px;"),_g(a.cm.display.measure,Yg("div",[a.node],null,b))}return a.height=a.node.offsetHeight}function kf(a,b,c,d){var e=new gf(a,c,d);return e.noHScroll&&(a.display.alignWidgets=!0),ee(a.doc,b,"widget",function(b){var c=b.widgets||(b.widgets=[]);if(null==e.insertAt?c.push(e):c.splice(Math.min(c.length-1,Math.max(0,e.insertAt)),0,e),e.line=b,!ef(a.doc,b)){var d=Wf(b)<a.doc.scrollTop;Tf
 (b,b.height+jf(e)),d&&ae(a,null,e.height),a.curOp.forceUpdate=!0}return!0}),e}function mf(a,b,c,d){a.text=b,a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null),null!=a.order&&(a.order=null),Te(a),Ue(a,c);var e=d?d(a):1;e!=a.height&&Tf(a,e)}function nf(a){a.parent=null,Te(a)}function of(a,b){if(a)for(;;){var c=a.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!c)break;a=a.slice(0,c.index)+a.slice(c.index+c[0].length);var d=c[1]?"bgClass":"textClass";null==b[d]?b[d]=c[2]:new RegExp("(?:^|s)"+c[2]+"(?:$|s)").test(b[d])||(b[d]+=" "+c[2])}return a}function pf(a,b){if(a.blankLine)return a.blankLine(b);if(a.innerMode){var c=w.innerMode(a,b);return c.mode.blankLine?c.mode.blankLine(c.state):void 0}}function qf(a,b,c,d){for(var e=0;10>e;e++){d&&(d[0]=w.innerMode(a,c).mode);var f=a.token(b,c);if(b.pos>b.start)return f}throw new Error("Mode "+a.name+" failed to advance stream.")}function rf(a,b,c,d){function e(a){return{start:k.start,end:k.pos,string:k.current(),type:h||null,state:a?re(f
 .mode,j):j}}var h,f=a.doc,g=f.mode;b=wb(f,b);var l,i=Qf(f,b.line),j=Wb(a,b.line,c),k=new Ae(i.text,a.options.tabSize);for(d&&(l=[]);(d||k.pos<b.ch)&&!k.eol();)k.start=k.pos,h=qf(g,k,j),d&&l.push(e(!0));return d?l:e()}function sf(a,b,c,d,e,f,g){var h=c.flattenSpans;null==h&&(h=a.options.flattenSpans);var l,i=0,j=null,k=new Ae(b,a.options.tabSize),m=a.options.addModeClass&&[null];for(""==b&&of(pf(c,d),f);!k.eol();){if(k.pos>a.options.maxHighlightLength?(h=!1,g&&vf(a,b,d,k.pos),k.pos=b.length,l=null):l=of(qf(c,k,d,m),f),m){var n=m[0].name;n&&(l="m-"+(l?n+" "+l:n))}h&&j==l||(i<k.start&&e(k.start,j),i=k.start,j=l),k.start=k.pos}for(;i<k.pos;){var o=Math.min(k.pos,i+5e4);e(o,j),i=o}}function tf(a,b,c,d){var e=[a.state.modeGen],f={};sf(a,b.text,a.doc.mode,c,function(a,b){e.push(a,b)},f,d);for(var g=0;g<a.state.overlays.length;++g){var h=a.state.overlays[g],i=1,j=0;sf(a,b.text,h.mode,!0,function(a,b){for(var c=i;a>j;){var d=e[i];d>a&&e.splice(i,1,a,e[i+1],d),i+=2,j=Math.min(a,d)}if(b)if(h.o
 paque)e.splice(c,i-c,a,"cm-overlay "+b),i=c+2;else for(;i>c;c+=2){var f=e[c+1];e[c+1]=(f?f+" ":"")+"cm-overlay "+b}},f)}return{styles:e,classes:f.bgClass||f.textClass?f:null}}function uf(a,b,c){if(!b.styles||b.styles[0]!=a.state.modeGen){var d=tf(a,b,b.stateAfter=Wb(a,Uf(b)));b.styles=d.styles,d.classes?b.styleClasses=d.classes:b.styleClasses&&(b.styleClasses=null),c===a.doc.frontier&&a.doc.frontier++}return b.styles}function vf(a,b,c,d){var e=a.doc.mode,f=new Ae(b,a.options.tabSize);for(f.start=f.pos=d||0,""==b&&pf(e,c);!f.eol()&&f.pos<=a.options.maxHighlightLength;)qf(e,f,c),f.start=f.pos}function yf(a,b){if(!a||/^\s*$/.test(a))return null;var c=b.addModeClass?xf:wf;return c[a]||(c[a]=a.replace(/\S+/g,"cm-$&"))}function zf(a,b){var c=Yg("span",null,null,f?"padding-right: .1px":null),e={pre:Yg("pre",[c]),content:c,col:0,pos:0,cm:a};b.measure={};for(var g=0;g<=(b.rest?b.rest.length:0);g++){var i,h=g?b.rest[g-1]:b.line;e.pos=0,e.addToken=Bf,(d||f)&&a.getOption("lineWrapping")&&(e.add
 Token=Cf(e.addToken)),qh(a.display.measure)&&(i=Xf(h))&&(e.addToken=Df(e.addToken,i)),e.map=[];var j=b!=a.display.externalMeasured&&Uf(h);Ff(h,e,uf(a,h,j)),h.styleClasses&&(h.styleClasses.bgClass&&(e.bgClass=fh(h.styleClasses.bgClass,e.bgClass||"")),h.styleClasses.textClass&&(e.textClass=fh(h.styleClasses.textClass,e.textClass||""))),0==e.map.length&&e.map.push(0,0,e.content.appendChild(oh(a.display.measure))),0==g?(b.measure.map=e.map,b.measure.cache={}):((b.measure.maps||(b.measure.maps=[])).push(e.map),(b.measure.caches||(b.measure.caches=[])).push({}))}return f&&/\bcm-tab\b/.test(e.content.lastChild.className)&&(e.content.className="cm-tab-wrap-hack"),tg(a,"renderLine",a,b.line,e.pre),e.pre.className&&(e.textClass=fh(e.pre.className,e.textClass||"")),e}function Af(a){var b=Yg("span","\u2022","cm-invalidchar");return b.title="\\u"+a.charCodeAt(0).toString(16),b}function Bf(a,b,c,f,g,h){if(b){var i=a.cm.options.specialChars,j=!1;if(i.test(b))for(var k=document.createDocumentFragme
 nt(),l=0;;){i.lastIndex=l;var m=i.exec(b),n=m?m.index-l:b.length-l;if(n){var o=document.createTextNode(b.slice(l,l+n));d&&9>e?k.appendChild(Yg("span",[o])):k.appendChild(o),a.map.push(a.pos,a.pos+n,o),a.col+=n,a.pos+=n}if(!m)break;if(l+=n+1,"	"==m[0]){var p=a.cm.options.tabSize,q=p-a.col%p,o=k.appendChild(Yg("span",Kg(q),"cm-tab"));a.col+=q}else{var o=a.cm.options.specialCharPlaceholder(m[0]);d&&9>e?k.appendChild(Yg("span",[o])):k.appendChild(o),a.col+=1}a.map.push(a.pos,a.pos+1,o),a.pos++}else{a.col+=b.length;var k=document.createTextNode(b);a.map.push(a.pos,a.pos+b.length,k),d&&9>e&&(j=!0),a.pos+=b.length}if(c||f||g||j){var r=c||"";f&&(r+=f),g&&(r+=g);var s=Yg("span",[k],r);return h&&(s.title=h),a.content.appendChild(s)}a.content.appendChild(k)}}function Cf(a){function b(a){for(var b=" ",c=0;c<a.length-2;++c)b+=c%2?" ":"\xa0";return b+=" "}return function(c,d,e,f,g,h){a(c,d.replace(/ {3,}/g,b),e,f,g,h)}}function Df(a,b){return function(c,d,e,f,g,h){e=e?e+" cm-force-border":"cm-for
 ce-border";for(var i=c.pos,j=i+d.length;;){for(var k=0;k<b.length;k++){var l=b[k];if(l.to>i&&l.from<=i)break}if(l.to>=j)return a(c,d,e,f,g,h);a(c,d.slice(0,l.to-i),e,f,null,h),f=null,d=d.slice(l.to-i),i=l.to}}}function Ef(a,b,c,d){var e=!d&&c.widgetNode;e&&(a.map.push(a.pos,a.pos+b,e),a.content.appendChild(e)),a.pos+=b}function Ff(a,b,c){var d=a.markedSpans,e=a.text,f=0;if(d)for(var k,m,n,o,p,q,h=e.length,i=0,g=1,j="",l=0;;){if(l==i){m=n=o=p="",q=null,l=1/0;for(var r=[],s=0;s<d.length;++s){var t=d[s],u=t.marker;t.from<=i&&(null==t.to||t.to>i)?(null!=t.to&&l>t.to&&(l=t.to,n=""),u.className&&(m+=" "+u.className),u.startStyle&&t.from==i&&(o+=" "+u.startStyle),u.endStyle&&t.to==l&&(n+=" "+u.endStyle),u.title&&!p&&(p=u.title),u.collapsed&&(!q||Xe(q.marker,u)<0)&&(q=t)):t.from>i&&l>t.from&&(l=t.from),"bookmark"==u.type&&t.from==i&&u.widgetNode&&r.push(u)}if(q&&(q.from||0)==i&&(Ef(b,(null==q.to?h+1:q.to)-i,q.marker,null==q.from),null==q.to))return;if(!q&&r.length)for(var s=0;s<r.length;++s
 )Ef(b,0,r[s])}if(i>=h)break;for(var v=Math.min(h,l);;){if(j){var w=i+j.length;if(!q){var x=w>v?j.slice(0,v-i):j;b.addToken(b,x,k?k+m:m,o,i+x.length==l?n:"",p)}if(w>=v){j=j.slice(v-i),i=v;break}i=w,o=""}j=e.slice(f,f=c[g++]),k=yf(c[g++],b.cm.options)}}else for(var g=1;g<c.length;g+=2)b.addToken(b,e.slice(f,f=c[g]),yf(c[g+1],b.cm.options))}function Gf(a,b){return 0==b.from.ch&&0==b.to.ch&&""==Lg(b.text)&&(!a.cm||a.cm.options.wholeLineUpdateBefore)}function Hf(a,b,c,d){function e(a){return c?c[a]:null}function f(a,c,e){mf(a,c,e,d),vg(a,"change",a,b)}var g=b.from,h=b.to,i=b.text,j=Qf(a,g.line),k=Qf(a,h.line),l=Lg(i),m=e(i.length-1),n=h.line-g.line;if(Gf(a,b)){for(var o=0,p=[];o<i.length-1;++o)p.push(new lf(i[o],e(o),d));f(k,k.text,m),n&&a.remove(g.line,n),p.length&&a.insert(g.line,p)}else if(j==k)if(1==i.length)f(j,j.text.slice(0,g.ch)+l+j.text.slice(h.ch),m);else{for(var p=[],o=1;o<i.length-1;++o)p.push(new lf(i[o],e(o),d));p.push(new lf(l+j.text.slice(h.ch),m,d)),f(j,j.text.slice(0,g.
 ch)+i[0],e(0)),a.insert(g.line+1,p)}else if(1==i.length)f(j,j.text.slice(0,g.ch)+i[0]+k.text.slice(h.ch),e(0)),a.remove(g.line+1,n);else{f(j,j.text.slice(0,g.ch)+i[0],e(0)),f(k,l+k.text.slice(h.ch),m);for(var o=1,p=[];o<i.length-1;++o)p.push(new lf(i[o],e(o),d));n>1&&a.remove(g.line+1,n-1),a.insert(g.line+1,p)}vg(a,"change",a,b)}function If(a){this.lines=a,this.parent=null;for(var b=0,c=0;b<a.length;++b)a[b].parent=this,c+=a[b].height;this.height=c}function Jf(a){this.children=a;for(var b=0,c=0,d=0;d<a.length;++d){var e=a[d];b+=e.chunkSize(),c+=e.height,e.parent=this}this.size=b,this.height=c,this.parent=null}function Of(a,b,c){function d(a,e,f){if(a.linked)for(var g=0;g<a.linked.length;++g){var h=a.linked[g];if(h.doc!=e){var i=f&&h.sharedHist;(!c||i)&&(b(h.doc,i),d(h.doc,a,i))}}}d(a,null,!0)}function Pf(a,b){if(b.cm)throw new Error("This document is already in use.");a.doc=b,b.cm=a,C(a),y(a),a.options.lineWrapping||I(a),a.options.mode=b.modeOption,Pc(a)}function Qf(a,b){if(b-=a.fir
 st,0>b||b>=a.size)throw new Error("There is no line "+(b+a.first)+" in the document.");for(var c=a;!c.lines;)for(var d=0;;++d){var e=c.children[d],f=e.chunkSize();if(f>b){c=e;break}b-=f}return c.lines[b]}function Rf(a,b,c){var d=[],e=b.line;return a.iter(b.line,c.line+1,function(a){var f=a.text;e==c.line&&(f=f.slice(0,c.ch)),e==b.line&&(f=f.slice(b.ch)),d.push(f),++e}),d}function Sf(a,b,c){var d=[];return a.iter(b,c,function(a){d.push(a.text)}),d}function Tf(a,b){var c=b-a.height;if(c)for(var d=a;d;d=d.parent)d.height+=c}function Uf(a){if(null==a.parent)return null;for(var b=a.parent,c=Ng(b.lines,a),d=b.parent;d;b=d,d=d.parent)for(var e=0;d.children[e]!=b;++e)c+=d.children[e].chunkSize();return c+b.first}function Vf(a,b){var c=a.first;a:do{for(var d=0;d<a.children.length;++d){var e=a.children[d],f=e.height;if(f>b){a=e;continue a}b-=f,c+=e.chunkSize()}return c}while(!a.lines);for(var d=0;d<a.lines.length;++d){var g=a.lines[d],h=g.height;if(h>b)break;b-=h}return c+d}function Wf(a){a=a
 f(a);for(var b=0,c=a.parent,d=0;d<c.lines.length;++d){var e=c.lines[d];if(e==a)break;b+=e.height}for(var f=c.parent;f;c=f,f=c.parent)for(var d=0;d<f.children.length;++d){var g=f.children[d];if(g==c)break;b+=g.height}return b}function Xf(a){var b=a.order;return null==b&&(b=a.order=Lh(a.text)),b}function Yf(a){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=a||1}function Zf(a,b){var c={from:ob(b.from),to:Ld(b),text:Rf(a,b.from,b.to)};return eg(a,c,b.from.line,b.to.line+1),Of(a,function(a){eg(a,c,b.from.line,b.to.line+1)},!0),c}function $f(a){for(;a.length;){var b=Lg(a);if(!b.ranges)break;a.pop()}}function _f(a,b){return b?($f(a.done),Lg(a.done)):a.done.length&&!Lg(a.done).ranges?Lg(a.done):a.done.length>1&&!a.done[a.done.length-2].ranges?(a.done.pop(),Lg(a.done)):void 0}function ag(a,b,c,d){var e=a.history;e.undone.length=0;var g,f=+new Date;if(
 (e.lastOp==d||e.lastOrigin==b.origin&&b.origin&&("+"==b.origin.charAt(0)&&a.cm&&e.lastModTime>f-a.cm.options.historyEventDelay||"*"==b.origin.charAt(0)))&&(g=_f(e,e.lastOp==d))){var h=Lg(g.changes);0==nb(b.from,b.to)&&0==nb(b.from,h.to)?h.to=Ld(b):g.changes.push(Zf(a,b))}else{var i=Lg(e.done);for(i&&i.ranges||dg(a.sel,e.done),g={changes:[Zf(a,b)],generation:e.generation},e.done.push(g);e.done.length>e.undoDepth;)e.done.shift(),e.done[0].ranges||e.done.shift()}e.done.push(c),e.generation=++e.maxGeneration,e.lastModTime=e.lastSelTime=f,e.lastOp=e.lastSelOp=d,e.lastOrigin=e.lastSelOrigin=b.origin,h||tg(a,"historyAdded")}function bg(a,b,c,d){var e=b.charAt(0);return"*"==e||"+"==e&&c.ranges.length==d.ranges.length&&c.somethingSelected()==d.somethingSelected()&&new Date-a.history.lastSelTime<=(a.cm?a.cm.options.historyEventDelay:500)}function cg(a,b,c,d){var e=a.history,f=d&&d.origin;c==e.lastSelOp||f&&e.lastSelOrigin==f&&(e.lastModTime==e.lastSelTime&&e.lastOrigin==f||bg(a,f,Lg(e.done),b
 ))?e.done[e.done.length-1]=b:dg(b,e.done),e.lastSelTime=+new Date,e.lastSelOrigin=f,e.lastSelOp=c,d&&d.clearRedo!==!1&&$f(e.undone)}function dg(a,b){var c=Lg(b);c&&c.ranges&&c.equals(a)||b.push(a)}function eg(a,b,c,d){var e=b["spans_"+a.id],f=0;a.iter(Math.max(a.first,c),Math.min(a.first+a.size,d),function(c){c.markedSpans&&((e||(e=b["spans_"+a.id]={}))[f]=c.markedSpans),++f})}function fg(a){if(!a)return null;for(var c,b=0;b<a.length;++b)a[b].marker.explicitlyCleared?c||(c=a.slice(0,b)):c&&c.push(a[b]);return c?c.length?c:null:a}function gg(a,b){var c=b["spans_"+a.id];if(!c)return null;for(var d=0,e=[];d<b.text.length;++d)e.push(fg(c[d]));return e}function hg(a,b,c){for(var d=0,e=[];d<a.length;++d){var f=a[d];if(f.ranges)e.push(c?rb.prototype.deepCopy.call(f):f);else{var g=f.changes,h=[];e.push({changes:h});for(var i=0;i<g.length;++i){var k,j=g[i];if(h.push({from:j.from,to:j.to,text:j.text}),b)for(var l in j)(k=l.match(/^spans_(\d+)$/))&&Ng(b,Number(k[1]))>-1&&(Lg(h)[l]=j[l],delete 
 j[l])}}}return e}function ig(a,b,c,d){c<a.line?a.line+=d:b<a.line&&(a.line=b,a.ch=0)}function jg(a,b,c,d){for(var e=0;e<a.length;++e){var f=a[e],g=!0;if(f.ranges){f.copied||(f=a[e]=f.deepCopy(),f.copied=!0);for(var h=0;h<f.ranges.length;h++)ig(f.ranges[h].anchor,b,c,d),ig(f.ranges[h].head,b,c,d)}else{for(var h=0;h<f.changes.length;++h){var i=f.changes[h];if(c<i.from.line)i.from=mb(i.from.line+d,i.from.ch),i.to=mb(i.to.line+d,i.to.ch);else if(b<=i.to.line){g=!1;break}}g||(a.splice(0,e+1),e=0)}}}function kg(a,b){var c=b.from.line,d=b.to.line,e=b.text.length-(d-c)-1;jg(a.done,c,d,e),jg(a.undone,c,d,e)}function ng(a){return null!=a.defaultPrevented?a.defaultPrevented:0==a.returnValue}function pg(a){return a.target||a.srcElement}function qg(a){var b=a.which;return null==b&&(1&a.button?b=1:2&a.button?b=3:4&a.button&&(b=2)),p&&a.ctrlKey&&1==b&&(b=3),b}function vg(a,b){function f(a){return function(){a.apply(null,d)}}var c=a._handlers&&a._handlers[b];if(c){var e,d=Array.prototype.slice.call
 (arguments,2);yc?e=yc.delayedCallbacks:ug?e=ug:(e=ug=[],setTimeout(wg,0));for(var g=0;g<c.length;++g)e.push(f(c[g]))}}function wg(){var a=ug;ug=null;for(var b=0;b<a.length;++b)a[b]()}function xg(a,b,c){return"string"==typeof b&&(b={type:b,preventDefault:function(){this.defaultPrevented=!0}}),tg(a,c||b.type,a,b),ng(b)||b.codemirrorIgnore}function yg(a){var b=a._handlers&&a._handlers.cursorActivity;if(b)for(var c=a.curOp.cursorActivityHandlers||(a.curOp.cursorActivityHandlers=[]),d=0;d<b.length;++d)-1==Ng(c,b[d])&&c.push(b[d])}function zg(a,b){var c=a._handlers&&a._handlers[b];return c&&c.length>0}function Ag(a){a.prototype.on=function(a,b){rg(this,a,b)},a.prototype.off=function(a,b){sg(this,a,b)}}function Gg(){this.id=null}function Ig(a,b,c){for(var d=0,e=0;;){var f=a.indexOf("	",d);-1==f&&(f=a.length);var g=f-d;if(f==a.length||e+g>=b)return d+Math.min(g,b-e);if(e+=f-d,e+=c-e%c,d=f+1,e>=b)return d}}function Kg(a){for(;Jg.length<=a;)Jg.push(Lg(Jg)+" ");return Jg[a]}function Lg(a){retu
 rn a[a.length-1]}function Ng(a,b){for(var c=0;c<a.length;++c)if(a[c]==b)return c;return-1}function Og(a,b){for(var c=[],d=0;d<a.length;d++)c[d]=b(a[d],d);return c}function Pg(a,b){var c;if(Object.create)c=Object.create(a);else{var d=function(){};d.prototype=a,c=new d}return b&&Qg(b,c),c}function Qg(a,b,c){b||(b={});for(var d in a)!a.hasOwnProperty(d)||c===!1&&b.hasOwnProperty(d)||(b[d]=a[d]);return b}function Rg(a){var b=Array.prototype.slice.call(arguments,1);return function(){return a.apply(null,b)}}function Ug(a,b){return b?b.source.indexOf("\\w")>-1&&Tg(a)?!0:b.test(a):Tg(a)}function Vg(a){for(var b in a)if(a.hasOwnProperty(b)&&a[b])return!1;return!0}function Xg(a){return a.charCodeAt(0)>=768&&Wg.test(a)}function Yg(a,b,c,d){var e=document.createElement(a);if(c&&(e.className=c),d&&(e.style.cssText=d),"string"==typeof b)e.appendChild(document.createTextNode(b));else if(b)for(var f=0;f<b.length;++f)e.appendChild(b[f]);return e}function $g(a){for(var b=a.childNodes.length;b>0;--b)a
 .removeChild(a.firstChild);return a}function _g(a,b){return $g(a).appendChild(b)}function ah(a,b){if(a.contains)return a.contains(b);for(;b=b.parentNode;)if(b==a)return!0}function bh(){return document.activeElement}function ch(a){return new RegExp("(^|\\s)"+a+"(?:$|\\s)\\s*")}function fh(a,b){for(var c=a.split(" "),d=0;d<c.length;d++)c[d]&&!ch(c[d]).test(b)&&(b+=" "+c[d]);return b}function gh(a){if(document.body.getElementsByClassName)for(var b=document.body.getElementsByClassName("CodeMirror"),c=0;c<b.length;c++){var d=b[c].CodeMirror;d&&a(d)}}function ih(){hh||(jh(),hh=!0)}function jh(){var a;rg(window,"resize",function(){null==a&&(a=setTimeout(function(){a=null,lh=null,gh(dd)},100))}),rg(window,"blur",function(){gh(Id)})}function mh(a){if(null!=lh)return lh;var b=Yg("div",null,null,"width: 50px; height: 50px; overflow-x: scroll");return _g(a,b),b.offsetWidth&&(lh=b.offsetHeight-b.clientHeight),lh||0}function oh(a){if(null==nh){var b=Yg("span","\u200b");_g(a,Yg("span",[b,document.
 createTextNode("x")])),0!=a.firstChild.offsetHeight&&(nh=b.offsetWidth<=1&&b.offsetHeight>2&&!(d&&8>e))}return nh?Yg("span","\u200b"):Yg("span","\xa0",null,"display: inline-block; width: 1px; margin-right: -1px")}function qh(a){if(null!=ph)return ph;var b=_g(a,document.createTextNode("A\u062eA")),c=Zg(b,0,1).getBoundingClientRect();if(!c||c.left==c.right)return!1;var d=Zg(b,1,2).getBoundingClientRect();return ph=d.right-c.right<3}function vh(a){if(null!=uh)return uh;var b=_g(a,Yg("span","x")),c=b.getBoundingClientRect(),d=Zg(b,0,1).getBoundingClientRect();return uh=Math.abs(c.left-d.left)>1}function xh(a,b,c,d){if(!a)return d(b,c,"ltr");for(var e=!1,f=0;f<a.length;++f){var g=a[f];(g.from<c&&g.to>b||b==c&&g.to==b)&&(d(Math.max(g.from,b),Math.min(g.to,c),1==g.level?"rtl":"ltr"),e=!0)}e||d(b,c,"ltr")}function yh(a){return a.level%2?a.to:a.from}function zh(a){return a.level%2?a.from:a.to}function Ah(a){var b=Xf(a);return b?yh(b[0]):0}function Bh(a){var b=Xf(a);return b?zh(Lg(b)):a.text.
 length}function Ch(a,b){var c=Qf(a.doc,b),d=af(c);d!=c&&(b=Uf(d));var e=Xf(d),f=e?e[0].level%2?Bh(d):Ah(d):0;return mb(b,f)}function Dh(a,b){for(var c,d=Qf(a.doc,b);c=$e(d);)d=c.find(1,!0).line,b=null;var e=Xf(d),f=e?e[0].level%2?Ah(d):Bh(d):d.text.length;return mb(

<TRUNCATED>

[33/50] [abbrv] incubator-nifi git commit: NIFI-27: - Updating cluster search to work with upgraded jquery ui. - Better support for case when no results are found.

Posted by mc...@apache.org.
NIFI-27:
- Updating cluster search to work with upgraded jquery ui.
- Better support for case when no results are found.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/68e08983
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/68e08983
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/68e08983

Branch: refs/heads/develop
Commit: 68e0898399f7a8165fc35fb31157db9763519382
Parents: 71e53ae
Author: Matt Gilman <ma...@gmail.com>
Authored: Fri Dec 12 10:34:56 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Fri Dec 12 10:34:56 2014 -0500

----------------------------------------------------------------------
 .../summary/view-single-node-dialog.jsp         |  1 +
 .../nifi-web-ui/src/main/webapp/css/summary.css | 11 +++++++-
 .../webapp/js/nf/summary/nf-cluster-search.js   | 29 +++++++++++++++-----
 3 files changed, 33 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/68e08983/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/summary/view-single-node-dialog.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/summary/view-single-node-dialog.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/summary/view-single-node-dialog.jsp
index 9570de5..4a3338c 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/summary/view-single-node-dialog.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/summary/view-single-node-dialog.jsp
@@ -21,3 +21,4 @@
         <div id="cluster-search-example">(e.g.&nbsp;my.host:80)</div>
     </div>
 </div>
+<div id="search-cluster-results"></div>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/68e08983/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/summary.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/summary.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/summary.css
index cab21c0..c109927 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/summary.css
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/summary.css
@@ -139,9 +139,18 @@ div.search-match {
     font-size: 10px;
 }
 
-.ui-autocomplete {
+#search-cluster-results .ui-autocomplete {
     max-height: 300px;
     overflow: auto;
+    border: 1px solid #aaaaaa;
+    z-index: 1351;
+    border-radius: 0;
+}
+
+#search-cluster-results .ui-menu .ui-menu-item a.ui-state-focus {
+    background: #D4E0E5 !important;
+    border: 1px solid #999999;
+    border-radius: 0;
 }
 
 input.search-nodes {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/68e08983/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-cluster-search.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-cluster-search.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-cluster-search.js
index 035e6f0..2254943 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-cluster-search.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-cluster-search.js
@@ -102,13 +102,27 @@ nf.ClusterSearch = (function () {
 
             // configure the cluster auto complete
             $.widget('nf.clusterSearchAutocomplete', $.ui.autocomplete, {
-                _normalize: function (content) {
-                    return $.map(content, function (item, i) {
-                        return $.extend({
-                            label: item.address,
-                            value: item.address
-                        }, item);
+                _normalize: function(searchResults) {
+                    var items = [];
+                    items.push(searchResults);
+                    return items;
+                },
+                _renderMenu: function(ul, items) {
+                    // results are normalized into a single element array
+                    var searchResults = items[0];
+                    
+                    var self = this;
+                    $.each(searchResults.nodeResults, function(_, node) {
+                        self._renderItemData(ul, {
+                            label: node.address,
+                            value: node.address
+                        });
                     });
+                    
+                    // ensure there were some results
+                    if (ul.children().length === 0) {
+                        ul.append('<li class="unset search-no-matches">No nodes matched the search terms</li>');
+                    }
                 },
                 _resizeMenu: function () {
                     var ul = this.menu.element;
@@ -119,6 +133,7 @@ nf.ClusterSearch = (function () {
             // configure the autocomplete field
             $('#cluster-search-field').clusterSearchAutocomplete({
                 minLength: 0,
+                appendTo: '#search-cluster-results',
                 position: {
                     my: 'left top',
                     at: 'left bottom',
@@ -134,7 +149,7 @@ nf.ClusterSearch = (function () {
                         dataType: 'json',
                         url: config.urls.clusterSearch
                     }).done(function (searchResponse) {
-                        response(searchResponse.nodeResults);
+                        response(searchResponse);
                     });
                 }
             }).focus(function () {


[37/50] [abbrv] incubator-nifi git commit: NIFI-27: - Upgrading jQuery and jQuery UI. - Replacing all instances of Deferred.then with Deferred.done/fail due to API change introduced in 1.8. - Restoring line returns between public methods. - Upgrading jqu

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-go-to.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-go-to.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-go-to.js
index 4eeee43..ddc501a 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-go-to.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-go-to.js
@@ -336,6 +336,7 @@ nf.GoTo = (function () {
                 }
             });
         },
+        
         /**
          * Shows components downstream from a processor.
          * 
@@ -348,7 +349,7 @@ nf.GoTo = (function () {
                 type: 'GET',
                 url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var connections = response.connections;
 
                 // populate the downstream dialog
@@ -372,8 +373,9 @@ nf.GoTo = (function () {
 
                 // show the downstream dialog
                 $('#connections-dialog').modal('setHeaderText', 'Downstream Connections').modal('show');
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows components upstream from a processor.
          * 
@@ -386,7 +388,7 @@ nf.GoTo = (function () {
                 type: 'GET',
                 url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var connections = response.connections;
 
                 // populate the upstream dialog
@@ -410,8 +412,9 @@ nf.GoTo = (function () {
 
                 // show the upstream dialog
                 $('#connections-dialog').modal('setHeaderText', 'Upstream Connections').modal('show');
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows components downstream from a process group or a remote process group.
          * 
@@ -424,7 +427,7 @@ nf.GoTo = (function () {
                 type: 'GET',
                 url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var connections = response.connections;
 
                 // populate the downstream dialog
@@ -448,8 +451,9 @@ nf.GoTo = (function () {
 
                 // show the downstream dialog
                 $('#connections-dialog').modal('setHeaderText', 'Downstream Connections').modal('show');
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows components upstream from a process group or a remote process group.
          * 
@@ -462,7 +466,7 @@ nf.GoTo = (function () {
                 type: 'GET',
                 url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var connections = response.connections;
 
                 // populate the upstream dialog
@@ -486,8 +490,9 @@ nf.GoTo = (function () {
 
                 // show the dialog
                 $('#connections-dialog').modal('setHeaderText', 'Downstream Connections').modal('show');
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows components downstream from an input port.
          * 
@@ -500,7 +505,7 @@ nf.GoTo = (function () {
                 type: 'GET',
                 url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var connections = response.connections;
 
                 // populate the downstream dialog
@@ -524,8 +529,9 @@ nf.GoTo = (function () {
 
                 // show the downstream dialog
                 $('#connections-dialog').modal('setHeaderText', 'Downstream Connections').modal('show');
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows components upstream from an input port.
          * 
@@ -538,7 +544,7 @@ nf.GoTo = (function () {
                 type: 'GET',
                 url: config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getParentGroupId()) + '/connections',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var connections = response.connections;
 
                 // populate the upstream dialog
@@ -565,8 +571,9 @@ nf.GoTo = (function () {
 
                 // show the upstream dialog
                 $('#connections-dialog').modal('setHeaderText', 'Upstream Connections').modal('show');
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows components downstream from an output port.
          * 
@@ -579,7 +586,7 @@ nf.GoTo = (function () {
                 type: 'GET',
                 url: config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getParentGroupId()) + '/connections',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var connections = response.connections;
 
                 // populate the downstream dialog
@@ -606,8 +613,9 @@ nf.GoTo = (function () {
 
                 // show the downstream dialog
                 $('#connections-dialog').modal('setHeaderText', 'Downstream Connections').modal('show');
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows components upstream from an output port.
          * 
@@ -620,7 +628,7 @@ nf.GoTo = (function () {
                 type: 'GET',
                 url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var connections = response.connections;
 
                 // populate the upstream dialog
@@ -644,8 +652,9 @@ nf.GoTo = (function () {
 
                 // show the upstream dialog
                 $('#connections-dialog').modal('setHeaderText', 'Upstream Connections').modal('show');
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows components downstream from a funnel.
          * 
@@ -658,7 +667,7 @@ nf.GoTo = (function () {
                 type: 'GET',
                 url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var connections = response.connections;
 
                 // populate the downstream dialog
@@ -679,8 +688,9 @@ nf.GoTo = (function () {
 
                 // show the downstream dialog
                 $('#connections-dialog').modal('setHeaderText', 'Downstream Connections').modal('show');
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Shows components upstream from a funnel.
          * 
@@ -693,7 +703,7 @@ nf.GoTo = (function () {
                 type: 'GET',
                 url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var connections = response.connections;
 
                 // populate the upstream dialog
@@ -714,7 +724,7 @@ nf.GoTo = (function () {
 
                 // show the upstream dialog
                 $('#connections-dialog').modal('setHeaderText', 'Upstream Connections').modal('show');
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         }
     };
 }());
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-graph.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-graph.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-graph.js
index b1c5f17..100f0f8 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-graph.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-graph.js
@@ -55,6 +55,7 @@ nf.Graph = (function () {
             // load the graph
             return nf.CanvasUtils.enterGroup(nf.Canvas.getGroupId());
         },
+        
         /**
          * Populates the graph with the resources defined in the response.
          * 
@@ -96,6 +97,7 @@ nf.Graph = (function () {
                 nf.Connection.add(processGroupContents.connections, selectAll);
             }
         },
+        
         /**
          * Gets the components currently on the canvas.
          */
@@ -110,6 +112,7 @@ nf.Graph = (function () {
                 connections: nf.Connection.get()
             };
         },
+        
         /**
          * Sets the components contained within the specified process group.
          * 
@@ -142,6 +145,7 @@ nf.Graph = (function () {
                 nf.Connection.set(processGroupContents.connections);
             }
         },
+        
         /**
          * Populates the status for the components specified. This will update the content 
          * of the existing components on the graph and will not cause them to be repainted. 
@@ -160,6 +164,7 @@ nf.Graph = (function () {
             nf.Processor.setStatus(processGroupStatus.processorStatus);
             nf.Connection.setStatus(processGroupStatus.connectionStatus);
         },
+        
         /**
          * Clears all the components currently on the canvas. This function does not automatically refresh.
          */
@@ -173,6 +178,7 @@ nf.Graph = (function () {
             nf.Processor.removeAll();
             nf.Connection.removeAll();
         },
+        
         /**
          * Refreshes all components currently on the canvas.
          */

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-label-configuration.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-label-configuration.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-label-configuration.js
index 51dacfc..4c8e555 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-label-configuration.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-label-configuration.js
@@ -41,13 +41,13 @@ nf.LabelConfiguration = (function () {
                         'style[font-size]': fontSize.value
                     },
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     // update the revision
                     nf.Client.setRevision(response.revision);
 
                     // get the label out of the response
                     nf.Label.set(response.label);
-                }, nf.Common.handleAjaxError);
+                }).fail(nf.Common.handleAjaxError);
 
 
                 // reset and hide the dialog
@@ -92,6 +92,7 @@ nf.LabelConfiguration = (function () {
                 }
             });
         },
+        
         /**
          * Shows the configuration for the specified label.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-label.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-label.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-label.js
index 0d5db9e..c175418 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-label.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-label.js
@@ -283,6 +283,7 @@ nf.Label = (function () {
             width: dimensions.width,
             height: dimensions.height
         },
+        
         /**
          * Initializes of the Processor handler.
          */
@@ -342,13 +343,13 @@ nf.Label = (function () {
                                     'height': labelData.dimensions.height
                                 },
                                 dataType: 'json'
-                            }).then(function (response) {
+                            }).done(function (response) {
                                 // update the revision
                                 nf.Client.setRevision(response.revision);
 
                                 // request was successful, update the entry
                                 nf.Label.set(response.label);
-                            }, function () {
+                            }).fail(function () {
                                 // determine the previous width
                                 var width = dimensions.width;
                                 if (nf.Common.isDefinedAndNotNull(labelData.component.width)) {
@@ -376,6 +377,7 @@ nf.Label = (function () {
                         d3.event.sourceEvent.stopPropagation();
                     });
         },
+        
         /**
          * Populates the graph with the specified labels.
          * 
@@ -421,6 +423,7 @@ nf.Label = (function () {
             // apply the selection and handle all new labels
             select().enter().call(renderLabels, selectAll);
         },
+        
         /**
          * If the label id is specified it is returned. If no label id
          * specified, all labels are returned.
@@ -434,6 +437,7 @@ nf.Label = (function () {
                 return labelMap.get(id);
             }
         },
+        
         /**
          * If the label id is specified it is refresh according to the current 
          * state. If not label id is specified, all labels are refreshed.
@@ -447,6 +451,7 @@ nf.Label = (function () {
                 d3.selectAll('g.label').call(updateLabels);
             }
         },
+        
         /**
          * Reloads the label state from the server and refreshes the UI.
          * If the label is currently unknown, this function just returns.
@@ -464,6 +469,7 @@ nf.Label = (function () {
                 });
             }
         },
+        
         /**
          * Positions the component.
          * 
@@ -472,6 +478,7 @@ nf.Label = (function () {
         position: function (id) {
             d3.select('#id-' + id).call(position);
         },
+        
         /**
          * Sets the specified label(s). If the is an array, it 
          * will set each label. If it is not an array, it will 
@@ -516,6 +523,7 @@ nf.Label = (function () {
                 set(labels);
             }
         },
+        
         /**
          * Removes the specified label.
          * 
@@ -533,12 +541,14 @@ nf.Label = (function () {
             // apply the selection and handle all removed labels
             select().exit().call(removeLabels);
         },
+        
         /**
          * Removes all label.
          */
         removeAll: function () {
             nf.Label.remove(labelMap.keys());
         },
+        
         /**
          * Returns the default color that should be used when drawing a label.
          */

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port-configuration.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port-configuration.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port-configuration.js
index 2b31401..189f19f 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port-configuration.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port-configuration.js
@@ -58,7 +58,7 @@ nf.PortConfiguration = (function () {
                                 data: data,
                                 url: portData.component.uri,
                                 dataType: 'json'
-                            }).then(function (response) {
+                            }).done(function (response) {
                                 // update the revision
                                 nf.Client.setRevision(response.revision);
 
@@ -74,7 +74,7 @@ nf.PortConfiguration = (function () {
 
                                 // close the details panel
                                 $('#port-configuration').modal('hide');
-                            }, function (xhr, status, error) {
+                            }).fail(function (xhr, status, error) {
                                 // handle bad request locally to keep the dialog open, allowing the user
                                 // to make changes. if the request fails for another reason, the dialog
                                 // should be closed so the issue can be addressed (stale flow for instance)
@@ -128,6 +128,7 @@ nf.PortConfiguration = (function () {
         init: function () {
             initPortConfigurationDialog();
         },
+        
         /**
          * Shows the details for the specified selection.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port-details.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port-details.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port-details.js
index 2c19898..6b4bd8f 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port-details.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port-details.js
@@ -41,6 +41,7 @@ nf.PortDetails = (function () {
                 }
             });
         },
+        
         showDetails: function (selection) {
             // if the specified component is a processor, load its properties
             if (nf.CanvasUtils.isInputPort(selection) || nf.CanvasUtils.isOutputPort(selection)) {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port.js
index e80ff56..4eb3653 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port.js
@@ -446,6 +446,7 @@ nf.Port = (function () {
                         'class': 'ports'
                     });
         },
+        
         /**
          * Populates the graph with the specified ports.
          *
@@ -485,6 +486,7 @@ nf.Port = (function () {
             // apply the selection and handle all new ports
             select().enter().call(renderPorts, selectAll);
         },
+        
         /**
          * If the port id is specified it is returned. If no port id
          * specified, all ports are returned.
@@ -498,6 +500,7 @@ nf.Port = (function () {
                 return portMap.get(id);
             }
         },
+        
         /**
          * If the port id is specified it is refresh according to the current
          * state. If not port id is specified, all ports are refreshed.
@@ -511,12 +514,14 @@ nf.Port = (function () {
                 d3.selectAll('g.input-port, g.output-port').call(updatePorts);
             }
         },
+        
         /**
          * Refreshes the components necessary after a pan event.
          */
         pan: function () {
             d3.selectAll('g.input-port.entering, g.output-port.entering, g.input-port.leaving, g.output-port.leaving').call(updatePorts);
         },
+        
         /**
          * Reloads the port state from the server and refreshes the UI.
          * If the port is currently unknown, this function just returns.
@@ -538,6 +543,7 @@ nf.Port = (function () {
                 });
             }
         },
+        
         /**
          * Positions the component.
          * 
@@ -546,6 +552,7 @@ nf.Port = (function () {
         position: function (id) {
             d3.select('#id-' + id).call(nf.CanvasUtils.position);
         },
+        
         /**
          * Sets the specified port(s). If the is an array, it
          * will set each port. If it is not an array, it will
@@ -574,6 +581,7 @@ nf.Port = (function () {
                 set(ports);
             }
         },
+        
         /**
          * Sets the port status using the specified status.
          * 
@@ -595,6 +603,7 @@ nf.Port = (function () {
             // update the visible ports
             d3.selectAll('g.input-port.visible, g.output-port.visible').call(updatePortStatus);
         },
+        
         /**
          * Removes the specified port.
          *
@@ -612,6 +621,7 @@ nf.Port = (function () {
             // apply the selection and handle all removed ports
             select().exit().call(removePorts);
         },
+        
         /**
          * Removes all ports..
          */

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-process-group-configuration.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-process-group-configuration.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-process-group-configuration.js
index b74d0b4..de7a2d8 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-process-group-configuration.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-process-group-configuration.js
@@ -42,7 +42,7 @@ nf.ProcessGroupConfiguration = (function () {
                                     },
                                     url: processGroupData.component.uri,
                                     dataType: 'json'
-                                }).then(function (response) {
+                                }).done(function (response) {
                                     if (nf.Common.isDefinedAndNotNull(response.processGroup)) {
                                         // update the revision
                                         nf.Client.setRevision(response.revision);
@@ -53,7 +53,7 @@ nf.ProcessGroupConfiguration = (function () {
                                         // close the details panel
                                         $('#process-group-configuration').modal('hide');
                                     }
-                                }, function (xhr, status, error) {
+                                }).fail(function (xhr, status, error) {
                                     // close the details panel
                                     $('#process-group-configuration').modal('hide');
 
@@ -80,6 +80,7 @@ nf.ProcessGroupConfiguration = (function () {
                 }
             });
         },
+        
         /**
          * Shows the details for the specified selection.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-process-group-details.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-process-group-details.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-process-group-details.js
index 56f0061..7c6badd 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-process-group-details.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-process-group-details.js
@@ -40,6 +40,7 @@ nf.ProcessGroupDetails = (function () {
                 }
             });
         },
+        
         showDetails: function (selection) {
             // if the specified selection is a process group
             if (nf.CanvasUtils.isProcessGroup(selection)) {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-process-group.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-process-group.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-process-group.js
index 180484a..a585fc8 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-process-group.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-process-group.js
@@ -888,6 +888,7 @@ nf.ProcessGroup = (function () {
                         'class': 'process-groups'
                     });
         },
+        
         /**
          * Populates the graph with the specified process groups.
          *
@@ -918,6 +919,7 @@ nf.ProcessGroup = (function () {
             // apply the selection and handle all new process group
             select().enter().call(renderProcessGroups, selectAll);
         },
+        
         /**
          * If the process group id is specified it is returned. If no process group id
          * specified, all process groups are returned.
@@ -931,6 +933,7 @@ nf.ProcessGroup = (function () {
                 return processGroupMap.get(id);
             }
         },
+        
         /**
          * If the process group id is specified it is refresh according to the current
          * state. If no process group id is specified, all process groups are refreshed.
@@ -944,12 +947,14 @@ nf.ProcessGroup = (function () {
                 d3.selectAll('g.process-group').call(updateProcessGroups);
             }
         },
+        
         /**
          * Refreshes the components necessary after a pan event.
          */
         pan: function () {
             d3.selectAll('g.process-group.entering, g.process-group.leaving').call(updateProcessGroups);
         },
+        
         /**
          * Reloads the process group state from the server and refreshes the UI.
          * If the process group is currently unknown, this function just returns.
@@ -967,6 +972,7 @@ nf.ProcessGroup = (function () {
                 });
             }
         },
+        
         /**
          * Positions the component.
          * 
@@ -975,6 +981,7 @@ nf.ProcessGroup = (function () {
         position: function (id) {
             d3.select('#id-' + id).call(nf.CanvasUtils.position);
         },
+        
         /**
          * Sets the specified process group(s). If the is an array, it
          * will set each process group. If it is not an array, it will
@@ -1003,6 +1010,7 @@ nf.ProcessGroup = (function () {
                 set(processGroups);
             }
         },
+        
         /**
          * Sets the process group status using the specified status.
          * 
@@ -1024,6 +1032,7 @@ nf.ProcessGroup = (function () {
             // update the visible process groups
             d3.selectAll('g.process-group.visible').call(updateProcessGroupStatus);
         },
+        
         /**
          * Removes the specified process group.
          *
@@ -1041,6 +1050,7 @@ nf.ProcessGroup = (function () {
             // apply the selection and handle all removed process groups
             select().exit().call(removeProcessGroups);
         },
+        
         /**
          * Removes all process groups.
          */

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-configuration.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-configuration.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-configuration.js
index d8025ec..a904e6d 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-configuration.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-configuration.js
@@ -454,6 +454,7 @@ nf.ProcessorConfiguration = (function () {
             // initialize the property table
             nf.ProcessorPropertyTable.init();
         },
+        
         /**
          * Shows the configuration dialog for the specified processor.
          * 
@@ -586,7 +587,7 @@ nf.ProcessorConfiguration = (function () {
                                         dataType: 'json',
                                         processData: false,
                                         contentType: 'application/json'
-                                    }).then(function (response) {
+                                    }).done(function (response) {
                                         if (nf.Common.isDefinedAndNotNull(response.processor)) {
                                             // update the revision
                                             nf.Client.setRevision(response.revision);
@@ -597,7 +598,7 @@ nf.ProcessorConfiguration = (function () {
                                             // close the details panel
                                             $('#processor-configuration').modal('hide');
                                         }
-                                    }, handleProcessorConfigurationError);
+                                    }).fail(handleProcessorConfigurationError);
                                 }
                             }
                         }
@@ -650,7 +651,7 @@ nf.ProcessorConfiguration = (function () {
                                                     dataType: 'json',
                                                     processData: false,
                                                     contentType: 'application/json'
-                                                }).then(function (response) {
+                                                }).done(function (response) {
                                                     if (nf.Common.isDefinedAndNotNull(response.processor)) {
                                                         // update the revision
                                                         nf.Client.setRevision(response.revision);
@@ -658,7 +659,7 @@ nf.ProcessorConfiguration = (function () {
                                                         // open the custom ui
                                                         openCustomUi();
                                                     }
-                                                }, handleProcessorConfigurationError);
+                                                }).fail(handleProcessorConfigurationError);
                                             }
                                         }
                                     });
@@ -679,7 +680,7 @@ nf.ProcessorConfiguration = (function () {
                     type: 'GET',
                     url: '../nifi-api/controller/history/processors/' + encodeURIComponent(processor.id),
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     var processorHistory = response.processorHistory;
 
                     // record the processor history
@@ -696,7 +697,7 @@ nf.ProcessorConfiguration = (function () {
                     if (processorRelationships.is(':visible') && processorRelationships.get(0).scrollHeight > processorRelationships.innerHeight()) {
                         processorRelationships.css('border-width', '1px');
                     }
-                }, nf.Common.handleAjaxError);
+                }).fail(nf.Common.handleAjaxError);
             }
         }
     };

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-property-table.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-property-table.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-property-table.js
index 486ded6..3ffc17b 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-property-table.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-property-table.js
@@ -325,6 +325,7 @@ nf.ProcessorPropertyTable = (function () {
         config: {
             sensitiveText: 'Sensitive value set'
         },
+        
         /**
          * Initializes the property table.
          */
@@ -332,6 +333,7 @@ nf.ProcessorPropertyTable = (function () {
             initNewPropertyDialog();
             initProcessorPropertiesTable();
         },
+        
         /**
          * Determines if the specified property is sensitive.
          * 
@@ -344,6 +346,7 @@ nf.ProcessorPropertyTable = (function () {
                 return false;
             }
         },
+        
         /**
          * Determines if the specified property is required.
          * 
@@ -356,6 +359,7 @@ nf.ProcessorPropertyTable = (function () {
                 return false;
             }
         },
+        
         /**
          * Determines if the specified property is required.
          * 
@@ -368,6 +372,7 @@ nf.ProcessorPropertyTable = (function () {
                 return false;
             }
         },
+        
         /**
          * Gets the allowable values for the specified property.
          * 
@@ -380,6 +385,7 @@ nf.ProcessorPropertyTable = (function () {
                 return null;
             }
         },
+        
         /**
          * Returns whether the specified property supports EL.
          * 
@@ -392,6 +398,7 @@ nf.ProcessorPropertyTable = (function () {
                 return false;
             }
         },
+        
         /**
          * Saves the last edited row in the specified grid.
          */
@@ -403,6 +410,7 @@ nf.ProcessorPropertyTable = (function () {
                 editController.commitCurrentEdit();
             }
         },
+        
         /**
          * Cancels the edit in the specified row.
          */
@@ -414,6 +422,7 @@ nf.ProcessorPropertyTable = (function () {
                 editController.cancelCurrentEdit();
             }
         },
+        
         /**
          * Deletes the property in the specified row.
          * 
@@ -432,6 +441,7 @@ nf.ProcessorPropertyTable = (function () {
                 propertyData.updateItem(property.id, property);
             }
         },
+        
         /**
          * Update the size of the grid based on its container's current size.
          */
@@ -441,6 +451,7 @@ nf.ProcessorPropertyTable = (function () {
                 propertyGrid.resizeCanvas();
             }
         },
+        
         /**
          * Loads the specified properties.
          * 
@@ -497,6 +508,7 @@ nf.ProcessorPropertyTable = (function () {
                 propertyData.endUpdate();
             }
         },
+        
         /**
          * Determines if a save is required.
          */
@@ -515,6 +527,7 @@ nf.ProcessorPropertyTable = (function () {
             });
             return isSaveRequired;
         },
+        
         /**
          * Marshal's the properties to send to the server.
          */
@@ -535,6 +548,7 @@ nf.ProcessorPropertyTable = (function () {
 
             return properties;
         },
+        
         /**
          * Clears the property table.
          */

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor.js
index cbf980d..11bc106 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor.js
@@ -651,6 +651,7 @@ nf.Processor = (function () {
                         'class': 'processors'
                     });
         },
+        
         /**
          * Populates the graph with the specified processors.
          * 
@@ -681,6 +682,7 @@ nf.Processor = (function () {
             // apply the selection and handle all new processors
             select().enter().call(renderProcessors, selectAll);
         },
+        
         /**
          * If the processor id is specified it is returned. If no processor id
          * specified, all processors are returned.
@@ -694,6 +696,7 @@ nf.Processor = (function () {
                 return processorMap.get(id);
             }
         },
+        
         /**
          * If the processor id is specified it is refresh according to the current 
          * state. If not processor id is specified, all processors are refreshed.
@@ -707,6 +710,7 @@ nf.Processor = (function () {
                 d3.selectAll('g.processor').call(updateProcessors);
             }
         },
+        
         /**
          * Positions the component.
          * 
@@ -715,12 +719,14 @@ nf.Processor = (function () {
         position: function (id) {
             d3.select('#id-' + id).call(nf.CanvasUtils.position);
         },
+        
         /**
          * Refreshes the components necessary after a pan event.
          */
         pan: function () {
             d3.selectAll('g.processor.entering, g.processor.leaving').call(updateProcessors);
         },
+        
         /**
          * Reloads the processor state from the server and refreshes the UI.
          * If the processor is currently unknown, this function just returns.
@@ -738,6 +744,7 @@ nf.Processor = (function () {
                 });
             }
         },
+        
         /**
          * Sets the specified processor(s). If the is an array, it 
          * will set each processor. If it is not an array, it will 
@@ -766,6 +773,7 @@ nf.Processor = (function () {
                 set(processors);
             }
         },
+        
         /**
          * Removes the specified processor.
          * 
@@ -783,12 +791,14 @@ nf.Processor = (function () {
             // apply the selection and handle all removed processors
             select().exit().call(removeProcessors);
         },
+        
         /**
          * Removes all processors.
          */
         removeAll: function () {
             nf.Processor.remove(processorMap.keys());
         },
+        
         /**
          * Sets the processor status using the specified status.
          * 
@@ -810,6 +820,7 @@ nf.Processor = (function () {
             // update the visible processor status
             d3.selectAll('g.processor.visible').call(updateProcessorStatus);
         },
+        
         /**
          * Returns the default color that should be used when drawing a processor.
          */

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-registration.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-registration.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-registration.js
index 293539e..ec64677 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-registration.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-registration.js
@@ -53,7 +53,7 @@ nf.Registration = (function () {
                     data: {
                         'justification': justification
                     }
-                }).then(function (response) {
+                }).done(function (response) {
                     // hide the registration pane
                     $('#registration-pane').hide();
 
@@ -61,7 +61,7 @@ nf.Registration = (function () {
                     $('#message-pane').show();
                     $('#message-title').text('Thanks');
                     $('#message-content').text('Your request will be processed shortly.');
-                }, nf.Common.handleAjaxError);
+                }).fail(nf.Common.handleAjaxError);
             });
         }
     };

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-configuration.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-configuration.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-configuration.js
index b2639b3..8920bdd 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-configuration.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-configuration.js
@@ -45,13 +45,13 @@ nf.RemoteProcessGroupConfiguration = (function () {
                                     dataType: 'json',
                                     processData: false,
                                     contentType: 'application/json'
-                                }).then(function (response) {
+                                }).done(function (response) {
                                     // update the revision
                                     nf.Client.setRevision(response.revision);
 
                                     // close the details panel
                                     $('#remote-process-group-configuration').modal('hide');
-                                }, function (xhr, status, error) {
+                                }).fail(function (xhr, status, error) {
                                     if (xhr.status === 400) {
                                         var errors = xhr.responseText.split('\n');
 
@@ -93,6 +93,7 @@ nf.RemoteProcessGroupConfiguration = (function () {
                 }
             });
         },
+        
         /**
          * Shows the details for the remote process group in the specified selection.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-details.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-details.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-details.js
index 87cbbb1..296652b 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-details.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-details.js
@@ -39,6 +39,7 @@ nf.RemoteProcessGroupDetails = (function () {
                 }
             });
         },
+        
         /**
          * Shows the details for the remote process group in the specified selection.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-ports.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-ports.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-ports.js
index 4e8eca6..3d68fe5 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-ports.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-ports.js
@@ -59,7 +59,7 @@ nf.RemoteProcessGroupPorts = (function () {
                                     dataType: 'json',
                                     processData: false,
                                     contentType: 'application/json'
-                                }).then(function (response) {
+                                }).done(function (response) {
                                     // update the revision
                                     nf.Client.setRevision(response.revision);
 
@@ -75,7 +75,7 @@ nf.RemoteProcessGroupPorts = (function () {
                                     // set the new values
                                     $('#' + remotePortId + '-concurrent-tasks').text(remotePort.concurrentlySchedulableTaskCount);
                                     $('#' + remotePortId + '-compression').text(compressionLabel);
-                                }, function (xhr, status, error) {
+                                }).fail(function (xhr, status, error) {
                                     if (xhr.status === 400) {
                                         var errors = xhr.responseText.split('\n');
 
@@ -270,7 +270,7 @@ nf.RemoteProcessGroupPorts = (function () {
                         dataType: 'json',
                         processData: false,
                         contentType: 'application/json'
-                    }).then(function (response) {
+                    }).done(function (response) {
                         // update the revision
                         nf.Client.setRevision(response.revision);
 
@@ -306,7 +306,7 @@ nf.RemoteProcessGroupPorts = (function () {
                                 }
                             }
                         }
-                    }, function (xhr, status, error) {
+                    }).fail(function (xhr, status, error) {
                         if (xhr.status === 400) {
                             var errors = xhr.responseText.split('\n');
 
@@ -428,6 +428,7 @@ nf.RemoteProcessGroupPorts = (function () {
             initRemotePortConfigurationDialog();
             initRemoteProcessGroupConfigurationDialog();
         },
+        
         /**
          * Shows the details for the remote process group in the specified selection.
          * 
@@ -446,7 +447,7 @@ nf.RemoteProcessGroupPorts = (function () {
                         verbose: true
                     },
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     var remoteProcessGroup = response.remoteProcessGroup;
 
                     // set the model locally
@@ -509,7 +510,7 @@ nf.RemoteProcessGroupPorts = (function () {
 
                     // show the details
                     $('#remote-process-group-ports').modal('show');
-                }, nf.Common.handleAjaxError);
+                }).fail(nf.Common.handleAjaxError);
             }
         }
     };

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group.js
index 6665d48..9c6da4c 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group.js
@@ -881,6 +881,7 @@ nf.RemoteProcessGroup = (function () {
                         'class': 'remote-process-groups'
                     });
         },
+        
         /**
          * Populates the graph with the specified remote process groups.
          *
@@ -911,6 +912,7 @@ nf.RemoteProcessGroup = (function () {
             // apply the selection and handle all new remote process groups
             select().enter().call(renderRemoteProcessGroups, selectAll);
         },
+        
         /**
          * If the remote process group id is specified it is returned. If no remote process 
          * group id specified, all remote process groups are returned.
@@ -924,6 +926,7 @@ nf.RemoteProcessGroup = (function () {
                 return remoteProcessGroupMap.get(id);
             }
         },
+        
         /**
          * If the remote process group id is specified it is refresh according to the current
          * state. If no remote process group id is specified, all remote process groups are refreshed.
@@ -937,12 +940,14 @@ nf.RemoteProcessGroup = (function () {
                 d3.selectAll('g.remote-process-group').call(updateRemoteProcessGroups);
             }
         },
+        
         /**
          * Refreshes the components necessary after a pan event.
          */
         pan: function () {
             d3.selectAll('g.remote-process-group.entering, g.remote-process-group.leaving').call(updateRemoteProcessGroups);
         },
+        
         /**
          * Reloads the remote process group state from the server and refreshes the UI.
          * If the remote process group is currently unknown, this function just returns.
@@ -966,6 +971,7 @@ nf.RemoteProcessGroup = (function () {
                 });
             }
         },
+        
         /**
          * Positions the component.
          * 
@@ -974,6 +980,7 @@ nf.RemoteProcessGroup = (function () {
         position: function (id) {
             d3.select('#id-' + id).call(nf.CanvasUtils.position);
         },
+        
         /**
          * Sets the specified remote process group(s). If the is an array, it
          * will set each remote process group. If it is not an array, it will
@@ -1002,6 +1009,7 @@ nf.RemoteProcessGroup = (function () {
                 set(remoteProcessGroups);
             }
         },
+        
         /**
          * Sets the remote process group status using the specified status.
          * 
@@ -1023,6 +1031,7 @@ nf.RemoteProcessGroup = (function () {
             // only update the visible components
             d3.selectAll('g.remote-process-group.visible').call(updateProcessGroupStatus);
         },
+        
         /**
          * Removes the specified process group.
          *
@@ -1040,6 +1049,7 @@ nf.RemoteProcessGroup = (function () {
             // apply the selection and handle all removed remote process groups
             select().exit().call(removeRemoteProcessGroups);
         },
+        
         /**
          * Removes all remote process groups.
          */

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-secure-port-configuration.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-secure-port-configuration.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-secure-port-configuration.js
index b21b1bf..54e2bb2 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-secure-port-configuration.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-secure-port-configuration.js
@@ -80,7 +80,7 @@ nf.SecurePortConfiguration = (function () {
                                 contentType: 'application/json',
                                 url: portUri,
                                 dataType: 'json'
-                            }).then(function (response) {
+                            }).done(function (response) {
                                 // update the revision
                                 nf.Client.setRevision(response.revision);
 
@@ -96,7 +96,7 @@ nf.SecurePortConfiguration = (function () {
 
                                 // close the details panel
                                 $('#secure-port-configuration').modal('hide');
-                            }, function (xhr, status, error) {
+                            }).fail(function (xhr, status, error) {
                                 // close the details panel
                                 $('#secure-port-configuration').modal('hide');
 
@@ -322,6 +322,7 @@ nf.SecurePortConfiguration = (function () {
         init: function () {
             initPortConfigurationDialog();
         },
+        
         /**
          * Shows the details for the port specified selection.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-secure-port-details.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-secure-port-details.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-secure-port-details.js
index de9769e..9b66b09 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-secure-port-details.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-secure-port-details.js
@@ -85,6 +85,7 @@ nf.SecurePortDetails = (function () {
                 }
             });
         },
+        
         showDetails: function (selection) {
             // if the specified component is a port, load its properties
             if (nf.CanvasUtils.isInputPort(selection) || nf.CanvasUtils.isOutputPort(selection)) {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-selectable.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-selectable.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-selectable.js
index 47ac477..552d51e 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-selectable.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-selectable.js
@@ -20,6 +20,7 @@ nf.Selectable = (function () {
         init: function () {
 
         },
+        
         select: function (g) {
             // hide any context menus as necessary
             nf.ContextMenu.hide();
@@ -46,6 +47,7 @@ nf.Selectable = (function () {
             // stop propagation
             d3.event.stopPropagation();
         },
+        
         activate: function (components) {
             components.on('mousedown.selection', function () {
                 // get the clicked component to update selection

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-settings.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-settings.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-settings.js
index 2769ab3..3d573b3 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-settings.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-settings.js
@@ -54,7 +54,7 @@ nf.Settings = (function () {
                         clientId: revision.clientId
                     },
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     // update the revision
                     nf.Client.setRevision(response.revision);
 
@@ -63,7 +63,7 @@ nf.Settings = (function () {
                         dialogContent: 'A new flow archive was successfully created.',
                         overlayBackground: false
                     });
-                }, function (xhr, status, error) {
+                }).fail(function (xhr, status, error) {
                     // close the details panel
                     $('#settings-cancel').click();
 
@@ -87,7 +87,7 @@ nf.Settings = (function () {
                     url: config.urls.controllerConfig,
                     data: configuration,
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     // update the revision
                     nf.Client.setRevision(response.revision);
 
@@ -99,7 +99,7 @@ nf.Settings = (function () {
 
                     // close the settings dialog
                     $('#shell-close-button').click();
-                }, function (xhr, status, error) {
+                }).fail(function (xhr, status, error) {
                     // close the details panel
                     $('#settings-cancel').click();
 
@@ -113,6 +113,7 @@ nf.Settings = (function () {
                 $('#shell-close-button').click();
             });
         },
+        
         /**
          * Shows the settings dialog.
          */
@@ -121,7 +122,7 @@ nf.Settings = (function () {
                 type: 'GET',
                 url: config.urls.controllerConfig,
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 // ensure the config is present
                 if (nf.Common.isDefinedAndNotNull(response.config)) {
                     // set the header
@@ -139,7 +140,7 @@ nf.Settings = (function () {
                     // reset button state
                     $('#settings-save, #settings-cancel').mouseout();
                 });
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         }
     };
 }());
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-snippet.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-snippet.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-snippet.js
index 4da7841..aa2ecf6 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-snippet.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-snippet.js
@@ -69,6 +69,7 @@ nf.Snippet = (function () {
 
             return snippet;
         },
+        
         /**
          * Creates a snippet.
          * 
@@ -90,6 +91,7 @@ nf.Snippet = (function () {
                 nf.Client.setRevision(response.revision);
             });
         },
+        
         /**
          * Copies the snippet to the specified group and origin.
          * 
@@ -116,6 +118,7 @@ nf.Snippet = (function () {
                 nf.Client.setRevision(response.revision);
             });
         },
+        
         /**
          * Removes the specified snippet.
          * 
@@ -135,6 +138,7 @@ nf.Snippet = (function () {
                 nf.Client.setRevision(response.revision);
             });
         },
+        
         /**
          * Moves the snippet into the specified group.
          * 
@@ -158,6 +162,7 @@ nf.Snippet = (function () {
                 nf.Client.setRevision(response.revision);
             });
         },
+        
         /**
          * Unlinks the snippet from the actual data flow.
          * 
@@ -180,6 +185,7 @@ nf.Snippet = (function () {
                 nf.Client.setRevision(response.revision);
             });
         },
+        
         /**
          * Links the snippet from the actual data flow.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-storage.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-storage.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-storage.js
index 1dab55f..0be05fe 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-storage.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-storage.js
@@ -67,6 +67,7 @@ nf.Storage = (function () {
                 alternativeStorage = d3.map();
             }
         },
+        
         /**
          * Stores the specified item. If supported, will be persisted
          * in localStorage.
@@ -91,6 +92,7 @@ nf.Storage = (function () {
                 alternativeStorage.set(key, item);
             }
         },
+        
         /**
          * Gets the item with the specified key. If an item with this key does
          * not exist, null is returned. If an item exists but cannot be parsed
@@ -117,6 +119,7 @@ nf.Storage = (function () {
                 return alternativeStorage.get(key);
             }
         },
+        
         /**
          * Removes the item with the specified key.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster-table.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster-table.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster-table.js
index 12ee71b..c82caa0 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster-table.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster-table.js
@@ -95,14 +95,14 @@ nf.ClusterTable = (function () {
                 status: 'CONNECTING'
             },
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             var node = response.node;
 
             // update the node in the table
             var clusterGrid = $('#cluster-table').data('gridInstance');
             var clusterData = clusterGrid.getData();
             clusterData.updateItem(node.nodeId, node);
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -118,14 +118,14 @@ nf.ClusterTable = (function () {
                 status: 'DISCONNECTING'
             },
             dataType: 'json'
-        }).then(function (response) {
+        }).done(function (response) {
             var node = response.node;
 
             // update the node in the table
             var clusterGrid = $('#cluster-table').data('gridInstance');
             var clusterData = clusterGrid.getData();
             clusterData.updateItem(node.nodeId, node);
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -138,12 +138,12 @@ nf.ClusterTable = (function () {
             type: 'DELETE',
             url: config.urls.nodes + '/' + encodeURIComponent(nodeId),
             dataType: 'json'
-        }).then(function () {
+        }).done(function () {
             // get the table and update the row accordingly
             var clusterGrid = $('#cluster-table').data('gridInstance');
             var clusterData = clusterGrid.getData();
             clusterData.deleteItem(nodeId);
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     /**
@@ -391,6 +391,7 @@ nf.ClusterTable = (function () {
             // initialize the number of displayed items
             $('#displayed-nodes').text('0');
         },
+        
         /**
          * Prompts to verify node connection.
          * 
@@ -413,6 +414,7 @@ nf.ClusterTable = (function () {
             }
 
         },
+        
         /**
          * Prompts to verify node disconnection.
          * 
@@ -434,6 +436,7 @@ nf.ClusterTable = (function () {
                 });
             }
         },
+        
         /**
          * Makes the specified node the primary node of the cluster.
          * 
@@ -452,7 +455,7 @@ nf.ClusterTable = (function () {
                         primary: true
                     },
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     var node = response.node;
 
                     var clusterGrid = $('#cluster-table').data('gridInstance');
@@ -482,9 +485,10 @@ nf.ClusterTable = (function () {
 
                     // end the update
                     clusterData.endUpdate();
-                }, nf.Common.handleAjaxError);
+                }).fail(nf.Common.handleAjaxError);
             }
         },
+        
         /**
          * Prompts to verify node disconnection.
          * 
@@ -506,6 +510,7 @@ nf.ClusterTable = (function () {
                 });
             }
         },
+        
         /**
          * Update the size of the grid based on its container's current size.
          */
@@ -515,6 +520,7 @@ nf.ClusterTable = (function () {
                 clusterGrid.resizeCanvas();
             }
         },
+        
         /**
          * Load the processor cluster table.
          */
@@ -523,7 +529,7 @@ nf.ClusterTable = (function () {
                 type: 'GET',
                 url: config.urls.cluster,
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var cluster = response.cluster;
 
                 // ensure there are groups specified
@@ -544,8 +550,9 @@ nf.ClusterTable = (function () {
                 } else {
                     $('#total-nodes').text('0');
                 }
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         },
+        
         /**
          * Populate the expanded row.
          * 
@@ -561,7 +568,7 @@ nf.ClusterTable = (function () {
                     type: 'GET',
                     url: config.urls.nodes + '/' + encodeURIComponent(item.nodeId),
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     var node = response.node;
 
                     // update the dialog fields
@@ -582,7 +589,7 @@ nf.ClusterTable = (function () {
 
                     // show the dialog
                     $('#node-details-dialog').modal('show');
-                }, nf.Common.handleAjaxError);
+                }).fail(nf.Common.handleAjaxError);
             }
         }
     };

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster.js
index 3e6946e..f6cbdc6 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster.js
@@ -41,7 +41,7 @@ nf.Cluster = (function () {
                 type: 'GET',
                 url: config.urls.authorities,
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 if (nf.Common.isDefinedAndNotNull(response.authorities)) {
                     // record the users authorities
                     nf.Common.setAuthorities(response.authorities);
@@ -49,7 +49,7 @@ nf.Cluster = (function () {
                 } else {
                     deferred.reject();
                 }
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 nf.Common.handleAjaxError(xhr, status, error);
                 deferred.reject();
             });
@@ -73,7 +73,7 @@ nf.Cluster = (function () {
                     type: 'GET',
                     url: config.urls.banners,
                     dataType: 'json'
-                }).then(function (bannerResponse) {
+                }).done(function (bannerResponse) {
                     // ensure the banners response is specified
                     if (nf.Common.isDefinedAndNotNull(bannerResponse.banners)) {
                         if (nf.Common.isDefinedAndNotNull(bannerResponse.banners.headerText) && bannerResponse.banners.headerText !== '') {
@@ -105,7 +105,7 @@ nf.Cluster = (function () {
                     }
 
                     deferred.resolve();
-                }, function (xhr, status, error) {
+                }).fail(function (xhr, status, error) {
                     nf.Common.handleAjaxError(xhr, status, error);
                     deferred.reject();
                 });
@@ -137,14 +137,14 @@ nf.Cluster = (function () {
                             type: 'GET',
                             url: config.urls.controllerAbout,
                             dataType: 'json'
-                        }).then(function (response) {
+                        }).done(function (response) {
                             var aboutDetails = response.about;
                             var countersTitle = aboutDetails.title + ' Cluster';
 
                             // set the document title and the about title
                             document.title = countersTitle;
                             $('#counters-header-text').text(countersTitle);
-                        }, nf.Common.handleAjaxError);
+                        }).fail(nf.Common.handleAjaxError);
                     });
                 });
             });

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters-table.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters-table.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters-table.js
index 01c359a..536ffdb 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters-table.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters-table.js
@@ -222,6 +222,7 @@ nf.CountersTable = (function () {
             // initialize the number of display items
             $('#displayed-counters').text('0');
         },
+        
         /**
          * Resets the specified counter.
          * 
@@ -237,16 +238,17 @@ nf.CountersTable = (function () {
                     type: 'PUT',
                     url: config.urls.counters + '/' + encodeURIComponent(item.id),
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     var counter = response.counter;
 
                     // get the table and update the row accordingly
                     var countersGrid = $('#counters-table').data('gridInstance');
                     var countersData = countersGrid.getData();
                     countersData.updateItem(counter.id, counter);
-                }, nf.Common.handleAjaxError);
+                }).fail(nf.Common.handleAjaxError);
             }
         },
+        
         /**
          * Update the size of the grid based on its container's current size.
          */
@@ -256,6 +258,7 @@ nf.CountersTable = (function () {
                 countersGrid.resizeCanvas();
             }
         },
+        
         /**
          * Load the processor counters table.
          */
@@ -264,7 +267,7 @@ nf.CountersTable = (function () {
                 type: 'GET',
                 url: config.urls.counters,
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 var report = response.counters;
 
                 // ensure there are groups specified
@@ -285,7 +288,7 @@ nf.CountersTable = (function () {
                 } else {
                     $('#total-counters').text('0');
                 }
-            }, nf.Common.handleAjaxError);
+            }).fail(nf.Common.handleAjaxError);
         }
     };
 }());
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters.js
index 83029da..1f9a861 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters.js
@@ -41,7 +41,7 @@ nf.Counters = (function () {
                 type: 'GET',
                 url: config.urls.authorities,
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 if (nf.Common.isDefinedAndNotNull(response.authorities)) {
                     // record the users authorities
                     nf.Common.setAuthorities(response.authorities);
@@ -49,7 +49,7 @@ nf.Counters = (function () {
                 } else {
                     deferred.reject();
                 }
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 nf.Common.handleAjaxError(xhr, status, error);
                 deferred.reject();
             });
@@ -73,7 +73,7 @@ nf.Counters = (function () {
                     type: 'GET',
                     url: config.urls.banners,
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     // ensure the banners response is specified
                     if (nf.Common.isDefinedAndNotNull(response.banners)) {
                         if (nf.Common.isDefinedAndNotNull(response.banners.headerText) && response.banners.headerText !== '') {
@@ -105,7 +105,7 @@ nf.Counters = (function () {
                     }
 
                     deferred.resolve();
-                }, function (xhr, status, error) {
+                }).fail(function (xhr, status, error) {
                     nf.Common.handleAjaxError(xhr, status, error);
                     deferred.reject();
                 });
@@ -137,14 +137,14 @@ nf.Counters = (function () {
                             type: 'GET',
                             url: config.urls.controllerAbout,
                             dataType: 'json'
-                        }).then(function (response) {
+                        }).done(function (response) {
                             var aboutDetails = response.about;
                             var countersTitle = aboutDetails.title + ' Counters';
 
                             // set the document title and the about title
                             document.title = countersTitle;
                             $('#counters-header-text').text(countersTitle);
-                        }, nf.Common.handleAjaxError);
+                        }).fail(nf.Common.handleAjaxError);
                     });
                 });
             });

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-model.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-model.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-model.js
index 324f736..0564b17 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-model.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-model.js
@@ -123,7 +123,7 @@
                     url: '../nifi-api/controller/history',
                     data: query,
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     var history = response.history;
 
                     // calculate the indices
@@ -160,7 +160,7 @@
                         from: from,
                         to: to
                     });
-                }, nf.Common.handleAjaxError);
+                }).fail(nf.Common.handleAjaxError);
                 xhr.fromPage = fromPage;
                 xhr.toPage = toPage;
 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-table.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-table.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-table.js
index 0d2f15d..be0ea73 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-table.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-table.js
@@ -321,9 +321,9 @@ nf.HistoryTable = (function () {
                 endDate: endDateTime
             }),
             dataType: 'json'
-        }).then(function () {
+        }).done(function () {
             nf.HistoryTable.loadHistoryTable();
-        }, nf.Common.handleAjaxError);
+        }).fail(nf.Common.handleAjaxError);
     };
 
     return {
@@ -333,6 +333,7 @@ nf.HistoryTable = (function () {
             initPurgeDialog();
             initHistoryTable();
         },
+        
         /**
          * Update the size of the grid based on its container's current size.
          */
@@ -342,6 +343,7 @@ nf.HistoryTable = (function () {
                 historyGrid.resizeCanvas();
             }
         },
+        
         /**
          * Load the processor status table.
          */
@@ -355,6 +357,7 @@ nf.HistoryTable = (function () {
             // request refresh of the current 'page'
             historyGrid.onViewportChanged.notify();
         },
+        
         /**
          * Shows the details for the specified action.
          * 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/2965258e/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history.js
index 330d2d6..36364df 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history.js
@@ -42,7 +42,7 @@ nf.History = (function () {
                 type: 'GET',
                 url: config.urls.authorities,
                 dataType: 'json'
-            }).then(function (response) {
+            }).done(function (response) {
                 if (nf.Common.isDefinedAndNotNull(response.authorities)) {
                     // record the users authorities
                     nf.Common.setAuthorities(response.authorities);
@@ -50,7 +50,7 @@ nf.History = (function () {
                 } else {
                     deferred.reject();
                 }
-            }, function (xhr, status, error) {
+            }).fail(function (xhr, status, error) {
                 nf.Common.handleAjaxError(xhr, status, error);
                 deferred.reject();
             });
@@ -74,7 +74,7 @@ nf.History = (function () {
                     type: 'GET',
                     url: config.urls.banners,
                     dataType: 'json'
-                }).then(function (response) {
+                }).done(function (response) {
                     // ensure the banners response is specified
                     if (nf.Common.isDefinedAndNotNull(response.banners)) {
                         if (nf.Common.isDefinedAndNotNull(response.banners.headerText) && response.banners.headerText !== '') {
@@ -106,7 +106,7 @@ nf.History = (function () {
                     }
 
                     deferred.resolve();
-                }, function (xhr, status, error) {
+                }).fail(function (xhr, status, error) {
                     nf.Common.handleAjaxError(xhr, status, error);
                     deferred.reject();
                 });
@@ -139,14 +139,14 @@ nf.History = (function () {
                         type: 'GET',
                         url: config.urls.controllerAbout,
                         dataType: 'json'
-                    }).then(function (response) {
+                    }).done(function (response) {
                         var aboutDetails = response.about;
                         var historyTitle = aboutDetails.title + ' History';
 
                         // set the document title and the about title
                         document.title = historyTitle;
                         $('#history-header-text').text(historyTitle);
-                    }, nf.Common.handleAjaxError);
+                    }).fail(nf.Common.handleAjaxError);
                 });
             });
         }


[27/50] [abbrv] incubator-nifi git commit: NIFI-27: - Starting to upgrade jQuery and jQuery UI.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/slick.grid.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/slick.grid.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/slick.grid.css
index de94dbf..3ecf3d2 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/slick.grid.css
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/slick.grid.css
@@ -8,7 +8,8 @@ classes should alter those!
 .slick-header.ui-state-default, .slick-headerrow.ui-state-default {
   width: 100%;
   overflow: hidden;
-  border-left: 0px;
+  /*border-left: 0px;*/
+  border: 0px;
 }
 
 .slick-header-columns, .slick-headerrow-columns {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/animated-overlay.gif
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/animated-overlay.gif b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/animated-overlay.gif
new file mode 100755
index 0000000..d441f75
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/animated-overlay.gif differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
new file mode 100755
index 0000000..b1776f8
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_flat_75_ffffff_40x100.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_flat_75_ffffff_40x100.png
new file mode 100755
index 0000000..79969e6
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_flat_75_ffffff_40x100.png differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
new file mode 100755
index 0000000..1e35525
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_65_ffffff_1x400.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100755
index 0000000..103f966
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_65_ffffff_1x400.png differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_75_dadada_1x400.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_75_dadada_1x400.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_75_dadada_1x400.png
new file mode 100755
index 0000000..d2c4fd8
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_75_dadada_1x400.png differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
new file mode 100755
index 0000000..9c045e2
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100755
index 0000000..aa32f10
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_glass_95_fef1ec_1x400.png differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
new file mode 100755
index 0000000..6b6b758
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_222222_256x240.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_222222_256x240.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_222222_256x240.png
new file mode 100755
index 0000000..c1cb117
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_222222_256x240.png differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_2e83ff_256x240.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_2e83ff_256x240.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_2e83ff_256x240.png
new file mode 100755
index 0000000..84b601b
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_2e83ff_256x240.png differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_454545_256x240.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_454545_256x240.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_454545_256x240.png
new file mode 100755
index 0000000..b6db1ac
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_454545_256x240.png differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_888888_256x240.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_888888_256x240.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_888888_256x240.png
new file mode 100755
index 0000000..feea0e2
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_888888_256x240.png differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_cd0a0a_256x240.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_cd0a0a_256x240.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_cd0a0a_256x240.png
new file mode 100755
index 0000000..ed5b6b0
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/images/ui-icons_cd0a0a_256x240.png differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.css
new file mode 100755
index 0000000..1ab6052
--- /dev/null
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.css
@@ -0,0 +1,1178 @@
+/*! jQuery UI - v1.10.4 - 2014-12-11
+* http://jqueryui.com
+* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureE
 rror=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+	display: none;
+}
+.ui-helper-hidden-accessible {
+	border: 0;
+	clip: rect(0 0 0 0);
+	height: 1px;
+	margin: -1px;
+	overflow: hidden;
+	padding: 0;
+	position: absolute;
+	width: 1px;
+}
+.ui-helper-reset {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	line-height: 1.3;
+	text-decoration: none;
+	font-size: 100%;
+	list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+	content: "";
+	display: table;
+	border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+	clear: both;
+}
+.ui-helper-clearfix {
+	min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+	width: 100%;
+	height: 100%;
+	top: 0;
+	left: 0;
+	position: absolute;
+	opacity: 0;
+	filter:Alpha(Opacity=0);
+}
+
+.ui-front {
+	z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+	cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	display: block;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+.ui-resizable {
+	position: relative;
+}
+.ui-resizable-handle {
+	position: absolute;
+	font-size: 0.1px;
+	display: block;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+	display: none;
+}
+.ui-resizable-n {
+	cursor: n-resize;
+	height: 7px;
+	width: 100%;
+	top: -5px;
+	left: 0;
+}
+.ui-resizable-s {
+	cursor: s-resize;
+	height: 7px;
+	width: 100%;
+	bottom: -5px;
+	left: 0;
+}
+.ui-resizable-e {
+	cursor: e-resize;
+	width: 7px;
+	right: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-w {
+	cursor: w-resize;
+	width: 7px;
+	left: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-se {
+	cursor: se-resize;
+	width: 12px;
+	height: 12px;
+	right: 1px;
+	bottom: 1px;
+}
+.ui-resizable-sw {
+	cursor: sw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	bottom: -5px;
+}
+.ui-resizable-nw {
+	cursor: nw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	top: -5px;
+}
+.ui-resizable-ne {
+	cursor: ne-resize;
+	width: 9px;
+	height: 9px;
+	right: -5px;
+	top: -5px;
+}
+.ui-selectable-helper {
+	position: absolute;
+	z-index: 100;
+	border: 1px dotted black;
+}
+.ui-accordion .ui-accordion-header {
+	display: block;
+	cursor: pointer;
+	position: relative;
+	margin-top: 2px;
+	padding: .5em .5em .5em .7em;
+	min-height: 0; /* support: IE7 */
+}
+.ui-accordion .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-noicons {
+	padding-left: .7em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+	position: absolute;
+	left: .5em;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+	padding: 1em 2.2em;
+	border-top: 0;
+	overflow: auto;
+}
+.ui-autocomplete {
+	position: absolute;
+	top: 0;
+	left: 0;
+	cursor: default;
+}
+.ui-button {
+	display: inline-block;
+	position: relative;
+	padding: 0;
+	line-height: normal;
+	margin-right: .1em;
+	cursor: pointer;
+	vertical-align: middle;
+	text-align: center;
+	overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+	text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+	width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+	width: 2.4em;
+}
+.ui-button-icons-only {
+	width: 3.4em;
+}
+button.ui-button-icons-only {
+	width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+	display: block;
+	line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+	padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+	padding: .4em;
+	text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+	padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+	padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+	padding-left: 2.1em;
+	padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+	padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+	position: absolute;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+	left: 50%;
+	margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+	left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+	right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+	margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+	margin-left: 0;
+	margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+	border: 0;
+	padding: 0;
+}
+.ui-datepicker {
+	width: 17em;
+	padding: .2em .2em 0;
+	display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+	position: relative;
+	padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+	position: absolute;
+	top: 2px;
+	width: 1.8em;
+	height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+	top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+	left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+	right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+	left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+	right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+	display: block;
+	position: absolute;
+	left: 50%;
+	margin-left: -8px;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+	margin: 0 2.3em;
+	line-height: 1.8em;
+	text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+	font-size: 1em;
+	margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+	width: 49%;
+}
+.ui-datepicker table {
+	width: 100%;
+	font-size: .9em;
+	border-collapse: collapse;
+	margin: 0 0 .4em;
+}
+.ui-datepicker th {
+	padding: .7em .3em;
+	text-align: center;
+	font-weight: bold;
+	border: 0;
+}
+.ui-datepicker td {
+	border: 0;
+	padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+	display: block;
+	padding: .2em;
+	text-align: right;
+	text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+	background-image: none;
+	margin: .7em 0 0 0;
+	padding: 0 .2em;
+	border-left: 0;
+	border-right: 0;
+	border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+	float: right;
+	margin: .5em .2em .4em;
+	cursor: pointer;
+	padding: .2em .6em .3em .6em;
+	width: auto;
+	overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+	float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+	width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+	float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+	width: 95%;
+	margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+	width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+	width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+	width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+	border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+	clear: left;
+}
+.ui-datepicker-row-break {
+	clear: both;
+	width: 100%;
+	font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+	direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+	right: 2px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+	left: 2px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+	right: 1px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+	left: 1px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+	clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+	float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+	float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+	border-right-width: 0;
+	border-left-width: 1px;
+}
+.ui-dialog {
+	overflow: hidden;
+	position: absolute;
+	top: 0;
+	left: 0;
+	padding: .2em;
+	outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+	padding: .4em 1em;
+	position: relative;
+}
+.ui-dialog .ui-dialog-title {
+	float: left;
+	margin: .1em 0;
+	white-space: nowrap;
+	width: 90%;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+	position: absolute;
+	right: .3em;
+	top: 50%;
+	width: 20px;
+	margin: -10px 0 0 0;
+	padding: 1px;
+	height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+	position: relative;
+	border: 0;
+	padding: .5em 1em;
+	background: none;
+	overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+	text-align: left;
+	border-width: 1px 0 0 0;
+	background-image: none;
+	margin-top: .5em;
+	padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+	float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+	margin: .5em .4em .5em 0;
+	cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+	width: 12px;
+	height: 12px;
+	right: -5px;
+	bottom: -5px;
+	background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+	cursor: move;
+}
+.ui-menu {
+	list-style: none;
+	padding: 2px;
+	margin: 0;
+	display: block;
+	outline: none;
+}
+.ui-menu .ui-menu {
+	margin-top: -3px;
+	position: absolute;
+}
+.ui-menu .ui-menu-item {
+	margin: 0;
+	padding: 0;
+	width: 100%;
+	/* support: IE10, see #8844 */
+	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+}
+.ui-menu .ui-menu-divider {
+	margin: 5px -2px 5px -2px;
+	height: 0;
+	font-size: 0;
+	line-height: 0;
+	border-width: 1px 0 0 0;
+}
+.ui-menu .ui-menu-item a {
+	text-decoration: none;
+	display: block;
+	padding: 2px .4em;
+	line-height: 1.5;
+	min-height: 0; /* support: IE7 */
+	font-weight: normal;
+}
+.ui-menu .ui-menu-item a.ui-state-focus,
+.ui-menu .ui-menu-item a.ui-state-active {
+	font-weight: normal;
+	margin: -1px;
+}
+
+.ui-menu .ui-state-disabled {
+	font-weight: normal;
+	margin: .4em 0 .2em;
+	line-height: 1.5;
+}
+.ui-menu .ui-state-disabled a {
+	cursor: default;
+}
+
+/* icon support */
+.ui-menu-icons {
+	position: relative;
+}
+.ui-menu-icons .ui-menu-item a {
+	position: relative;
+	padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+	position: absolute;
+	top: .2em;
+	left: .2em;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+	position: static;
+	float: right;
+}
+.ui-progressbar {
+	height: 2em;
+	text-align: left;
+	overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+	margin: -1px;
+	height: 100%;
+}
+.ui-progressbar .ui-progressbar-overlay {
+	background: url("images/animated-overlay.gif");
+	height: 100%;
+	filter: alpha(opacity=25);
+	opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+	background-image: none;
+}
+.ui-slider {
+	position: relative;
+	text-align: left;
+}
+.ui-slider .ui-slider-handle {
+	position: absolute;
+	z-index: 2;
+	width: 1.2em;
+	height: 1.2em;
+	cursor: default;
+}
+.ui-slider .ui-slider-range {
+	position: absolute;
+	z-index: 1;
+	font-size: .7em;
+	display: block;
+	border: 0;
+	background-position: 0 0;
+}
+
+/* For IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+	filter: inherit;
+}
+
+.ui-slider-horizontal {
+	height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+	top: -.3em;
+	margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+	top: 0;
+	height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+	left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+	right: 0;
+}
+
+.ui-slider-vertical {
+	width: .8em;
+	height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+	left: -.3em;
+	margin-left: 0;
+	margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+	left: 0;
+	width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+	bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+	top: 0;
+}
+.ui-spinner {
+	position: relative;
+	display: inline-block;
+	overflow: hidden;
+	padding: 0;
+	vertical-align: middle;
+}
+.ui-spinner-input {
+	border: none;
+	background: none;
+	color: inherit;
+	padding: 0;
+	margin: .2em 0;
+	vertical-align: middle;
+	margin-left: .4em;
+	margin-right: 22px;
+}
+.ui-spinner-button {
+	width: 16px;
+	height: 50%;
+	font-size: .5em;
+	padding: 0;
+	margin: 0;
+	text-align: center;
+	position: absolute;
+	cursor: default;
+	display: block;
+	overflow: hidden;
+	right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+	border-top: none;
+	border-bottom: none;
+	border-right: none;
+}
+/* vertically center icon */
+.ui-spinner .ui-icon {
+	position: absolute;
+	margin-top: -8px;
+	top: 50%;
+	left: 0;
+}
+.ui-spinner-up {
+	top: 0;
+}
+.ui-spinner-down {
+	bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+	/* need to fix icons sprite */
+	background-position: -65px -16px;
+}
+.ui-tabs {
+	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+	padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+	margin: 0;
+	padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+	list-style: none;
+	float: left;
+	position: relative;
+	top: 0;
+	margin: 1px .2em 0 0;
+	border-bottom-width: 0;
+	padding: 0;
+	white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+	float: left;
+	padding: .5em 1em;
+	text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+	margin-bottom: -1px;
+	padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+	cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+	cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+	display: block;
+	border-width: 0;
+	padding: 1em 1.4em;
+	background: none;
+}
+.ui-tooltip {
+	padding: 8px;
+	position: absolute;
+	z-index: 9999;
+	max-width: 300px;
+	-webkit-box-shadow: 0 0 5px #aaa;
+	box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+	border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+	font-family: Verdana,Arial,sans-serif;
+	font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+	font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+	font-family: Verdana,Arial,sans-serif;
+	font-size: 1em;
+}
+.ui-widget-content {
+	border: 1px solid #aaaaaa;
+	background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;
+	color: #222222;
+}
+.ui-widget-content a {
+	color: #222222;
+}
+.ui-widget-header {
+	border: 1px solid #aaaaaa;
+	background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;
+	color: #222222;
+	font-weight: bold;
+}
+.ui-widget-header a {
+	color: #222222;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+	border: 1px solid #d3d3d3;
+	background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
+	font-weight: normal;
+	color: #555555;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+	color: #555555;
+	text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+	border: 1px solid #999999;
+	background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
+	font-weight: normal;
+	color: #212121;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+	color: #212121;
+	text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+	border: 1px solid #aaaaaa;
+	background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
+	font-weight: normal;
+	color: #212121;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+	color: #212121;
+	text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+	border: 1px solid #fcefa1;
+	background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
+	color: #363636;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+	color: #363636;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+	border: 1px solid #cd0a0a;
+	background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;
+	color: #cd0a0a;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+	color: #cd0a0a;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+	color: #cd0a0a;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+	font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+	opacity: .7;
+	filter:Alpha(Opacity=70);
+	font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+	opacity: .35;
+	filter:Alpha(Opacity=35);
+	background-image: none;
+}
+.ui-state-disabled .ui-icon {
+	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	width: 16px;
+	height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+	background-image: url("images/ui-icons_222222_256x240.png");
+}
+.ui-widget-header .ui-icon {
+	background-image: url("images/ui-icons_222222_256x240.png");
+}
+.ui-state-default .ui-icon {
+	background-image: url("images/ui-icons_888888_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+	background-image: url("images/ui-icons_454545_256x240.png");
+}
+.ui-state-active .ui-icon {
+	background-image: url("images/ui-icons_454545_256x240.png");
+}
+.ui-state-highlight .ui-icon {
+	background-image: url("images/ui-icons_2e83ff_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+	background-image: url("images/ui-icons_cd0a0a_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+	border-top-left-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+	border-top-right-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+	border-bottom-left-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+	border-bottom-right-radius: 4px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+	background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
+	opacity: .3;
+	filter: Alpha(Opacity=30);
+}
+.ui-widget-shadow {
+	margin: -8px 0 0 -8px;
+	padding: 8px;
+	background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
+	opacity: .3;
+	filter: Alpha(Opacity=30);
+	border-radius: 8px;
+}


[48/50] [abbrv] incubator-nifi git commit: NIFI-27: - Upgrading jQuery, jQuery UI, jqGrid. - Replacing deprecated functionality.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/d7b1113a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/nf-common.js
----------------------------------------------------------------------
diff --git a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/nf-common.js b/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/nf-common.js
index 1cc8c99..a427e69 100644
--- a/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/nf-common.js
+++ b/nar-bundles/monitor-threshold-bundle/ui/src/main/webapp/js/nf-common.js
@@ -878,10 +878,11 @@ $(document).ready(function () {
     }
 
     function addHoverEffect(selector, normalStyle, overStyle) {
-        return $(selector).addClass(normalStyle).live('mouseover', function () {
+        $(document).on('mouseenter', selector, function () {
             $(this).removeClass(normalStyle).addClass(overStyle);
-        }).live('mouseout', function () {
+        }).on('mouseleave', selector, function () {
             $(this).removeClass(overStyle).addClass(normalStyle);
-        })
+        });
+        return $(selector).addClass(normalStyle);
     }
 });
\ No newline at end of file


[32/50] [abbrv] incubator-nifi git commit: NIFI-27: - Starting to upgrade jQuery and jQuery UI.

Posted by mc...@apache.org.
NIFI-27:
- Starting to upgrade jQuery and jQuery UI.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/71e53ae5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/71e53ae5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/71e53ae5

Branch: refs/heads/develop
Commit: 71e53ae5664d04c0410e35b098808c0b45d97a28
Parents: 5b0d8a5
Author: Matt Gilman <ma...@gmail.com>
Authored: Thu Dec 11 16:02:44 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Thu Dec 11 16:02:44 2014 -0500

----------------------------------------------------------------------
 .../webapp/WEB-INF/pages/bulletin-board.jsp     |     7 +-
 .../src/main/webapp/WEB-INF/pages/canvas.jsp    |     7 +-
 .../src/main/webapp/WEB-INF/pages/cluster.jsp   |     7 +-
 .../src/main/webapp/WEB-INF/pages/counters.jsp  |     7 +-
 .../src/main/webapp/WEB-INF/pages/history.jsp   |     7 +-
 .../main/webapp/WEB-INF/pages/provenance.jsp    |     7 +-
 .../src/main/webapp/WEB-INF/pages/summary.jsp   |     7 +-
 .../src/main/webapp/WEB-INF/pages/templates.jsp |     7 +-
 .../src/main/webapp/WEB-INF/pages/users.jsp     |     7 +-
 .../WEB-INF/partials/canvas/canvas-header.jsp   |     1 +
 .../nifi-web-ui/src/main/webapp/css/header.css  |    28 +-
 .../main/webapp/css/processor-configuration.css |     6 +
 .../main/webapp/js/jquery/combo/jquery.combo.js |     5 +-
 .../images/ui-bg_flat_0_aaaaaa_40x100.png       |   Bin 180 -> 0 bytes
 .../images/ui-bg_flat_75_ffffff_40x100.png      |   Bin 178 -> 0 bytes
 .../images/ui-bg_glass_55_fbf9ee_1x400.png      |   Bin 120 -> 0 bytes
 .../images/ui-bg_glass_65_ffffff_1x400.png      |   Bin 105 -> 0 bytes
 .../images/ui-bg_glass_75_dadada_1x400.png      |   Bin 111 -> 0 bytes
 .../images/ui-bg_glass_75_e6e6e6_1x400.png      |   Bin 110 -> 0 bytes
 .../images/ui-bg_glass_95_fef1ec_1x400.png      |   Bin 119 -> 0 bytes
 .../ui-bg_highlight-soft_75_cccccc_1x100.png    |   Bin 101 -> 0 bytes
 .../images/ui-icons_222222_256x240.png          |   Bin 4369 -> 0 bytes
 .../images/ui-icons_2e83ff_256x240.png          |   Bin 4369 -> 0 bytes
 .../images/ui-icons_454545_256x240.png          |   Bin 8543 -> 0 bytes
 .../images/ui-icons_888888_256x240.png          |   Bin 4369 -> 0 bytes
 .../images/ui-icons_cd0a0a_256x240.png          |   Bin 4369 -> 0 bytes
 .../images/ui-icons_ffffff_256x240.png          |   Bin 8358 -> 0 bytes
 .../css/smoothness/jquery-ui-1.8.10.custom.css  |   625 -
 .../src/main/webapp/js/jquery/jquery-1.7.js     |  9017 ----------
 .../src/main/webapp/js/jquery/jquery-1.7.min.js |  2934 ----
 .../main/webapp/js/jquery/jquery-2.1.1.min.js   |     4 +
 .../js/jquery/jquery-ui-1.8.10.custom.min.js    |  6354 -------
 .../js/jquery/slickgrid/css/slick.grid.css      |     3 +-
 .../ui-smoothness/images/animated-overlay.gif   |   Bin 0 -> 1738 bytes
 .../images/ui-bg_flat_0_aaaaaa_40x100.png       |   Bin 0 -> 212 bytes
 .../images/ui-bg_flat_75_ffffff_40x100.png      |   Bin 0 -> 208 bytes
 .../images/ui-bg_glass_55_fbf9ee_1x400.png      |   Bin 0 -> 335 bytes
 .../images/ui-bg_glass_65_ffffff_1x400.png      |   Bin 0 -> 207 bytes
 .../images/ui-bg_glass_75_dadada_1x400.png      |   Bin 0 -> 262 bytes
 .../images/ui-bg_glass_75_e6e6e6_1x400.png      |   Bin 0 -> 262 bytes
 .../images/ui-bg_glass_95_fef1ec_1x400.png      |   Bin 0 -> 332 bytes
 .../ui-bg_highlight-soft_75_cccccc_1x100.png    |   Bin 0 -> 280 bytes
 .../images/ui-icons_222222_256x240.png          |   Bin 0 -> 6922 bytes
 .../images/ui-icons_2e83ff_256x240.png          |   Bin 0 -> 4549 bytes
 .../images/ui-icons_454545_256x240.png          |   Bin 0 -> 6992 bytes
 .../images/ui-icons_888888_256x240.png          |   Bin 0 -> 6999 bytes
 .../images/ui-icons_cd0a0a_256x240.png          |   Bin 0 -> 4549 bytes
 .../jquery/ui-smoothness/jquery-ui-1.10.4.css   |  1178 ++
 .../js/jquery/ui-smoothness/jquery-ui-1.10.4.js | 15008 +++++++++++++++++
 .../ui-smoothness/jquery-ui-1.10.4.min.css      |     7 +
 .../ui-smoothness/jquery-ui-1.10.4.min.js       |     7 +
 .../src/main/webapp/js/nf/canvas/nf-search.js   |    19 +-
 52 files changed, 16272 insertions(+), 18987 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
index 083862d..297a331 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
@@ -25,14 +25,15 @@
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
-        <script type="text/javascript" src="js/jquery/jquery-1.7.min.js"></script>
+        <link rel="stylesheet" href="js/jquery/ui-smoothness/jquery-ui-1.10.4.css" type="text/css" />
+        <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
+        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/combo/jquery.combo.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/modal/jquery.modal.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/jquery.ellipsis.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.each.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
+        <script type="text/javascript" src="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js"></script>
         <script type="text/javascript" src="js/jquery/qtip2/jquery.qtip.min.js"></script>
         <script type="text/javascript" src="js/nf/nf-namespace.js?${project.version}"></script>
         ${nf.bulletin.board.script.tags}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
index a40b745..5dc2b87 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
@@ -29,13 +29,14 @@
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/minicolors/jquery.minicolors.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
         <script type="text/javascript" src="js/codemirror/lib/codemirror-compressed.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery-1.7.min.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
+        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
+        <script type="text/javascript" src="js/jquery/ui-smoothness/jquery-ui-1.10.4.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.count.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.ellipsis.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
index a0bda24..121aebc 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
@@ -25,16 +25,17 @@
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
-        <script type="text/javascript" src="js/jquery/jquery-1.7.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
+        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/combo/jquery.combo.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/modal/jquery.modal.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/jquery.ellipsis.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.each.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
+        <script type="text/javascript" src="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js"></script>
         <script type="text/javascript" src="js/jquery/qtip2/jquery.qtip.min.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.event.drag-2.2.min.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellrangeselector.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
index 2678bf4..0d0c527 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
@@ -25,16 +25,17 @@
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
-        <script type="text/javascript" src="js/jquery/jquery-1.7.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
+        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/combo/jquery.combo.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/modal/jquery.modal.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/jquery.ellipsis.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.each.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
+        <script type="text/javascript" src="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js"></script>
         <script type="text/javascript" src="js/jquery/qtip2/jquery.qtip.min.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.event.drag-2.2.min.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellrangeselector.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
index 19d9e90..7d588fe 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
@@ -25,16 +25,17 @@
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
-        <script type="text/javascript" src="js/jquery/jquery-1.7.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
+        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/modal/jquery.modal.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/combo/jquery.combo.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/jquery.ellipsis.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.each.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
+        <script type="text/javascript" src="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js"></script>
         <script type="text/javascript" src="js/jquery/qtip2/jquery.qtip.min.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.event.drag-2.2.min.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellrangeselector.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
index f3c9a88..e014b93 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
@@ -26,17 +26,18 @@
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
-        <script type="text/javascript" src="js/jquery/jquery-1.7.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
+        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/modal/jquery.modal.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/tabbs/jquery.tabbs.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/combo/jquery.combo.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/jquery.ellipsis.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.each.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
+        <script type="text/javascript" src="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js"></script>
         <script type="text/javascript" src="js/jquery/qtip2/jquery.qtip.min.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.event.drag-2.2.min.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellrangeselector.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
index e8a8e4c..fca5506 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
@@ -26,11 +26,12 @@
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
-        <script type="text/javascript" src="js/jquery/jquery-1.7.min.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
+        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
+        <script type="text/javascript" src="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/tabbs/jquery.tabbs.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/combo/jquery.combo.js?${project.version}"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
index 889485f..e2eb7e1 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
@@ -25,17 +25,18 @@
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
-        <script type="text/javascript" src="js/jquery/jquery-1.7.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
+        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.form.js"></script>
         <script type="text/javascript" src="js/jquery/combo/jquery.combo.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/modal/jquery.modal.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/jquery.ellipsis.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.each.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
+        <script type="text/javascript" src="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js"></script>
         <script type="text/javascript" src="js/jquery/qtip2/jquery.qtip.min.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.event.drag-2.2.min.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellrangeselector.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
index 9ff887b..39b7e15 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
@@ -26,17 +26,18 @@
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
-        <script type="text/javascript" src="js/jquery/jquery-1.7.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
+        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="js/jquery/tabbs/jquery.tabbs.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/combo/jquery.combo.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/modal/jquery.modal.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/jquery.ellipsis.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.each.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
+        <script type="text/javascript" src="js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js"></script>
         <script type="text/javascript" src="js/jquery/qtip2/jquery.qtip.min.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.event.drag-2.2.min.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellrangeselector.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/canvas-header.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/canvas-header.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/canvas-header.jsp
index ee915c1..8eea811 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/canvas-header.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/canvas-header.jsp
@@ -53,3 +53,4 @@
         </ul>
     </div>
 </div>
+<div id="search-flow-results"></div>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/header.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/header.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/header.css
index 1d3ee5a..6b096a1 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/header.css
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/header.css
@@ -451,34 +451,40 @@ input.search-flow {
     color: #7098AD;
 }
 
-li.search-header {
+#search-flow-results .ui-autocomplete {
+    max-height: 400px;
+    overflow: auto;
+    border: 1px solid #aaaaaa;
+    z-index: 1251;
+}
+
+#search-flow-results .ui-menu .ui-menu-item a.ui-state-focus {
+    background: #D4E0E5 !important;
+    border: 1px solid #999999;
+    border-radius: 0;
+}
+
+#search-flow-results li.search-header {
     font-weight: bold;
     padding-top: 4px;
     padding-left: 4px;
     padding-right: 4px;
     height: 14px;
-    float: left;
-    clear: left;
-}
-
-.ui-autocomplete {
-    max-height: 400px;
-    overflow: auto;
 }
 
-div.search-match-header {
+#search-flow-results div.search-match-header {
     font-weight: normal;
     margin-left: 19px;
 }
 
-div.search-match {
+#search-flow-results div.search-match {
     margin-left: 26px;
     color: #888;
     font-size: 10px;
     line-height: 1.4em;
 }
 
-li.search-no-matches {
+#search-flow-results li.search-no-matches {
     padding: 4px;
     font-weight: bold;
     color: #aaa;

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/processor-configuration.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/processor-configuration.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/processor-configuration.css
index 85c8965..87977f0 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/processor-configuration.css
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/processor-configuration.css
@@ -145,6 +145,12 @@ div.relationship-description {
     margin-top: 5px;
 }
 
+#run-duration-slider .ui-slider-handle {
+    border-radius: 0;
+    border: 1px solid #999;
+    outline: none;
+}
+
 #run-duration-labels {
     font-family: sans-serif;
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/combo/jquery.combo.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/combo/jquery.combo.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/combo/jquery.combo.js
index 3b98a4d..30f0be9 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/combo/jquery.combo.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/combo/jquery.combo.js
@@ -93,7 +93,7 @@
 
         // ensure we found the selected option
         if (isDefinedAndNotNull(selectedOption)) {
-            $(comboText).removeClass('selected-disabled-option').attr('title', selectedOption.text).text(selectedOption.text).data('text', selectedOption.text);
+            $(comboText).removeClass('selected-disabled-option').attr('title', selectedOption.text).text(selectedOption.text).data('text', selectedOption.text).width(combo.outerWidth() - 25);
 
             // if the selected option is disabled show it
             if (selectedOption.disabled === true) {
@@ -245,9 +245,6 @@
                     // add the drop down arrow
                     $('<div class="combo-arrow"></div>').appendTo(combo);
 
-                    // set the width of the combo text
-                    comboText.width($(combo).outerWidth() - 25);
-
                     // set the selection
                     if (isDefinedAndNotNull(options.selectedOption)) {
                         selectOption(combo, options.selectedOption.text, options.selectedOption.value);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
deleted file mode 100755
index 5b5dab2..0000000
Binary files a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
deleted file mode 100755
index ac8b229..0000000
Binary files a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
deleted file mode 100755
index ad3d634..0000000
Binary files a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
deleted file mode 100755
index 42ccba2..0000000
Binary files a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
deleted file mode 100755
index 5a46b47..0000000
Binary files a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
deleted file mode 100755
index 86c2baa..0000000
Binary files a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
deleted file mode 100755
index 4443fdc..0000000
Binary files a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
deleted file mode 100755
index 7c9fa6c..0000000
Binary files a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_222222_256x240.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_222222_256x240.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_222222_256x240.png
deleted file mode 100755
index b273ff1..0000000
Binary files a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_222222_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_2e83ff_256x240.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_2e83ff_256x240.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_2e83ff_256x240.png
deleted file mode 100755
index 09d1cdc..0000000
Binary files a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_2e83ff_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_454545_256x240.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_454545_256x240.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_454545_256x240.png
deleted file mode 100755
index df33621..0000000
Binary files a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_454545_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_888888_256x240.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_888888_256x240.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_888888_256x240.png
deleted file mode 100755
index 6d02426..0000000
Binary files a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_888888_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_cd0a0a_256x240.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_cd0a0a_256x240.png
deleted file mode 100755
index 2ab019b..0000000
Binary files a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_cd0a0a_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_ffffff_256x240.png
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_ffffff_256x240.png b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_ffffff_256x240.png
deleted file mode 100755
index 0be0ad3..0000000
Binary files a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/images/ui-icons_ffffff_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css
deleted file mode 100755
index 38bce7f..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css
+++ /dev/null
@@ -1,625 +0,0 @@
-/*
- * jQuery UI CSS Framework 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-.ui-helper-clearfix { display: inline-block; }
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix { height:1%; }
-.ui-helper-clearfix { display:block; }
-/* end clearfix */
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-
-/*
- * jQuery UI CSS Framework 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighligh
 t=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
-.ui-widget-content a { color: #222222; }
-.ui-widget-header a { color: #222222; }
-
-.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
-.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
-
-/* Interaction states
-----------------------------------*/
-/*.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { 
-    background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; 
-    font-weight: normal; 
-    color: #555555; 
-}
-
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
-/*.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }*/
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {
-    font-weight: normal;
-    color: #212121;
-    outline: none;
-}
-
-/* override the highlight when hovering over certain elements */
-li.ui-menu-item .ui-state-hover {
-    background: #D4E0E5 !important;
-    border: 1px solid #999999;
-}
-
-.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-/*.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {
-    background: #FFE8B3;
-    color: #363636;
-}
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-/*.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }*/
-.ui-state-default .ui-icon { 
-    background-image: url(images/ui-icons_ffffff_256x240.png); 
-}
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-/*
-.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
-.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-right {  -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
-*/
-
-/* Overlays */
-.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
-.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
- * jQuery UI Resizable 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizable#theming
- */
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
- * jQuery UI Selectable 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectable#theming
- */
-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
-/*
- * jQuery UI Accordion 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion#theming
- */
-/* IE/Win - Fix animation bug - #4615 */
-.ui-accordion { width: 100%; }
-.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
-.ui-accordion .ui-accordion-li-fix { display: inline; }
-.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
-.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
-.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
-.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
-.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
-.ui-accordion .ui-accordion-content-active { display: block; }
-/*
- * jQuery UI Autocomplete 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete#theming
- */
-/*.ui-autocomplete { position: absolute; cursor: default; }	*/
-.ui-autocomplete { 
-    position: absolute; 
-    cursor: default; 
-    border: 1px solid #aaaaaa;
-}
-
-/* workarounds */
-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
-
-/*
- * jQuery UI Menu 1.8.10
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu#theming
- */
-.ui-menu {
-    list-style:none;
-    padding: 2px;
-    margin: 0;
-    display:block;
-    float: left;
-}
-.ui-menu .ui-menu {
-    margin-top: -3px;
-}
-.ui-menu .ui-menu-item {
-    margin:0;
-    padding: 0;
-    zoom: 1;
-    float: left;
-    clear: left;
-    width: 100%;
-}
-.ui-menu .ui-menu-item a {
-    text-decoration:none;
-    display:block;
-    padding:.2em .4em;
-    line-height:1.5;
-    zoom:1;
-}
-.ui-menu .ui-menu-item a.ui-state-hover,
-.ui-menu .ui-menu-item a.ui-state-active {
-    font-weight: normal;
-    margin: -1px;
-}
-/*
- * jQuery UI Button 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button#theming
- */
-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; } 
-button.ui-button-icons-only { width: 3.7em; } 
-
-/*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1.4;  }
-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
-/* no icon support for input elements, provide padding by default */
-input.ui-button { padding: .4em 1em; }
-
-/*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-
-/*button sets*/
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
-
-/* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
-/*
- * jQuery UI Dialog 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog#theming
- */
-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
-.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
-.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 
-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
-.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
-.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
-.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
-.ui-draggable .ui-dialog-titlebar { cursor: move; }
-/*
- * jQuery UI Slider 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider#theming
- */
-.ui-slider { position: relative; text-align: left; }
-/*.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }*/
-.ui-slider .ui-slider-handle { 
-    border: 1px solid #999999;
-    position: absolute; 
-    z-index: 2; 
-    width: 1.2em; 
-    height: 1.2em; 
-    cursor: default; 
-}
-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
-
-.ui-slider-horizontal { height: .8em; }
-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
-
-.ui-slider-vertical { width: .8em; height: 100px; }
-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
- * jQuery UI Tabs 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs#theming
- */
-.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
-.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
-.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
-.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
-.ui-tabs .ui-tabs-hide { display: none !important; }
-/*
- * jQuery UI Datepicker 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker#theming
- */
-/*.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }*/
-.ui-datepicker { 
-    width: 17em; 
-    padding: .2em .2em 0; 
-    border: 1px solid #aaa;
-    display: none;
-}
-.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
-/*.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }*/
-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { 
-    top: 1px; 
-    border: 1px solid #aaa;
-    cursor: pointer;
-}
-.ui-datepicker .ui-datepicker-prev { left:2px; }
-.ui-datepicker .ui-datepicker-next { right:2px; }
-.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
-.ui-datepicker .ui-datepicker-next-hover { right:1px; }
-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
-.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
-.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
-.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
-.ui-datepicker select.ui-datepicker-month, 
-.ui-datepicker select.ui-datepicker-year { width: 49%;}
-.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
-.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
-.ui-datepicker td { border: 0; padding: 1px; }
-.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
-.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi { width:auto; }
-.ui-datepicker-multi .ui-datepicker-group { float:left; }
-.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
-.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
-.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
-.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
-.ui-datepicker-row-break { clear:both; width:100%; }
-
-/* RTL support */
-.ui-datepicker-rtl { direction: rtl; }
-.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-
-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
-.ui-datepicker-cover {
-    display: none; /*sorry for IE5*/
-    display/**/: block; /*sorry for IE5*/
-    position: absolute; /*must have*/
-    z-index: -1; /*must have*/
-    filter: mask(); /*must have*/
-    top: -4px; /*must have*/
-    left: -4px; /*must have*/
-    width: 200px; /*must have*/
-    height: 200px; /*must have*/
-}/*
- * jQuery UI Progressbar 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar#theming
- */
-.ui-progressbar { height:2em; text-align: left; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file


[23/50] [abbrv] incubator-nifi git commit: NIFI-27: - Starting to upgrade jQuery and jQuery UI.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-search.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-search.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-search.js
index a9d8d27..c1c4117 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-search.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-search.js
@@ -32,25 +32,15 @@ nf.Search = (function () {
                 reset: function () {
                     this.term = null;
                 },
-                _response: function (content) {
-                    if (!this.options.disabled && content) {
-                        this._suggest(content);
-                        this._trigger('open');
-                    } else {
-                        this.close();
-                    }
-                    this.pending--;
-                    if (!this.pending) {
-                        this.element.removeClass('ui-autocomplete-loading');
-                    }
-                },
                 _resizeMenu: function () {
                     var ul = this.menu.element;
                     ul.width(399);
                 },
                 _renderMenu: function (ul, items) {
                     var self = this;
-                    var searchResults = items.searchResultsDTO;
+                    
+                    // the object that holds the search results is normalized into a single element array
+                    var searchResults = items[0];
 
                     // show all processors
                     if (!nf.Common.isEmpty(searchResults.processorResults)) {
@@ -118,12 +108,13 @@ nf.Search = (function () {
                     $.each(match.matches, function (i, match) {
                         itemContent.append($('<div class="search-match"></div>').text(match));
                     });
-                    return $('<li></li>').data('item.autocomplete', match).append(itemContent).appendTo(ul);
+                    return $('<li></li>').data('ui-autocomplete-item', match).append(itemContent).appendTo(ul);
                 }
             });
 
             // configure the search field
             $('#search-field').zIndex(1250).searchAutocomplete({
+                appendTo: '#search-flow-results',
                 position: {
                     my: 'right top',
                     at: 'right bottom',


[04/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of codemirror.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9180b7d4/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.css
old mode 100755
new mode 100644
index 4de1393..e2d4ec2
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.css
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/lib/codemirror.css
@@ -1,67 +1,97 @@
 /* BASICS */
 
 .CodeMirror {
-    /* Set height, width, borders, and global font properties here */
-    font-family: monospace;
-    height: 300px;
+  /* Set height, width, borders, and global font properties here */
+  font-family: monospace;
+  height: 300px;
 }
 .CodeMirror-scroll {
-    /* Set scrolling behaviour here */
-    overflow: auto;
+  /* Set scrolling behaviour here */
+  overflow: auto;
 }
 
 /* PADDING */
 
 .CodeMirror-lines {
-    padding: 4px 0; /* Vertical padding around content */
+  padding: 4px 0; /* Vertical padding around content */
 }
 .CodeMirror pre {
-    padding: 0 4px; /* Horizontal padding of content */
+  padding: 0 4px; /* Horizontal padding of content */
 }
 
 .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
-    background-color: white; /* The little square between H and V scrollbars */
+  background-color: white; /* The little square between H and V scrollbars */
 }
 
 /* GUTTER */
 
 .CodeMirror-gutters {
-    border-right: 1px solid #ddd;
-    background-color: #f7f7f7;
-    white-space: nowrap;
+  border-right: 1px solid #ddd;
+  background-color: #f7f7f7;
+  white-space: nowrap;
 }
 .CodeMirror-linenumbers {}
 .CodeMirror-linenumber {
-    padding: 0 3px 0 5px;
-    min-width: 20px;
-    text-align: right;
-    color: #999;
-    -moz-box-sizing: content-box;
-    box-sizing: content-box;
+  padding: 0 3px 0 5px;
+  min-width: 20px;
+  text-align: right;
+  color: #999;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
 }
 
+.CodeMirror-guttermarker { color: black; }
+.CodeMirror-guttermarker-subtle { color: #999; }
+
 /* CURSOR */
 
 .CodeMirror div.CodeMirror-cursor {
-    border-left: 1px solid black;
+  border-left: 1px solid black;
 }
 /* Shown when moving in bi-directional text */
 .CodeMirror div.CodeMirror-secondarycursor {
-    border-left: 1px solid silver;
+  border-left: 1px solid silver;
+}
+.CodeMirror.cm-fat-cursor div.CodeMirror-cursor {
+  width: auto;
+  border: 0;
+  background: #7e7;
+}
+.CodeMirror.cm-fat-cursor div.CodeMirror-cursors {
+  z-index: 1;
+}
+
+.cm-animate-fat-cursor {
+  width: auto;
+  border: 0;
+  -webkit-animation: blink 1.06s steps(1) infinite;
+  -moz-animation: blink 1.06s steps(1) infinite;
+  animation: blink 1.06s steps(1) infinite;
+}
+@-moz-keyframes blink {
+  0% { background: #7e7; }
+  50% { background: none; }
+  100% { background: #7e7; }
+}
+@-webkit-keyframes blink {
+  0% { background: #7e7; }
+  50% { background: none; }
+  100% { background: #7e7; }
 }
-.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor {
-    width: auto;
-    border: 0;
-    background: #7e7;
+@keyframes blink {
+  0% { background: #7e7; }
+  50% { background: none; }
+  100% { background: #7e7; }
 }
+
 /* Can style cursor different in overwrite (non-insert) mode */
 div.CodeMirror-overwrite div.CodeMirror-cursor {}
 
-.cm-tab { display: inline-block; }
+.cm-tab { display: inline-block; text-decoration: inherit; }
 
 .CodeMirror-ruler {
-    border-left: 1px solid #ccc;
-    position: absolute;
+  border-left: 1px solid #ccc;
+  position: absolute;
 }
 
 /* DEFAULT THEME */
@@ -70,11 +100,12 @@ div.CodeMirror-overwrite div.CodeMirror-cursor {}
 .cm-s-default .cm-atom {color: #219;}
 .cm-s-default .cm-number {color: #164;}
 .cm-s-default .cm-def {color: #00f;}
-.cm-s-default .cm-variable {color: black;}
+.cm-s-default .cm-variable,
+.cm-s-default .cm-punctuation,
+.cm-s-default .cm-property,
+.cm-s-default .cm-operator {}
 .cm-s-default .cm-variable-2 {color: #05a;}
 .cm-s-default .cm-variable-3 {color: #085;}
-.cm-s-default .cm-property {color: black;}
-.cm-s-default .cm-operator {color: black;}
 .cm-s-default .cm-comment {color: #a50;}
 .cm-s-default .cm-string {color: #a11;}
 .cm-s-default .cm-string-2 {color: #f50;}
@@ -94,12 +125,16 @@ div.CodeMirror-overwrite div.CodeMirror-cursor {}
 .cm-header, .cm-strong {font-weight: bold;}
 .cm-em {font-style: italic;}
 .cm-link {text-decoration: underline;}
+.cm-strikethrough {text-decoration: line-through;}
 
 .cm-s-default .cm-error {color: #f00;}
 .cm-invalidchar {color: #f00;}
 
+/* Default styles for common addons */
+
 div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
 div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
+.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
 .CodeMirror-activeline-background {background: #e8f2ff;}
 
 /* STOP */
@@ -108,152 +143,159 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
    the editor. You probably shouldn't touch them. */
 
 .CodeMirror {
-    line-height: 1;
-    position: relative;
-    overflow: hidden;
-    background: white;
-    color: black;
+  line-height: 1;
+  position: relative;
+  overflow: hidden;
+  background: white;
+  color: black;
 }
 
 .CodeMirror-scroll {
-    /* 30px is the magic margin used to hide the element's real scrollbars */
-    /* See overflow: hidden in .CodeMirror */
-    margin-bottom: -30px; margin-right: -30px;
-    padding-bottom: 30px;
-    height: 100%;
-    outline: none; /* Prevent dragging from highlighting the element */
-    position: relative;
-    -moz-box-sizing: content-box;
-    box-sizing: content-box;
+  /* 30px is the magic margin used to hide the element's real scrollbars */
+  /* See overflow: hidden in .CodeMirror */
+  margin-bottom: -30px; margin-right: -30px;
+  padding-bottom: 30px;
+  height: 100%;
+  outline: none; /* Prevent dragging from highlighting the element */
+  position: relative;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
 }
 .CodeMirror-sizer {
-    position: relative;
-    border-right: 30px solid transparent;
-    -moz-box-sizing: content-box;
-    box-sizing: content-box;
+  position: relative;
+  border-right: 30px solid transparent;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
 }
 
 /* The fake, visible scrollbars. Used to force redraw during scrolling
    before actuall scrolling happens, thus preventing shaking and
    flickering artifacts. */
 .CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
-    position: absolute;
-    z-index: 6;
-    display: none;
+  position: absolute;
+  z-index: 6;
+  display: none;
 }
 .CodeMirror-vscrollbar {
-    right: 0; top: 0;
-    overflow-x: hidden;
-    overflow-y: scroll;
+  right: 0; top: 0;
+  overflow-x: hidden;
+  overflow-y: scroll;
 }
 .CodeMirror-hscrollbar {
-    bottom: 0; left: 0;
-    overflow-y: hidden;
-    overflow-x: scroll;
+  bottom: 0; left: 0;
+  overflow-y: hidden;
+  overflow-x: scroll;
 }
 .CodeMirror-scrollbar-filler {
-    right: 0; bottom: 0;
+  right: 0; bottom: 0;
 }
 .CodeMirror-gutter-filler {
-    left: 0; bottom: 0;
+  left: 0; bottom: 0;
 }
 
 .CodeMirror-gutters {
-    position: absolute; left: 0; top: 0;
-    padding-bottom: 30px;
-    z-index: 3;
+  position: absolute; left: 0; top: 0;
+  padding-bottom: 30px;
+  z-index: 3;
 }
 .CodeMirror-gutter {
-    white-space: normal;
-    height: 100%;
-    -moz-box-sizing: content-box;
-    box-sizing: content-box;
-    padding-bottom: 30px;
-    margin-bottom: -32px;
-    display: inline-block;
-    /* Hack to make IE7 behave */
-    *zoom:1;
-    *display:inline;
+  white-space: normal;
+  height: 100%;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
+  padding-bottom: 30px;
+  margin-bottom: -32px;
+  display: inline-block;
+  /* Hack to make IE7 behave */
+  *zoom:1;
+  *display:inline;
+}
+.CodeMirror-gutter-wrapper {
+  position: absolute;
+  z-index: 4;
+  height: 100%;
 }
 .CodeMirror-gutter-elt {
-    position: absolute;
-    cursor: default;
-    z-index: 4;
+  position: absolute;
+  cursor: default;
+  z-index: 4;
 }
 
 .CodeMirror-lines {
-    cursor: text;
+  cursor: text;
+  min-height: 1px; /* prevents collapsing before first draw */
 }
 .CodeMirror pre {
-    /* Reset some styles that the rest of the page might have set */
-    -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
-    border-width: 0;
-    background: transparent;
-    font-family: inherit;
-    font-size: inherit;
-    margin: 0;
-    white-space: pre;
-    word-wrap: normal;
-    line-height: inherit;
-    color: inherit;
-    z-index: 2;
-    position: relative;
-    overflow: visible;
+  /* Reset some styles that the rest of the page might have set */
+  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
+  border-width: 0;
+  background: transparent;
+  font-family: inherit;
+  font-size: inherit;
+  margin: 0;
+  white-space: pre;
+  word-wrap: normal;
+  line-height: inherit;
+  color: inherit;
+  z-index: 2;
+  position: relative;
+  overflow: visible;
 }
 .CodeMirror-wrap pre {
-    word-wrap: break-word;
-    white-space: pre-wrap;
-    word-break: normal;
+  word-wrap: break-word;
+  white-space: pre-wrap;
+  word-break: normal;
 }
 
 .CodeMirror-linebackground {
-    position: absolute;
-    left: 0; right: 0; top: 0; bottom: 0;
-    z-index: 0;
+  position: absolute;
+  left: 0; right: 0; top: 0; bottom: 0;
+  z-index: 0;
 }
 
 .CodeMirror-linewidget {
-    position: relative;
-    z-index: 2;
-    overflow: auto;
+  position: relative;
+  z-index: 2;
+  overflow: auto;
 }
 
 .CodeMirror-widget {}
 
 .CodeMirror-wrap .CodeMirror-scroll {
-    overflow-x: hidden;
+  overflow-x: hidden;
 }
 
 .CodeMirror-measure {
-    position: absolute;
-    width: 100%;
-    height: 0;
-    overflow: hidden;
-    visibility: hidden;
+  position: absolute;
+  width: 100%;
+  height: 0;
+  overflow: hidden;
+  visibility: hidden;
 }
 .CodeMirror-measure pre { position: static; }
 
 .CodeMirror div.CodeMirror-cursor {
-    position: absolute;
-    border-right: none;
-    width: 0;
+  position: absolute;
+  border-right: none;
+  width: 0;
 }
 
 div.CodeMirror-cursors {
-    visibility: hidden;
-    position: relative;
-    z-index: 1;
+  visibility: hidden;
+  position: relative;
+  z-index: 3;
 }
 .CodeMirror-focused div.CodeMirror-cursors {
-    visibility: visible;
+  visibility: visible;
 }
 
 .CodeMirror-selected { background: #d9d9d9; }
 .CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
+.CodeMirror-crosshair { cursor: crosshair; }
 
 .cm-searching {
-    background: #ffa;
-    background: rgba(255, 255, 0, .4);
+  background: #ffa;
+  background: rgba(255, 255, 0, .4);
 }
 
 /* IE7 hack to prevent it from returning funny offsetTops on the spans */
@@ -263,8 +305,14 @@ div.CodeMirror-cursors {
 .cm-force-border { padding-right: .1px; }
 
 @media print {
-    /* Hide the cursor when printing */
-    .CodeMirror div.CodeMirror-cursors {
-        visibility: hidden;
-    }
+  /* Hide the cursor when printing */
+  .CodeMirror div.CodeMirror-cursors {
+    visibility: hidden;
+  }
 }
+
+/* See issue #2901 */
+.cm-tab-wrap-hack:after { content: ''; }
+
+/* Help users use markselection to safely style text background */
+span.CodeMirror-selectedtext { background: none; }


[14/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of slickgrid.

Posted by mc...@apache.org.
NIFI-27:
- Latest version of slickgrid.


Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/4c959f72
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/4c959f72
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/4c959f72

Branch: refs/heads/develop
Commit: 4c959f72988d13dc2ff54d38eb9efc4682d5b901
Parents: 658131d
Author: Matt Gilman <ma...@gmail.com>
Authored: Wed Dec 10 10:12:43 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Wed Dec 10 14:36:34 2014 -0500

----------------------------------------------------------------------
 .../src/main/webapp/WEB-INF/pages/canvas.jsp    |    2 +-
 .../src/main/webapp/WEB-INF/pages/cluster.jsp   |    2 +-
 .../src/main/webapp/WEB-INF/pages/counters.jsp  |    2 +-
 .../src/main/webapp/WEB-INF/pages/history.jsp   |    2 +-
 .../main/webapp/WEB-INF/pages/provenance.jsp    |    2 +-
 .../src/main/webapp/WEB-INF/pages/summary.jsp   |    2 +-
 .../src/main/webapp/WEB-INF/pages/templates.jsp |    2 +-
 .../src/main/webapp/WEB-INF/pages/users.jsp     |    2 +-
 .../js/jquery/jquery.event.drag-2.0.min.js      |  194 -
 .../js/jquery/jquery.event.drag-2.2.min.js      |    6 +
 .../webapp/js/jquery/slickgrid/MIT-LICENSE.txt  |   20 +
 .../js/jquery/slickgrid/css/images/collapse.gif |  Bin 0 -> 846 bytes
 .../js/jquery/slickgrid/css/images/expand.gif   |  Bin 0 -> 851 bytes
 .../slickgrid/css/slick-default-theme.css       |   68 +-
 .../js/jquery/slickgrid/css/slick.grid.css      |  173 +-
 .../slickgrid/plugins/slick.autotooltips.js     |  121 +-
 .../plugins/slick.cellrangedecorator.js         |  110 +-
 .../plugins/slick.cellrangeselector.js          |  194 +-
 .../plugins/slick.cellselectionmodel.js         |  210 +-
 .../plugins/slick.rowselectionmodel.js          |  325 +-
 .../webapp/js/jquery/slickgrid/slick.core.js    |  796 +--
 .../js/jquery/slickgrid/slick.dataview.js       | 1920 +++---
 .../webapp/js/jquery/slickgrid/slick.editors.js |  994 +--
 .../js/jquery/slickgrid/slick.formatters.js     |   86 +-
 .../webapp/js/jquery/slickgrid/slick.grid.js    | 6254 ++++++++++--------
 25 files changed, 6144 insertions(+), 5343 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
index c8f2ff7..09c8207 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
@@ -48,7 +48,7 @@
         <script type="text/javascript" src="js/jquery/modal/jquery.modal.js?${project.version}"></script>
         <script type="text/javascript" src="js/jquery/minicolors/jquery.minicolors.min.js"></script>
         <script type="text/javascript" src="js/jquery/qtip2/jquery.qtip.min.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.0.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.2.min.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellrangeselector.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellselectionmodel.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.rowselectionmodel.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
index e3e7b86..a0bda24 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
@@ -36,7 +36,7 @@
         <script type="text/javascript" src="js/jquery/jquery.each.js"></script>
         <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
         <script type="text/javascript" src="js/jquery/qtip2/jquery.qtip.min.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.0.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.2.min.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellrangeselector.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellselectionmodel.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.rowselectionmodel.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
index 21ee508..2678bf4 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
@@ -36,7 +36,7 @@
         <script type="text/javascript" src="js/jquery/jquery.each.js"></script>
         <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
         <script type="text/javascript" src="js/jquery/qtip2/jquery.qtip.min.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.0.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.2.min.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellrangeselector.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellselectionmodel.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.rowselectionmodel.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
index 61be727..19d9e90 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
@@ -36,7 +36,7 @@
         <script type="text/javascript" src="js/jquery/jquery.each.js"></script>
         <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
         <script type="text/javascript" src="js/jquery/qtip2/jquery.qtip.min.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.0.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.2.min.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellrangeselector.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellselectionmodel.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.rowselectionmodel.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
index 2f51918..f3c9a88 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
@@ -38,7 +38,7 @@
         <script type="text/javascript" src="js/jquery/jquery.each.js"></script>
         <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
         <script type="text/javascript" src="js/jquery/qtip2/jquery.qtip.min.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.0.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.2.min.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellrangeselector.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellselectionmodel.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.rowselectionmodel.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
index b34f0e6..e8a8e4c 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
@@ -38,7 +38,7 @@
         <script type="text/javascript" src="js/jquery/jquery.ellipsis.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.each.js"></script>
         <script type="text/javascript" src="js/jquery/qtip2/jquery.qtip.min.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.0.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.2.min.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellrangeselector.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellselectionmodel.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.rowselectionmodel.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
index c7c0293..889485f 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
@@ -37,7 +37,7 @@
         <script type="text/javascript" src="js/jquery/jquery.each.js"></script>
         <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
         <script type="text/javascript" src="js/jquery/qtip2/jquery.qtip.min.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.0.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.2.min.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellrangeselector.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellselectionmodel.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.rowselectionmodel.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
index 770dad5..9ff887b 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
@@ -38,7 +38,7 @@
         <script type="text/javascript" src="js/jquery/jquery.each.js"></script>
         <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
         <script type="text/javascript" src="js/jquery/qtip2/jquery.qtip.min.js"></script>
-        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.0.min.js"></script>
+        <script type="text/javascript" src="js/jquery/jquery.event.drag-2.2.min.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellrangeselector.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.cellselectionmodel.js"></script>
         <script type="text/javascript" src="js/jquery/slickgrid/plugins/slick.rowselectionmodel.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.event.drag-2.0.min.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.event.drag-2.0.min.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.event.drag-2.0.min.js
deleted file mode 100755
index 146b20a..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.event.drag-2.0.min.js
+++ /dev/null
@@ -1,194 +0,0 @@
-/*! 
- * jquery.event.drag - v 2.0.0 
- * Copyright (c) 2010 Three Dub Media - http://threedubmedia.com
- * Open Source MIT License - http://threedubmedia.com/code/license
- */
-;
-(function (f) {
-    f.fn.drag = function (b, a, d) {
-        var e = typeof b == "string" ? b : "", k = f.isFunction(b) ? b : f.isFunction(a) ? a : null;
-        if (e.indexOf("drag") !== 0)
-            e = "drag" + e;
-        d = (b == k ? a : d) || {};
-        return k ? this.bind(e, d, k) : this.trigger(e)
-    };
-    var i = f.event, h = i.special, c = h.drag = {defaults: {which: 1, distance: 0, not: ":input", handle: null, relative: false, drop: true, click: false}, datakey: "dragdata", livekey: "livedrag", add: function (b) {
-            var a = f.data(this, c.datakey), d = b.data || {};
-            a.related += 1;
-            if (!a.live && b.selector) {
-                a.live = true;
-                i.add(this, "draginit." + c.livekey, c.delegate)
-            }
-            f.each(c.defaults, function (e) {
-                if (d[e] !== undefined)
-                    a[e] = d[e]
-            })
-        }, remove: function () {
-            f.data(this, c.datakey).related -= 1
-        }, setup: function () {
-            if (!f.data(this, c.datakey)) {
-                var b = f.extend({related: 0}, c.defaults);
-                f.data(this, c.datakey, b);
-                i.add(this, "mousedown", c.init, b);
-                this.attachEvent && this.attachEvent("ondragstart", c.dontstart)
-            }
-        }, teardown: function () {
-            if (!f.data(this, c.datakey).related) {
-                f.removeData(this, c.datakey);
-                i.remove(this, "mousedown", c.init);
-                i.remove(this, "draginit", c.delegate);
-                c.textselect(true);
-                this.detachEvent && this.detachEvent("ondragstart", c.dontstart)
-            }
-        }, init: function (b) {
-            var a = b.data, d;
-            if (!(a.which > 0 && b.which != a.which))
-                if (!f(b.target).is(a.not))
-                    if (!(a.handle && !f(b.target).closest(a.handle, b.currentTarget).length)) {
-                        a.propagates = 1;
-                        a.interactions = [c.interaction(this, a)];
-                        a.target = b.target;
-                        a.pageX = b.pageX;
-                        a.pageY = b.pageY;
-                        a.dragging = null;
-                        d = c.hijack(b, "draginit", a);
-                        if (a.propagates) {
-                            if ((d = c.flatten(d)) && d.length) {
-                                a.interactions = [];
-                                f.each(d, function () {
-                                    a.interactions.push(c.interaction(this, a))
-                                })
-                            }
-                            a.propagates = a.interactions.length;
-                            a.drop !== false && h.drop && h.drop.handler(b, a);
-                            c.textselect(false);
-                            i.add(document, "mousemove mouseup", c.handler, a);
-                            return false
-                        }
-                    }
-        }, interaction: function (b, a) {
-            return{drag: b, callback: new c.callback, droppable: [], offset: f(b)[a.relative ? "position" : "offset"]() || {top: 0, left: 0}}
-        }, handler: function (b) {
-            var a = b.data;
-            switch (b.type) {
-                case !a.dragging && "mousemove":
-                    if (Math.pow(b.pageX - a.pageX, 2) + Math.pow(b.pageY - a.pageY, 2) < Math.pow(a.distance, 2))
-                        break;
-                    b.target = a.target;
-                    c.hijack(b, "dragstart", a);
-                    if (a.propagates)
-                        a.dragging = true;
-                case "mousemove":
-                    if (a.dragging) {
-                        c.hijack(b, "drag", a);
-                        if (a.propagates) {
-                            a.drop !== false && h.drop && h.drop.handler(b, a);
-                            break
-                        }
-                        b.type = "mouseup"
-                    }
-                case "mouseup":
-                    i.remove(document, "mousemove mouseup", c.handler);
-                    if (a.dragging) {
-                        a.drop !== false && h.drop && h.drop.handler(b, a);
-                        c.hijack(b, "dragend", a)
-                    }
-                    c.textselect(true);
-                    if (a.click === false && a.dragging) {
-                        jQuery.event.triggered = true;
-                        setTimeout(function () {
-                            jQuery.event.triggered = false
-                        }, 20);
-                        a.dragging = false
-                    }
-                    break
-            }
-        }, delegate: function (b) {
-            var a = [], d, e = f.data(this, "events") || {};
-            f.each(e.live || [], function (k, j) {
-                if (j.preType.indexOf("drag") === 0)
-                    if (d = f(b.target).closest(j.selector, b.currentTarget)[0]) {
-                        i.add(d, j.origType + "." + c.livekey, j.origHandler, j.data);
-                        f.inArray(d, a) < 0 && a.push(d)
-                    }
-            });
-            if (!a.length)
-                return false;
-            return f(a).bind("dragend." + c.livekey, function () {
-                i.remove(this, "." + c.livekey)
-            })
-        }, hijack: function (b, a, d, e, k) {
-            if (d) {
-                var j = {event: b.originalEvent, type: b.type}, n = a.indexOf("drop") ? "drag" : "drop", l, o = e || 0, g, m;
-                e = !isNaN(e) ? e : d.interactions.length;
-                b.type = a;
-                b.originalEvent = null;
-                d.results = [];
-                do
-                    if (g = d.interactions[o])
-                        if (!(a !== "dragend" && g.cancelled)) {
-                            m = c.properties(b, d, g);
-                            g.results = [];
-                            f(k || g[n] || d.droppable).each(function (q, p) {
-                                l = (m.target = p) ? i.handle.call(p, b, m) : null;
-                                if (l === false) {
-                                    if (n == "drag") {
-                                        g.cancelled = true;
-                                        d.propagates -= 1
-                                    }
-                                    if (a == "drop")
-                                        g[n][q] = null
-                                } else if (a == "dropinit")
-                                    g.droppable.push(c.element(l) || p);
-                                if (a == "dragstart")
-                                    g.proxy = f(c.element(l) || g.drag)[0];
-                                g.results.push(l);
-                                delete b.result;
-                                if (a !== "dropinit")
-                                    return l
-                            });
-                            d.results[o] = c.flatten(g.results);
-                            if (a == "dropinit")
-                                g.droppable = c.flatten(g.droppable);
-                            a == "dragstart" && !g.cancelled && m.update()
-                        }
-                while (++o < e);
-                b.type = j.type;
-                b.originalEvent = j.event;
-                return c.flatten(d.results)
-            }
-        }, properties: function (b, a, d) {
-            var e = d.callback;
-            e.drag = d.drag;
-            e.proxy = d.proxy || d.drag;
-            e.startX = a.pageX;
-            e.startY = a.pageY;
-            e.deltaX = b.pageX - a.pageX;
-            e.deltaY = b.pageY - a.pageY;
-            e.originalX = d.offset.left;
-            e.originalY = d.offset.top;
-            e.offsetX = b.pageX - (a.pageX - e.originalX);
-            e.offsetY = b.pageY - (a.pageY - e.originalY);
-            e.drop = c.flatten((d.drop || []).slice());
-            e.available = c.flatten((d.droppable || []).slice());
-            return e
-        }, element: function (b) {
-            if (b && (b.jquery || b.nodeType == 1))
-                return b
-        }, flatten: function (b) {
-            return f.map(b, function (a) {
-                return a && a.jquery ? f.makeArray(a) : a && a.length ? c.flatten(a) : a
-            })
-        }, textselect: function (b) {
-            f(document)[b ? "unbind" : "bind"]("selectstart", c.dontstart).attr("unselectable", b ? "off" : "on").css("MozUserSelect", b ? "" : "none")
-        }, dontstart: function () {
-            return false
-        }, callback: function () {
-        }};
-    c.callback.prototype = {update: function () {
-            h.drop && this.available.length && f.each(this.available, function (b) {
-                h.drop.locate(this, b)
-            })
-        }};
-    h.draginit = h.dragstart = h.dragend = c
-})(jQuery);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.event.drag-2.2.min.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.event.drag-2.2.min.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.event.drag-2.2.min.js
new file mode 100644
index 0000000..cff8ed6
--- /dev/null
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery.event.drag-2.2.min.js
@@ -0,0 +1,6 @@
+/*!
+ * jquery.event.drag - v 2.2
+ * Copyright (c) 2010 Three Dub Media - http://threedubmedia.com
+ * Open Source MIT License - http://threedubmedia.com/code/license
+ */
+;(function(e){e.fn.drag=function(k,g,j){var i=typeof k=="string"?k:"",h=e.isFunction(k)?k:e.isFunction(g)?g:null;if(i.indexOf("drag")!==0){i="drag"+i}j=(k==h?g:j)||{};return h?this.bind(i,j,h):this.trigger(i)};var b=e.event,a=b.special,d=a.drag={defaults:{which:1,distance:0,not:":input",handle:null,relative:false,drop:true,click:false},datakey:"dragdata",noBubble:true,add:function(i){var h=e.data(this,d.datakey),g=i.data||{};h.related+=1;e.each(d.defaults,function(j,k){if(g[j]!==undefined){h[j]=g[j]}})},remove:function(){e.data(this,d.datakey).related-=1},setup:function(){if(e.data(this,d.datakey)){return}var g=e.extend({related:0},d.defaults);e.data(this,d.datakey,g);b.add(this,"touchstart mousedown",d.init,g);if(this.attachEvent){this.attachEvent("ondragstart",d.dontstart)}},teardown:function(){var g=e.data(this,d.datakey)||{};if(g.related){return}e.removeData(this,d.datakey);b.remove(this,"touchstart mousedown",d.init);d.textselect(true);if(this.detachEvent){this.detachEvent("ond
 ragstart",d.dontstart)}},init:function(i){if(d.touched){return}var g=i.data,h;if(i.which!=0&&g.which>0&&i.which!=g.which){return}if(e(i.target).is(g.not)){return}if(g.handle&&!e(i.target).closest(g.handle,i.currentTarget).length){return}d.touched=i.type=="touchstart"?this:null;g.propagates=1;g.mousedown=this;g.interactions=[d.interaction(this,g)];g.target=i.target;g.pageX=i.pageX;g.pageY=i.pageY;g.dragging=null;h=d.hijack(i,"draginit",g);if(!g.propagates){return}h=d.flatten(h);if(h&&h.length){g.interactions=[];e.each(h,function(){g.interactions.push(d.interaction(this,g))})}g.propagates=g.interactions.length;if(g.drop!==false&&a.drop){a.drop.handler(i,g)}d.textselect(false);if(d.touched){b.add(d.touched,"touchmove touchend",d.handler,g)}else{b.add(document,"mousemove mouseup",d.handler,g)}if(!d.touched||g.live){return false}},interaction:function(h,g){var i=e(h)[g.relative?"position":"offset"]()||{top:0,left:0};return{drag:h,callback:new d.callback(),droppable:[],offset:i}},handler:
 function(h){var g=h.data;switch(h.type){case !g.dragging&&"touchmove":h.preventDefault();case !g.dragging&&"mousemove":if(Math.pow(h.pageX-g.pageX,2)+Math.pow(h.pageY-g.pageY,2)<Math.pow(g.distance,2)){break}h.target=g.target;d.hijack(h,"dragstart",g);if(g.propagates){g.dragging=true}case"touchmove":h.preventDefault();case"mousemove":if(g.dragging){d.hijack(h,"drag",g);if(g.propagates){if(g.drop!==false&&a.drop){a.drop.handler(h,g)}break}h.type="mouseup"}case"touchend":case"mouseup":default:if(d.touched){b.remove(d.touched,"touchmove touchend",d.handler)}else{b.remove(document,"mousemove mouseup",d.handler)}if(g.dragging){if(g.drop!==false&&a.drop){a.drop.handler(h,g)}d.hijack(h,"dragend",g)}d.textselect(true);if(g.click===false&&g.dragging){e.data(g.mousedown,"suppress.click",new Date().getTime()+5)}g.dragging=d.touched=false;break}},hijack:function(h,o,r,p,k){if(!r){return}var q={event:h.originalEvent,type:h.type},m=o.indexOf("drop")?"drag":"drop",t,l=p||0,j,g,s,n=!isNaN(p)?p:r.in
 teractions.length;h.type=o;h.originalEvent=null;r.results=[];do{if(j=r.interactions[l]){if(o!=="dragend"&&j.cancelled){continue}s=d.properties(h,r,j);j.results=[];e(k||j[m]||r.droppable).each(function(u,i){s.target=i;h.isPropagationStopped=function(){return false};t=i?b.dispatch.call(i,h,s):null;if(t===false){if(m=="drag"){j.cancelled=true;r.propagates-=1}if(o=="drop"){j[m][u]=null}}else{if(o=="dropinit"){j.droppable.push(d.element(t)||i)}}if(o=="dragstart"){j.proxy=e(d.element(t)||j.drag)[0]}j.results.push(t);delete h.result;if(o!=="dropinit"){return t}});r.results[l]=d.flatten(j.results);if(o=="dropinit"){j.droppable=d.flatten(j.droppable)}if(o=="dragstart"&&!j.cancelled){s.update()}}}while(++l<n);h.type=q.type;h.originalEvent=q.event;return d.flatten(r.results)},properties:function(i,g,h){var j=h.callback;j.drag=h.drag;j.proxy=h.proxy||h.drag;j.startX=g.pageX;j.startY=g.pageY;j.deltaX=i.pageX-g.pageX;j.deltaY=i.pageY-g.pageY;j.originalX=h.offset.left;j.originalY=h.offset.top;j.of
 fsetX=j.originalX+j.deltaX;j.offsetY=j.originalY+j.deltaY;j.drop=d.flatten((h.drop||[]).slice());j.available=d.flatten((h.droppable||[]).slice());return j},element:function(g){if(g&&(g.jquery||g.nodeType==1)){return g}},flatten:function(g){return e.map(g,function(h){return h&&h.jquery?e.makeArray(h):h&&h.length?d.flatten(h):h})},textselect:function(g){e(document)[g?"unbind":"bind"]("selectstart",d.dontstart).css("MozUserSelect",g?"":"none");document.unselectable=g?"off":"on"},dontstart:function(){return false},callback:function(){}};d.callback.prototype={update:function(){if(a.drop&&this.available.length){e.each(this.available,function(g){a.drop.locate(this,g)})}}};var f=b.dispatch;b.dispatch=function(g){if(e.data(this,"suppress."+g.type)-new Date().getTime()>0){e.removeData(this,"suppress."+g.type);return}return f.apply(this,arguments)};var c=b.fixHooks.touchstart=b.fixHooks.touchmove=b.fixHooks.touchend=b.fixHooks.touchcancel={props:"clientX clientY pageX pageY screenX screenY".sp
 lit(" "),filter:function(h,i){if(i){var g=(i.touches&&i.touches[0])||(i.changedTouches&&i.changedTouches[0])||null;if(g){e.each(c.props,function(j,k){h[k]=g[k]})}}return h}};a.draginit=a.dragstart=a.dragend=d})(jQuery);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/MIT-LICENSE.txt
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/MIT-LICENSE.txt b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/MIT-LICENSE.txt
new file mode 100755
index 0000000..60f6542
--- /dev/null
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/MIT-LICENSE.txt
@@ -0,0 +1,20 @@
+Copyright (c) 2010 Michael Leibman, http://github.com/mleibman/slickgrid
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/images/collapse.gif
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/images/collapse.gif b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/images/collapse.gif
new file mode 100755
index 0000000..01e6914
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/images/collapse.gif differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/images/expand.gif
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/images/expand.gif b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/images/expand.gif
new file mode 100755
index 0000000..1b24ef1
Binary files /dev/null and b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/images/expand.gif differ

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/slick-default-theme.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/slick-default-theme.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/slick-default-theme.css
index c68b703..6b45f3e 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/slick-default-theme.css
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/slick-default-theme.css
@@ -31,24 +31,24 @@ classes should alter those!
 }
 
 .slick-headerrow {
-    background: #fafafa;
+  background: #fafafa;
 }
 
 .slick-headerrow-column {
-    background: #fafafa;
-    border-bottom: 0;
-    height: 100%;
+  background: #fafafa;
+  border-bottom: 0;
+  height: 100%;
 }
 
 .slick-row.ui-state-active {
-    background: #F5F7D7;
+  background: #F5F7D7;
 }
 
 .slick-row {
-    position: absolute;
-    background: white;
-    border: 0px;
-    line-height: 20px;
+  position: absolute;
+  background: white;
+  border: 0px;
+  line-height: 20px;
 }
 
 .slick-row:hover {
@@ -56,37 +56,37 @@ classes should alter those!
 }
 
 .slick-row.selected {
-    z-index: 10;
+  z-index: 10;
     background: #DFE8F6 !important;
 }
 
 .slick-cell {
-    padding-left: 4px;
-    padding-right: 4px;
+  padding-left: 4px;
+  padding-right: 4px;
     border-style: solid !important;
 }
 
 .slick-group {
-    border-bottom: 2px solid silver;
+  border-bottom: 2px solid silver;
 }
 
 .slick-group-toggle {
-    width: 9px;
-    height: 9px;
-    margin-right: 5px;
+  width: 9px;
+  height: 9px;
+  margin-right: 5px;
 }
 
 .slick-group-toggle.expanded {
-    background: url(../../../../images/collapse.gif) no-repeat center center;
+  background: url(images/collapse.gif) no-repeat center center;
 }
 
 .slick-group-toggle.collapsed {
-    background: url(../../../../images/expand.gif) no-repeat center center;
+  background: url(images/expand.gif) no-repeat center center;
 }
 
 .slick-group-totals {
-    color: gray;
-    background: white;
+  color: gray;
+  background: white;
 }
 
 .slick-cell.selected {
@@ -100,22 +100,36 @@ classes should alter those!
 }
 
 .slick-sortable-placeholder {
-    background: silver !important;
+  background: silver !important;
 }
 
-.slick-row[row$="1"], .slick-row[row$="3"], .slick-row[row$="5"], .slick-row[row$="7"], .slick-row[row$="9"] {
-    background: #fafafa;
+.slick-row.odd {
+  background: #fafafa;
 }
 
 .slick-row.ui-state-active {
-    background: #F5F7D7;
+  background: #F5F7D7;
 }
 
 .slick-row.loading {
-    opacity: 0.5;
-    filter: alpha(opacity = 50);
+  opacity: 0.5;
+  filter: alpha(opacity = 50);
 }
 
 .slick-cell.invalid {
-    border-color: red;
+  border-color: red;
+  -moz-animation-duration: 0.2s;
+  -webkit-animation-duration: 0.2s;
+  -moz-animation-name: slickgrid-invalid-hilite;
+  -webkit-animation-name: slickgrid-invalid-hilite;  
+}
+
+@-moz-keyframes slickgrid-invalid-hilite {
+  from { box-shadow: 0 0 6px red; }
+  to { box-shadow: none; }
+}
+
+@-webkit-keyframes slickgrid-invalid-hilite {
+  from { box-shadow: 0 0 6px red; }
+  to { box-shadow: none; }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/slick.grid.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/slick.grid.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/slick.grid.css
index 2e8f390..de94dbf 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/slick.grid.css
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/css/slick.grid.css
@@ -6,153 +6,152 @@ classes should alter those!
 */
 
 .slick-header.ui-state-default, .slick-headerrow.ui-state-default {
-    width: 100%;
-    overflow: hidden;
-    border-left: 0px;
+  width: 100%;
+  overflow: hidden;
+  border-left: 0px;
 }
 
 .slick-header-columns, .slick-headerrow-columns {
-    width: 999999px;
-    position: relative;
-    white-space: nowrap;
-    cursor: default;
-    overflow: hidden;
+  position: relative;
+  white-space: nowrap;
+  cursor: default;
+  overflow: hidden;
 }
 
 .slick-header-column.ui-state-default {
-    position: relative;
-    display: inline-block;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    height: 16px;
-    line-height: 16px;
-    margin: 0;
-    padding: 4px;
-    border-right: 1px solid silver;
-    border-left: 0px;
-    border-top: 0px;
-    border-bottom: 0px;
-    float: left;
+  position: relative;
+  display: inline-block;
+  overflow: hidden;
+  -o-text-overflow: ellipsis;
+  text-overflow: ellipsis;
+  height: 16px;
+  line-height: 16px;
+  margin: 0;
+  padding: 4px;
+  border-right: 1px solid silver;
+  border-left: 0px;
+  border-top: 0px;
+  border-bottom: 0px;
+  float: left;
 }
 
 .slick-headerrow-column.ui-state-default {
-    padding: 4px;
+  padding: 4px;
 }
 
 .slick-header-column-sorted {
-    font-style: italic;
+  font-style: italic;
 }
 
 .slick-sort-indicator {
-    display: inline-block;
-    width: 8px;
-    height: 5px;
-    margin-left: 4px;
+  display: inline-block;
+  width: 8px;
+  height: 5px;
+  margin-left: 4px;
+  margin-top: 6px;
+  /*float: left;*/
 }
 
 .slick-sort-indicator-desc {
-    background: url(images/sort-desc.gif);
+  background: url(images/sort-desc.gif);
 }
 
 .slick-sort-indicator-asc {
-    background: url(images/sort-asc.gif);
+  background: url(images/sort-asc.gif);
 }
 
 .slick-resizable-handle {
-    position: absolute;
-    font-size: 0.1px;
-    display: block;
-    cursor: col-resize;
-    width: 4px;
-    right: 0px;
-    top: 0;
-    height: 100%;
+  position: absolute;
+  font-size: 0.1px;
+  display: block;
+  cursor: col-resize;
+  width: 4px;
+  right: 0px;
+  top: 0;
+  height: 100%;
 }
 
 .slick-sortable-placeholder {
-    background: silver;
+  background: silver;
 }
 
 .grid-canvas {
-    position: relative;
-    outline: 0;
+  position: relative;
+  outline: 0;
 }
 
 .slick-row.ui-widget-content, .slick-row.ui-state-active {
-    position: absolute;
-    border: 0px;
-    width: 100%;
+  position: absolute;
+  border: 0px;
+  width: 100%;
 }
 
 .slick-cell, .slick-headerrow-column {
-    position: absolute;
-
-    border: 1px solid transparent;
-    border-right: 1px dotted silver;
-    border-bottom-color: silver;
-
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-    vertical-align: middle;
-    z-index: 1;
-    padding: 1px 2px 2px 1px;
-    margin: 0;
-
-    white-space: nowrap;
-
-    cursor: default;
+  position: absolute;
+  border: 1px solid transparent;
+  border-right: 1px dotted silver;
+  border-bottom-color: silver;
+  overflow: hidden;
+  -o-text-overflow: ellipsis;
+  text-overflow: ellipsis;
+  vertical-align: middle;
+  z-index: 1;
+  padding: 1px 2px 2px 1px;
+  margin: 0;
+  white-space: nowrap;
+  cursor: default;
 }
 
 .slick-group {
 }
 
 .slick-group-toggle {
-    display: inline-block;
+  display: inline-block;
 }
 
 .slick-cell.highlighted {
-    background: lightskyblue;
-    background: rgba(0, 0, 255, 0.2);
-    -webkit-transition: all 0.5s;
-    -moz-transition: all 0.5s;
-    transition: all 0.5s;
+  background: lightskyblue;
+  background: rgba(0, 0, 255, 0.2);
+  -webkit-transition: all 0.5s;
+  -moz-transition: all 0.5s;
+  -o-transition: all 0.5s;
+  transition: all 0.5s;
 }
 
 .slick-cell.flashing {
-    border: 1px solid red !important;
+  border: 1px solid red !important;
 }
 
 .slick-cell.editable {
-    z-index: 11;
-    overflow: visible;
-    background: white;
-    border-color: black;
-    border-style: solid;
+  z-index: 11;
+  overflow: visible;
+  background: white;
+  border-color: black;
+  border-style: solid;
 }
 
 .slick-cell:focus {
-    outline: none;
+  outline: none;
 }
 
 .slick-reorder-proxy {
-    display: inline-block;
-    background: blue;
-    opacity: 0.15;
-    filter: alpha(opacity = 15);
-    cursor: move;
+  display: inline-block;
+  background: blue;
+  opacity: 0.15;
+  filter: alpha(opacity = 15);
+  cursor: move;
 }
 
 .slick-reorder-guide {
-    display: inline-block;
-    height: 2px;
-    background: blue;
-    opacity: 0.7;
-    filter: alpha(opacity = 70);
+  display: inline-block;
+  height: 2px;
+  background: blue;
+  opacity: 0.7;
+  filter: alpha(opacity = 70);
 }
 
 .slick-selection {
-    z-index: 10;
-    position: absolute;
-    border: 2px dashed black;
-}
\ No newline at end of file
+  z-index: 10;
+  position: absolute;
+  border: 2px dashed black;
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.autotooltips.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.autotooltips.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.autotooltips.js
index bce0bea..955684f 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.autotooltips.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.autotooltips.js
@@ -1,48 +1,83 @@
 (function ($) {
-    // register namespace
-    $.extend(true, window, {
-        "Slick": {
-            "AutoTooltips": AutoTooltips
-        }
-    });
-
-
-    function AutoTooltips(options) {
-        var _grid;
-        var _self = this;
-        var _defaults = {
-            maxToolTipLength: null
-        };
-
-        function init(grid) {
-            options = $.extend(true, {}, _defaults, options);
-            _grid = grid;
-            _grid.onMouseEnter.subscribe(handleMouseEnter);
-        }
-
-        function destroy() {
-            _grid.onMouseEnter.unsubscribe(handleMouseEnter);
-        }
+  // Register namespace
+  $.extend(true, window, {
+    "Slick": {
+      "AutoTooltips": AutoTooltips
+    }
+  });
 
-        function handleMouseEnter(e, args) {
-            var cell = _grid.getCellFromEvent(e);
-            if (cell) {
-                var node = _grid.getCellNode(cell.row, cell.cell);
-                if ($(node).innerWidth() < node.scrollWidth) {
-                    var text = $.trim($(node).text());
-                    if (options.maxToolTipLength && text.length > options.maxToolTipLength) {
-                        text = text.substr(0, options.maxToolTipLength - 3) + "...";
-                    }
-                    $(node).attr("title", text);
-                } else {
-                    $(node).attr("title", "");
-                }
-            }
+  /**
+   * AutoTooltips plugin to show/hide tooltips when columns are too narrow to fit content.
+   * @constructor
+   * @param {boolean} [options.enableForCells=true]        - Enable tooltip for grid cells
+   * @param {boolean} [options.enableForHeaderCells=false] - Enable tooltip for header cells
+   * @param {number}  [options.maxToolTipLength=null]      - The maximum length for a tooltip
+   */
+  function AutoTooltips(options) {
+    var _grid;
+    var _self = this;
+    var _defaults = {
+      enableForCells: true,
+      enableForHeaderCells: false,
+      maxToolTipLength: null
+    };
+    
+    /**
+     * Initialize plugin.
+     */
+    function init(grid) {
+      options = $.extend(true, {}, _defaults, options);
+      _grid = grid;
+      if (options.enableForCells) _grid.onMouseEnter.subscribe(handleMouseEnter);
+      if (options.enableForHeaderCells) _grid.onHeaderMouseEnter.subscribe(handleHeaderMouseEnter);
+    }
+    
+    /**
+     * Destroy plugin.
+     */
+    function destroy() {
+      if (options.enableForCells) _grid.onMouseEnter.unsubscribe(handleMouseEnter);
+      if (options.enableForHeaderCells) _grid.onHeaderMouseEnter.unsubscribe(handleHeaderMouseEnter);
+    }
+    
+    /**
+     * Handle mouse entering grid cell to add/remove tooltip.
+     * @param {jQuery.Event} e - The event
+     */
+    function handleMouseEnter(e) {
+      var cell = _grid.getCellFromEvent(e);
+      if (cell) {
+        var $node = $(_grid.getCellNode(cell.row, cell.cell));
+        var text;
+        if ($node.innerWidth() < $node[0].scrollWidth) {
+          text = $.trim($node.text());
+          if (options.maxToolTipLength && text.length > options.maxToolTipLength) {
+            text = text.substr(0, options.maxToolTipLength - 3) + "...";
+          }
+        } else {
+          text = "";
         }
-
-        $.extend(this, {
-            "init": init,
-            "destroy": destroy
-        });
+        $node.attr("title", text);
+      }
+    }
+    
+    /**
+     * Handle mouse entering header cell to add/remove tooltip.
+     * @param {jQuery.Event} e     - The event
+     * @param {object} args.column - The column definition
+     */
+    function handleHeaderMouseEnter(e, args) {
+      var column = args.column,
+          $node = $(e.target).closest(".slick-header-column");
+      if (!column.toolTip) {
+        $node.attr("title", ($node.innerWidth() < $node[0].scrollWidth) ? column.name : "");
+      }
     }
+    
+    // Public API
+    $.extend(this, {
+      "init": init,
+      "destroy": destroy
+    });
+  }
 })(jQuery);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.cellrangedecorator.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.cellrangedecorator.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.cellrangedecorator.js
index eb2d506..0cbe71d 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.cellrangedecorator.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.cellrangedecorator.js
@@ -1,64 +1,66 @@
 (function ($) {
-    // register namespace
-    $.extend(true, window, {
-        "Slick": {
-            "CellRangeDecorator": CellRangeDecorator
-        }
-    });
-
-    /***
-     * Displays an overlay on top of a given cell range.
-     *
-     * TODO:
-     * Currently, it blocks mouse events to DOM nodes behind it.
-     * Use FF and WebKit-specific "pointer-events" CSS style, or some kind of event forwarding.
-     * Could also construct the borders separately using 4 individual DIVs.
-     *
-     * @param {Grid} grid
-     * @param {Object} options
-     */
-    function CellRangeDecorator(grid, options) {
-        var _elem;
-        var _defaults = {
-            selectionCss: {
-                "zIndex": "9999",
-                "border": "2px dashed red"
-            }
-        };
+  // register namespace
+  $.extend(true, window, {
+    "Slick": {
+      "CellRangeDecorator": CellRangeDecorator
+    }
+  });
 
-        options = $.extend(true, {}, _defaults, options);
+  /***
+   * Displays an overlay on top of a given cell range.
+   *
+   * TODO:
+   * Currently, it blocks mouse events to DOM nodes behind it.
+   * Use FF and WebKit-specific "pointer-events" CSS style, or some kind of event forwarding.
+   * Could also construct the borders separately using 4 individual DIVs.
+   *
+   * @param {Grid} grid
+   * @param {Object} options
+   */
+  function CellRangeDecorator(grid, options) {
+    var _elem;
+    var _defaults = {
+      selectionCssClass: 'slick-range-decorator',
+      selectionCss: {
+        "zIndex": "9999",
+        "border": "2px dashed red"
+      }
+    };
 
+    options = $.extend(true, {}, _defaults, options);
 
-        function show(range) {
-            if (!_elem) {
-                _elem = $("<div></div>", {css: options.selectionCss})
-                        .css("position", "absolute")
-                        .appendTo(grid.getCanvasNode());
-            }
 
-            var from = grid.getCellNodeBox(range.fromRow, range.fromCell);
-            var to = grid.getCellNodeBox(range.toRow, range.toCell);
+    function show(range) {
+      if (!_elem) {
+        _elem = $("<div></div>", {css: options.selectionCss})
+            .addClass(options.selectionCssClass)
+            .css("position", "absolute")
+            .appendTo(grid.getCanvasNode());
+      }
 
-            _elem.css({
-                top: from.top - 1,
-                left: from.left - 1,
-                height: to.bottom - from.top - 2,
-                width: to.right - from.left - 2
-            });
+      var from = grid.getCellNodeBox(range.fromRow, range.fromCell);
+      var to = grid.getCellNodeBox(range.toRow, range.toCell);
 
-            return _elem;
-        }
+      _elem.css({
+        top: from.top - 1,
+        left: from.left - 1,
+        height: to.bottom - from.top - 2,
+        width: to.right - from.left - 2
+      });
 
-        function hide() {
-            if (_elem) {
-                _elem.remove();
-                _elem = null;
-            }
-        }
+      return _elem;
+    }
 
-        $.extend(this, {
-            "show": show,
-            "hide": hide
-        });
+    function hide() {
+      if (_elem) {
+        _elem.remove();
+        _elem = null;
+      }
     }
-})(jQuery);
\ No newline at end of file
+
+    $.extend(this, {
+      "show": show,
+      "hide": hide
+    });
+  }
+})(jQuery);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.cellrangeselector.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.cellrangeselector.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.cellrangeselector.js
index 04d2f90..520b17f 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.cellrangeselector.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.cellrangeselector.js
@@ -1,111 +1,113 @@
 (function ($) {
-    // register namespace
-    $.extend(true, window, {
-        "Slick": {
-            "CellRangeSelector": CellRangeSelector
-        }
-    });
+  // register namespace
+  $.extend(true, window, {
+    "Slick": {
+      "CellRangeSelector": CellRangeSelector
+    }
+  });
+
+
+  function CellRangeSelector(options) {
+    var _grid;
+    var _canvas;
+    var _dragging;
+    var _decorator;
+    var _self = this;
+    var _handler = new Slick.EventHandler();
+    var _defaults = {
+      selectionCss: {
+        "border": "2px dashed blue"
+      }
+    };
+
+
+    function init(grid) {
+      options = $.extend(true, {}, _defaults, options);
+      _decorator = new Slick.CellRangeDecorator(grid, options);
+      _grid = grid;
+      _canvas = _grid.getCanvasNode();
+      _handler
+        .subscribe(_grid.onDragInit, handleDragInit)
+        .subscribe(_grid.onDragStart, handleDragStart)
+        .subscribe(_grid.onDrag, handleDrag)
+        .subscribe(_grid.onDragEnd, handleDragEnd);
+    }
 
+    function destroy() {
+      _handler.unsubscribeAll();
+    }
 
-    function CellRangeSelector(options) {
-        var _grid;
-        var _canvas;
-        var _dragging;
-        var _decorator;
-        var _self = this;
-        var _defaults = {
-            selectionCss: {
-                "border": "2px dashed blue"
-            }
-        };
-
-
-        function init(grid) {
-            options = $.extend(true, {}, _defaults, options);
-            _decorator = new Slick.CellRangeDecorator(grid, options);
-            _grid = grid;
-            _canvas = _grid.getCanvasNode();
-            _grid.onDragInit.subscribe(handleDragInit);
-            _grid.onDragStart.subscribe(handleDragStart);
-            _grid.onDrag.subscribe(handleDrag);
-            _grid.onDragEnd.subscribe(handleDragEnd);
-        }
+    function handleDragInit(e, dd) {
+      // prevent the grid from cancelling drag'n'drop by default
+      e.stopImmediatePropagation();
+    }
 
-        function destroy() {
-            _grid.onDragInit.unsubscribe(handleDragInit);
-            _grid.onDragStart.unsubscribe(handleDragStart);
-            _grid.onDrag.unsubscribe(handleDrag);
-            _grid.onDragEnd.unsubscribe(handleDragEnd);
+    function handleDragStart(e, dd) {
+      var cell = _grid.getCellFromEvent(e);
+      if (_self.onBeforeCellRangeSelected.notify(cell) !== false) {
+        if (_grid.canCellBeSelected(cell.row, cell.cell)) {
+          _dragging = true;
+          e.stopImmediatePropagation();
         }
+      }
+      if (!_dragging) {
+        return;
+      }
 
-        function handleDragInit(e, dd) {
-            // prevent the grid from cancelling drag'n'drop by default
-            e.stopImmediatePropagation();
-        }
+      _grid.focus();
 
-        function handleDragStart(e, dd) {
-            var cell = _grid.getCellFromEvent(e);
-            if (_self.onBeforeCellRangeSelected.notify(cell) !== false) {
-                if (_grid.canCellBeSelected(cell.row, cell.cell)) {
-                    _dragging = true;
-                    e.stopImmediatePropagation();
-                }
-            }
-            if (!_dragging) {
-                return;
-            }
-
-            var start = _grid.getCellFromPoint(
-                    dd.startX - $(_canvas).offset().left,
-                    dd.startY - $(_canvas).offset().top);
-
-            dd.range = {start: start, end: {}};
-
-            return _decorator.show(new Slick.Range(start.row, start.cell));
-        }
+      var start = _grid.getCellFromPoint(
+          dd.startX - $(_canvas).offset().left,
+          dd.startY - $(_canvas).offset().top);
 
-        function handleDrag(e, dd) {
-            if (!_dragging) {
-                return;
-            }
-            e.stopImmediatePropagation();
+      dd.range = {start: start, end: {}};
 
-            var end = _grid.getCellFromPoint(
-                    e.pageX - $(_canvas).offset().left,
-                    e.pageY - $(_canvas).offset().top);
+      return _decorator.show(new Slick.Range(start.row, start.cell));
+    }
 
-            if (!_grid.canCellBeSelected(end.row, end.cell)) {
-                return;
-            }
+    function handleDrag(e, dd) {
+      if (!_dragging) {
+        return;
+      }
+      e.stopImmediatePropagation();
 
-            dd.range.end = end;
-            _decorator.show(new Slick.Range(dd.range.start.row, dd.range.start.cell, end.row, end.cell));
-        }
+      var end = _grid.getCellFromPoint(
+          e.pageX - $(_canvas).offset().left,
+          e.pageY - $(_canvas).offset().top);
 
-        function handleDragEnd(e, dd) {
-            if (!_dragging) {
-                return;
-            }
-
-            _dragging = false;
-            e.stopImmediatePropagation();
-
-            _decorator.hide();
-            _self.onCellRangeSelected.notify({
-                range: new Slick.Range(
-                        dd.range.start.row,
-                        dd.range.start.cell,
-                        dd.range.end.row,
-                        dd.range.end.cell
-                        )
-            });
-        }
+      if (!_grid.canCellBeSelected(end.row, end.cell)) {
+        return;
+      }
+
+      dd.range.end = end;
+      _decorator.show(new Slick.Range(dd.range.start.row, dd.range.start.cell, end.row, end.cell));
+    }
 
-        $.extend(this, {
-            "init": init,
-            "destroy": destroy,
-            "onBeforeCellRangeSelected": new Slick.Event(),
-            "onCellRangeSelected": new Slick.Event()
-        });
+    function handleDragEnd(e, dd) {
+      if (!_dragging) {
+        return;
+      }
+
+      _dragging = false;
+      e.stopImmediatePropagation();
+
+      _decorator.hide();
+      _self.onCellRangeSelected.notify({
+        range: new Slick.Range(
+            dd.range.start.row,
+            dd.range.start.cell,
+            dd.range.end.row,
+            dd.range.end.cell
+        )
+      });
     }
+
+    $.extend(this, {
+      "init": init,
+      "destroy": destroy,
+
+      "onBeforeCellRangeSelected": new Slick.Event(),
+      "onCellRangeSelected": new Slick.Event()
+    });
+  }
 })(jQuery);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.cellselectionmodel.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.cellselectionmodel.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.cellselectionmodel.js
index 9f0730a..74bc3eb 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.cellselectionmodel.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.cellselectionmodel.js
@@ -1,90 +1,154 @@
 (function ($) {
-    // register namespace
-    $.extend(true, window, {
-        "Slick": {
-            "CellSelectionModel": CellSelectionModel
-        }
+  // register namespace
+  $.extend(true, window, {
+    "Slick": {
+      "CellSelectionModel": CellSelectionModel
+    }
+  });
+
+
+  function CellSelectionModel(options) {
+    var _grid;
+    var _canvas;
+    var _ranges = [];
+    var _self = this;
+    var _selector = new Slick.CellRangeSelector({
+      "selectionCss": {
+        "border": "2px solid black"
+      }
     });
+    var _options;
+    var _defaults = {
+      selectActiveCell: true
+    };
 
 
-    function CellSelectionModel(options) {
-        var _grid;
-        var _canvas;
-        var _ranges = [];
-        var _self = this;
-        var _selector = new Slick.CellRangeSelector({
-            "selectionCss": {
-                "border": "2px solid black"
-            }
-        });
-        var _options;
-        var _defaults = {
-            selectActiveCell: true
-        };
-
-
-        function init(grid) {
-            _options = $.extend(true, {}, _defaults, options);
-            _grid = grid;
-            _canvas = _grid.getCanvasNode();
-            _grid.onActiveCellChanged.subscribe(handleActiveCellChange);
-            grid.registerPlugin(_selector);
-            _selector.onCellRangeSelected.subscribe(handleCellRangeSelected);
-            _selector.onBeforeCellRangeSelected.subscribe(handleBeforeCellRangeSelected);
-        }
+    function init(grid) {
+      _options = $.extend(true, {}, _defaults, options);
+      _grid = grid;
+      _canvas = _grid.getCanvasNode();
+      _grid.onActiveCellChanged.subscribe(handleActiveCellChange);
+      _grid.onKeyDown.subscribe(handleKeyDown);
+      grid.registerPlugin(_selector);
+      _selector.onCellRangeSelected.subscribe(handleCellRangeSelected);
+      _selector.onBeforeCellRangeSelected.subscribe(handleBeforeCellRangeSelected);
+    }
 
-        function destroy() {
-            _grid.onActiveCellChanged.unsubscribe(handleActiveCellChange);
-            _selector.onCellRangeSelected.unsubscribe(handleCellRangeSelected);
-            _selector.onBeforeCellRangeSelected.unsubscribe(handleBeforeCellRangeSelected);
-            _grid.unregisterPlugin(_selector);
+    function destroy() {
+      _grid.onActiveCellChanged.unsubscribe(handleActiveCellChange);
+      _grid.onKeyDown.unsubscribe(handleKeyDown);
+      _selector.onCellRangeSelected.unsubscribe(handleCellRangeSelected);
+      _selector.onBeforeCellRangeSelected.unsubscribe(handleBeforeCellRangeSelected);
+      _grid.unregisterPlugin(_selector);
+    }
+
+    function removeInvalidRanges(ranges) {
+      var result = [];
+
+      for (var i = 0; i < ranges.length; i++) {
+        var r = ranges[i];
+        if (_grid.canCellBeSelected(r.fromRow, r.fromCell) && _grid.canCellBeSelected(r.toRow, r.toCell)) {
+          result.push(r);
         }
+      }
 
-        function removeInvalidRanges(ranges) {
-            var result = [];
+      return result;
+    }
 
-            for (var i = 0; i < ranges.length; i++) {
-                var r = ranges[i];
-                if (_grid.canCellBeSelected(r.fromRow, r.fromCell) && _grid.canCellBeSelected(r.toRow, r.toCell)) {
-                    result.push(r);
-                }
-            }
+    function setSelectedRanges(ranges) {
+      _ranges = removeInvalidRanges(ranges);
+      _self.onSelectedRangesChanged.notify(_ranges);
+    }
 
-            return result;
-        }
+    function getSelectedRanges() {
+      return _ranges;
+    }
 
-        function setSelectedRanges(ranges) {
-            _ranges = removeInvalidRanges(ranges);
-            _self.onSelectedRangesChanged.notify(_ranges);
-        }
+    function handleBeforeCellRangeSelected(e, args) {
+      if (_grid.getEditorLock().isActive()) {
+        e.stopPropagation();
+        return false;
+      }
+    }
 
-        function getSelectedRanges() {
-            return _ranges;
-        }
+    function handleCellRangeSelected(e, args) {
+      setSelectedRanges([args.range]);
+    }
 
-        function handleBeforeCellRangeSelected(e, args) {
-            if (_grid.getEditorLock().isActive()) {
-                e.stopPropagation();
-                return false;
-            }
-        }
+    function handleActiveCellChange(e, args) {
+      if (_options.selectActiveCell && args.row != null && args.cell != null) {
+        setSelectedRanges([new Slick.Range(args.row, args.cell)]);
+      }
+    }
+    
+    function handleKeyDown(e) {
+      /***
+       * Кey codes
+       * 37 left
+       * 38 up
+       * 39 right
+       * 40 down                     
+       */                                         
+      var ranges, last;
+      var active = _grid.getActiveCell(); 
 
-        function handleCellRangeSelected(e, args) {
-            setSelectedRanges([args.range]);
+      if ( active && e.shiftKey && !e.ctrlKey && !e.altKey && 
+          (e.which == 37 || e.which == 39 || e.which == 38 || e.which == 40) ) {
+      
+        ranges = getSelectedRanges();
+        if (!ranges.length)
+         ranges.push(new Slick.Range(active.row, active.cell));
+         
+        // keyboard can work with last range only          
+        last = ranges.pop();
+        
+        // can't handle selection out of active cell
+        if (!last.contains(active.row, active.cell))
+          last = new Slick.Range(active.row, active.cell);
+        
+        var dRow = last.toRow - last.fromRow,
+            dCell = last.toCell - last.fromCell,
+            // walking direction
+            dirRow = active.row == last.fromRow ? 1 : -1,
+            dirCell = active.cell == last.fromCell ? 1 : -1;
+                 
+        if (e.which == 37) {
+          dCell -= dirCell; 
+        } else if (e.which == 39) {
+          dCell += dirCell ; 
+        } else if (e.which == 38) {
+          dRow -= dirRow; 
+        } else if (e.which == 40) {
+          dRow += dirRow; 
         }
-
-        function handleActiveCellChange(e, args) {
-            if (_options.selectActiveCell) {
-                setSelectedRanges([new Slick.Range(args.row, args.cell)]);
-            }
+        
+        // define new selection range 
+        var new_last = new Slick.Range(active.row, active.cell, active.row + dirRow*dRow, active.cell + dirCell*dCell);
+        if (removeInvalidRanges([new_last]).length) {
+          ranges.push(new_last);
+          var viewRow = dirRow > 0 ? new_last.toRow : new_last.fromRow;
+          var viewCell = dirCell > 0 ? new_last.toCell : new_last.fromCell;
+         _grid.scrollRowIntoView(viewRow);
+         _grid.scrollCellIntoView(viewRow, viewCell);
         }
+        else 
+          ranges.push(last);
 
-        $.extend(this, {
-            "getSelectedRanges": getSelectedRanges,
-            "setSelectedRanges": setSelectedRanges,
-            "init": init,
-            "destroy": destroy,
-            "onSelectedRangesChanged": new Slick.Event()
-        });
+        setSelectedRanges(ranges);  
+       
+        e.preventDefault();
+        e.stopPropagation();        
+      }           
     }
-})(jQuery);
\ No newline at end of file
+
+    $.extend(this, {
+      "getSelectedRanges": getSelectedRanges,
+      "setSelectedRanges": setSelectedRanges,
+
+      "init": init,
+      "destroy": destroy,
+
+      "onSelectedRangesChanged": new Slick.Event()
+    });
+  }
+})(jQuery);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.rowselectionmodel.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.rowselectionmodel.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.rowselectionmodel.js
index af966c0..0de8dd3 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.rowselectionmodel.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/plugins/slick.rowselectionmodel.js
@@ -1,184 +1,187 @@
 (function ($) {
-    // register namespace
-    $.extend(true, window, {
-        "Slick": {
-            "RowSelectionModel": RowSelectionModel
-        }
-    });
+  // register namespace
+  $.extend(true, window, {
+    "Slick": {
+      "RowSelectionModel": RowSelectionModel
+    }
+  });
+
+  function RowSelectionModel(options) {
+    var _grid;
+    var _ranges = [];
+    var _self = this;
+    var _handler = new Slick.EventHandler();
+    var _inHandler;
+    var _options;
+    var _defaults = {
+      selectActiveRow: true
+    };
+
+    function init(grid) {
+      _options = $.extend(true, {}, _defaults, options);
+      _grid = grid;
+      _handler.subscribe(_grid.onActiveCellChanged,
+          wrapHandler(handleActiveCellChange));
+      _handler.subscribe(_grid.onKeyDown,
+          wrapHandler(handleKeyDown));
+      _handler.subscribe(_grid.onClick,
+          wrapHandler(handleClick));
+    }
 
-    function RowSelectionModel(options) {
-        var _grid;
-        var _ranges = [];
-        var _self = this;
-        var _handler = new Slick.EventHandler();
-        var _inHandler;
-        var _options;
-        var _defaults = {
-            selectActiveRow: true
-        };
-
-        function init(grid) {
-            _options = $.extend(true, {}, _defaults, options);
-            _grid = grid;
-            _handler.subscribe(_grid.onActiveCellChanged,
-                    wrapHandler(handleActiveCellChange));
-            _handler.subscribe(_grid.onKeyDown,
-                    wrapHandler(handleKeyDown));
-            _handler.subscribe(_grid.onClick,
-                    wrapHandler(handleClick));
-        }
+    function destroy() {
+      _handler.unsubscribeAll();
+    }
 
-        function destroy() {
-            _handler.unsubscribeAll();
+    function wrapHandler(handler) {
+      return function () {
+        if (!_inHandler) {
+          _inHandler = true;
+          handler.apply(this, arguments);
+          _inHandler = false;
         }
+      };
+    }
 
-        function wrapHandler(handler) {
-            return function () {
-                if (!_inHandler) {
-                    _inHandler = true;
-                    handler.apply(this, arguments);
-                    _inHandler = false;
-                }
-            };
+    function rangesToRows(ranges) {
+      var rows = [];
+      for (var i = 0; i < ranges.length; i++) {
+        for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {
+          rows.push(j);
         }
+      }
+      return rows;
+    }
 
-        function rangesToRows(ranges) {
-            var rows = [];
-            for (var i = 0; i < ranges.length; i++) {
-                for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {
-                    rows.push(j);
-                }
-            }
-            return rows;
-        }
+    function rowsToRanges(rows) {
+      var ranges = [];
+      var lastCell = _grid.getColumns().length - 1;
+      for (var i = 0; i < rows.length; i++) {
+        ranges.push(new Slick.Range(rows[i], 0, rows[i], lastCell));
+      }
+      return ranges;
+    }
 
-        function rowsToRanges(rows) {
-            var ranges = [];
-            var lastCell = _grid.getColumns().length - 1;
-            for (var i = 0; i < rows.length; i++) {
-                ranges.push(new Slick.Range(rows[i], 0, rows[i], lastCell));
-            }
-            return ranges;
-        }
+    function getRowsRange(from, to) {
+      var i, rows = [];
+      for (i = from; i <= to; i++) {
+        rows.push(i);
+      }
+      for (i = to; i < from; i++) {
+        rows.push(i);
+      }
+      return rows;
+    }
 
-        function getRowsRange(from, to) {
-            var i, rows = [];
-            for (i = from; i <= to; i++) {
-                rows.push(i);
-            }
-            for (i = to; i < from; i++) {
-                rows.push(i);
-            }
-            return rows;
-        }
+    function getSelectedRows() {
+      return rangesToRows(_ranges);
+    }
 
-        function getSelectedRows() {
-            return rangesToRows(_ranges);
-        }
+    function setSelectedRows(rows) {
+      setSelectedRanges(rowsToRanges(rows));
+    }
 
-        function setSelectedRows(rows) {
-            setSelectedRanges(rowsToRanges(rows));
-        }
+    function setSelectedRanges(ranges) {
+      _ranges = ranges;
+      _self.onSelectedRangesChanged.notify(_ranges);
+    }
 
-        function setSelectedRanges(ranges) {
-            _ranges = ranges;
-            _self.onSelectedRangesChanged.notify(_ranges);
-        }
+    function getSelectedRanges() {
+      return _ranges;
+    }
 
-        function getSelectedRanges() {
-            return _ranges;
-        }
+    function handleActiveCellChange(e, data) {
+      if (_options.selectActiveRow && data.row != null) {
+        setSelectedRanges([new Slick.Range(data.row, 0, data.row, _grid.getColumns().length - 1)]);
+      }
+    }
 
-        function handleActiveCellChange(e, data) {
-            if (_options.selectActiveRow) {
-                setSelectedRanges([new Slick.Range(data.row, 0, data.row, _grid.getColumns().length - 1)]);
-            }
+    function handleKeyDown(e) {
+      var activeRow = _grid.getActiveCell();
+      if (activeRow && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey && (e.which == 38 || e.which == 40)) {
+        var selectedRows = getSelectedRows();
+        selectedRows.sort(function (x, y) {
+          return x - y
+        });
+
+        if (!selectedRows.length) {
+          selectedRows = [activeRow.row];
         }
 
-        function handleKeyDown(e) {
-            var activeRow = _grid.getActiveCell();
-            if (activeRow && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey && (e.which == 38 || e.which == 40)) {
-                var selectedRows = getSelectedRows();
-                selectedRows.sort(function (x, y) {
-                    return x - y
-                });
-
-                if (!selectedRows.length) {
-                    selectedRows = [activeRow.row];
-                }
-
-                var top = selectedRows[0];
-                var bottom = selectedRows[selectedRows.length - 1];
-                var active;
-
-                if (e.which == 40) {
-                    active = activeRow.row < bottom || top == bottom ? ++bottom : ++top;
-                } else {
-                    active = activeRow.row < bottom ? --bottom : --top;
-                }
-
-                if (active >= 0 && active < _grid.getDataLength()) {
-                    _grid.scrollRowIntoView(active);
-                    _ranges = rowsToRanges(getRowsRange(top, bottom));
-                    setSelectedRanges(_ranges);
-                }
-
-                e.preventDefault();
-                e.stopPropagation();
-            }
+        var top = selectedRows[0];
+        var bottom = selectedRows[selectedRows.length - 1];
+        var active;
+
+        if (e.which == 40) {
+          active = activeRow.row < bottom || top == bottom ? ++bottom : ++top;
+        } else {
+          active = activeRow.row < bottom ? --bottom : --top;
         }
 
-        function handleClick(e) {
-            var cell = _grid.getCellFromEvent(e);
-            if (!cell || !_grid.canCellBeActive(cell.row, cell.cell)) {
-                return false;
-            }
-
-            var selection = rangesToRows(_ranges);
-            var idx = $.inArray(cell.row, selection);
-
-            if (!e.ctrlKey && !e.shiftKey && !e.metaKey) {
-                return false;
-            }
-            else if (_grid.getOptions().multiSelect) {
-                if (idx === -1 && (e.ctrlKey || e.metaKey)) {
-                    selection.push(cell.row);
-                    _grid.setActiveCell(cell.row, cell.cell);
-                } else if (idx !== -1 && (e.ctrlKey || e.metaKey)) {
-                    selection = $.grep(selection, function (o, i) {
-                        return (o !== cell.row);
-                    });
-                    _grid.setActiveCell(cell.row, cell.cell);
-                } else if (selection.length && e.shiftKey) {
-                    var last = selection.pop();
-                    var from = Math.min(cell.row, last);
-                    var to = Math.max(cell.row, last);
-                    selection = [];
-                    for (var i = from; i <= to; i++) {
-                        if (i !== last) {
-                            selection.push(i);
-                        }
-                    }
-                    selection.push(last);
-                    _grid.setActiveCell(cell.row, cell.cell);
-                }
-            }
-
-            _ranges = rowsToRanges(selection);
-            setSelectedRanges(_ranges);
-            e.stopImmediatePropagation();
-
-            return true;
+        if (active >= 0 && active < _grid.getDataLength()) {
+          _grid.scrollRowIntoView(active);
+          _ranges = rowsToRanges(getRowsRange(top, bottom));
+          setSelectedRanges(_ranges);
         }
 
-        $.extend(this, {
-            "getSelectedRows": getSelectedRows,
-            "setSelectedRows": setSelectedRows,
-            "getSelectedRanges": getSelectedRanges,
-            "setSelectedRanges": setSelectedRanges,
-            "init": init,
-            "destroy": destroy,
-            "onSelectedRangesChanged": new Slick.Event()
+        e.preventDefault();
+        e.stopPropagation();
+      }
+    }
+
+    function handleClick(e) {
+      var cell = _grid.getCellFromEvent(e);
+      if (!cell || !_grid.canCellBeActive(cell.row, cell.cell)) {
+        return false;
+      }
+
+      if (!_grid.getOptions().multiSelect || (
+          !e.ctrlKey && !e.shiftKey && !e.metaKey)) {
+        return false;
+      }
+
+      var selection = rangesToRows(_ranges);
+      var idx = $.inArray(cell.row, selection);
+
+      if (idx === -1 && (e.ctrlKey || e.metaKey)) {
+        selection.push(cell.row);
+        _grid.setActiveCell(cell.row, cell.cell);
+      } else if (idx !== -1 && (e.ctrlKey || e.metaKey)) {
+        selection = $.grep(selection, function (o, i) {
+          return (o !== cell.row);
         });
+        _grid.setActiveCell(cell.row, cell.cell);
+      } else if (selection.length && e.shiftKey) {
+        var last = selection.pop();
+        var from = Math.min(cell.row, last);
+        var to = Math.max(cell.row, last);
+        selection = [];
+        for (var i = from; i <= to; i++) {
+          if (i !== last) {
+            selection.push(i);
+          }
+        }
+        selection.push(last);
+        _grid.setActiveCell(cell.row, cell.cell);
+      }
+
+      _ranges = rowsToRanges(selection);
+      setSelectedRanges(_ranges);
+      e.stopImmediatePropagation();
+
+      return true;
     }
+
+    $.extend(this, {
+      "getSelectedRows": getSelectedRows,
+      "setSelectedRows": setSelectedRows,
+
+      "getSelectedRanges": getSelectedRanges,
+      "setSelectedRanges": setSelectedRanges,
+
+      "init": init,
+      "destroy": destroy,
+
+      "onSelectedRangesChanged": new Slick.Event()
+    });
+  }
 })(jQuery);
\ No newline at end of file


[43/50] [abbrv] incubator-nifi git commit: NIFI-27: - Upgrading jQuery and jQuery UI. - Updating autocomplete as appropriate. - Restoring line returns between methods.

Posted by mc...@apache.org.
NIFI-27:
- Upgrading jQuery and jQuery UI.
- Updating autocomplete as appropriate.
- Restoring line returns between methods.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/888d1baf
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/888d1baf
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/888d1baf

Branch: refs/heads/develop
Commit: 888d1bafc784e6052b14c4e35f1e1c63c246f743
Parents: 2965258
Author: Matt Gilman <ma...@gmail.com>
Authored: Tue Dec 16 09:40:56 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Tue Dec 16 09:40:56 2014 -0500

----------------------------------------------------------------------
 .../src/main/webapp/WEB-INF/jsp/worksheet.jsp   | 33 +++++-----
 .../ui/src/main/webapp/css/main.css             | 17 ++++-
 .../ui/src/main/webapp/css/reset.css            | 59 -----------------
 .../ui/src/main/webapp/js/application.js        | 67 ++++++++++++++------
 4 files changed, 80 insertions(+), 96 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/888d1baf/nar-bundles/update-attribute-bundle/ui/src/main/webapp/WEB-INF/jsp/worksheet.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/update-attribute-bundle/ui/src/main/webapp/WEB-INF/jsp/worksheet.jsp b/nar-bundles/update-attribute-bundle/ui/src/main/webapp/WEB-INF/jsp/worksheet.jsp
index e882030..3c32299 100644
--- a/nar-bundles/update-attribute-bundle/ui/src/main/webapp/WEB-INF/jsp/worksheet.jsp
+++ b/nar-bundles/update-attribute-bundle/ui/src/main/webapp/WEB-INF/jsp/worksheet.jsp
@@ -19,17 +19,29 @@
 <html>
     <head>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-        <script type="text/javascript" src="../nifi/js/jquery/jquery-1.7.min.js"></script>
+        <link rel="stylesheet" href="../nifi/js/jquery/ui-smoothness/jquery-ui-1.10.4.min.css" type="text/css" />
+        <link rel="stylesheet" href="../nifi/js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
+        <link rel="stylesheet" href="../nifi/js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
+        <link rel="stylesheet" href="../nifi/js/jquery/modal/jquery.modal.css" type="text/css" />
+        <link rel="stylesheet" href="../nifi/js/jquery/combo/jquery.combo.css" type="text/css" />
+        <link rel="stylesheet" href="../nifi/js/jquery/qtip2/jquery.qtip.min.css" type="text/css" />
+        <link rel="stylesheet" href="../nifi/js/codemirror/lib/codemirror.css" type="text/css" />
+        <link rel="stylesheet" href="../nifi/js/codemirror/addon/hint/show-hint.css" type="text/css" />
+        <link rel="stylesheet" href="../nifi/js/jquery/nfeditor/jquery.nfeditor.css" type="text/css" />
+        <link rel="stylesheet" href="../nifi/css/reset.css" type="text/css" />
+        <link rel="stylesheet" href="css/main.css" type="text/css" />
+        <script type="text/javascript" src="../nifi/js/jquery/jquery-2.1.1.min.js"></script>
+        <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/jquery.center.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/jquery.each.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/jquery.tab.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/modal/jquery.modal.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/combo/jquery.combo.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/jquery.ellipsis.js"></script>
-        <script type="text/javascript" src="../nifi/js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
+        <script type="text/javascript" src="../nifi/js/jquery/ui-smoothness/jquery-ui-1.10.4.min.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/qtip2/jquery.qtip.min.js"></script>
         <script type="text/javascript" src="../nifi/js/json2.js"></script>
-        <script type="text/javascript" src="../nifi/js/jquery/jquery.event.drag-2.0.min.js"></script>
+        <script type="text/javascript" src="../nifi/js/jquery/jquery.event.drag-2.2.min.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/slickgrid/plugins/slick.cellrangedecorator.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/slickgrid/plugins/slick.cellrangeselector.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/slickgrid/plugins/slick.cellselectionmodel.js"></script>
@@ -39,24 +51,11 @@
         <script type="text/javascript" src="../nifi/js/jquery/slickgrid/slick.dataview.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/slickgrid/slick.core.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/slickgrid/slick.grid.js"></script>
-        <script type="text/javascript" src="../nifi/js/codemirror/lib/codemirror.js"></script>
-        <script type="text/javascript" src="../nifi/js/codemirror/addon/edit/matchbrackets.js"></script>
-        <script type="text/javascript" src="../nifi/js/codemirror/addon/hint/show-hint.js"></script>
+        <script type="text/javascript" src="../nifi/js/codemirror/lib/codemirror-compressed.js"></script>
         <script type="text/javascript" src="../nifi/js/nf/nf-namespace.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/nfeditor/languages/nfel.js"></script>
         <script type="text/javascript" src="../nifi/js/jquery/nfeditor/jquery.nfeditor.js"></script>
         <script type="text/javascript" src="js/application.js"></script>
-        <link rel="stylesheet" href="../nifi/js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
-        <link rel="stylesheet" href="../nifi/js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
-        <link rel="stylesheet" href="../nifi/js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
-        <link rel="stylesheet" href="../nifi/js/jquery/modal/jquery.modal.css" type="text/css" />
-        <link rel="stylesheet" href="../nifi/js/jquery/combo/jquery.combo.css" type="text/css" />
-        <link rel="stylesheet" href="../nifi/js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
-        <link rel="stylesheet" href="../nifi/js/codemirror/lib/codemirror.css" type="text/css" />
-        <link rel="stylesheet" href="../nifi/js/codemirror/addon/hint/show-hint.css" type="text/css" />
-        <link rel="stylesheet" href="../nifi/js/jquery/nfeditor/jquery.nfeditor.css" type="text/css" />
-        <link rel="stylesheet" href="css/reset.css" type="text/css" />
-        <link rel="stylesheet" href="css/main.css" type="text/css" />
         <title>Update Attribute</title>
     </head>
     <body>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/888d1baf/nar-bundles/update-attribute-bundle/ui/src/main/webapp/css/main.css
----------------------------------------------------------------------
diff --git a/nar-bundles/update-attribute-bundle/ui/src/main/webapp/css/main.css b/nar-bundles/update-attribute-bundle/ui/src/main/webapp/css/main.css
index 0dca7df..ee30693 100644
--- a/nar-bundles/update-attribute-bundle/ui/src/main/webapp/css/main.css
+++ b/nar-bundles/update-attribute-bundle/ui/src/main/webapp/css/main.css
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 /*
     document styles
 */
@@ -59,7 +60,21 @@ div.new-rule {
 }
 
 #new-rule-dialog input {
-    width: 374px;
+    width: 370px;
+}
+
+#update-attributes-content .ui-autocomplete {
+    max-height: 400px;
+    overflow: auto;
+    border: 1px solid #aaaaaa;
+    z-index: 1351;
+    border-radius: 0;
+}
+
+#update-attributes-content .ui-menu .ui-menu-item a.ui-state-focus {
+    background: #D4E0E5 !important;
+    border: 1px solid #999999;
+    border-radius: 0;
 }
 
 input.search {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/888d1baf/nar-bundles/update-attribute-bundle/ui/src/main/webapp/css/reset.css
----------------------------------------------------------------------
diff --git a/nar-bundles/update-attribute-bundle/ui/src/main/webapp/css/reset.css b/nar-bundles/update-attribute-bundle/ui/src/main/webapp/css/reset.css
deleted file mode 100644
index 47ab00c..0000000
--- a/nar-bundles/update-attribute-bundle/ui/src/main/webapp/css/reset.css
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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.
- */
-/* Browser Reset CSS, Eric Meyer.  */
-
-html, body, div, span, applet, object, iframe,
-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
-a, abbr, acronym, address, big, cite, code,
-del, dfn, em, font, img, ins, kbd, q, s, samp,
-small, strike, strong, sub, sup, tt, var,
-dl, dt, dd, ol, ul, li,
-fieldset, form, label, legend,
-table, caption, tbody, tfoot, thead, tr, th, td {
-    margin: 0;
-    padding: 0;
-    border: 0;
-    font-weight: inherit;
-    font-style: inherit;
-    font-size: 100%;
-    font-family: inherit;
-    vertical-align: baseline;
-}
-body {
-    line-height: 1;
-    color: black;
-    background: transparent;
-}
-ol, ul {
-    list-style: none;
-}
-/* tables still need 'cellspacing="0"' in the markup */
-table {
-    border-collapse: separate;
-    border-spacing: 0;
-}
-caption, th, td {
-    text-align: left;
-    font-weight: normal;
-}
-blockquote:before, blockquote:after,
-q:before, q:after {
-    content: "";
-}
-blockquote, q {
-    quotes: "" "";
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/888d1baf/nar-bundles/update-attribute-bundle/ui/src/main/webapp/js/application.js
----------------------------------------------------------------------
diff --git a/nar-bundles/update-attribute-bundle/ui/src/main/webapp/js/application.js b/nar-bundles/update-attribute-bundle/ui/src/main/webapp/js/application.js
index e2d8cf9..f6d1d7b 100644
--- a/nar-bundles/update-attribute-bundle/ui/src/main/webapp/js/application.js
+++ b/nar-bundles/update-attribute-bundle/ui/src/main/webapp/js/application.js
@@ -23,6 +23,7 @@ var ua = {
     searchRules: 'Search rule name',
     newRuleIndex: 0,
     editable: false,
+    
     /**
      * Initializes this web application.
      * 
@@ -244,6 +245,7 @@ var ua = {
             }
         });
     },
+    
     /**
      * Initializes the new rule dialog.
      * 
@@ -369,17 +371,10 @@ var ua = {
 
         // initialize the access control auto complete
         $.widget('nf.copyFromRuleAutocomplete', $.ui.autocomplete, {
-            _response: function (content) {
-                if (!this.options.disabled && content) {
-                    this._suggest(content);
-                    this._trigger('open');
-                } else {
-                    this.close();
-                }
-                this.pending--;
-                if (!this.pending) {
-                    this.element.removeClass('ui-autocomplete-loading');
-                }
+            _normalize: function(searchResults) {
+                var items = [];
+                items.push(searchResults);
+                return items;
             },
             _resizeMenu: function () {
                 var ul = this.menu.element;
@@ -388,9 +383,12 @@ var ua = {
             _renderMenu: function (ul, items) {
                 var self = this;
 
-                if ($.isArray(items.rules) && items.rules.length > 0) {
+                // the object that holds the search results is normalized into a single element array
+                var searchResults = items[0];
+
+                if ($.isArray(searchResults.rules) && searchResults.rules.length > 0) {
                     // go through each matching rule
-                    $.each(items.rules, function (i, rule) {
+                    $.each(searchResults.rules, function (i, rule) {
                         // add the user match
                         self._renderRule(ul, rule);
                     });
@@ -403,7 +401,7 @@ var ua = {
             },
             _renderRule: function (ul, ruleMatch) {
                 var ruleContent = $('<a></a>').append($('<div></div>').text(ruleMatch.name));
-                return $('<li style="height: 20px;"></li>').data('item.autocomplete', ruleMatch).append(ruleContent).appendTo(ul);
+                return $('<li style="height: 20px;"></li>').data('ui-autocomplete-item', ruleMatch).append(ruleContent).appendTo(ul);
             }
         });
 
@@ -448,6 +446,7 @@ var ua = {
             }
         }).val(ua.searchRules).addClass('search');
     },
+    
     /**
      * Initializes the new condition dialog.
      */
@@ -523,6 +522,7 @@ var ua = {
             containment: 'parent'
         }).on('click', '#new-condition-add', add).on('click', '#new-condition-cancel', cancel);
     },
+    
     /**
      * Initializes the new action dialog.
      */
@@ -610,6 +610,7 @@ var ua = {
             }
         });
     },
+    
     /**
      * Configure the ok dialog.
      * 
@@ -635,6 +636,7 @@ var ua = {
             }
         });
     },
+    
     /**
      * Configure the yes no dialog.
      * 
@@ -645,6 +647,7 @@ var ua = {
             overlayBackground: false
         });
     },
+    
     /**
      * Initializes the conditions grid.
      * 
@@ -724,6 +727,7 @@ var ua = {
         $('#selected-rule-conditions').data('gridInstance', conditionsGrid);
         return conditionsGrid;
     },
+    
     /**
      * Initializes the actions grid.
      */
@@ -801,6 +805,7 @@ var ua = {
         $('#selected-rule-actions').data('gridInstance', actionsGrid);
         return actionsGrid;
     },
+    
     /**
      * Initializes the rule list.
      * 
@@ -940,6 +945,7 @@ var ua = {
             e.stopPropagation();
         }).children(':first').click();
     },
+    
     /**
      * Saves the current rule order
      */
@@ -975,6 +981,7 @@ var ua = {
             $('#ok-dialog').modal('setHeaderText', 'Error').modal('show');
         });
     },
+    
     /**
      * Clears the rule details.
      */
@@ -1006,6 +1013,7 @@ var ua = {
         var actionsData = actionsGrid.getData();
         actionsData.setItems([]);
     },
+    
     /**
      * Loads the rule list.
      * 
@@ -1069,6 +1077,7 @@ var ua = {
             });
         }).promise();
     },
+    
     /**
      * Selects the specified rule and populates its details.
      * 
@@ -1133,6 +1142,7 @@ var ua = {
             actionsGrid.invalidate();
         }).promise();
     },
+    
     /**
      * Deletes the specified rule.
      * 
@@ -1191,6 +1201,7 @@ var ua = {
 
         }).promise();
     },
+    
     /**
      * Saves the currently selected rule.
      * 
@@ -1268,6 +1279,7 @@ var ua = {
             $('#ok-dialog').modal('setHeaderText', 'Error').modal('show');
         });
     },
+    
     /**
      * Deletes the specified row from the specified grid.
      * 
@@ -1284,6 +1296,7 @@ var ua = {
         // mark the rule as modified
         $('#rule-list').children('li.selected').addClass('unsaved');
     },
+    
     /**
      * Creates a new rule and adds it to the rule list.
      * 
@@ -1308,6 +1321,7 @@ var ua = {
 
         return ruleItem;
     },
+    
     /**
      * Hides the rule list.
      * 
@@ -1318,6 +1332,7 @@ var ua = {
         $('#no-rules').show();
         $('#rule-filter-controls').hide();
     },
+    
     /**
      * Shows the rule list.
      * 
@@ -1331,9 +1346,8 @@ var ua = {
         // apply the filter
         ua.applyRuleFilter();
     },
-    /*
-     * Rule filter functions. 
-     */
+    
+    // Rule filter functions. 
 
     /**
      * Get the filter text.
@@ -1348,6 +1362,7 @@ var ua = {
         }
         return filter;
     },
+    
     /**
      * Get the text for the rule to be filtered.
      * 
@@ -1376,6 +1391,7 @@ var ua = {
             return actions;
         }
     },
+    
     /**
      * Apply the rule filter.
      * 
@@ -1446,6 +1462,7 @@ var ua = {
         $('#displayed-rules').text(matchingRules);
         $('#total-rules').text(ruleItems.length);
     },
+    
     /**
      * Adds a hover effects to the specified selector.
      * 
@@ -1454,12 +1471,14 @@ var ua = {
      * @param {type} overStyle
      */
     addHoverEffect: function (selector, normalStyle, overStyle) {
-        return $(selector).addClass(normalStyle).live('mouseenter', function () {
+        $(document).on('mouseenter', selector, function () {
             $(this).removeClass(normalStyle).addClass(overStyle);
-        }).live('mouseleave', function () {
+        }).on('mouseleave', selector, function () {
             $(this).removeClass(overStyle).addClass(normalStyle);
         });
+        return $(selector).addClass(normalStyle);
     },
+    
     /**
      * Shows the specified text and clears it after 10 seconds.
      * 
@@ -1472,6 +1491,7 @@ var ua = {
             $('#message').text('');
         }, 10000);
     },
+    
     /**
      * Custom validator for required fields.
      * 
@@ -1484,6 +1504,7 @@ var ua = {
             return {valid: true, msg: null};
         }
     },
+    
     /**
      * Function for prevent cell editing before a rule is selected.
      * 
@@ -1501,6 +1522,7 @@ var ua = {
             return false;
         }
     },
+    
     /**
      * Shows the property value for the specified row and cell.
      * 
@@ -1593,12 +1615,14 @@ var ua = {
             'padding': '0 3px 5px'
         }).append(ok).append('<div class="clear"></div>').appendTo(wrapper);
     },
+    
     /**
      * Removes all currently open process property detail dialogs.
      */
     removeAllDetailDialogs: function () {
         $('body').children('div.update-attribute-detail').hide().remove();
     },
+    
     /**
      * Gets a custom editor for editing long values.
      * 
@@ -1728,6 +1752,7 @@ var ua = {
         // initialize the custom long text editor
         this.init();
     },
+    
     /**
      * Gets a custom editor for editing long values.
      * 
@@ -1851,6 +1876,7 @@ var ua = {
         // initialize the custom long text editor
         this.init();
     },
+    
     /**
      * Adjust the size of the selected rule name field.
      */
@@ -1859,6 +1885,7 @@ var ua = {
         var ruleNameField = $('#selected-rule-name');
         ruleNameField.width(Math.min(500, ruleDetailsPanel.width() - 10));
     },
+    
     /**
      * Gets the client id.
      * 
@@ -1867,6 +1894,7 @@ var ua = {
     getClientId: function () {
         return $('#attribute-updater-client-id').text();
     },
+    
     /**
      * Gets the revision.
      * 
@@ -1875,6 +1903,7 @@ var ua = {
     getRevision: function () {
         return $('#attribute-updater-revision').text();
     },
+    
     /**
      * Gets the processor id.
      * 


[22/50] [abbrv] incubator-nifi git commit: Merge branch 'nifi-27' of https://git-wip-us.apache.org/repos/asf/incubator-nifi into nifi-27

Posted by mc...@apache.org.
Merge branch 'nifi-27' of https://git-wip-us.apache.org/repos/asf/incubator-nifi into nifi-27


Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/5b0d8a5d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/5b0d8a5d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/5b0d8a5d

Branch: refs/heads/develop
Commit: 5b0d8a5dc1f7a69d92f42e7d99fe4a84c290845f
Parents: 1d23e6e 2f2474e
Author: Matt Gilman <ma...@gmail.com>
Authored: Wed Dec 10 14:42:01 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Wed Dec 10 14:42:01 2014 -0500

----------------------------------------------------------------------

----------------------------------------------------------------------



[28/50] [abbrv] incubator-nifi git commit: NIFI-27: - Starting to upgrade jQuery and jQuery UI.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-ui-1.8.10.custom.min.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-ui-1.8.10.custom.min.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-ui-1.8.10.custom.min.js
deleted file mode 100755
index adb6986..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/jquery-ui-1.8.10.custom.min.js
+++ /dev/null
@@ -1,6354 +0,0 @@
-/*!
- * jQuery UI 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function (c, j) {
-    function k(a) {
-        return!c(a).parents().andSelf().filter(function () {
-            return c.curCSS(this, "visibility") === "hidden" || c.expr.filters.hidden(this)
-        }).length
-    }
-    c.ui = c.ui || {};
-    if (!c.ui.version) {
-        c.extend(c.ui, {version: "1.8.10", keyCode: {ALT: 18, BACKSPACE: 8, CAPS_LOCK: 20, COMMA: 188, COMMAND: 91, COMMAND_LEFT: 91, COMMAND_RIGHT: 93, CONTROL: 17, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, INSERT: 45, LEFT: 37, MENU: 93, NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108, NUMPAD_MULTIPLY: 106,
-                NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SHIFT: 16, SPACE: 32, TAB: 9, UP: 38, WINDOWS: 91}});
-        c.fn.extend({_focus: c.fn.focus, focus: function (a, b) {
-                return typeof a === "number" ? this.each(function () {
-                    var d = this;
-                    setTimeout(function () {
-                        c(d).focus();
-                        b && b.call(d)
-                    }, a)
-                }) : this._focus.apply(this, arguments)
-            }, scrollParent: function () {
-                var a;
-                a = c.browser.msie && /(static|relative)/.test(this.css("position")) || /absolute/.test(this.css("position")) ? this.parents().filter(function () {
-                    return/(relative|absolute|fixed)/.test(c.curCSS(this,
-                            "position", 1)) && /(auto|scroll)/.test(c.curCSS(this, "overflow", 1) + c.curCSS(this, "overflow-y", 1) + c.curCSS(this, "overflow-x", 1))
-                }).eq(0) : this.parents().filter(function () {
-                    return/(auto|scroll)/.test(c.curCSS(this, "overflow", 1) + c.curCSS(this, "overflow-y", 1) + c.curCSS(this, "overflow-x", 1))
-                }).eq(0);
-                return/fixed/.test(this.css("position")) || !a.length ? c(document) : a
-            }, zIndex: function (a) {
-                if (a !== j)
-                    return this.css("zIndex", a);
-                if (this.length) {
-                    a = c(this[0]);
-                    for (var b; a.length && a[0] !== document; ) {
-                        b = a.css("position");
-                        if (b === "absolute" || b === "relative" || b === "fixed") {
-                            b = parseInt(a.css("zIndex"), 10);
-                            if (!isNaN(b) && b !== 0)
-                                return b
-                        }
-                        a = a.parent()
-                    }
-                }
-                return 0
-            }, disableSelection: function () {
-                return this.bind((c.support.selectstart ? "selectstart" : "mousedown") + ".ui-disableSelection", function (a) {
-                    a.preventDefault()
-                })
-            }, enableSelection: function () {
-                return this.unbind(".ui-disableSelection")
-            }});
-        c.each(["Width", "Height"], function (a, b) {
-            function d(f, g, l, m) {
-                c.each(e, function () {
-                    g -= parseFloat(c.curCSS(f, "padding" + this, true)) || 0;
-                    if (l)
-                        g -= parseFloat(c.curCSS(f,
-                                "border" + this + "Width", true)) || 0;
-                    if (m)
-                        g -= parseFloat(c.curCSS(f, "margin" + this, true)) || 0
-                });
-                return g
-            }
-            var e = b === "Width" ? ["Left", "Right"] : ["Top", "Bottom"], h = b.toLowerCase(), i = {innerWidth: c.fn.innerWidth, innerHeight: c.fn.innerHeight, outerWidth: c.fn.outerWidth, outerHeight: c.fn.outerHeight};
-            c.fn["inner" + b] = function (f) {
-                if (f === j)
-                    return i["inner" + b].call(this);
-                return this.each(function () {
-                    c(this).css(h, d(this, f) + "px")
-                })
-            };
-            c.fn["outer" + b] = function (f, g) {
-                if (typeof f !== "number")
-                    return i["outer" + b].call(this, f);
-                return this.each(function () {
-                    c(this).css(h,
-                            d(this, f, true, g) + "px")
-                })
-            }
-        });
-        c.extend(c.expr[":"], {data: function (a, b, d) {
-                return!!c.data(a, d[3])
-            }, focusable: function (a) {
-                var b = a.nodeName.toLowerCase(), d = c.attr(a, "tabindex");
-                if ("area" === b) {
-                    b = a.parentNode;
-                    d = b.name;
-                    if (!a.href || !d || b.nodeName.toLowerCase() !== "map")
-                        return false;
-                    a = c("img[usemap=#" + d + "]")[0];
-                    return!!a && k(a)
-                }
-                return(/input|select|textarea|button|object/.test(b) ? !a.disabled : "a" == b ? a.href || !isNaN(d) : !isNaN(d)) && k(a)
-            }, tabbable: function (a) {
-                var b = c.attr(a, "tabindex");
-                return(isNaN(b) || b >= 0) && c(a).is(":focusable")
-            }});
-        c(function () {
-            var a = document.body, b = a.appendChild(b = document.createElement("div"));
-            c.extend(b.style, {minHeight: "100px", height: "auto", padding: 0, borderWidth: 0});
-            c.support.minHeight = b.offsetHeight === 100;
-            c.support.selectstart = "onselectstart"in b;
-            a.removeChild(b).style.display = "none"
-        });
-        c.extend(c.ui, {plugin: {add: function (a, b, d) {
-                    a = c.ui[a].prototype;
-                    for (var e in d) {
-                        a.plugins[e] = a.plugins[e] || [];
-                        a.plugins[e].push([b, d[e]])
-                    }
-                }, call: function (a, b, d) {
-                    if ((b = a.plugins[b]) && a.element[0].parentNode)
-                        for (var e = 0; e < b.length; e++)
-                            a.options[b[e][0]] &&
-                                    b[e][1].apply(a.element, d)
-                }}, contains: function (a, b) {
-                return document.compareDocumentPosition ? a.compareDocumentPosition(b) & 16 : a !== b && a.contains(b)
-            }, hasScroll: function (a, b) {
-                if (c(a).css("overflow") === "hidden")
-                    return false;
-                b = b && b === "left" ? "scrollLeft" : "scrollTop";
-                var d = false;
-                if (a[b] > 0)
-                    return true;
-                a[b] = 1;
-                d = a[b] > 0;
-                a[b] = 0;
-                return d
-            }, isOverAxis: function (a, b, d) {
-                return a > b && a < b + d
-            }, isOver: function (a, b, d, e, h, i) {
-                return c.ui.isOverAxis(a, d, h) && c.ui.isOverAxis(b, e, i)
-            }})
-    }
-})(jQuery);
-;/*!
- * jQuery UI Widget 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function (b, j) {
-    if (b.cleanData) {
-        var k = b.cleanData;
-        b.cleanData = function (a) {
-            for (var c = 0, d; (d = a[c]) != null; c++)
-                b(d).triggerHandler("remove");
-            k(a)
-        }
-    } else {
-        var l = b.fn.remove;
-        b.fn.remove = function (a, c) {
-            return this.each(function () {
-                if (!c)
-                    if (!a || b.filter(a, [this]).length)
-                        b("*", this).add([this]).each(function () {
-                            b(this).triggerHandler("remove")
-                        });
-                return l.call(b(this), a, c)
-            })
-        }
-    }
-    b.widget = function (a, c, d) {
-        var e = a.split(".")[0], f;
-        a = a.split(".")[1];
-        f = e + "-" + a;
-        if (!d) {
-            d = c;
-            c = b.Widget
-        }
-        b.expr[":"][f] = function (h) {
-            return!!b.data(h,
-                    a)
-        };
-        b[e] = b[e] || {};
-        b[e][a] = function (h, g) {
-            arguments.length && this._createWidget(h, g)
-        };
-        c = new c;
-        c.options = b.extend(true, {}, c.options);
-        b[e][a].prototype = b.extend(true, c, {namespace: e, widgetName: a, widgetEventPrefix: b[e][a].prototype.widgetEventPrefix || a, widgetBaseClass: f}, d);
-        b.widget.bridge(a, b[e][a])
-    };
-    b.widget.bridge = function (a, c) {
-        b.fn[a] = function (d) {
-            var e = typeof d === "string", f = Array.prototype.slice.call(arguments, 1), h = this;
-            d = !e && f.length ? b.extend.apply(null, [true, d].concat(f)) : d;
-            if (e && d.charAt(0) === "_")
-                return h;
-            e ? this.each(function () {
-                var g = b.data(this, a), i = g && b.isFunction(g[d]) ? g[d].apply(g, f) : g;
-                if (i !== g && i !== j) {
-                    h = i;
-                    return false
-                }
-            }) : this.each(function () {
-                var g = b.data(this, a);
-                g ? g.option(d || {})._init() : b.data(this, a, new c(d, this))
-            });
-            return h
-        }
-    };
-    b.Widget = function (a, c) {
-        arguments.length && this._createWidget(a, c)
-    };
-    b.Widget.prototype = {widgetName: "widget", widgetEventPrefix: "", options: {disabled: false}, _createWidget: function (a, c) {
-            b.data(c, this.widgetName, this);
-            this.element = b(c);
-            this.options = b.extend(true, {}, this.options,
-                    this._getCreateOptions(), a);
-            var d = this;
-            this.element.bind("remove." + this.widgetName, function () {
-                d.destroy()
-            });
-            this._create();
-            this._trigger("create");
-            this._init()
-        }, _getCreateOptions: function () {
-            return b.metadata && b.metadata.get(this.element[0])[this.widgetName]
-        }, _create: function () {
-        }, _init: function () {
-        }, destroy: function () {
-            this.element.unbind("." + this.widgetName).removeData(this.widgetName);
-            this.widget().unbind("." + this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass + "-disabled ui-state-disabled")
-        },
-        widget: function () {
-            return this.element
-        }, option: function (a, c) {
-            var d = a;
-            if (arguments.length === 0)
-                return b.extend({}, this.options);
-            if (typeof a === "string") {
-                if (c === j)
-                    return this.options[a];
-                d = {};
-                d[a] = c
-            }
-            this._setOptions(d);
-            return this
-        }, _setOptions: function (a) {
-            var c = this;
-            b.each(a, function (d, e) {
-                c._setOption(d, e)
-            });
-            return this
-        }, _setOption: function (a, c) {
-            this.options[a] = c;
-            if (a === "disabled")
-                this.widget()[c ? "addClass" : "removeClass"](this.widgetBaseClass + "-disabled ui-state-disabled").attr("aria-disabled", c);
-            return this
-        },
-        enable: function () {
-            return this._setOption("disabled", false)
-        }, disable: function () {
-            return this._setOption("disabled", true)
-        }, _trigger: function (a, c, d) {
-            var e = this.options[a];
-            c = b.Event(c);
-            c.type = (a === this.widgetEventPrefix ? a : this.widgetEventPrefix + a).toLowerCase();
-            d = d || {};
-            if (c.originalEvent) {
-                a = b.event.props.length;
-                for (var f; a; ) {
-                    f = b.event.props[--a];
-                    c[f] = c.originalEvent[f]
-                }
-            }
-            this.element.trigger(c, d);
-            return!(b.isFunction(e) && e.call(this.element[0], c, d) === false || c.isDefaultPrevented())
-        }}
-})(jQuery);
-;/*!
- * jQuery UI Mouse 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- *	jquery.ui.widget.js
- */
-(function (c) {
-    c.widget("ui.mouse", {options: {cancel: ":input,option", distance: 1, delay: 0}, _mouseInit: function () {
-            var a = this;
-            this.element.bind("mousedown." + this.widgetName, function (b) {
-                return a._mouseDown(b)
-            }).bind("click." + this.widgetName, function (b) {
-                if (true === c.data(b.target, a.widgetName + ".preventClickEvent")) {
-                    c.removeData(b.target, a.widgetName + ".preventClickEvent");
-                    b.stopImmediatePropagation();
-                    return false
-                }
-            });
-            this.started = false
-        }, _mouseDestroy: function () {
-            this.element.unbind("." + this.widgetName)
-        }, _mouseDown: function (a) {
-            a.originalEvent =
-                    a.originalEvent || {};
-            if (!a.originalEvent.mouseHandled) {
-                this._mouseStarted && this._mouseUp(a);
-                this._mouseDownEvent = a;
-                var b = this, e = a.which == 1, f = typeof this.options.cancel == "string" ? c(a.target).parents().add(a.target).filter(this.options.cancel).length : false;
-                if (!e || f || !this._mouseCapture(a))
-                    return true;
-                this.mouseDelayMet = !this.options.delay;
-                if (!this.mouseDelayMet)
-                    this._mouseDelayTimer = setTimeout(function () {
-                        b.mouseDelayMet = true
-                    }, this.options.delay);
-                if (this._mouseDistanceMet(a) && this._mouseDelayMet(a)) {
-                    this._mouseStarted =
-                            this._mouseStart(a) !== false;
-                    if (!this._mouseStarted) {
-                        a.preventDefault();
-                        return true
-                    }
-                }
-                this._mouseMoveDelegate = function (d) {
-                    return b._mouseMove(d)
-                };
-                this._mouseUpDelegate = function (d) {
-                    return b._mouseUp(d)
-                };
-                c(document).bind("mousemove." + this.widgetName, this._mouseMoveDelegate).bind("mouseup." + this.widgetName, this._mouseUpDelegate);
-                a.preventDefault();
-                return a.originalEvent.mouseHandled = true
-            }
-        }, _mouseMove: function (a) {
-            if (c.browser.msie && !(document.documentMode >= 9) && !a.button)
-                return this._mouseUp(a);
-            if (this._mouseStarted) {
-                this._mouseDrag(a);
-                return a.preventDefault()
-            }
-            if (this._mouseDistanceMet(a) && this._mouseDelayMet(a))
-                (this._mouseStarted = this._mouseStart(this._mouseDownEvent, a) !== false) ? this._mouseDrag(a) : this._mouseUp(a);
-            return!this._mouseStarted
-        }, _mouseUp: function (a) {
-            c(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate);
-            if (this._mouseStarted) {
-                this._mouseStarted = false;
-                a.target == this._mouseDownEvent.target && c.data(a.target, this.widgetName + ".preventClickEvent",
-                        true);
-                this._mouseStop(a)
-            }
-            return false
-        }, _mouseDistanceMet: function (a) {
-            return Math.max(Math.abs(this._mouseDownEvent.pageX - a.pageX), Math.abs(this._mouseDownEvent.pageY - a.pageY)) >= this.options.distance
-        }, _mouseDelayMet: function () {
-            return this.mouseDelayMet
-        }, _mouseStart: function () {
-        }, _mouseDrag: function () {
-        }, _mouseStop: function () {
-        }, _mouseCapture: function () {
-            return true
-        }})
-})(jQuery);
-;/*
- * jQuery UI Position 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Position
- */
-(function (c) {
-    c.ui = c.ui || {};
-    var n = /left|center|right/, o = /top|center|bottom/, t = c.fn.position, u = c.fn.offset;
-    c.fn.position = function (b) {
-        if (!b || !b.of)
-            return t.apply(this, arguments);
-        b = c.extend({}, b);
-        var a = c(b.of), d = a[0], g = (b.collision || "flip").split(" "), e = b.offset ? b.offset.split(" ") : [0, 0], h, k, j;
-        if (d.nodeType === 9) {
-            h = a.width();
-            k = a.height();
-            j = {top: 0, left: 0}
-        } else if (d.setTimeout) {
-            h = a.width();
-            k = a.height();
-            j = {top: a.scrollTop(), left: a.scrollLeft()}
-        } else if (d.preventDefault) {
-            b.at = "left top";
-            h = k = 0;
-            j = {top: b.of.pageY,
-                left: b.of.pageX}
-        } else {
-            h = a.outerWidth();
-            k = a.outerHeight();
-            j = a.offset()
-        }
-        c.each(["my", "at"], function () {
-            var f = (b[this] || "").split(" ");
-            if (f.length === 1)
-                f = n.test(f[0]) ? f.concat(["center"]) : o.test(f[0]) ? ["center"].concat(f) : ["center", "center"];
-            f[0] = n.test(f[0]) ? f[0] : "center";
-            f[1] = o.test(f[1]) ? f[1] : "center";
-            b[this] = f
-        });
-        if (g.length === 1)
-            g[1] = g[0];
-        e[0] = parseInt(e[0], 10) || 0;
-        if (e.length === 1)
-            e[1] = e[0];
-        e[1] = parseInt(e[1], 10) || 0;
-        if (b.at[0] === "right")
-            j.left += h;
-        else if (b.at[0] === "center")
-            j.left += h / 2;
-        if (b.at[1] === "bottom")
-            j.top +=
-                    k;
-        else if (b.at[1] === "center")
-            j.top += k / 2;
-        j.left += e[0];
-        j.top += e[1];
-        return this.each(function () {
-            var f = c(this), l = f.outerWidth(), m = f.outerHeight(), p = parseInt(c.curCSS(this, "marginLeft", true)) || 0, q = parseInt(c.curCSS(this, "marginTop", true)) || 0, v = l + p + (parseInt(c.curCSS(this, "marginRight", true)) || 0), w = m + q + (parseInt(c.curCSS(this, "marginBottom", true)) || 0), i = c.extend({}, j), r;
-            if (b.my[0] === "right")
-                i.left -= l;
-            else if (b.my[0] === "center")
-                i.left -= l / 2;
-            if (b.my[1] === "bottom")
-                i.top -= m;
-            else if (b.my[1] === "center")
-                i.top -=
-                        m / 2;
-            i.left = Math.round(i.left);
-            i.top = Math.round(i.top);
-            r = {left: i.left - p, top: i.top - q};
-            c.each(["left", "top"], function (s, x) {
-                c.ui.position[g[s]] && c.ui.position[g[s]][x](i, {targetWidth: h, targetHeight: k, elemWidth: l, elemHeight: m, collisionPosition: r, collisionWidth: v, collisionHeight: w, offset: e, my: b.my, at: b.at})
-            });
-            c.fn.bgiframe && f.bgiframe();
-            f.offset(c.extend(i, {using: b.using}))
-        })
-    };
-    c.ui.position = {fit: {left: function (b, a) {
-                var d = c(window);
-                d = a.collisionPosition.left + a.collisionWidth - d.width() - d.scrollLeft();
-                b.left =
-                        d > 0 ? b.left - d : Math.max(b.left - a.collisionPosition.left, b.left)
-            }, top: function (b, a) {
-                var d = c(window);
-                d = a.collisionPosition.top + a.collisionHeight - d.height() - d.scrollTop();
-                b.top = d > 0 ? b.top - d : Math.max(b.top - a.collisionPosition.top, b.top)
-            }}, flip: {left: function (b, a) {
-                if (a.at[0] !== "center") {
-                    var d = c(window);
-                    d = a.collisionPosition.left + a.collisionWidth - d.width() - d.scrollLeft();
-                    var g = a.my[0] === "left" ? -a.elemWidth : a.my[0] === "right" ? a.elemWidth : 0, e = a.at[0] === "left" ? a.targetWidth : -a.targetWidth, h = -2 * a.offset[0];
-                    b.left +=
-                            a.collisionPosition.left < 0 ? g + e + h : d > 0 ? g + e + h : 0
-                }
-            }, top: function (b, a) {
-                if (a.at[1] !== "center") {
-                    var d = c(window);
-                    d = a.collisionPosition.top + a.collisionHeight - d.height() - d.scrollTop();
-                    var g = a.my[1] === "top" ? -a.elemHeight : a.my[1] === "bottom" ? a.elemHeight : 0, e = a.at[1] === "top" ? a.targetHeight : -a.targetHeight, h = -2 * a.offset[1];
-                    b.top += a.collisionPosition.top < 0 ? g + e + h : d > 0 ? g + e + h : 0
-                }
-            }}};
-    if (!c.offset.setOffset) {
-        c.offset.setOffset = function (b, a) {
-            if (/static/.test(c.curCSS(b, "position")))
-                b.style.position = "relative";
-            var d = c(b),
-                    g = d.offset(), e = parseInt(c.curCSS(b, "top", true), 10) || 0, h = parseInt(c.curCSS(b, "left", true), 10) || 0;
-            g = {top: a.top - g.top + e, left: a.left - g.left + h};
-            "using"in a ? a.using.call(b, g) : d.css(g)
-        };
-        c.fn.offset = function (b) {
-            var a = this[0];
-            if (!a || !a.ownerDocument)
-                return null;
-            if (b)
-                return this.each(function () {
-                    c.offset.setOffset(this, b)
-                });
-            return u.call(this)
-        }
-    }
-})(jQuery);
-;/*
- * jQuery UI Draggable 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Draggables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function (d) {
-    d.widget("ui.draggable", d.ui.mouse, {widgetEventPrefix: "drag", options: {addClasses: true, appendTo: "parent", axis: false, connectToSortable: false, containment: false, cursor: "auto", cursorAt: false, grid: false, handle: false, helper: "original", iframeFix: false, opacity: false, refreshPositions: false, revert: false, revertDuration: 500, scope: "default", scroll: true, scrollSensitivity: 20, scrollSpeed: 20, snap: false, snapMode: "both", snapTolerance: 20, stack: false, zIndex: false}, _create: function () {
-            if (this.options.helper ==
-                    "original" && !/^(?:r|a|f)/.test(this.element.css("position")))
-                this.element[0].style.position = "relative";
-            this.options.addClasses && this.element.addClass("ui-draggable");
-            this.options.disabled && this.element.addClass("ui-draggable-disabled");
-            this._mouseInit()
-        }, destroy: function () {
-            if (this.element.data("draggable")) {
-                this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");
-                this._mouseDestroy();
-                return this
-            }
-        }, _mouseCapture: function (a) {
-            var b =
-                    this.options;
-            if (this.helper || b.disabled || d(a.target).is(".ui-resizable-handle"))
-                return false;
-            this.handle = this._getHandle(a);
-            if (!this.handle)
-                return false;
-            return true
-        }, _mouseStart: function (a) {
-            var b = this.options;
-            this.helper = this._createHelper(a);
-            this._cacheHelperProportions();
-            if (d.ui.ddmanager)
-                d.ui.ddmanager.current = this;
-            this._cacheMargins();
-            this.cssPosition = this.helper.css("position");
-            this.scrollParent = this.helper.scrollParent();
-            this.offset = this.positionAbs = this.element.offset();
-            this.offset = {top: this.offset.top -
-                        this.margins.top, left: this.offset.left - this.margins.left};
-            d.extend(this.offset, {click: {left: a.pageX - this.offset.left, top: a.pageY - this.offset.top}, parent: this._getParentOffset(), relative: this._getRelativeOffset()});
-            this.originalPosition = this.position = this._generatePosition(a);
-            this.originalPageX = a.pageX;
-            this.originalPageY = a.pageY;
-            b.cursorAt && this._adjustOffsetFromHelper(b.cursorAt);
-            b.containment && this._setContainment();
-            if (this._trigger("start", a) === false) {
-                this._clear();
-                return false
-            }
-            this._cacheHelperProportions();
-            d.ui.ddmanager && !b.dropBehaviour && d.ui.ddmanager.prepareOffsets(this, a);
-            this.helper.addClass("ui-draggable-dragging");
-            this._mouseDrag(a, true);
-            return true
-        }, _mouseDrag: function (a, b) {
-            this.position = this._generatePosition(a);
-            this.positionAbs = this._convertPositionTo("absolute");
-            if (!b) {
-                b = this._uiHash();
-                if (this._trigger("drag", a, b) === false) {
-                    this._mouseUp({});
-                    return false
-                }
-                this.position = b.position
-            }
-            if (!this.options.axis || this.options.axis != "y")
-                this.helper[0].style.left = this.position.left + "px";
-            if (!this.options.axis ||
-                    this.options.axis != "x")
-                this.helper[0].style.top = this.position.top + "px";
-            d.ui.ddmanager && d.ui.ddmanager.drag(this, a);
-            return false
-        }, _mouseStop: function (a) {
-            var b = false;
-            if (d.ui.ddmanager && !this.options.dropBehaviour)
-                b = d.ui.ddmanager.drop(this, a);
-            if (this.dropped) {
-                b = this.dropped;
-                this.dropped = false
-            }
-            if ((!this.element[0] || !this.element[0].parentNode) && this.options.helper == "original")
-                return false;
-            if (this.options.revert == "invalid" && !b || this.options.revert == "valid" && b || this.options.revert === true || d.isFunction(this.options.revert) &&
-                    this.options.revert.call(this.element, b)) {
-                var c = this;
-                d(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function () {
-                    c._trigger("stop", a) !== false && c._clear()
-                })
-            } else
-                this._trigger("stop", a) !== false && this._clear();
-            return false
-        }, cancel: function () {
-            this.helper.is(".ui-draggable-dragging") ? this._mouseUp({}) : this._clear();
-            return this
-        }, _getHandle: function (a) {
-            var b = !this.options.handle || !d(this.options.handle, this.element).length ? true : false;
-            d(this.options.handle, this.element).find("*").andSelf().each(function () {
-                if (this ==
-                        a.target)
-                    b = true
-            });
-            return b
-        }, _createHelper: function (a) {
-            var b = this.options;
-            a = d.isFunction(b.helper) ? d(b.helper.apply(this.element[0], [a])) : b.helper == "clone" ? this.element.clone() : this.element;
-            a.parents("body").length || a.appendTo(b.appendTo == "parent" ? this.element[0].parentNode : b.appendTo);
-            a[0] != this.element[0] && !/(fixed|absolute)/.test(a.css("position")) && a.css("position", "absolute");
-            return a
-        }, _adjustOffsetFromHelper: function (a) {
-            if (typeof a == "string")
-                a = a.split(" ");
-            if (d.isArray(a))
-                a = {left: +a[0], top: +a[1] ||
-                            0};
-            if ("left"in a)
-                this.offset.click.left = a.left + this.margins.left;
-            if ("right"in a)
-                this.offset.click.left = this.helperProportions.width - a.right + this.margins.left;
-            if ("top"in a)
-                this.offset.click.top = a.top + this.margins.top;
-            if ("bottom"in a)
-                this.offset.click.top = this.helperProportions.height - a.bottom + this.margins.top
-        }, _getParentOffset: function () {
-            this.offsetParent = this.helper.offsetParent();
-            var a = this.offsetParent.offset();
-            if (this.cssPosition == "absolute" && this.scrollParent[0] != document && d.ui.contains(this.scrollParent[0],
-                    this.offsetParent[0])) {
-                a.left += this.scrollParent.scrollLeft();
-                a.top += this.scrollParent.scrollTop()
-            }
-            if (this.offsetParent[0] == document.body || this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == "html" && d.browser.msie)
-                a = {top: 0, left: 0};
-            return{top: a.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0), left: a.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)}
-        }, _getRelativeOffset: function () {
-            if (this.cssPosition == "relative") {
-                var a = this.element.position();
-                return{top: a.top -
-                            (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(), left: a.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()}
-            } else
-                return{top: 0, left: 0}
-        }, _cacheMargins: function () {
-            this.margins = {left: parseInt(this.element.css("marginLeft"), 10) || 0, top: parseInt(this.element.css("marginTop"), 10) || 0}
-        }, _cacheHelperProportions: function () {
-            this.helperProportions = {width: this.helper.outerWidth(), height: this.helper.outerHeight()}
-        }, _setContainment: function () {
-            var a = this.options;
-            if (a.containment ==
-                    "parent")
-                a.containment = this.helper[0].parentNode;
-            if (a.containment == "document" || a.containment == "window")
-                this.containment = [(a.containment == "document" ? 0 : d(window).scrollLeft()) - this.offset.relative.left - this.offset.parent.left, (a.containment == "document" ? 0 : d(window).scrollTop()) - this.offset.relative.top - this.offset.parent.top, (a.containment == "document" ? 0 : d(window).scrollLeft()) + d(a.containment == "document" ? document : window).width() - this.helperProportions.width - this.margins.left, (a.containment == "document" ?
-                            0 : d(window).scrollTop()) + (d(a.containment == "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top];
-            if (!/^(document|window|parent)$/.test(a.containment) && a.containment.constructor != Array) {
-                var b = d(a.containment)[0];
-                if (b) {
-                    a = d(a.containment).offset();
-                    var c = d(b).css("overflow") != "hidden";
-                    this.containment = [a.left + (parseInt(d(b).css("borderLeftWidth"), 10) || 0) + (parseInt(d(b).css("paddingLeft"), 10) || 0) - this.margins.left, a.top + (parseInt(d(b).css("borderTopWidth"),
-                                10) || 0) + (parseInt(d(b).css("paddingTop"), 10) || 0) - this.margins.top, a.left + (c ? Math.max(b.scrollWidth, b.offsetWidth) : b.offsetWidth) - (parseInt(d(b).css("borderLeftWidth"), 10) || 0) - (parseInt(d(b).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left, a.top + (c ? Math.max(b.scrollHeight, b.offsetHeight) : b.offsetHeight) - (parseInt(d(b).css("borderTopWidth"), 10) || 0) - (parseInt(d(b).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top]
-                }
-            } else if (a.containment.constructor ==
-                    Array)
-                this.containment = a.containment
-        }, _convertPositionTo: function (a, b) {
-            if (!b)
-                b = this.position;
-            a = a == "absolute" ? 1 : -1;
-            var c = this.cssPosition == "absolute" && !(this.scrollParent[0] != document && d.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, f = /(html|body)/i.test(c[0].tagName);
-            return{top: b.top + this.offset.relative.top * a + this.offset.parent.top * a - (d.browser.safari && d.browser.version < 526 && this.cssPosition == "fixed" ? 0 : (this.cssPosition == "fixed" ? -this.scrollParent.scrollTop() :
-                        f ? 0 : c.scrollTop()) * a), left: b.left + this.offset.relative.left * a + this.offset.parent.left * a - (d.browser.safari && d.browser.version < 526 && this.cssPosition == "fixed" ? 0 : (this.cssPosition == "fixed" ? -this.scrollParent.scrollLeft() : f ? 0 : c.scrollLeft()) * a)}
-        }, _generatePosition: function (a) {
-            var b = this.options, c = this.cssPosition == "absolute" && !(this.scrollParent[0] != document && d.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, f = /(html|body)/i.test(c[0].tagName), e = a.pageX, g = a.pageY;
-            if (this.originalPosition) {
-                if (this.containment) {
-                    if (a.pageX - this.offset.click.left < this.containment[0])
-                        e = this.containment[0] + this.offset.click.left;
-                    if (a.pageY - this.offset.click.top < this.containment[1])
-                        g = this.containment[1] + this.offset.click.top;
-                    if (a.pageX - this.offset.click.left > this.containment[2])
-                        e = this.containment[2] + this.offset.click.left;
-                    if (a.pageY - this.offset.click.top > this.containment[3])
-                        g = this.containment[3] + this.offset.click.top
-                }
-                if (b.grid) {
-                    g = this.originalPageY + Math.round((g - this.originalPageY) /
-                            b.grid[1]) * b.grid[1];
-                    g = this.containment ? !(g - this.offset.click.top < this.containment[1] || g - this.offset.click.top > this.containment[3]) ? g : !(g - this.offset.click.top < this.containment[1]) ? g - b.grid[1] : g + b.grid[1] : g;
-                    e = this.originalPageX + Math.round((e - this.originalPageX) / b.grid[0]) * b.grid[0];
-                    e = this.containment ? !(e - this.offset.click.left < this.containment[0] || e - this.offset.click.left > this.containment[2]) ? e : !(e - this.offset.click.left < this.containment[0]) ? e - b.grid[0] : e + b.grid[0] : e
-                }
-            }
-            return{top: g - this.offset.click.top -
-                        this.offset.relative.top - this.offset.parent.top + (d.browser.safari && d.browser.version < 526 && this.cssPosition == "fixed" ? 0 : this.cssPosition == "fixed" ? -this.scrollParent.scrollTop() : f ? 0 : c.scrollTop()), left: e - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + (d.browser.safari && d.browser.version < 526 && this.cssPosition == "fixed" ? 0 : this.cssPosition == "fixed" ? -this.scrollParent.scrollLeft() : f ? 0 : c.scrollLeft())}
-        }, _clear: function () {
-            this.helper.removeClass("ui-draggable-dragging");
-            this.helper[0] !=
-                    this.element[0] && !this.cancelHelperRemoval && this.helper.remove();
-            this.helper = null;
-            this.cancelHelperRemoval = false
-        }, _trigger: function (a, b, c) {
-            c = c || this._uiHash();
-            d.ui.plugin.call(this, a, [b, c]);
-            if (a == "drag")
-                this.positionAbs = this._convertPositionTo("absolute");
-            return d.Widget.prototype._trigger.call(this, a, b, c)
-        }, plugins: {}, _uiHash: function () {
-            return{helper: this.helper, position: this.position, originalPosition: this.originalPosition, offset: this.positionAbs}
-        }});
-    d.extend(d.ui.draggable, {version: "1.8.10"});
-    d.ui.plugin.add("draggable", "connectToSortable", {start: function (a, b) {
-            var c = d(this).data("draggable"), f = c.options, e = d.extend({}, b, {item: c.element});
-            c.sortables = [];
-            d(f.connectToSortable).each(function () {
-                var g = d.data(this, "sortable");
-                if (g && !g.options.disabled) {
-                    c.sortables.push({instance: g, shouldRevert: g.options.revert});
-                    g._refreshItems();
-                    g._trigger("activate", a, e)
-                }
-            })
-        }, stop: function (a, b) {
-            var c = d(this).data("draggable"), f = d.extend({}, b, {item: c.element});
-            d.each(c.sortables, function () {
-                if (this.instance.isOver) {
-                    this.instance.isOver =
-                            0;
-                    c.cancelHelperRemoval = true;
-                    this.instance.cancelHelperRemoval = false;
-                    if (this.shouldRevert)
-                        this.instance.options.revert = true;
-                    this.instance._mouseStop(a);
-                    this.instance.options.helper = this.instance.options._helper;
-                    c.options.helper == "original" && this.instance.currentItem.css({top: "auto", left: "auto"})
-                } else {
-                    this.instance.cancelHelperRemoval = false;
-                    this.instance._trigger("deactivate", a, f)
-                }
-            })
-        }, drag: function (a, b) {
-            var c = d(this).data("draggable"), f = this;
-            d.each(c.sortables, function () {
-                this.instance.positionAbs =
-                        c.positionAbs;
-                this.instance.helperProportions = c.helperProportions;
-                this.instance.offset.click = c.offset.click;
-                if (this.instance._intersectsWith(this.instance.containerCache)) {
-                    if (!this.instance.isOver) {
-                        this.instance.isOver = 1;
-                        this.instance.currentItem = d(f).clone().appendTo(this.instance.element).data("sortable-item", true);
-                        this.instance.options._helper = this.instance.options.helper;
-                        this.instance.options.helper = function () {
-                            return b.helper[0]
-                        };
-                        a.target = this.instance.currentItem[0];
-                        this.instance._mouseCapture(a,
-                                true);
-                        this.instance._mouseStart(a, true, true);
-                        this.instance.offset.click.top = c.offset.click.top;
-                        this.instance.offset.click.left = c.offset.click.left;
-                        this.instance.offset.parent.left -= c.offset.parent.left - this.instance.offset.parent.left;
-                        this.instance.offset.parent.top -= c.offset.parent.top - this.instance.offset.parent.top;
-                        c._trigger("toSortable", a);
-                        c.dropped = this.instance.element;
-                        c.currentItem = c.element;
-                        this.instance.fromOutside = c
-                    }
-                    this.instance.currentItem && this.instance._mouseDrag(a)
-                } else if (this.instance.isOver) {
-                    this.instance.isOver =
-                            0;
-                    this.instance.cancelHelperRemoval = true;
-                    this.instance.options.revert = false;
-                    this.instance._trigger("out", a, this.instance._uiHash(this.instance));
-                    this.instance._mouseStop(a, true);
-                    this.instance.options.helper = this.instance.options._helper;
-                    this.instance.currentItem.remove();
-                    this.instance.placeholder && this.instance.placeholder.remove();
-                    c._trigger("fromSortable", a);
-                    c.dropped = false
-                }
-            })
-        }});
-    d.ui.plugin.add("draggable", "cursor", {start: function () {
-            var a = d("body"), b = d(this).data("draggable").options;
-            if (a.css("cursor"))
-                b._cursor =
-                        a.css("cursor");
-            a.css("cursor", b.cursor)
-        }, stop: function () {
-            var a = d(this).data("draggable").options;
-            a._cursor && d("body").css("cursor", a._cursor)
-        }});
-    d.ui.plugin.add("draggable", "iframeFix", {start: function () {
-            var a = d(this).data("draggable").options;
-            d(a.iframeFix === true ? "iframe" : a.iframeFix).each(function () {
-                d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width: this.offsetWidth + "px", height: this.offsetHeight + "px", position: "absolute", opacity: "0.001", zIndex: 1E3}).css(d(this).offset()).appendTo("body")
-            })
-        },
-        stop: function () {
-            d("div.ui-draggable-iframeFix").each(function () {
-                this.parentNode.removeChild(this)
-            })
-        }});
-    d.ui.plugin.add("draggable", "opacity", {start: function (a, b) {
-            a = d(b.helper);
-            b = d(this).data("draggable").options;
-            if (a.css("opacity"))
-                b._opacity = a.css("opacity");
-            a.css("opacity", b.opacity)
-        }, stop: function (a, b) {
-            a = d(this).data("draggable").options;
-            a._opacity && d(b.helper).css("opacity", a._opacity)
-        }});
-    d.ui.plugin.add("draggable", "scroll", {start: function () {
-            var a = d(this).data("draggable");
-            if (a.scrollParent[0] !=
-                    document && a.scrollParent[0].tagName != "HTML")
-                a.overflowOffset = a.scrollParent.offset()
-        }, drag: function (a) {
-            var b = d(this).data("draggable"), c = b.options, f = false;
-            if (b.scrollParent[0] != document && b.scrollParent[0].tagName != "HTML") {
-                if (!c.axis || c.axis != "x")
-                    if (b.overflowOffset.top + b.scrollParent[0].offsetHeight - a.pageY < c.scrollSensitivity)
-                        b.scrollParent[0].scrollTop = f = b.scrollParent[0].scrollTop + c.scrollSpeed;
-                    else if (a.pageY - b.overflowOffset.top < c.scrollSensitivity)
-                        b.scrollParent[0].scrollTop = f = b.scrollParent[0].scrollTop -
-                                c.scrollSpeed;
-                if (!c.axis || c.axis != "y")
-                    if (b.overflowOffset.left + b.scrollParent[0].offsetWidth - a.pageX < c.scrollSensitivity)
-                        b.scrollParent[0].scrollLeft = f = b.scrollParent[0].scrollLeft + c.scrollSpeed;
-                    else if (a.pageX - b.overflowOffset.left < c.scrollSensitivity)
-                        b.scrollParent[0].scrollLeft = f = b.scrollParent[0].scrollLeft - c.scrollSpeed
-            } else {
-                if (!c.axis || c.axis != "x")
-                    if (a.pageY - d(document).scrollTop() < c.scrollSensitivity)
-                        f = d(document).scrollTop(d(document).scrollTop() - c.scrollSpeed);
-                    else if (d(window).height() -
-                            (a.pageY - d(document).scrollTop()) < c.scrollSensitivity)
-                        f = d(document).scrollTop(d(document).scrollTop() + c.scrollSpeed);
-                if (!c.axis || c.axis != "y")
-                    if (a.pageX - d(document).scrollLeft() < c.scrollSensitivity)
-                        f = d(document).scrollLeft(d(document).scrollLeft() - c.scrollSpeed);
-                    else if (d(window).width() - (a.pageX - d(document).scrollLeft()) < c.scrollSensitivity)
-                        f = d(document).scrollLeft(d(document).scrollLeft() + c.scrollSpeed)
-            }
-            f !== false && d.ui.ddmanager && !c.dropBehaviour && d.ui.ddmanager.prepareOffsets(b, a)
-        }});
-    d.ui.plugin.add("draggable",
-            "snap", {start: function () {
-                    var a = d(this).data("draggable"), b = a.options;
-                    a.snapElements = [];
-                    d(b.snap.constructor != String ? b.snap.items || ":data(draggable)" : b.snap).each(function () {
-                        var c = d(this), f = c.offset();
-                        this != a.element[0] && a.snapElements.push({item: this, width: c.outerWidth(), height: c.outerHeight(), top: f.top, left: f.left})
-                    })
-                }, drag: function (a, b) {
-                    for (var c = d(this).data("draggable"), f = c.options, e = f.snapTolerance, g = b.offset.left, n = g + c.helperProportions.width, m = b.offset.top, o = m + c.helperProportions.height, h =
-                            c.snapElements.length - 1; h >= 0; h--) {
-                        var i = c.snapElements[h].left, k = i + c.snapElements[h].width, j = c.snapElements[h].top, l = j + c.snapElements[h].height;
-                        if (i - e < g && g < k + e && j - e < m && m < l + e || i - e < g && g < k + e && j - e < o && o < l + e || i - e < n && n < k + e && j - e < m && m < l + e || i - e < n && n < k + e && j - e < o && o < l + e) {
-                            if (f.snapMode != "inner") {
-                                var p = Math.abs(j - o) <= e, q = Math.abs(l - m) <= e, r = Math.abs(i - n) <= e, s = Math.abs(k - g) <= e;
-                                if (p)
-                                    b.position.top = c._convertPositionTo("relative", {top: j - c.helperProportions.height, left: 0}).top - c.margins.top;
-                                if (q)
-                                    b.position.top = c._convertPositionTo("relative",
-                                            {top: l, left: 0}).top - c.margins.top;
-                                if (r)
-                                    b.position.left = c._convertPositionTo("relative", {top: 0, left: i - c.helperProportions.width}).left - c.margins.left;
-                                if (s)
-                                    b.position.left = c._convertPositionTo("relative", {top: 0, left: k}).left - c.margins.left
-                            }
-                            var t = p || q || r || s;
-                            if (f.snapMode != "outer") {
-                                p = Math.abs(j - m) <= e;
-                                q = Math.abs(l - o) <= e;
-                                r = Math.abs(i - g) <= e;
-                                s = Math.abs(k - n) <= e;
-                                if (p)
-                                    b.position.top = c._convertPositionTo("relative", {top: j, left: 0}).top - c.margins.top;
-                                if (q)
-                                    b.position.top = c._convertPositionTo("relative", {top: l - c.helperProportions.height,
-                                        left: 0}).top - c.margins.top;
-                                if (r)
-                                    b.position.left = c._convertPositionTo("relative", {top: 0, left: i}).left - c.margins.left;
-                                if (s)
-                                    b.position.left = c._convertPositionTo("relative", {top: 0, left: k - c.helperProportions.width}).left - c.margins.left
-                            }
-                            if (!c.snapElements[h].snapping && (p || q || r || s || t))
-                                c.options.snap.snap && c.options.snap.snap.call(c.element, a, d.extend(c._uiHash(), {snapItem: c.snapElements[h].item}));
-                            c.snapElements[h].snapping = p || q || r || s || t
-                        } else {
-                            c.snapElements[h].snapping && c.options.snap.release && c.options.snap.release.call(c.element,
-                                    a, d.extend(c._uiHash(), {snapItem: c.snapElements[h].item}));
-                            c.snapElements[h].snapping = false
-                        }
-                    }
-                }});
-    d.ui.plugin.add("draggable", "stack", {start: function () {
-            var a = d(this).data("draggable").options;
-            a = d.makeArray(d(a.stack)).sort(function (c, f) {
-                return(parseInt(d(c).css("zIndex"), 10) || 0) - (parseInt(d(f).css("zIndex"), 10) || 0)
-            });
-            if (a.length) {
-                var b = parseInt(a[0].style.zIndex) || 0;
-                d(a).each(function (c) {
-                    this.style.zIndex = b + c
-                });
-                this[0].style.zIndex = b + a.length
-            }
-        }});
-    d.ui.plugin.add("draggable", "zIndex", {start: function (a,
-                b) {
-            a = d(b.helper);
-            b = d(this).data("draggable").options;
-            if (a.css("zIndex"))
-                b._zIndex = a.css("zIndex");
-            a.css("zIndex", b.zIndex)
-        }, stop: function (a, b) {
-            a = d(this).data("draggable").options;
-            a._zIndex && d(b.helper).css("zIndex", a._zIndex)
-        }})
-})(jQuery);
-;/*
- * jQuery UI Droppable 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Droppables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- *	jquery.ui.mouse.js
- *	jquery.ui.draggable.js
- */
-(function (d) {
-    d.widget("ui.droppable", {widgetEventPrefix: "drop", options: {accept: "*", activeClass: false, addClasses: true, greedy: false, hoverClass: false, scope: "default", tolerance: "intersect"}, _create: function () {
-            var a = this.options, b = a.accept;
-            this.isover = 0;
-            this.isout = 1;
-            this.accept = d.isFunction(b) ? b : function (c) {
-                return c.is(b)
-            };
-            this.proportions = {width: this.element[0].offsetWidth, height: this.element[0].offsetHeight};
-            d.ui.ddmanager.droppables[a.scope] = d.ui.ddmanager.droppables[a.scope] || [];
-            d.ui.ddmanager.droppables[a.scope].push(this);
-            a.addClasses && this.element.addClass("ui-droppable")
-        }, destroy: function () {
-            for (var a = d.ui.ddmanager.droppables[this.options.scope], b = 0; b < a.length; b++)
-                a[b] == this && a.splice(b, 1);
-            this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");
-            return this
-        }, _setOption: function (a, b) {
-            if (a == "accept")
-                this.accept = d.isFunction(b) ? b : function (c) {
-                    return c.is(b)
-                };
-            d.Widget.prototype._setOption.apply(this, arguments)
-        }, _activate: function (a) {
-            var b = d.ui.ddmanager.current;
-            this.options.activeClass &&
-                    this.element.addClass(this.options.activeClass);
-            b && this._trigger("activate", a, this.ui(b))
-        }, _deactivate: function (a) {
-            var b = d.ui.ddmanager.current;
-            this.options.activeClass && this.element.removeClass(this.options.activeClass);
-            b && this._trigger("deactivate", a, this.ui(b))
-        }, _over: function (a) {
-            var b = d.ui.ddmanager.current;
-            if (!(!b || (b.currentItem || b.element)[0] == this.element[0]))
-                if (this.accept.call(this.element[0], b.currentItem || b.element)) {
-                    this.options.hoverClass && this.element.addClass(this.options.hoverClass);
-                    this._trigger("over", a, this.ui(b))
-                }
-        }, _out: function (a) {
-            var b = d.ui.ddmanager.current;
-            if (!(!b || (b.currentItem || b.element)[0] == this.element[0]))
-                if (this.accept.call(this.element[0], b.currentItem || b.element)) {
-                    this.options.hoverClass && this.element.removeClass(this.options.hoverClass);
-                    this._trigger("out", a, this.ui(b))
-                }
-        }, _drop: function (a, b) {
-            var c = b || d.ui.ddmanager.current;
-            if (!c || (c.currentItem || c.element)[0] == this.element[0])
-                return false;
-            var e = false;
-            this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function () {
-                var g =
-                        d.data(this, "droppable");
-                if (g.options.greedy && !g.options.disabled && g.options.scope == c.options.scope && g.accept.call(g.element[0], c.currentItem || c.element) && d.ui.intersect(c, d.extend(g, {offset: g.element.offset()}), g.options.tolerance)) {
-                    e = true;
-                    return false
-                }
-            });
-            if (e)
-                return false;
-            if (this.accept.call(this.element[0], c.currentItem || c.element)) {
-                this.options.activeClass && this.element.removeClass(this.options.activeClass);
-                this.options.hoverClass && this.element.removeClass(this.options.hoverClass);
-                this._trigger("drop",
-                        a, this.ui(c));
-                return this.element
-            }
-            return false
-        }, ui: function (a) {
-            return{draggable: a.currentItem || a.element, helper: a.helper, position: a.position, offset: a.positionAbs}
-        }});
-    d.extend(d.ui.droppable, {version: "1.8.10"});
-    d.ui.intersect = function (a, b, c) {
-        if (!b.offset)
-            return false;
-        var e = (a.positionAbs || a.position.absolute).left, g = e + a.helperProportions.width, f = (a.positionAbs || a.position.absolute).top, h = f + a.helperProportions.height, i = b.offset.left, k = i + b.proportions.width, j = b.offset.top, l = j + b.proportions.height;
-        switch (c) {
-            case "fit":
-                return i <= e && g <= k && j <= f && h <= l;
-            case "intersect":
-                return i < e + a.helperProportions.width / 2 && g - a.helperProportions.width / 2 < k && j < f + a.helperProportions.height / 2 && h - a.helperProportions.height / 2 < l;
-            case "pointer":
-                return d.ui.isOver((a.positionAbs || a.position.absolute).top + (a.clickOffset || a.offset.click).top, (a.positionAbs || a.position.absolute).left + (a.clickOffset || a.offset.click).left, j, i, b.proportions.height, b.proportions.width);
-            case "touch":
-                return(f >= j && f <= l || h >= j && h <= l || f < j && h > l) && (e >=
-                        i && e <= k || g >= i && g <= k || e < i && g > k);
-            default:
-                return false
-        }
-    };
-    d.ui.ddmanager = {current: null, droppables: {"default": []}, prepareOffsets: function (a, b) {
-            var c = d.ui.ddmanager.droppables[a.options.scope] || [], e = b ? b.type : null, g = (a.currentItem || a.element).find(":data(droppable)").andSelf(), f = 0;
-            a:for (; f < c.length; f++)
-                if (!(c[f].options.disabled || a && !c[f].accept.call(c[f].element[0], a.currentItem || a.element))) {
-                    for (var h = 0; h < g.length; h++)
-                        if (g[h] == c[f].element[0]) {
-                            c[f].proportions.height = 0;
-                            continue a
-                        }
-                    c[f].visible = c[f].element.css("display") !=
-                            "none";
-                    if (c[f].visible) {
-                        c[f].offset = c[f].element.offset();
-                        c[f].proportions = {width: c[f].element[0].offsetWidth, height: c[f].element[0].offsetHeight};
-                        e == "mousedown" && c[f]._activate.call(c[f], b)
-                    }
-                }
-        }, drop: function (a, b) {
-            var c = false;
-            d.each(d.ui.ddmanager.droppables[a.options.scope] || [], function () {
-                if (this.options) {
-                    if (!this.options.disabled && this.visible && d.ui.intersect(a, this, this.options.tolerance))
-                        c = c || this._drop.call(this, b);
-                    if (!this.options.disabled && this.visible && this.accept.call(this.element[0], a.currentItem ||
-                            a.element)) {
-                        this.isout = 1;
-                        this.isover = 0;
-                        this._deactivate.call(this, b)
-                    }
-                }
-            });
-            return c
-        }, drag: function (a, b) {
-            a.options.refreshPositions && d.ui.ddmanager.prepareOffsets(a, b);
-            d.each(d.ui.ddmanager.droppables[a.options.scope] || [], function () {
-                if (!(this.options.disabled || this.greedyChild || !this.visible)) {
-                    var c = d.ui.intersect(a, this, this.options.tolerance);
-                    if (c = !c && this.isover == 1 ? "isout" : c && this.isover == 0 ? "isover" : null) {
-                        var e;
-                        if (this.options.greedy) {
-                            var g = this.element.parents(":data(droppable):eq(0)");
-                            if (g.length) {
-                                e =
-                                        d.data(g[0], "droppable");
-                                e.greedyChild = c == "isover" ? 1 : 0
-                            }
-                        }
-                        if (e && c == "isover") {
-                            e.isover = 0;
-                            e.isout = 1;
-                            e._out.call(e, b)
-                        }
-                        this[c] = 1;
-                        this[c == "isout" ? "isover" : "isout"] = 0;
-                        this[c == "isover" ? "_over" : "_out"].call(this, b);
-                        if (e && c == "isout") {
-                            e.isout = 0;
-                            e.isover = 1;
-                            e._over.call(e, b)
-                        }
-                    }
-                }
-            })
-        }}
-})(jQuery);
-;/*
- * jQuery UI Resizable 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function (e) {
-    e.widget("ui.resizable", e.ui.mouse, {widgetEventPrefix: "resize", options: {alsoResize: false, animate: false, animateDuration: "slow", animateEasing: "swing", aspectRatio: false, autoHide: false, containment: false, ghost: false, grid: false, handles: "e,s,se", helper: false, maxHeight: null, maxWidth: null, minHeight: 10, minWidth: 10, zIndex: 1E3}, _create: function () {
-            var b = this, a = this.options;
-            this.element.addClass("ui-resizable");
-            e.extend(this, {_aspectRatio: !!a.aspectRatio, aspectRatio: a.aspectRatio, originalElement: this.element,
-                _proportionallyResizeElements: [], _helper: a.helper || a.ghost || a.animate ? a.helper || "ui-resizable-helper" : null});
-            if (this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
-                /relative/.test(this.element.css("position")) && e.browser.opera && this.element.css({position: "relative", top: "auto", left: "auto"});
-                this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position: this.element.css("position"), width: this.element.outerWidth(), height: this.element.outerHeight(),
-                    top: this.element.css("top"), left: this.element.css("left")}));
-                this.element = this.element.parent().data("resizable", this.element.data("resizable"));
-                this.elementIsWrapper = true;
-                this.element.css({marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom")});
-                this.originalElement.css({marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
-                this.originalResizeStyle =
-                        this.originalElement.css("resize");
-                this.originalElement.css("resize", "none");
-                this._proportionallyResizeElements.push(this.originalElement.css({position: "static", zoom: 1, display: "block"}));
-                this.originalElement.css({margin: this.originalElement.css("margin")});
-                this._proportionallyResize()
-            }
-            this.handles = a.handles || (!e(".ui-resizable-handle", this.element).length ? "e,s,se" : {n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne",
-                nw: ".ui-resizable-nw"});
-            if (this.handles.constructor == String) {
-                if (this.handles == "all")
-                    this.handles = "n,e,s,w,se,sw,ne,nw";
-                var c = this.handles.split(",");
-                this.handles = {};
-                for (var d = 0; d < c.length; d++) {
-                    var f = e.trim(c[d]), g = e('<div class="ui-resizable-handle ' + ("ui-resizable-" + f) + '"></div>');
-                    /sw|se|ne|nw/.test(f) && g.css({zIndex: ++a.zIndex});
-                    "se" == f && g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
-                    this.handles[f] = ".ui-resizable-" + f;
-                    this.element.append(g)
-                }
-            }
-            this._renderAxis = function (h) {
-                h = h || this.element;
-                for (var i in this.handles) {
-                    if (this.handles[i].constructor ==
-                            String)
-                        this.handles[i] = e(this.handles[i], this.element).show();
-                    if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
-                        var j = e(this.handles[i], this.element), k = 0;
-                        k = /sw|ne|nw|se|n|s/.test(i) ? j.outerHeight() : j.outerWidth();
-                        j = ["padding", /ne|nw|n/.test(i) ? "Top" : /se|sw|s/.test(i) ? "Bottom" : /^e$/.test(i) ? "Right" : "Left"].join("");
-                        h.css(j, k);
-                        this._proportionallyResize()
-                    }
-                    e(this.handles[i])
-                }
-            };
-            this._renderAxis(this.element);
-            this._handles = e(".ui-resizable-handle", this.element).disableSelection();
-            this._handles.mouseover(function () {
-                if (!b.resizing) {
-                    if (this.className)
-                        var h = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
-                    b.axis = h && h[1] ? h[1] : "se"
-                }
-            });
-            if (a.autoHide) {
-                this._handles.hide();
-                e(this.element).addClass("ui-resizable-autohide").hover(function () {
-                    e(this).removeClass("ui-resizable-autohide");
-                    b._handles.show()
-                }, function () {
-                    if (!b.resizing) {
-                        e(this).addClass("ui-resizable-autohide");
-                        b._handles.hide()
-                    }
-                })
-            }
-            this._mouseInit()
-        }, destroy: function () {
-            this._mouseDestroy();
-            var b = function (c) {
-                e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()
-            };
-            if (this.elementIsWrapper) {
-                b(this.element);
-                var a = this.element;
-                a.after(this.originalElement.css({position: a.css("position"), width: a.outerWidth(), height: a.outerHeight(), top: a.css("top"), left: a.css("left")})).remove()
-            }
-            this.originalElement.css("resize", this.originalResizeStyle);
-            b(this.originalElement);
-            return this
-        }, _mouseCapture: function (b) {
-            var a = false;
-            for (var c in this.handles)
-                if (e(this.handles[c])[0] == b.target)
-                    a = true;
-            return!this.options.disabled && a
-        }, _mouseStart: function (b) {
-            var a = this.options, c = this.element.position(),
-                    d = this.element;
-            this.resizing = true;
-            this.documentScroll = {top: e(document).scrollTop(), left: e(document).scrollLeft()};
-            if (d.is(".ui-draggable") || /absolute/.test(d.css("position")))
-                d.css({position: "absolute", top: c.top, left: c.left});
-            e.browser.opera && /relative/.test(d.css("position")) && d.css({position: "relative", top: "auto", left: "auto"});
-            this._renderProxy();
-            c = m(this.helper.css("left"));
-            var f = m(this.helper.css("top"));
-            if (a.containment) {
-                c += e(a.containment).scrollLeft() || 0;
-                f += e(a.containment).scrollTop() || 0
-            }
-            this.offset =
-                    this.helper.offset();
-            this.position = {left: c, top: f};
-            this.size = this._helper ? {width: d.outerWidth(), height: d.outerHeight()} : {width: d.width(), height: d.height()};
-            this.originalSize = this._helper ? {width: d.outerWidth(), height: d.outerHeight()} : {width: d.width(), height: d.height()};
-            this.originalPosition = {left: c, top: f};
-            this.sizeDiff = {width: d.outerWidth() - d.width(), height: d.outerHeight() - d.height()};
-            this.originalMousePosition = {left: b.pageX, top: b.pageY};
-            this.aspectRatio = typeof a.aspectRatio == "number" ? a.aspectRatio :
-                    this.originalSize.width / this.originalSize.height || 1;
-            a = e(".ui-resizable-" + this.axis).css("cursor");
-            e("body").css("cursor", a == "auto" ? this.axis + "-resize" : a);
-            d.addClass("ui-resizable-resizing");
-            this._propagate("start", b);
-            return true
-        }, _mouseDrag: function (b) {
-            var a = this.helper, c = this.originalMousePosition, d = this._change[this.axis];
-            if (!d)
-                return false;
-            c = d.apply(this, [b, b.pageX - c.left || 0, b.pageY - c.top || 0]);
-            if (this._aspectRatio || b.shiftKey)
-                c = this._updateRatio(c, b);
-            c = this._respectSize(c, b);
-            this._propagate("resize",
-                    b);
-            a.css({top: this.position.top + "px", left: this.position.left + "px", width: this.size.width + "px", height: this.size.height + "px"});
-            !this._helper && this._proportionallyResizeElements.length && this._proportionallyResize();
-            this._updateCache(c);
-            this._trigger("resize", b, this.ui());
-            return false
-        }, _mouseStop: function (b) {
-            this.resizing = false;
-            var a = this.options, c = this;
-            if (this._helper) {
-                var d = this._proportionallyResizeElements, f = d.length && /textarea/i.test(d[0].nodeName);
-                d = f && e.ui.hasScroll(d[0], "left") ? 0 : c.sizeDiff.height;
-                f = f ? 0 : c.sizeDiff.width;
-                f = {width: c.helper.width() - f, height: c.helper.height() - d};
-                d = parseInt(c.element.css("left"), 10) + (c.position.left - c.originalPosition.left) || null;
-                var g = parseInt(c.element.css("top"), 10) + (c.position.top - c.originalPosition.top) || null;
-                a.animate || this.element.css(e.extend(f, {top: g, left: d}));
-                c.helper.height(c.size.height);
-                c.helper.width(c.size.width);
-                this._helper && !a.animate && this._proportionallyResize()
-            }
-            e("body").css("cursor", "auto");
-            this.element.removeClass("ui-resizable-resizing");
-            this._propagate("stop", b);
-            this._helper && this.helper.remove();
-            return false
-        }, _updateCache: function (b) {
-            this.offset = this.helper.offset();
-            if (l(b.left))
-                this.position.left = b.left;
-            if (l(b.top))
-                this.position.top = b.top;
-            if (l(b.height))
-                this.size.height = b.height;
-            if (l(b.width))
-                this.size.width = b.width
-        }, _updateRatio: function (b) {
-            var a = this.position, c = this.size, d = this.axis;
-            if (b.height)
-                b.width = c.height * this.aspectRatio;
-            else if (b.width)
-                b.height = c.width / this.aspectRatio;
-            if (d == "sw") {
-                b.left = a.left + (c.width - b.width);
-                b.top =
-                        null
-            }
-            if (d == "nw") {
-                b.top = a.top + (c.height - b.height);
-                b.left = a.left + (c.width - b.width)
-            }
-            return b
-        }, _respectSize: function (b) {
-            var a = this.options, c = this.axis, d = l(b.width) && a.maxWidth && a.maxWidth < b.width, f = l(b.height) && a.maxHeight && a.maxHeight < b.height, g = l(b.width) && a.minWidth && a.minWidth > b.width, h = l(b.height) && a.minHeight && a.minHeight > b.height;
-            if (g)
-                b.width = a.minWidth;
-            if (h)
-                b.height = a.minHeight;
-            if (d)
-                b.width = a.maxWidth;
-            if (f)
-                b.height = a.maxHeight;
-            var i = this.originalPosition.left + this.originalSize.width, j = this.position.top +
-                    this.size.height, k = /sw|nw|w/.test(c);
-            c = /nw|ne|n/.test(c);
-            if (g && k)
-                b.left = i - a.minWidth;
-            if (d && k)
-                b.left = i - a.maxWidth;
-            if (h && c)
-                b.top = j - a.minHeight;
-            if (f && c)
-                b.top = j - a.maxHeight;
-            if ((a = !b.width && !b.height) && !b.left && b.top)
-                b.top = null;
-            else if (a && !b.top && b.left)
-                b.left = null;
-            return b
-        }, _proportionallyResize: function () {
-            if (this._proportionallyResizeElements.length)
-                for (var b = this.helper || this.element, a = 0; a < this._proportionallyResizeElements.length; a++) {
-                    var c = this._proportionallyResizeElements[a];
-                    if (!this.borderDif) {
-                        var d =
-                                [c.css("borderTopWidth"), c.css("borderRightWidth"), c.css("borderBottomWidth"), c.css("borderLeftWidth")], f = [c.css("paddingTop"), c.css("paddingRight"), c.css("paddingBottom"), c.css("paddingLeft")];
-                        this.borderDif = e.map(d, function (g, h) {
-                            g = parseInt(g, 10) || 0;
-                            h = parseInt(f[h], 10) || 0;
-                            return g + h
-                        })
-                    }
-                    e.browser.msie && (e(b).is(":hidden") || e(b).parents(":hidden").length) || c.css({height: b.height() - this.borderDif[0] - this.borderDif[2] || 0, width: b.width() - this.borderDif[1] - this.borderDif[3] || 0})
-                }
-        }, _renderProxy: function () {
-            var b =
-                    this.options;
-            this.elementOffset = this.element.offset();
-            if (this._helper) {
-                this.helper = this.helper || e('<div style="overflow:hidden;"></div>');
-                var a = e.browser.msie && e.browser.version < 7, c = a ? 1 : 0;
-                a = a ? 2 : -1;
-                this.helper.addClass(this._helper).css({width: this.element.outerWidth() + a, height: this.element.outerHeight() + a, position: "absolute", left: this.elementOffset.left - c + "px", top: this.elementOffset.top - c + "px", zIndex: ++b.zIndex});
-                this.helper.appendTo("body").disableSelection()
-            } else
-                this.helper = this.element
-        }, _change: {e: function (b,
-                    a) {
-                return{width: this.originalSize.width + a}
-            }, w: function (b, a) {
-                return{left: this.originalPosition.left + a, width: this.originalSize.width - a}
-            }, n: function (b, a, c) {
-                return{top: this.originalPosition.top + c, height: this.originalSize.height - c}
-            }, s: function (b, a, c) {
-                return{height: this.originalSize.height + c}
-            }, se: function (b, a, c) {
-                return e.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [b, a, c]))
-            }, sw: function (b, a, c) {
-                return e.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [b, a,
-                    c]))
-            }, ne: function (b, a, c) {
-                return e.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [b, a, c]))
-            }, nw: function (b, a, c) {
-                return e.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [b, a, c]))
-            }}, _propagate: function (b, a) {
-            e.ui.plugin.call(this, b, [a, this.ui()]);
-            b != "resize" && this._trigger(b, a, this.ui())
-        }, plugins: {}, ui: function () {
-            return{originalElement: this.originalElement, element: this.element, helper: this.helper, position: this.position, size: this.size, originalSize: this.originalSize,
-                originalPosition: this.originalPosition}
-        }});
-    e.extend(e.ui.resizable, {version: "1.8.10"});
-    e.ui.plugin.add("resizable", "alsoResize", {start: function () {
-            var b = e(this).data("resizable").options, a = function (c) {
-                e(c).each(function () {
-                    var d = e(this);
-                    d.data("resizable-alsoresize", {width: parseInt(d.width(), 10), height: parseInt(d.height(), 10), left: parseInt(d.css("left"), 10), top: parseInt(d.css("top"), 10), position: d.css("position")})
-                })
-            };
-            if (typeof b.alsoResize == "object" && !b.alsoResize.parentNode)
-                if (b.alsoResize.length) {
-                    b.alsoResize =
-                            b.alsoResize[0];
-                    a(b.alsoResize)
-                } else
-                    e.each(b.alsoResize, function (c) {
-                        a(c)
-                    });
-            else
-                a(b.alsoResize)
-        }, resize: function (b, a) {
-            var c = e(this).data("resizable");
-            b = c.options;
-            var d = c.originalSize, f = c.originalPosition, g = {height: c.size.height - d.height || 0, width: c.size.width - d.width || 0, top: c.position.top - f.top || 0, left: c.position.left - f.left || 0}, h = function (i, j) {
-                e(i).each(function () {
-                    var k = e(this), q = e(this).data("resizable-alsoresize"), p = {}, r = j && j.length ? j : k.parents(a.originalElement[0]).length ? ["width", "height"] : ["width",
-                        "height", "top", "left"];
-                    e.each(r, function (n, o) {
-                        if ((n = (q[o] || 0) + (g[o] || 0)) && n >= 0)
-                            p[o] = n || null
-                    });
-                    if (e.browser.opera && /relative/.test(k.css("position"))) {
-                        c._revertToRelativePosition = true;
-                        k.css({position: "absolute", top: "auto", left: "auto"})
-                    }
-                    k.css(p)
-                })
-            };
-            typeof b.alsoResize == "object" && !b.alsoResize.nodeType ? e.each(b.alsoResize, function (i, j) {
-                h(i, j)
-            }) : h(b.alsoResize)
-        }, stop: function () {
-            var b = e(this).data("resizable"), a = b.options, c = function (d) {
-                e(d).each(function () {
-                    var f = e(this);
-                    f.css({position: f.data("resizable-alsoresize").position})
-                })
-            };
-            if (b._revertToRelativePosition) {
-                b._revertToRelativePosition = false;
-                typeof a.alsoResize == "object" && !a.alsoResize.nodeType ? e.each(a.alsoResize, function (d) {
-                    c(d)
-                }) : c(a.alsoResize)
-            }
-            e(this).removeData("resizable-alsoresize")
-        }});
-    e.ui.plugin.add("resizable", "animate", {stop: function (b) {
-            var a = e(this).data("resizable"), c = a.options, d = a._proportionallyResizeElements, f = d.length && /textarea/i.test(d[0].nodeName), g = f && e.ui.hasScroll(d[0], "left") ? 0 : a.sizeDiff.height;
-            f = {width: a.size.width - (f ? 0 : a.sizeDiff.width), height: a.size.height -
-                        g};
-            g = parseInt(a.element.css("left"), 10) + (a.position.left - a.originalPosition.left) || null;
-            var h = parseInt(a.element.css("top"), 10) + (a.position.top - a.originalPosition.top) || null;
-            a.element.animate(e.extend(f, h && g ? {top: h, left: g} : {}), {duration: c.animateDuration, easing: c.animateEasing, step: function () {
-                    var i = {width: parseInt(a.element.css("width"), 10), height: parseInt(a.element.css("height"), 10), top: parseInt(a.element.css("top"), 10), left: parseInt(a.element.css("left"), 10)};
-                    d && d.length && e(d[0]).css({width: i.width,
-                        height: i.height});
-                    a._updateCache(i);
-                    a._propagate("resize", b)
-                }})
-        }});
-    e.ui.plugin.add("resizable", "containment", {start: function () {
-            var b = e(this).data("resizable"), a = b.element, c = b.options.containment;
-            if (a = c instanceof e ? c.get(0) : /parent/.test(c) ? a.parent().get(0) : c) {
-                b.containerElement = e(a);
-                if (/document/.test(c) || c == document) {
-                    b.containerOffset = {left: 0, top: 0};
-                    b.containerPosition = {left: 0, top: 0};
-                    b.parentData = {element: e(document), left: 0, top: 0, width: e(document).width(), height: e(document).height() || document.body.parentNode.scrollHeight}
-                } else {
-                    var d =
-                            e(a), f = [];
-                    e(["Top", "Right", "Left", "Bottom"]).each(function (i, j) {
-                        f[i] = m(d.css("padding" + j))
-                    });
-                    b.containerOffset = d.offset();
-                    b.containerPosition = d.position();
-                    b.containerSize = {height: d.innerHeight() - f[3], width: d.innerWidth() - f[1]};
-                    c = b.containerOffset;
-                    var g = b.containerSize.height, h = b.containerSize.width;
-                    h = e.ui.hasScroll(a, "left") ? a.scrollWidth : h;
-                    g = e.ui.hasScroll(a) ? a.scrollHeight : g;
-                    b.parentData = {element: a, left: c.left, top: c.top, width: h, height: g}
-                }
-            }
-        }, resize: function (b) {
-            var a = e(this).data("resizable"), c = a.options,
-                    d = a.containerOffset, f = a.position;
-            b = a._aspectRatio || b.shiftKey;
-            var g = {top: 0, left: 0}, h = a.containerElement;
-            if (h[0] != document && /static/.test(h.css("position")))
-                g = d;
-            if (f.left < (a._helper ? d.left : 0)) {
-                a.size.width += a._helper ? a.position.left - d.left : a.position.left - g.left;
-                if (b)
-                    a.size.height = a.size.width / c.aspectRatio;
-                a.position.left = c.helper ? d.left : 0
-            }
-            if (f.top < (a._helper ? d.top : 0)) {
-                a.size.height += a._helper ? a.position.top - d.top : a.position.top;
-                if (b)
-                    a.size.width = a.size.height * c.aspectRatio;
-                a.position.top = a._helper ?
-                        d.top : 0
-            }
-            a.offset.left = a.parentData.left + a.position.left;
-            a.offset.top = a.parentData.top + a.position.top;
-            c = Math.abs((a._helper ? a.offset.left - g.left : a.offset.left - g.left) + a.sizeDiff.width);
-            d = Math.abs((a._helper ? a.offset.top - g.top : a.offset.top - d.top) + a.sizeDiff.height);
-            f = a.containerElement.get(0) == a.element.parent().get(0);
-            g = /relative|absolute/.test(a.containerElement.css("position"));
-            if (f && g)
-                c -= a.parentData.left;
-            if (c + a.size.width >= a.parentData.width) {
-                a.size.width = a.parentData.width - c;
-                if (b)
-                    a.size.height =
-                            a.size.width / a.aspectRatio
-            }
-            if (d + a.size.height >= a.parentData.height) {
-                a.size.height = a.parentData.height - d;
-                if (b)
-                    a.size.width = a.size.height * a.aspectRatio
-            }
-        }, stop: function () {
-            var b = e(this).data("resizable"), a = b.options, c = b.containerOffset, d = b.containerPosition, f = b.containerElement, g = e(b.helper), h = g.offset(), i = g.outerWidth() - b.sizeDiff.width;
-            g = g.outerHeight() - b.sizeDiff.height;
-            b._helper && !a.animate && /relative/.test(f.css("position")) && e(this).css({left: h.left - d.left - c.left, width: i, height: g});
-            b._helper && !a.animate &&
-                    /static/.test(f.css("position")) && e(this).css({left: h.left - d.left - c.left, width: i, height: g})
-        }});
-    e.ui.plugin.add("resizable", "ghost", {start: function () {
-            var b = e(this).data("resizable"), a = b.options, c = b.size;
-            b.ghost = b.originalElement.clone();
-            b.ghost.css({opacity: 0.25, display: "block", position: "relative", height: c.height, width: c.width, margin: 0, left: 0, top: 0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost == "string" ? a.ghost : "");
-            b.ghost.appendTo(b.helper)
-        }, resize: function () {
-            var b = e(this).data("resizable");
-            b.ghost && b.ghost.css({position: "relative", height: b.size.height, width: b.size.width})
-        }, stop: function () {
-            var b = e(this).data("resizable");
-            b.ghost && b.helper && b.helper.get(0).removeChild(b.ghost.get(0))
-        }});
-    e.ui.plugin.add("resizable", "grid", {resize: function () {
-            var b = e(this).data("resizable"), a = b.options, c = b.size, d = b.originalSize, f = b.originalPosition, g = b.axis;
-            a.grid = typeof a.grid == "number" ? [a.grid, a.grid] : a.grid;
-            var h = Math.round((c.width - d.width) / (a.grid[0] || 1)) * (a.grid[0] || 1);
-            a = Math.round((c.height - d.height) /
-                    (a.grid[1] || 1)) * (a.grid[1] || 1);
-            if (/^(se|s|e)$/.test(g)) {
-                b.size.width = d.width + h;
-                b.size.height = d.height + a
-            } else if (/^(ne)$/.test(g)) {
-                b.size.width = d.width + h;
-                b.size.height = d.height + a;
-                b.position.top = f.top - a
-            } else {
-                if (/^(sw)$/.test(g)) {
-                    b.size.width = d.width + h;
-                    b.size.height = d.height + a
-                } else {
-                    b.size.width = d.width + h;
-                    b.size.height = d.height + a;
-                    b.position.top = f.top - a
-                }
-                b.position.left = f.left - h
-            }
-        }});
-    var m = function (b) {
-        return parseInt(b, 10) || 0
-    }, l = function (b) {
-        return!isNaN(parseInt(b, 10))
-    }
-})(jQuery);
-;/*
- * jQuery UI Selectable 1.8.10
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function (e) {
-    e.widget("ui.selectable", e.ui.mouse, {options: {appendTo: "body", autoRefresh: true, distance: 0, filter: "*", tolerance: "touch"}, _create: function () {
-            var c = this;
-            this.element.addClass("ui-selectable");
-            this.dragged = false;
-            var f;
-            this.refresh = function () {
-                f = e(c.options.filter, c.element[0]);
-                f.each(function () {
-                    var d = e(this), b = d.offset();
-                    e.data(this, "selectable-item", {element: this, $element: d, left: b.left, top: b.top, right: b.left + d.outerWidth(), bottom: b.top + d.outerHeight(), startselected: false, selected: d.hasClass("ui-selected"),
-                        selecting: d.hasClass("ui-selecting"), unselecting: d.hasClass("ui-unselecting")})
-                })
-            };
-            this.refresh();
-            this.selectees = f.addClass("ui-selectee");
-            this._mouseInit();
-            this.helper = e("<div class='ui-selectable-helper'></div>")
-        }, destroy: function () {
-            this.selectees.removeClass("ui-selectee").removeData("selectable-item");
-            this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");
-            this._mouseDestroy();
-            return this
-        }, _mouseStart: function (c) {
-            var f = this;
-            this.opos = [c.pageX,
-                c.pageY];
-            if (!this.options.disabled) {
-                var d = this.options;
-                this.selectees = e(d.filter, this.element[0]);
-   

<TRUNCATED>

[06/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of codemirror.

Posted by mc...@apache.org.
NIFI-27:
- Latest version of codemirror.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/9180b7d4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/9180b7d4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/9180b7d4

Branch: refs/heads/develop
Commit: 9180b7d4a1c05200cddeb946da120643c627037a
Parents: b61a1de
Author: Matt Gilman <ma...@gmail.com>
Authored: Wed Dec 10 12:56:04 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Wed Dec 10 12:56:04 2014 -0500

----------------------------------------------------------------------
 .../src/main/webapp/WEB-INF/pages/canvas.jsp    |    4 +-
 .../src/main/webapp/js/codemirror/LICENSE       |   38 +-
 .../js/codemirror/addon/edit/matchbrackets.js   |  125 -
 .../js/codemirror/addon/hint/show-hint.css      |   54 +-
 .../js/codemirror/addon/hint/show-hint.js       |  411 -
 .../js/codemirror/lib/codemirror-compressed.js  |   16 +
 .../webapp/js/codemirror/lib/codemirror.css     |  282 +-
 .../main/webapp/js/codemirror/lib/codemirror.js | 8488 ------------------
 8 files changed, 228 insertions(+), 9190 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9180b7d4/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
index 09c8207..a40b745 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
@@ -33,9 +33,7 @@
         <link rel="stylesheet" href="js/jquery/minicolors/jquery.minicolors.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />
-        <script type="text/javascript" src="js/codemirror/lib/codemirror.js"></script>
-        <script type="text/javascript" src="js/codemirror/addon/edit/matchbrackets.js"></script>
-        <script type="text/javascript" src="js/codemirror/addon/hint/show-hint.js"></script>
+        <script type="text/javascript" src="js/codemirror/lib/codemirror-compressed.js"></script>
         <script type="text/javascript" src="js/jquery/jquery-1.7.min.js"></script>
         <script type="text/javascript" src="js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9180b7d4/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/LICENSE
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/LICENSE b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/LICENSE
old mode 100755
new mode 100644
index 4f1e9d1..d21bbea
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/LICENSE
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/LICENSE
@@ -1,19 +1,19 @@
-Copyright (C) 2013 by Marijn Haverbeke <ma...@gmail.com> and others
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
+Copyright (C) 2014 by Marijn Haverbeke <ma...@gmail.com> and others
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9180b7d4/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/edit/matchbrackets.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/edit/matchbrackets.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/edit/matchbrackets.js
deleted file mode 100755
index 5f91f9b..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/edit/matchbrackets.js
+++ /dev/null
@@ -1,125 +0,0 @@
-(function (mod) {
-    if (typeof exports == "object" && typeof module == "object") // CommonJS
-        mod(require("../../lib/codemirror"));
-    else if (typeof define == "function" && define.amd) // AMD
-        define(["../../lib/codemirror"], mod);
-    else // Plain browser env
-        mod(CodeMirror);
-})(function (CodeMirror) {
-    var ie_lt8 = /MSIE \d/.test(navigator.userAgent) &&
-            (document.documentMode == null || document.documentMode < 8);
-
-    var Pos = CodeMirror.Pos;
-
-    var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"};
-
-    function findMatchingBracket(cm, where, strict, config) {
-        var line = cm.getLineHandle(where.line), pos = where.ch - 1;
-        var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)];
-        if (!match)
-            return null;
-        var dir = match.charAt(1) == ">" ? 1 : -1;
-        if (strict && (dir > 0) != (pos == where.ch))
-            return null;
-        var style = cm.getTokenTypeAt(Pos(where.line, pos + 1));
-
-        var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style || null, config);
-        return {from: Pos(where.line, pos), to: found && found.pos,
-            match: found && found.ch == match.charAt(0), forward: dir > 0};
-    }
-
-    function scanForBracket(cm, where, dir, style, config) {
-        var maxScanLen = (config && config.maxScanLineLength) || 10000;
-        var maxScanLines = (config && config.maxScanLines) || 500;
-
-        var stack = [], re = /[(){}[\]]/;
-        var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1)
-                : Math.max(cm.firstLine() - 1, where.line - maxScanLines);
-        for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) {
-            var line = cm.getLine(lineNo);
-            if (!line)
-                continue;
-            var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1;
-            if (line.length > maxScanLen)
-                continue;
-            if (lineNo == where.line)
-                pos = where.ch - (dir < 0 ? 1 : 0);
-            for (; pos != end; pos += dir) {
-                var ch = line.charAt(pos);
-                if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) {
-                    var match = matching[ch];
-                    if ((match.charAt(1) == ">") == (dir > 0))
-                        stack.push(ch);
-                    else if (!stack.length)
-                        return {pos: Pos(lineNo, pos), ch: ch};
-                    else
-                        stack.pop();
-                }
-            }
-        }
-    }
-
-    function matchBrackets(cm, autoclear, config) {
-        // Disable brace matching in long lines, since it'll cause hugely slow updates
-        var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000;
-        var marks = [], ranges = cm.listSelections();
-        for (var i = 0; i < ranges.length; i++) {
-            var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, false, config);
-            if (match && cm.getLine(match.from.line).length <= maxHighlightLen &&
-                    match.to && cm.getLine(match.to.line).length <= maxHighlightLen) {
-                var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket";
-                marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style}));
-                if (match.to)
-                    marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style}));
-            }
-        }
-
-        if (marks.length) {
-            // Kludge to work around the IE bug from issue #1193, where text
-            // input stops going to the textare whever this fires.
-            if (ie_lt8 && cm.state.focused)
-                cm.display.input.focus();
-
-            var clear = function () {
-                cm.operation(function () {
-                    for (var i = 0; i < marks.length; i++)
-                        marks[i].clear();
-                });
-            };
-            if (autoclear)
-                setTimeout(clear, 800);
-            else
-                return clear;
-        }
-    }
-
-    var currentlyHighlighted = null;
-    function doMatchBrackets(cm) {
-        cm.operation(function () {
-            if (currentlyHighlighted) {
-                currentlyHighlighted();
-                currentlyHighlighted = null;
-            }
-            currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets);
-        });
-    }
-
-    CodeMirror.defineOption("matchBrackets", false, function (cm, val, old) {
-        if (old && old != CodeMirror.Init)
-            cm.off("cursorActivity", doMatchBrackets);
-        if (val) {
-            cm.state.matchBrackets = typeof val == "object" ? val : {};
-            cm.on("cursorActivity", doMatchBrackets);
-        }
-    });
-
-    CodeMirror.defineExtension("matchBrackets", function () {
-        matchBrackets(this, true);
-    });
-    CodeMirror.defineExtension("findMatchingBracket", function (pos, strict) {
-        return findMatchingBracket(this, pos, strict);
-    });
-    CodeMirror.defineExtension("scanForBracket", function (pos, dir, style) {
-        return scanForBracket(this, pos, dir, style);
-    });
-});

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9180b7d4/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.css
old mode 100755
new mode 100644
index 44449b2..924e638
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.css
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.css
@@ -1,38 +1,38 @@
 .CodeMirror-hints {
-    position: absolute;
-    z-index: 10;
-    overflow: hidden;
-    list-style: none;
+  position: absolute;
+  z-index: 10;
+  overflow: hidden;
+  list-style: none;
 
-    margin: 0;
-    padding: 2px;
+  margin: 0;
+  padding: 2px;
 
-    -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
-    -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
-    box-shadow: 2px 3px 5px rgba(0,0,0,.2);
-    border-radius: 3px;
-    border: 1px solid silver;
+  -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
+  -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
+  box-shadow: 2px 3px 5px rgba(0,0,0,.2);
+  border-radius: 3px;
+  border: 1px solid silver;
 
-    background: white;
-    font-size: 90%;
-    font-family: monospace;
+  background: white;
+  font-size: 90%;
+  font-family: monospace;
 
-    max-height: 20em;
-    overflow-y: auto;
+  max-height: 20em;
+  overflow-y: auto;
 }
 
 .CodeMirror-hint {
-    margin: 0;
-    padding: 0 4px;
-    border-radius: 2px;
-    max-width: 19em;
-    overflow: hidden;
-    white-space: pre;
-    color: black;
-    cursor: pointer;
+  margin: 0;
+  padding: 0 4px;
+  border-radius: 2px;
+  max-width: 19em;
+  overflow: hidden;
+  white-space: pre;
+  color: black;
+  cursor: pointer;
 }
 
-.CodeMirror-hint-active {
-    background: #08f;
-    color: white;
+li.CodeMirror-hint-active {
+  background: #08f;
+  color: white;
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9180b7d4/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.js
deleted file mode 100755
index c820fdd..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/codemirror/addon/hint/show-hint.js
+++ /dev/null
@@ -1,411 +0,0 @@
-(function (mod) {
-    if (typeof exports == "object" && typeof module == "object") // CommonJS
-        mod(require("../../lib/codemirror"));
-    else if (typeof define == "function" && define.amd) // AMD
-        define(["../../lib/codemirror"], mod);
-    else // Plain browser env
-        mod(CodeMirror);
-})(function (CodeMirror) {
-    "use strict";
-
-    var HINT_ELEMENT_CLASS = "CodeMirror-hint";
-    var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active";
-
-    CodeMirror.showHint = function (cm, getHints, options) {
-        // We want a single cursor position.
-        if (cm.listSelections().length > 1 || cm.somethingSelected())
-            return;
-        if (getHints == null) {
-            if (options && options.async)
-                return;
-            else
-                getHints = CodeMirror.hint.auto;
-        }
-
-        if (cm.state.completionActive)
-            cm.state.completionActive.close();
-
-        var completion = cm.state.completionActive = new Completion(cm, getHints, options || {});
-        CodeMirror.signal(cm, "startCompletion", cm);
-        if (completion.options.async)
-            getHints(cm, function (hints) {
-                completion.showHints(hints);
-            }, completion.options);
-        else
-            return completion.showHints(getHints(cm, completion.options));
-    };
-
-    function Completion(cm, getHints, options) {
-        this.cm = cm;
-        this.getHints = getHints;
-        this.options = options;
-        this.widget = this.onClose = null;
-    }
-
-    Completion.prototype = {
-        close: function () {
-            if (!this.active())
-                return;
-            this.cm.state.completionActive = null;
-
-            if (this.widget)
-                this.widget.close();
-            if (this.onClose)
-                this.onClose();
-            CodeMirror.signal(this.cm, "endCompletion", this.cm);
-        },
-        active: function () {
-            return this.cm.state.completionActive == this;
-        },
-        pick: function (data, i) {
-            var completion = data.list[i];
-            if (completion.hint)
-                completion.hint(this.cm, data, completion);
-            else
-                this.cm.replaceRange(getText(completion), completion.from || data.from, completion.to || data.to);
-            CodeMirror.signal(data, "pick", completion);
-            this.close();
-        },
-        showHints: function (data) {
-            if (!data || !data.list.length || !this.active())
-                return this.close();
-
-            if (this.options.completeSingle != false && data.list.length == 1)
-                this.pick(data, 0);
-            else
-                this.showWidget(data);
-        },
-        showWidget: function (data) {
-            this.widget = new Widget(this, data);
-            CodeMirror.signal(data, "shown");
-
-            var debounce = 0, completion = this, finished;
-            var closeOn = this.options.closeCharacters || /[\s()\[\]{};:>,]/;
-            var startPos = this.cm.getCursor(), startLen = this.cm.getLine(startPos.line).length;
-
-            var requestAnimationFrame = window.requestAnimationFrame || function (fn) {
-                return setTimeout(fn, 1000 / 60);
-            };
-            var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout;
-
-            function done() {
-                if (finished)
-                    return;
-                finished = true;
-                completion.close();
-                completion.cm.off("cursorActivity", activity);
-                if (data)
-                    CodeMirror.signal(data, "close");
-            }
-
-            function update() {
-                if (finished)
-                    return;
-                CodeMirror.signal(data, "update");
-                if (completion.options.async)
-                    completion.getHints(completion.cm, finishUpdate, completion.options);
-                else
-                    finishUpdate(completion.getHints(completion.cm, completion.options));
-            }
-            function finishUpdate(data_) {
-                data = data_;
-                if (finished)
-                    return;
-                if (!data || !data.list.length)
-                    return done();
-                completion.widget = new Widget(completion, data);
-            }
-
-            function clearDebounce() {
-                if (debounce) {
-                    cancelAnimationFrame(debounce);
-                    debounce = 0;
-                }
-            }
-
-            function activity() {
-                clearDebounce();
-                var pos = completion.cm.getCursor(), line = completion.cm.getLine(pos.line);
-                if (pos.line != startPos.line || line.length - pos.ch != startLen - startPos.ch ||
-                        pos.ch < startPos.ch || completion.cm.somethingSelected() ||
-                        (pos.ch && closeOn.test(line.charAt(pos.ch - 1)))) {
-                    completion.close();
-                } else {
-                    debounce = requestAnimationFrame(update);
-                    if (completion.widget)
-                        completion.widget.close();
-                }
-            }
-            this.cm.on("cursorActivity", activity);
-            this.onClose = done;
-        }
-    };
-
-    function getText(completion) {
-        if (typeof completion == "string")
-            return completion;
-        else
-            return completion.text;
-    }
-
-    function buildKeyMap(options, handle) {
-        var baseMap = {
-            Up: function () {
-                handle.moveFocus(-1);
-            },
-            Down: function () {
-                handle.moveFocus(1);
-            },
-            PageUp: function () {
-                handle.moveFocus(-handle.menuSize() + 1, true);
-            },
-            PageDown: function () {
-                handle.moveFocus(handle.menuSize() - 1, true);
-            },
-            Home: function () {
-                handle.setFocus(0);
-            },
-            End: function () {
-                handle.setFocus(handle.length - 1);
-            },
-            Enter: handle.pick,
-            Tab: handle.pick,
-            Esc: handle.close
-        };
-        var ourMap = options.customKeys ? {} : baseMap;
-        function addBinding(key, val) {
-            var bound;
-            if (typeof val != "string")
-                bound = function (cm) {
-                    return val(cm, handle);
-                };
-            // This mechanism is deprecated
-            else if (baseMap.hasOwnProperty(val))
-                bound = baseMap[val];
-            else
-                bound = val;
-            ourMap[key] = bound;
-        }
-        if (options.customKeys)
-            for (var key in options.customKeys)
-                if (options.customKeys.hasOwnProperty(key))
-                    addBinding(key, options.customKeys[key]);
-        if (options.extraKeys)
-            for (var key in options.extraKeys)
-                if (options.extraKeys.hasOwnProperty(key))
-                    addBinding(key, options.extraKeys[key]);
-        return ourMap;
-    }
-
-    function getHintElement(hintsElement, el) {
-        while (el && el != hintsElement) {
-            if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement)
-                return el;
-            el = el.parentNode;
-        }
-    }
-
-    function Widget(completion, data) {
-        this.completion = completion;
-        this.data = data;
-        var widget = this, cm = completion.cm, options = completion.options;
-
-        var hints = this.hints = document.createElement("ul");
-        hints.className = "CodeMirror-hints";
-        this.selectedHint = options.getDefaultSelection ? options.getDefaultSelection(cm, options, data) : 0;
-
-        var completions = data.list;
-        for (var i = 0; i < completions.length; ++i) {
-            var elt = hints.appendChild(document.createElement("li")), cur = completions[i];
-            var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS);
-            if (cur.className != null)
-                className = cur.className + " " + className;
-            elt.className = className;
-            if (cur.render)
-                cur.render(elt, data, cur);
-            else
-                elt.appendChild(document.createTextNode(cur.displayText || getText(cur)));
-            elt.hintId = i;
-        }
-
-        var pos = cm.cursorCoords(options.alignWithWord !== false ? data.from : null);
-        var left = pos.left, top = pos.bottom, below = true;
-        hints.style.left = left + "px";
-        hints.style.top = top + "px";
-        // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.
-        var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth);
-        var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight);
-        (options.container || document.body).appendChild(hints);
-        var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH;
-        if (overlapY > 0) {
-            var height = box.bottom - box.top, curTop = box.top - (pos.bottom - pos.top);
-            if (curTop - height > 0) { // Fits above cursor
-                hints.style.top = (top = curTop - height) + "px";
-                below = false;
-            } else if (height > winH) {
-                hints.style.height = (winH - 5) + "px";
-                hints.style.top = (top = pos.bottom - box.top) + "px";
-                var cursor = cm.getCursor();
-                if (data.from.ch != cursor.ch) {
-                    pos = cm.cursorCoords(cursor);
-                    hints.style.left = (left = pos.left) + "px";
-                    box = hints.getBoundingClientRect();
-                }
-            }
-        }
-        var overlapX = box.left - winW;
-        if (overlapX > 0) {
-            if (box.right - box.left > winW) {
-                hints.style.width = (winW - 5) + "px";
-                overlapX -= (box.right - box.left) - winW;
-            }
-            hints.style.left = (left = pos.left - overlapX) + "px";
-        }
-
-        cm.addKeyMap(this.keyMap = buildKeyMap(options, {
-            moveFocus: function (n, avoidWrap) {
-                widget.changeActive(widget.selectedHint + n, avoidWrap);
-            },
-            setFocus: function (n) {
-                widget.changeActive(n);
-            },
-            menuSize: function () {
-                return widget.screenAmount();
-            },
-            length: completions.length,
-            close: function () {
-                completion.close();
-            },
-            pick: function () {
-                widget.pick();
-            },
-            data: data
-        }));
-
-        if (options.closeOnUnfocus !== false) {
-            var closingOnBlur;
-            cm.on("blur", this.onBlur = function () {
-                closingOnBlur = setTimeout(function () {
-                    completion.close();
-                }, 100);
-            });
-            cm.on("focus", this.onFocus = function () {
-                clearTimeout(closingOnBlur);
-            });
-        }
-
-        var startScroll = cm.getScrollInfo();
-        cm.on("scroll", this.onScroll = function () {
-            var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect();
-            var newTop = top + startScroll.top - curScroll.top;
-            var point = newTop - (window.pageYOffset || (document.documentElement || document.body).scrollTop);
-            if (!below)
-                point += hints.offsetHeight;
-            if (point <= editor.top || point >= editor.bottom)
-                return completion.close();
-            hints.style.top = newTop + "px";
-            hints.style.left = (left + startScroll.left - curScroll.left) + "px";
-        });
-
-        CodeMirror.on(hints, "dblclick", function (e) {
-            var t = getHintElement(hints, e.target || e.srcElement);
-            if (t && t.hintId != null) {
-                widget.changeActive(t.hintId);
-                widget.pick();
-            }
-        });
-
-        CodeMirror.on(hints, "click", function (e) {
-            var t = getHintElement(hints, e.target || e.srcElement);
-            if (t && t.hintId != null) {
-                widget.changeActive(t.hintId);
-                if (options.completeOnSingleClick)
-                    widget.pick();
-            }
-        });
-
-        CodeMirror.on(hints, "mousedown", function () {
-            setTimeout(function () {
-                cm.focus();
-            }, 20);
-        });
-
-        CodeMirror.signal(data, "select", completions[0], hints.firstChild);
-        return true;
-    }
-
-    Widget.prototype = {
-        close: function () {
-            if (this.completion.widget != this)
-                return;
-            this.completion.widget = null;
-            this.hints.parentNode.removeChild(this.hints);
-            this.completion.cm.removeKeyMap(this.keyMap);
-
-            var cm = this.completion.cm;
-            if (this.completion.options.closeOnUnfocus !== false) {
-                cm.off("blur", this.onBlur);
-                cm.off("focus", this.onFocus);
-            }
-            cm.off("scroll", this.onScroll);
-        },
-        pick: function () {
-            this.completion.pick(this.data, this.selectedHint);
-        },
-        changeActive: function (i, avoidWrap) {
-            if (i >= this.data.list.length)
-                i = avoidWrap ? this.data.list.length - 1 : 0;
-            else if (i < 0)
-                i = avoidWrap ? 0 : this.data.list.length - 1;
-            if (this.selectedHint == i)
-                return;
-            var node = this.hints.childNodes[this.selectedHint];
-            node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, "");
-            node = this.hints.childNodes[this.selectedHint = i];
-            node.className += " " + ACTIVE_HINT_ELEMENT_CLASS;
-            if (node.offsetTop < this.hints.scrollTop)
-                this.hints.scrollTop = node.offsetTop - 3;
-            else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight)
-                this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3;
-            CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node);
-        },
-        screenAmount: function () {
-            return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1;
-        }
-    };
-
-    CodeMirror.registerHelper("hint", "auto", function (cm, options) {
-        var helpers = cm.getHelpers(cm.getCursor(), "hint"), words;
-        if (helpers.length) {
-            for (var i = 0; i < helpers.length; i++) {
-                var cur = helpers[i](cm, options);
-                if (cur && cur.list.length)
-                    return cur;
-            }
-        } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) {
-            if (words)
-                return CodeMirror.hint.fromList(cm, {words: words});
-        } else if (CodeMirror.hint.anyword) {
-            return CodeMirror.hint.anyword(cm, options);
-        }
-    });
-
-    CodeMirror.registerHelper("hint", "fromList", function (cm, options) {
-        var cur = cm.getCursor(), token = cm.getTokenAt(cur);
-        var found = [];
-        for (var i = 0; i < options.words.length; i++) {
-            var word = options.words[i];
-            if (word.slice(0, token.string.length) == token.string)
-                found.push(word);
-        }
-
-        if (found.length)
-            return {
-                list: found,
-                from: CodeMirror.Pos(cur.line, token.start),
-                to: CodeMirror.Pos(cur.line, token.end)
-            };
-    });
-
-    CodeMirror.commands.autocomplete = CodeMirror.showHint;
-});


[02/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of qtip2.

Posted by mc...@apache.org.
NIFI-27:
- Latest version of qtip2.


Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/57b4178f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/57b4178f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/57b4178f

Branch: refs/heads/develop
Commit: 57b4178f19960bb4359d79f462c6e790e3e8f1a1
Parents: f60a97b
Author: Matt Gilman <ma...@gmail.com>
Authored: Wed Dec 10 08:35:31 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Wed Dec 10 12:19:26 2014 -0500

----------------------------------------------------------------------
 .../webapp/WEB-INF/pages/bulletin-board.jsp     |   2 +-
 .../src/main/webapp/WEB-INF/pages/canvas.jsp    |   2 +-
 .../src/main/webapp/WEB-INF/pages/cluster.jsp   |   2 +-
 .../src/main/webapp/WEB-INF/pages/counters.jsp  |   2 +-
 .../src/main/webapp/WEB-INF/pages/history.jsp   |   2 +-
 .../main/webapp/WEB-INF/pages/provenance.jsp    |   2 +-
 .../src/main/webapp/WEB-INF/pages/summary.jsp   |   2 +-
 .../src/main/webapp/WEB-INF/pages/templates.jsp |   2 +-
 .../src/main/webapp/WEB-INF/pages/users.jsp     |   2 +-
 .../main/webapp/js/jquery/qtip2/jquery.qtip.css | 557 ---------------
 .../webapp/js/jquery/qtip2/jquery.qtip.min.css  |   3 +
 .../webapp/js/jquery/qtip2/jquery.qtip.min.js   | 711 +------------------
 12 files changed, 17 insertions(+), 1272 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/57b4178f/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
index 8669f6c..083862d 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/bulletin-board.jsp
@@ -24,7 +24,7 @@
         ${nf.bulletin.board.style.tags}
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <script type="text/javascript" src="js/jquery/jquery-1.7.min.js"></script>
         <script type="text/javascript" src="js/jquery/jquery.center.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/57b4178f/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
index acdd147..c8f2ff7 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/canvas.jsp
@@ -28,7 +28,7 @@
         <link rel="stylesheet" href="js/jquery/tabbs/jquery.tabbs.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/minicolors/jquery.minicolors.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/57b4178f/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
index 33fdbb0..e3e7b86 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/cluster.jsp
@@ -24,7 +24,7 @@
         ${nf.cluster.style.tags}
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/57b4178f/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
index 5b90113..21ee508 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/counters.jsp
@@ -24,7 +24,7 @@
         ${nf.counters.style.tags}
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/57b4178f/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
index 47eb9ec..61be727 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/history.jsp
@@ -24,7 +24,7 @@
         ${nf.history.style.tags}
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/57b4178f/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
index 742dd32..2f51918 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/provenance.jsp
@@ -25,7 +25,7 @@
         <link rel="stylesheet" href="js/jquery/tabbs/jquery.tabbs.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/57b4178f/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
index 983fac9..b34f0e6 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/summary.jsp
@@ -25,7 +25,7 @@
         <link rel="stylesheet" href="js/jquery/tabbs/jquery.tabbs.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/57b4178f/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
index d4c41ab..c7c0293 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/templates.jsp
@@ -24,7 +24,7 @@
         ${nf.templates.style.tags}
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/57b4178f/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
index a1b511f..770dad5 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/pages/users.jsp
@@ -25,7 +25,7 @@
         <link rel="stylesheet" href="js/jquery/tabbs/jquery.tabbs.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/combo/jquery.combo.css?${project.version}" type="text/css" />
         <link rel="stylesheet" href="js/jquery/modal/jquery.modal.css?${project.version}" type="text/css" />
-        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.css?" type="text/css" />
+        <link rel="stylesheet" href="js/jquery/qtip2/jquery.qtip.min.css?" type="text/css" />
         <link rel="stylesheet" href="js/jquery/css/smoothness/jquery-ui-1.8.10.custom.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick.grid.css" type="text/css" />
         <link rel="stylesheet" href="js/jquery/slickgrid/css/slick-default-theme.css" type="text/css" />

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/57b4178f/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.css
deleted file mode 100755
index 4655d9c..0000000
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.css
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
-* qTip2 - Pretty powerful tooltips
-* http://craigsworks.com/projects/qtip2/
-*
-* Version: 2.0.0pre
-* Copyright 2009-2010 Craig Michael Thompson - http://craigsworks.com
-*
-* Dual licensed under MIT or GPLv2 licenses
-*   http://en.wikipedia.org/wiki/MIT_License
-*   http://en.wikipedia.org/wiki/GNU_General_Public_License
-*
-* Date: Thu Apr 26 20:40:09 2012 +0100
-*/
-
-/* Core qTip styles */
-.ui-tooltip, .qtip{
-    position: absolute;
-    left: -28000px;
-    top: -28000px;
-    display: none;
-
-    max-width: 600px;
-    min-width: 50px;
-
-    font-size: 10.5px;
-    line-height: 12px;
-}
-
-/* Fluid class for determining actual width in IE */
-.ui-tooltip-fluid{
-    display: block;
-    visibility: hidden;
-    position: static !important;
-    float: left !important;
-}
-
-.ui-tooltip-content{
-    position: relative;
-    padding: 5px 9px;
-    overflow: hidden;
-
-    border: 1px solid #000001;
-
-    text-align: left;
-    word-wrap: break-word;
-    overflow: hidden;
-}
-
-.ui-tooltip-titlebar{
-    position: relative;
-    min-height: 14px;
-    padding: 5px 35px 5px 10px;
-    overflow: hidden;
-
-    border: 1px solid #000001;
-    border-width: 1px 1px 0;
-
-    font-weight: bold;
-}
-
-.ui-tooltip-titlebar + .ui-tooltip-content{ border-top-width: 0px !important; }
-
-/*! Default close button class */
-.ui-tooltip-titlebar .ui-state-default{
-    position: absolute;
-    right: 4px;
-    top: 50%;
-    margin-top: -9px;
-
-    cursor: pointer;
-    outline: medium none;
-
-    border-width: 1px;
-    border-style: solid;
-}
-
-* html .ui-tooltip-titlebar .ui-state-default{ top: 16px; } /* IE fix */
-
-.ui-tooltip-titlebar .ui-icon,
-.ui-tooltip-icon .ui-icon{
-    display: block;
-    text-indent: -1000em;
-}
-
-.ui-tooltip-icon, .ui-tooltip-icon .ui-icon{
-    -moz-border-radius: 3px;
-    -webkit-border-radius: 3px;
-    border-radius: 3px;
-}
-
-.ui-tooltip-icon .ui-icon{
-    width: 18px;
-    height: 14px;
-
-    text-align: center;
-    text-indent: 0;
-    font: normal bold 10px/13px Tahoma,sans-serif;
-
-    color: inherit;
-    background: transparent none no-repeat -100em -100em;
-}
-
-
-/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */
-.ui-tooltip-focus{
-
-}
-
-/* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */
-.ui-tooltip-hover{
-
-}
-
-
-/*! Default tooltip style */
-.ui-tooltip-default .ui-tooltip-titlebar,
-.ui-tooltip-default .ui-tooltip-content{
-    border-color: #F1D031;
-    background-color: #FFFFA3;
-    color: #555;
-}
-
-.ui-tooltip-default .ui-tooltip-titlebar{
-    background-color: #FFEF93;
-}
-
-.ui-tooltip-default .ui-tooltip-icon{
-    border-color: #CCC;
-    background: #F1F1F1;
-    color: #777;
-}
-
-.ui-tooltip-default .ui-tooltip-titlebar .ui-state-hover{
-    border-color: #AAA;
-    color: #111;
-}
-
-/* Modal plugin */
-#qtip-overlay{
-    position: fixed;
-    left: -10000em;
-    top: -10000em;
-}
-
-/* Applied to modals with show.modal.blur set to true */
-#qtip-overlay.blurs{ cursor: pointer; }
-
-/* Change opacity of overlay here */
-#qtip-overlay div{
-    position: absolute;
-    left: 0; top: 0;
-    width: 100%; height: 100%;
-
-    background-color: black;
-
-    opacity: 0.7;
-    filter:alpha(opacity=70);
-    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
-}
-
-/* Tips plugin */
-.ui-tooltip .ui-tooltip-tip{
-    margin: 0 auto;
-    overflow: hidden;
-    z-index: 10;
-}
-
-.ui-tooltip .ui-tooltip-tip,
-.ui-tooltip .ui-tooltip-tip *{
-    position: absolute;
-
-    line-height: 0.1px !important;
-    font-size: 0.1px !important;
-    color: #123456;
-
-    background: transparent;
-    border: 0px dashed transparent;
-}
-
-.ui-tooltip .ui-tooltip-tip canvas{ top: 0; left: 0; }
-
-
-/*! Light tooltip style */
-.ui-tooltip-light .ui-tooltip-titlebar,
-.ui-tooltip-light .ui-tooltip-content{
-    border-color: #E2E2E2;
-    color: #454545;
-}
-
-.ui-tooltip-light .ui-tooltip-content{
-    background-color: white;
-}
-
-.ui-tooltip-light .ui-tooltip-titlebar{
-    background-color: #f1f1f1;
-}
-
-
-/*! Dark tooltip style */
-.ui-tooltip-dark .ui-tooltip-titlebar,
-.ui-tooltip-dark .ui-tooltip-content{
-    border-color: #303030;
-    color: #f3f3f3;
-}
-
-.ui-tooltip-dark .ui-tooltip-content{
-    background-color: #505050;
-}
-
-.ui-tooltip-dark .ui-tooltip-titlebar{
-    background-color: #404040;
-}
-
-.ui-tooltip-dark .ui-tooltip-icon{
-    border-color: #444;
-}
-
-.ui-tooltip-dark .ui-tooltip-titlebar .ui-state-hover{
-    border-color: #303030;
-}
-
-
-/*! Cream tooltip style */
-.ui-tooltip-cream .ui-tooltip-titlebar,
-.ui-tooltip-cream .ui-tooltip-content{
-    border-color: #F9E98E;
-    color: #A27D35;
-}
-
-.ui-tooltip-cream .ui-tooltip-content{
-    background-color: #FBF7AA;
-}
-
-.ui-tooltip-cream .ui-tooltip-titlebar{
-    background-color: #F0DE7D;
-}
-
-.ui-tooltip-cream .ui-state-default .ui-tooltip-icon{
-    background-position: -82px 0;
-}
-
-
-/*! Red tooltip style */
-.ui-tooltip-red .ui-tooltip-titlebar,
-.ui-tooltip-red .ui-tooltip-content{
-    border-color: #D95252;
-    color: #912323;
-}
-
-.ui-tooltip-red .ui-tooltip-content{
-    background-color: #F78B83;
-}
-
-.ui-tooltip-red .ui-tooltip-titlebar{
-    background-color: #F06D65;
-}
-
-.ui-tooltip-red .ui-state-default .ui-tooltip-icon{
-    background-position: -102px 0;
-}
-
-.ui-tooltip-red .ui-tooltip-icon{
-    border-color: #D95252;
-}
-
-.ui-tooltip-red .ui-tooltip-titlebar .ui-state-hover{
-    border-color: #D95252;
-}
-
-
-/*! Green tooltip style */
-.ui-tooltip-green .ui-tooltip-titlebar,
-.ui-tooltip-green .ui-tooltip-content{
-    border-color: #90D93F;
-    color: #3F6219;
-}
-
-.ui-tooltip-green .ui-tooltip-content{
-    background-color: #CAED9E;
-}
-
-.ui-tooltip-green .ui-tooltip-titlebar{
-    background-color: #B0DE78;
-}
-
-.ui-tooltip-green .ui-state-default .ui-tooltip-icon{
-    background-position: -42px 0;
-}
-
-
-/*! Blue tooltip style */
-.ui-tooltip-blue .ui-tooltip-titlebar,
-.ui-tooltip-blue .ui-tooltip-content{
-    border-color: #ADD9ED;
-    color: #5E99BD;
-}
-
-.ui-tooltip-blue .ui-tooltip-content{
-    background-color: #E5F6FE;
-}
-
-.ui-tooltip-blue .ui-tooltip-titlebar{
-    background-color: #D0E9F5;
-}
-
-.ui-tooltip-blue .ui-state-default .ui-tooltip-icon{
-    background-position: -2px 0;
-}
-
-/*! Add shadows to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE6+, Safari 2+ */
-.ui-tooltip-shadow{
-    -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
-    -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
-    box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
-}
-
-.ui-tooltip-shadow .ui-tooltip-titlebar,
-.ui-tooltip-shadow .ui-tooltip-content{
-    filter: progid:DXImageTransform.Microsoft.Shadow(Color='gray', Direction=135, Strength=3);
-    -ms-filter:"progid:DXImageTransform.Microsoft.Shadow(Color='gray', Direction=135, Strength=3)";
-
-    _margin-bottom: -3px; /* IE6 */
-    .margin-bottom: -3px; /* IE7 */
-}
-
-
-/*! Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */
-.ui-tooltip-rounded,
-.ui-tooltip-rounded .ui-tooltip-content,
-.ui-tooltip-tipsy,
-.ui-tooltip-tipsy .ui-tooltip-content,
-.ui-tooltip-youtube,
-.ui-tooltip-youtube .ui-tooltip-content{
-    -moz-border-radius: 4px;
-    -webkit-border-radius: 4px;
-    border-radius: 4px;
-}
-
-.ui-tooltip-rounded .ui-tooltip-titlebar,
-.ui-tooltip-tipsy .ui-tooltip-titlebar,
-.ui-tooltip-youtube .ui-tooltip-titlebar{
-    -moz-border-radius: 5px 5px 0 0;
-    -webkit-border-radius: 5px 5px 0 0;
-    border-radius: 5px 5px 0 0;
-}
-
-.ui-tooltip-rounded .ui-tooltip-titlebar + .ui-tooltip-content,
-.ui-tooltip-tipsy .ui-tooltip-titlebar + .ui-tooltip-content,
-.ui-tooltip-youtube .ui-tooltip-titlebar + .ui-tooltip-content{
-    -moz-border-radius: 0 0 5px 5px;
-    -webkit-border-radius: 0 0 5px 5px;
-    border-radius: 0 0 5px 5px;
-}
-
-
-/*! Youtube tooltip style */
-.ui-tooltip-youtube{
-    -webkit-box-shadow: 0 0 3px #333;
-    -moz-box-shadow: 0 0 3px #333;
-    box-shadow: 0 0 3px #333;
-}
-
-.ui-tooltip-youtube .ui-tooltip-titlebar,
-.ui-tooltip-youtube .ui-tooltip-content{
-    _margin-bottom: 0; /* IE6 */
-    .margin-bottom: 0; /* IE7 */
-
-    background: transparent;
-    background: rgba(0, 0, 0, 0.85);
-    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#D9000000,endColorstr=#D9000000);
-    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#D9000000,endColorstr=#D9000000)";
-
-    color: white;
-    border-color: #CCCCCC;
-}
-
-.ui-tooltip-youtube .ui-tooltip-icon{
-    border-color: #222;
-}
-
-.ui-tooltip-youtube .ui-tooltip-titlebar .ui-state-hover{
-    border-color: #303030;
-}
-
-
-/* jQuery TOOLS Tooltip style */
-.ui-tooltip-jtools{
-    background: #232323;
-    background: rgba(0, 0, 0, 0.7);
-    background-image: -moz-linear-gradient(top, #717171, #232323);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323));
-
-    border: 2px solid #ddd;
-    border: 2px solid rgba(241,241,241,1);
-
-    -moz-border-radius: 2px;
-    -webkit-border-radius: 2px;
-    border-radius: 2px;
-
-    -webkit-box-shadow: 0 0 12px #333;
-    -moz-box-shadow: 0 0 12px #333;
-    box-shadow: 0 0 12px #333;
-}
-
-/* IE Specific */
-.ui-tooltip-jtools .ui-tooltip-titlebar{
-    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A);
-    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)";
-}
-.ui-tooltip-jtools .ui-tooltip-content{
-    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323);
-    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)";
-}
-
-.ui-tooltip-jtools .ui-tooltip-titlebar,
-.ui-tooltip-jtools .ui-tooltip-content{
-    background: transparent;
-    color: white;
-    border: 0 dashed transparent;
-}
-
-.ui-tooltip-jtools .ui-tooltip-icon{
-    border-color: #555;
-}
-
-.ui-tooltip-jtools .ui-tooltip-titlebar .ui-state-hover{
-    border-color: #333;
-}
-
-
-/* Cluetip style */
-.ui-tooltip-cluetip{
-    -webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
-    -moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
-    box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
-}
-
-.ui-tooltip-cluetip .ui-tooltip-titlebar{
-    background-color: #87876A;
-    color: white;
-    border: 0 dashed transparent;
-}
-
-.ui-tooltip-cluetip .ui-tooltip-content{
-    background-color: #D9D9C2;
-    color: #111;
-    border: 0 dashed transparent;
-}
-
-.ui-tooltip-cluetip .ui-tooltip-icon{
-    border-color: #808064;
-}
-
-.ui-tooltip-cluetip .ui-tooltip-titlebar .ui-state-hover{
-    border-color: #696952;
-    color: #696952;
-}
-
-
-/* Tipsy style */
-.ui-tooltip-tipsy{
-    border: 0;
-}
-
-.ui-tooltip-tipsy .ui-tooltip-titlebar,
-.ui-tooltip-tipsy .ui-tooltip-content{
-    _margin-bottom: 0; /* IE6 */
-    .margin-bottom: 0; /* IE7 */
-
-    background: transparent;
-    background: rgba(0, 0, 0, .87);
-    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#D9000000,endColorstr=#D9000000);
-    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#D9000000,endColorstr=#D9000000)";
-
-    color: white;
-    border: 0px transparent;
-
-    font-size: 11px;
-    font-family: 'Lucida Grande', sans-serif;
-    font-weight: bold;
-    line-height: 16px;
-    text-shadow: 0 1px black;
-}
-
-.ui-tooltip-tipsy .ui-tooltip-titlebar{
-    padding: 6px 35px 0 10;
-}
-
-.ui-tooltip-tipsy .ui-tooltip-content{
-    padding: 6px 10;
-}
-
-.ui-tooltip-tipsy .ui-tooltip-icon{
-    border-color: #222;
-    text-shadow: none;
-}
-
-.ui-tooltip-tipsy .ui-tooltip-titlebar .ui-state-hover{
-    border-color: #303030;
-}
-
-
-/* Tipped style */
-.ui-tooltip-tipped{
-
-}
-
-.ui-tooltip-tipped .ui-tooltip-titlebar,
-.ui-tooltip-tipped .ui-tooltip-content{
-    border: 3px solid #959FA9;
-
-    filter: none; -ms-filter: none;
-}
-
-.ui-tooltip-tipped .ui-tooltip-titlebar{
-    background: #3A79B8;
-    background-image: -moz-linear-gradient(top, #3A79B8, #2E629D);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D));
-    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D);
-    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)";
-
-    color: white;
-    font-weight: normal;
-    font-family: serif;
-
-    border-bottom-width: 0;
-    -moz-border-radius: 3px 3px 0 0;
-    -webkit-border-radius: 3px 3px 0 0;
-    border-radius: 3px 3px 0 0;
-}
-
-.ui-tooltip-tipped .ui-tooltip-content{
-    background-color: #F9F9F9;
-    color: #454545;
-
-    -moz-border-radius: 0 0 3px 3px;
-    -webkit-border-radius: 0 0 3px 3px;
-    border-radius: 0 0 3px 3px;
-}
-
-.ui-tooltip-tipped .ui-tooltip-icon{
-    border: 2px solid #285589;
-    background: #285589;
-}
-
-.ui-tooltip-tipped .ui-tooltip-icon .ui-icon{
-    background-color: #FBFBFB;
-    color: #555;
-}
-
-/* IE9 fix - removes all filters */
-.ui-tooltip:not(.ie9haxors) div.ui-tooltip-content,
-.ui-tooltip:not(.ie9haxors) div.ui-tooltip-titlebar{
-    filter: none;
-    -ms-filter: none;
-}
-

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/57b4178f/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.css
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.css
new file mode 100644
index 0000000..27b9729
--- /dev/null
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/qtip2/jquery.qtip.min.css
@@ -0,0 +1,3 @@
+/* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */
+
+.qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr;box-shadow:none;padding:0}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:700}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;z-index:11;cursor:pointer;outline:0;border:1px solid transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-icon .ui-icon,.qtip-titlebar .ui-icon{display:block;text-indent:-1000em;direction:ltr}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;line-height:14px;text-align:center;text-indent:0;font:400 bold 10px/13px Tahoma,sans
 -serif;color:inherit;background:-100em -100em no-repeat}.qtip-default{border:1px solid #F1D031;background-color:#FFFFA3;color:#555}.qtip-default .qtip-titlebar{background-color:#FFEF93}.qtip-default .qtip-icon{border-color:#CCC;background:#F1F1F1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111}.qtip-light{background-color:#fff;border-color:#E2E2E2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1}.qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-cream{background-color:#FBF7AA;border-color:#F9E98E;color:#A27D35}.qtip-cream .qtip-titlebar{background-color:#F0DE7D}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0}.qtip-red{background-color:#F78B83;border-color:#D95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#F06D65}.qtip-red .qtip-
 close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon,.qtip-red .qtip-titlebar .ui-state-hover{border-color:#D95252}.qtip-green{background-color:#CAED9E;border-color:#90D93F;color:#3F6219}.qtip-green .qtip-titlebar{background-color:#B0DE78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0}.qtip-blue{background-color:#E5F6FE;border-color:#ADD9ED;color:#5E99BD}.qtip-blue .qtip-titlebar{background-color:#D0E9F5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,.15)}.qtip-bootstrap,.qtip-rounded,.qtip-tipsy{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-rounded .qtip-titlebar{-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-
 moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:#fff;border:0 solid transparent;background:#4A4A4A;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,#000));background-image:-webkit-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-moz-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-ms-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-o-linear-gradient(top,#4A4A4A 0,#000 100%)}.qtip-youtube .qtip-titlebar{background-color:transparent}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,.7);background
 -image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid rgba(241,241,241,1);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"}.qtip-jtools .qtip-content,
 .qtip-jtools .qtip-titlebar{background:0 0;color:#fff;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,.4);box-shadow:4px 4px 5px rgba(0,0,0,.4);background-color:#D9D9C2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876A;color:#fff;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:#000;background:rgba(0,0,0,.87);color:#fff;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px;text-shadow:0 1px #000}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10px;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10px}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qt
 ip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959FA9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#F9F9F9;color:#454545;font-weight:400;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:#fff;background:#3A79B8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3A79B8),to(#2E629D));background-image:-webkit-linear-gradient(top,#3A79B8,#2E629D);background-image:-moz-linear-gradient(top,#3A79B8,#2E629D);background-image:-ms-linear-gradient(top,#3A79B8,#2E629D);background-image:-o-linear-gradient(top,#3A79B8,#2E629D);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#FBFBFB;color:#555}.qtip-bootstrap{font-si
 ze:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:0 0}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:700;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;f
 ilter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}.qtip .qtip-tip,x:-o-prefocus{visibility:hidden}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml,.qtip .qtip-tip canvas{position:absolute;color:#123456;background:0 0;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:0;top:0;width:100%;height:100%}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70);-ms-filter:"alpha(Opacity=70)"}.qtipmodal-ie6fix{position:absolute!important}
\ No newline at end of file


[12/50] [abbrv] incubator-nifi git commit: NIFI-27: - Latest version of slickgrid.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/4c959f72/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.dataview.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.dataview.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.dataview.js
index 07f5900..f1c1b5e 100755
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.dataview.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/slickgrid/slick.dataview.js
@@ -1,914 +1,1126 @@
 (function ($) {
-    $.extend(true, window, {
-        Slick: {
-            Data: {
-                DataView: DataView,
-                Aggregators: {
-                    Avg: AvgAggregator,
-                    Min: MinAggregator,
-                    Max: MaxAggregator,
-                    Sum: SumAggregator
-                }
-            }
+  $.extend(true, window, {
+    Slick: {
+      Data: {
+        DataView: DataView,
+        Aggregators: {
+          Avg: AvgAggregator,
+          Min: MinAggregator,
+          Max: MaxAggregator,
+          Sum: SumAggregator
         }
-    });
-
+      }
+    }
+  });
+
+
+  /***
+   * A sample Model implementation.
+   * Provides a filtered view of the underlying data.
+   *
+   * Relies on the data item having an "id" property uniquely identifying it.
+   */
+  function DataView(options) {
+    var self = this;
+
+    var defaults = {
+      groupItemMetadataProvider: null,
+      inlineFilters: false
+    };
+
+
+    // private
+    var idProperty = "id";  // property holding a unique row id
+    var items = [];         // data by index
+    var rows = [];          // data by row
+    var idxById = {};       // indexes by id
+    var rowsById = null;    // rows by id; lazy-calculated
+    var filter = null;      // filter function
+    var updated = null;     // updated item ids
+    var suspend = false;    // suspends the recalculation
+    var sortAsc = true;
+    var fastSortField;
+    var sortComparer;
+    var refreshHints = {};
+    var prevRefreshHints = {};
+    var filterArgs;
+    var filteredItems = [];
+    var compiledFilter;
+    var compiledFilterWithCaching;
+    var filterCache = [];
+
+    // grouping
+    var groupingInfoDefaults = {
+      getter: null,
+      formatter: null,
+      comparer: function(a, b) { return a.value - b.value; },
+      predefinedValues: [],
+      aggregators: [],
+      aggregateEmpty: false,
+      aggregateCollapsed: false,
+      aggregateChildGroups: false,
+      collapsed: false,
+      displayTotalsRow: true,
+      lazyTotalsCalculation: false
+    };
+    var groupingInfos = [];
+    var groups = [];
+    var toggledGroupsByLevel = [];
+    var groupingDelimiter = ':|:';
+
+    var pagesize = 0;
+    var pagenum = 0;
+    var totalRows = 0;
+
+    // events
+    var onRowCountChanged = new Slick.Event();
+    var onRowsChanged = new Slick.Event();
+    var onPagingInfoChanged = new Slick.Event();
+
+    options = $.extend(true, {}, defaults, options);
+
+
+    function beginUpdate() {
+      suspend = true;
+    }
+
+    function endUpdate() {
+      suspend = false;
+      refresh();
+    }
+
+    function setRefreshHints(hints) {
+      refreshHints = hints;
+    }
+
+    function setFilterArgs(args) {
+      filterArgs = args;
+    }
+
+    function updateIdxById(startingIndex) {
+      startingIndex = startingIndex || 0;
+      var id;
+      for (var i = startingIndex, l = items.length; i < l; i++) {
+        id = items[i][idProperty];
+        if (id === undefined) {
+          throw "Each data element must implement a unique 'id' property";
+        }
+        idxById[id] = i;
+      }
+    }
+
+    function ensureIdUniqueness() {
+      var id;
+      for (var i = 0, l = items.length; i < l; i++) {
+        id = items[i][idProperty];
+        if (id === undefined || idxById[id] !== i) {
+          throw "Each data element must implement a unique 'id' property";
+        }
+      }
+    }
+
+    function getItems() {
+      return items;
+    }
+
+    function setItems(data, objectIdProperty) {
+      if (objectIdProperty !== undefined) {
+        idProperty = objectIdProperty;
+      }
+      items = filteredItems = data;
+      idxById = {};
+      updateIdxById();
+      ensureIdUniqueness();
+      refresh();
+    }
+
+    function setPagingOptions(args) {
+      if (args.pageSize != undefined) {
+        pagesize = args.pageSize;
+        pagenum = pagesize ? Math.min(pagenum, Math.max(0, Math.ceil(totalRows / pagesize) - 1)) : 0;
+      }
+
+      if (args.pageNum != undefined) {
+        pagenum = Math.min(args.pageNum, Math.max(0, Math.ceil(totalRows / pagesize) - 1));
+      }
+
+      onPagingInfoChanged.notify(getPagingInfo(), null, self);
+
+      refresh();
+    }
+
+    function getPagingInfo() {
+      var totalPages = pagesize ? Math.max(1, Math.ceil(totalRows / pagesize)) : 1;
+      return {pageSize: pagesize, pageNum: pagenum, totalRows: totalRows, totalPages: totalPages};
+    }
+
+    function sort(comparer, ascending) {
+      sortAsc = ascending;
+      sortComparer = comparer;
+      fastSortField = null;
+      if (ascending === false) {
+        items.reverse();
+      }
+      items.sort(comparer);
+      if (ascending === false) {
+        items.reverse();
+      }
+      idxById = {};
+      updateIdxById();
+      refresh();
+    }
 
     /***
-     * A sample Model implementation.
-     * Provides a filtered view of the underlying data.
-     *
-     * Relies on the data item having an "id" property uniquely identifying it.
+     * Provides a workaround for the extremely slow sorting in IE.
+     * Does a [lexicographic] sort on a give column by temporarily overriding Object.prototype.toString
+     * to return the value of that field and then doing a native Array.sort().
      */
-    function DataView(options) {
-        var self = this;
-
-        var defaults = {
-            groupItemMetadataProvider: null,
-            inlineFilters: false
-        };
-
-
-        // private
-        var idProperty = "id";  // property holding a unique row id
-        var items = [];         // data by index
-        var rows = [];          // data by row
-        var idxById = {};       // indexes by id
-        var rowsById = null;    // rows by id; lazy-calculated
-        var filter = null;      // filter function
-        var updated = null;     // updated item ids
-        var suspend = false;    // suspends the recalculation
-        var sortAsc = true;
-        var fastSortField;
-        var sortComparer;
-        var refreshHints = {};
-        var prevRefreshHints = {};
-        var filterArgs;
-        var filteredItems = [];
-        var compiledFilter;
-        var compiledFilterWithCaching;
-        var filterCache = [];
-
-        // grouping
-        var groupingGetter;
-        var groupingGetterIsAFn;
-        var groupingFormatter;
-        var groupingComparer;
-        var groups = [];
-        var collapsedGroups = {};
-        var aggregators;
-        var aggregateCollapsed = false;
-        var compiledAccumulators;
-
-        var pagesize = 0;
-        var pagenum = 0;
-        var totalRows = 0;
-
-        // events
-        var onRowCountChanged = new Slick.Event();
-        var onRowsChanged = new Slick.Event();
-        var onPagingInfoChanged = new Slick.Event();
-
-        options = $.extend(true, {}, defaults, options);
-
-
-        function beginUpdate() {
-            suspend = true;
-        }
-
-        function endUpdate() {
-            suspend = false;
-            refresh();
-        }
-
-        function setRefreshHints(hints) {
-            refreshHints = hints;
-        }
-
-        function setFilterArgs(args) {
-            filterArgs = args;
-        }
-
-        function updateIdxById(startingIndex) {
-            startingIndex = startingIndex || 0;
-            var id;
-            for (var i = startingIndex, l = items.length; i < l; i++) {
-                id = items[i][idProperty];
-                if (id === undefined) {
-                    throw "Each data element must implement a unique 'id' property";
-                }
-                idxById[id] = i;
-            }
+    function fastSort(field, ascending) {
+      sortAsc = ascending;
+      fastSortField = field;
+      sortComparer = null;
+      var oldToString = Object.prototype.toString;
+      Object.prototype.toString = (typeof field == "function") ? field : function () {
+        return this[field]
+      };
+      // an extra reversal for descending sort keeps the sort stable
+      // (assuming a stable native sort implementation, which isn't true in some cases)
+      if (ascending === false) {
+        items.reverse();
+      }
+      items.sort();
+      Object.prototype.toString = oldToString;
+      if (ascending === false) {
+        items.reverse();
+      }
+      idxById = {};
+      updateIdxById();
+      refresh();
+    }
+
+    function reSort() {
+      if (sortComparer) {
+        sort(sortComparer, sortAsc);
+      } else if (fastSortField) {
+        fastSort(fastSortField, sortAsc);
+      }
+    }
+
+    function setFilter(filterFn) {
+      filter = filterFn;
+      if (options.inlineFilters) {
+        compiledFilter = compileFilter();
+        compiledFilterWithCaching = compileFilterWithCaching();
+      }
+      refresh();
+    }
+
+    function getGrouping() {
+      return groupingInfos;
+    }
+
+    function setGrouping(groupingInfo) {
+      if (!options.groupItemMetadataProvider) {
+        options.groupItemMetadataProvider = new Slick.Data.GroupItemMetadataProvider();
+      }
+
+      groups = [];
+      toggledGroupsByLevel = [];
+      groupingInfo = groupingInfo || [];
+      groupingInfos = (groupingInfo instanceof Array) ? groupingInfo : [groupingInfo];
+
+      for (var i = 0; i < groupingInfos.length; i++) {
+        var gi = groupingInfos[i] = $.extend(true, {}, groupingInfoDefaults, groupingInfos[i]);
+        gi.getterIsAFn = typeof gi.getter === "function";
+
+        // pre-compile accumulator loops
+        gi.compiledAccumulators = [];
+        var idx = gi.aggregators.length;
+        while (idx--) {
+          gi.compiledAccumulators[idx] = compileAccumulatorLoop(gi.aggregators[idx]);
         }
 
-        function ensureIdUniqueness() {
-            var id;
-            for (var i = 0, l = items.length; i < l; i++) {
-                id = items[i][idProperty];
-                if (id === undefined || idxById[id] !== i) {
-                    throw "Each data element must implement a unique 'id' property";
-                }
-            }
-        }
+        toggledGroupsByLevel[i] = {};
+      }
 
-        function getItems() {
-            return items;
-        }
+      refresh();
+    }
 
-        function setItems(data, objectIdProperty) {
-            if (objectIdProperty !== undefined) {
-                idProperty = objectIdProperty;
-            }
-            items = filteredItems = data;
-            idxById = {};
-            updateIdxById();
-            ensureIdUniqueness();
-            refresh();
+    /**
+     * @deprecated Please use {@link setGrouping}.
+     */
+    function groupBy(valueGetter, valueFormatter, sortComparer) {
+      if (valueGetter == null) {
+        setGrouping([]);
+        return;
+      }
+
+      setGrouping({
+        getter: valueGetter,
+        formatter: valueFormatter,
+        comparer: sortComparer
+      });
+    }
+
+    /**
+     * @deprecated Please use {@link setGrouping}.
+     */
+    function setAggregators(groupAggregators, includeCollapsed) {
+      if (!groupingInfos.length) {
+        throw new Error("At least one grouping must be specified before calling setAggregators().");
+      }
+
+      groupingInfos[0].aggregators = groupAggregators;
+      groupingInfos[0].aggregateCollapsed = includeCollapsed;
+
+      setGrouping(groupingInfos);
+    }
+
+    function getItemByIdx(i) {
+      return items[i];
+    }
+
+    function getIdxById(id) {
+      return idxById[id];
+    }
+
+    function ensureRowsByIdCache() {
+      if (!rowsById) {
+        rowsById = {};
+        for (var i = 0, l = rows.length; i < l; i++) {
+          rowsById[rows[i][idProperty]] = i;
         }
-
-        function setPagingOptions(args) {
-            if (args.pageSize != undefined) {
-                pagesize = args.pageSize;
-                pagenum = pagesize ? Math.min(pagenum, Math.max(0, Math.ceil(totalRows / pagesize) - 1)) : 0;
-            }
-
-            if (args.pageNum != undefined) {
-                pagenum = Math.min(args.pageNum, Math.max(0, Math.ceil(totalRows / pagesize) - 1));
-            }
-
-            onPagingInfoChanged.notify(getPagingInfo(), null, self);
-
-            refresh();
+      }
+    }
+
+    function getRowById(id) {
+      ensureRowsByIdCache();
+      return rowsById[id];
+    }
+
+    function getItemById(id) {
+      return items[idxById[id]];
+    }
+
+    function mapIdsToRows(idArray) {
+      var rows = [];
+      ensureRowsByIdCache();
+      for (var i = 0, l = idArray.length; i < l; i++) {
+        var row = rowsById[idArray[i]];
+        if (row != null) {
+          rows[rows.length] = row;
         }
-
-        function getPagingInfo() {
-            var totalPages = pagesize ? Math.max(1, Math.ceil(totalRows / pagesize)) : 1;
-            return {pageSize: pagesize, pageNum: pagenum, totalRows: totalRows, totalPages: totalPages};
+      }
+      return rows;
+    }
+
+    function mapRowsToIds(rowArray) {
+      var ids = [];
+      for (var i = 0, l = rowArray.length; i < l; i++) {
+        if (rowArray[i] < rows.length) {
+          ids[ids.length] = rows[rowArray[i]][idProperty];
         }
-
-        function sort(comparer, ascending) {
-            sortAsc = ascending;
-            sortComparer = comparer;
-            fastSortField = null;
-            if (ascending === false) {
-                items.reverse();
-            }
-            items.sort(comparer);
-            if (ascending === false) {
-                items.reverse();
-            }
-            idxById = {};
-            updateIdxById();
-            refresh();
-        }
-
-        /***
-         * Provides a workaround for the extremely slow sorting in IE.
-         * Does a [lexicographic] sort on a give column by temporarily overriding Object.prototype.toString
-         * to return the value of that field and then doing a native Array.sort().
-         */
-        function fastSort(field, ascending) {
-            sortAsc = ascending;
-            fastSortField = field;
-            sortComparer = null;
-            var oldToString = Object.prototype.toString;
-            Object.prototype.toString = (typeof field == "function") ? field : function () {
-                return this[field]
-            };
-            // an extra reversal for descending sort keeps the sort stable
-            // (assuming a stable native sort implementation, which isn't true in some cases)
-            if (ascending === false) {
-                items.reverse();
-            }
-            items.sort();
-            Object.prototype.toString = oldToString;
-            if (ascending === false) {
-                items.reverse();
-            }
-            idxById = {};
-            updateIdxById();
-            refresh();
+      }
+      return ids;
+    }
+
+    function updateItem(id, item) {
+      if (idxById[id] === undefined || id !== item[idProperty]) {
+        throw "Invalid or non-matching id";
+      }
+      items[idxById[id]] = item;
+      if (!updated) {
+        updated = {};
+      }
+      updated[id] = true;
+      refresh();
+    }
+
+    function insertItem(insertBefore, item) {
+      items.splice(insertBefore, 0, item);
+      updateIdxById(insertBefore);
+      refresh();
+    }
+
+    function addItem(item) {
+      items.push(item);
+      updateIdxById(items.length - 1);
+      refresh();
+    }
+
+    function deleteItem(id) {
+      var idx = idxById[id];
+      if (idx === undefined) {
+        throw "Invalid id";
+      }
+      delete idxById[id];
+      items.splice(idx, 1);
+      updateIdxById(idx);
+      refresh();
+    }
+
+    function getLength() {
+      return rows.length;
+    }
+
+    function getItem(i) {
+      var item = rows[i];
+
+      // if this is a group row, make sure totals are calculated and update the title
+      if (item && item.__group && item.totals && !item.totals.initialized) {
+        var gi = groupingInfos[item.level];
+        if (!gi.displayTotalsRow) {
+          calculateTotals(item.totals);
+          item.title = gi.formatter ? gi.formatter(item) : item.value;
         }
-
-        function reSort() {
-            if (sortComparer) {
-                sort(sortComparer, sortAsc);
-            } else if (fastSortField) {
-                fastSort(fastSortField, sortAsc);
-            }
+      }
+      // if this is a totals row, make sure it's calculated
+      else if (item && item.__groupTotals && !item.initialized) {
+        calculateTotals(item);
+      }
+
+      return item;
+    }
+
+    function getItemMetadata(i) {
+      var item = rows[i];
+      if (item === undefined) {
+        return null;
+      }
+
+      // overrides for grouping rows
+      if (item.__group) {
+        return options.groupItemMetadataProvider.getGroupRowMetadata(item);
+      }
+
+      // overrides for totals rows
+      if (item.__groupTotals) {
+        return options.groupItemMetadataProvider.getTotalsRowMetadata(item);
+      }
+
+      return null;
+    }
+
+    function expandCollapseAllGroups(level, collapse) {
+      if (level == null) {
+        for (var i = 0; i < groupingInfos.length; i++) {
+          toggledGroupsByLevel[i] = {};
+          groupingInfos[i].collapsed = collapse;
         }
+      } else {
+        toggledGroupsByLevel[level] = {};
+        groupingInfos[level].collapsed = collapse;
+      }
+      refresh();
+    }
+
+    /**
+     * @param level {Number} Optional level to collapse.  If not specified, applies to all levels.
+     */
+    function collapseAllGroups(level) {
+      expandCollapseAllGroups(level, true);
+    }
 
-        function setFilter(filterFn) {
-            filter = filterFn;
-            if (options.inlineFilters) {
-                compiledFilter = compileFilter();
-                compiledFilterWithCaching = compileFilterWithCaching();
-            }
-            refresh();
+    /**
+     * @param level {Number} Optional level to expand.  If not specified, applies to all levels.
+     */
+    function expandAllGroups(level) {
+      expandCollapseAllGroups(level, false);
+    }
+
+    function expandCollapseGroup(level, groupingKey, collapse) {
+      toggledGroupsByLevel[level][groupingKey] = groupingInfos[level].collapsed ^ collapse;
+      refresh();
+    }
+
+    /**
+     * @param varArgs Either a Slick.Group's "groupingKey" property, or a
+     *     variable argument list of grouping values denoting a unique path to the row.  For
+     *     example, calling collapseGroup('high', '10%') will collapse the '10%' subgroup of
+     *     the 'high' group.
+     */
+    function collapseGroup(varArgs) {
+      var args = Array.prototype.slice.call(arguments);
+      var arg0 = args[0];
+      if (args.length == 1 && arg0.indexOf(groupingDelimiter) != -1) {
+        expandCollapseGroup(arg0.split(groupingDelimiter).length - 1, arg0, true);
+      } else {
+        expandCollapseGroup(args.length - 1, args.join(groupingDelimiter), true);
+      }
+    }
+
+    /**
+     * @param varArgs Either a Slick.Group's "groupingKey" property, or a
+     *     variable argument list of grouping values denoting a unique path to the row.  For
+     *     example, calling expandGroup('high', '10%') will expand the '10%' subgroup of
+     *     the 'high' group.
+     */
+    function expandGroup(varArgs) {
+      var args = Array.prototype.slice.call(arguments);
+      var arg0 = args[0];
+      if (args.length == 1 && arg0.indexOf(groupingDelimiter) != -1) {
+        expandCollapseGroup(arg0.split(groupingDelimiter).length - 1, arg0, false);
+      } else {
+        expandCollapseGroup(args.length - 1, args.join(groupingDelimiter), false);
+      }
+    }
+
+    function getGroups() {
+      return groups;
+    }
+
+    function extractGroups(rows, parentGroup) {
+      var group;
+      var val;
+      var groups = [];
+      var groupsByVal = {};
+      var r;
+      var level = parentGroup ? parentGroup.level + 1 : 0;
+      var gi = groupingInfos[level];
+
+      for (var i = 0, l = gi.predefinedValues.length; i < l; i++) {
+        val = gi.predefinedValues[i];
+        group = groupsByVal[val];
+        if (!group) {
+          group = new Slick.Group();
+          group.value = val;
+          group.level = level;
+          group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : '') + val;
+          groups[groups.length] = group;
+          groupsByVal[val] = group;
         }
-
-        function groupBy(valueGetter, valueFormatter, sortComparer) {
-            if (!options.groupItemMetadataProvider) {
-                options.groupItemMetadataProvider = new Slick.Data.GroupItemMetadataProvider();
-            }
-
-            groupingGetter = valueGetter;
-            groupingGetterIsAFn = typeof groupingGetter === "function";
-            groupingFormatter = valueFormatter;
-            groupingComparer = sortComparer;
-            collapsedGroups = {};
-            groups = [];
-            refresh();
-        }
-
-        function setAggregators(groupAggregators, includeCollapsed) {
-            aggregators = groupAggregators;
-            aggregateCollapsed = (includeCollapsed !== undefined)
-                    ? includeCollapsed : aggregateCollapsed;
-
-            // pre-compile accumulator loops
-            compiledAccumulators = [];
-            var idx = aggregators.length;
-            while (idx--) {
-                compiledAccumulators[idx] = compileAccumulatorLoop(aggregators[idx]);
-            }
-
-            refresh();
+      }
+
+      for (var i = 0, l = rows.length; i < l; i++) {
+        r = rows[i];
+        val = gi.getterIsAFn ? gi.getter(r) : r[gi.getter];
+        group = groupsByVal[val];
+        if (!group) {
+          group = new Slick.Group();
+          group.value = val;
+          group.level = level;
+          group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : '') + val;
+          groups[groups.length] = group;
+          groupsByVal[val] = group;
         }
 
-        function getItemByIdx(i) {
-            return items[i];
-        }
+        group.rows[group.count++] = r;
+      }
 
-        function getIdxById(id) {
-            return idxById[id];
+      if (level < groupingInfos.length - 1) {
+        for (var i = 0; i < groups.length; i++) {
+          group = groups[i];
+          group.groups = extractGroups(group.rows, group);
         }
-
-        function ensureRowsByIdCache() {
-            if (!rowsById) {
-                rowsById = {};
-                for (var i = 0, l = rows.length; i < l; i++) {
-                    rowsById[rows[i][idProperty]] = i;
-                }
-            }
+      }      
+
+      groups.sort(groupingInfos[level].comparer);
+
+      return groups;
+    }
+
+    function calculateTotals(totals) {
+      var group = totals.group;
+      var gi = groupingInfos[group.level];
+      var isLeafLevel = (group.level == groupingInfos.length);
+      var agg, idx = gi.aggregators.length;
+
+      if (!isLeafLevel && gi.aggregateChildGroups) {
+        // make sure all the subgroups are calculated
+        var i = group.groups.length;
+        while (i--) {
+          if (!group.groups[i].initialized) {
+            calculateTotals(group.groups[i]);
+          }
         }
-
-        function getRowById(id) {
-            ensureRowsByIdCache();
-            return rowsById[id];
+      }
+
+      while (idx--) {
+        agg = gi.aggregators[idx];
+        agg.init();
+        if (!isLeafLevel && gi.aggregateChildGroups) {
+          gi.compiledAccumulators[idx].call(agg, group.groups);
+        } else {
+          gi.compiledAccumulators[idx].call(agg, group.rows);
         }
-
-        function getItemById(id) {
-            return items[idxById[id]];
+        agg.storeResult(totals);
+      }
+      totals.initialized = true;
+    }
+
+    function addGroupTotals(group) {
+      var gi = groupingInfos[group.level];
+      var totals = new Slick.GroupTotals();
+      totals.group = group;
+      group.totals = totals;
+      if (!gi.lazyTotalsCalculation) {
+        calculateTotals(totals);
+      }
+    }
+
+    function addTotals(groups, level) {
+      level = level || 0;
+      var gi = groupingInfos[level];
+      var groupCollapsed = gi.collapsed;
+      var toggledGroups = toggledGroupsByLevel[level];      
+      var idx = groups.length, g;
+      while (idx--) {
+        g = groups[idx];
+
+        if (g.collapsed && !gi.aggregateCollapsed) {
+          continue;
         }
 
-        function mapIdsToRows(idArray) {
-            var rows = [];
-            ensureRowsByIdCache();
-            for (var i = 0; i < idArray.length; i++) {
-                var row = rowsById[idArray[i]];
-                if (row != null) {
-                    rows[rows.length] = row;
-                }
-            }
-            return rows;
+        // Do a depth-first aggregation so that parent group aggregators can access subgroup totals.
+        if (g.groups) {
+          addTotals(g.groups, level + 1);
         }
 
-        function mapRowsToIds(rowArray) {
-            var ids = [];
-            for (var i = 0; i < rowArray.length; i++) {
-                if (rowArray[i] < rows.length) {
-                    ids[ids.length] = rows[rowArray[i]][idProperty];
-                }
-            }
-            return ids;
+        if (gi.aggregators.length && (
+            gi.aggregateEmpty || g.rows.length || (g.groups && g.groups.length))) {
+          addGroupTotals(g);
         }
 
-        function updateItem(id, item) {
-            if (idxById[id] === undefined || id !== item[idProperty]) {
-                throw "Invalid or non-matching id";
-            }
-            items[idxById[id]] = item;
-            if (!updated) {
-                updated = {};
-            }
-            updated[id] = true;
-            refresh();
+        g.collapsed = groupCollapsed ^ toggledGroups[g.groupingKey];
+        g.title = gi.formatter ? gi.formatter(g) : g.value;
+      }
+    } 
+
+    function flattenGroupedRows(groups, level) {
+      level = level || 0;
+      var gi = groupingInfos[level];
+      var groupedRows = [], rows, gl = 0, g;
+      for (var i = 0, l = groups.length; i < l; i++) {
+        g = groups[i];
+        groupedRows[gl++] = g;
+
+        if (!g.collapsed) {
+          rows = g.groups ? flattenGroupedRows(g.groups, level + 1) : g.rows;
+          for (var j = 0, jj = rows.length; j < jj; j++) {
+            groupedRows[gl++] = rows[j];
+          }
         }
 
-        function insertItem(insertBefore, item) {
-            items.splice(insertBefore, 0, item);
-            updateIdxById(insertBefore);
-            refresh();
+        if (g.totals && gi.displayTotalsRow && (!g.collapsed || gi.aggregateCollapsed)) {
+          groupedRows[gl++] = g.totals;
         }
-
-        function addItem(item) {
-            items.push(item);
-            updateIdxById(items.length - 1);
-            refresh();
+      }
+      return groupedRows;
+    }
+
+    function getFunctionInfo(fn) {
+      var fnRegex = /^function[^(]*\(([^)]*)\)\s*{([\s\S]*)}$/;
+      var matches = fn.toString().match(fnRegex);
+      return {
+        params: matches[1].split(","),
+        body: matches[2]
+      };
+    }
+
+    function compileAccumulatorLoop(aggregator) {
+      var accumulatorInfo = getFunctionInfo(aggregator.accumulate);
+      var fn = new Function(
+          "_items",
+          "for (var " + accumulatorInfo.params[0] + ", _i=0, _il=_items.length; _i<_il; _i++) {" +
+              accumulatorInfo.params[0] + " = _items[_i]; " +
+              accumulatorInfo.body +
+          "}"
+      );
+      fn.displayName = fn.name = "compiledAccumulatorLoop";
+      return fn;
+    }
+
+    function compileFilter() {
+      var filterInfo = getFunctionInfo(filter);
+
+      var filterBody = filterInfo.body
+          .replace(/return false\s*([;}]|$)/gi, "{ continue _coreloop; }$1")
+          .replace(/return true\s*([;}]|$)/gi, "{ _retval[_idx++] = $item$; continue _coreloop; }$1")
+          .replace(/return ([^;}]+?)\s*([;}]|$)/gi,
+          "{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2");
+
+      // This preserves the function template code after JS compression,
+      // so that replace() commands still work as expected.
+      var tpl = [
+        //"function(_items, _args) { ",
+        "var _retval = [], _idx = 0; ",
+        "var $item$, $args$ = _args; ",
+        "_coreloop: ",
+        "for (var _i = 0, _il = _items.length; _i < _il; _i++) { ",
+        "$item$ = _items[_i]; ",
+        "$filter$; ",
+        "} ",
+        "return _retval; "
+        //"}"
+      ].join("");
+      tpl = tpl.replace(/\$filter\$/gi, filterBody);
+      tpl = tpl.replace(/\$item\$/gi, filterInfo.params[0]);
+      tpl = tpl.replace(/\$args\$/gi, filterInfo.params[1]);
+
+      var fn = new Function("_items,_args", tpl);
+      fn.displayName = fn.name = "compiledFilter";
+      return fn;
+    }
+
+    function compileFilterWithCaching() {
+      var filterInfo = getFunctionInfo(filter);
+
+      var filterBody = filterInfo.body
+          .replace(/return false\s*([;}]|$)/gi, "{ continue _coreloop; }$1")
+          .replace(/return true\s*([;}]|$)/gi, "{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1")
+          .replace(/return ([^;}]+?)\s*([;}]|$)/gi,
+          "{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }$2");
+
+      // This preserves the function template code after JS compression,
+      // so that replace() commands still work as expected.
+      var tpl = [
+        //"function(_items, _args, _cache) { ",
+        "var _retval = [], _idx = 0; ",
+        "var $item$, $args$ = _args; ",
+        "_coreloop: ",
+        "for (var _i = 0, _il = _items.length; _i < _il; _i++) { ",
+        "$item$ = _items[_i]; ",
+        "if (_cache[_i]) { ",
+        "_retval[_idx++] = $item$; ",
+        "continue _coreloop; ",
+        "} ",
+        "$filter$; ",
+        "} ",
+        "return _retval; "
+        //"}"
+      ].join("");
+      tpl = tpl.replace(/\$filter\$/gi, filterBody);
+      tpl = tpl.replace(/\$item\$/gi, filterInfo.params[0]);
+      tpl = tpl.replace(/\$args\$/gi, filterInfo.params[1]);
+
+      var fn = new Function("_items,_args,_cache", tpl);
+      fn.displayName = fn.name = "compiledFilterWithCaching";
+      return fn;
+    }
+
+    function uncompiledFilter(items, args) {
+      var retval = [], idx = 0;
+
+      for (var i = 0, ii = items.length; i < ii; i++) {
+        if (filter(items[i], args)) {
+          retval[idx++] = items[i];
         }
+      }
 
-        function deleteItem(id) {
-            var idx = idxById[id];
-            if (idx === undefined) {
-                throw "Invalid id";
-            }
-            delete idxById[id];
-            items.splice(idx, 1);
-            updateIdxById(idx);
-            refresh();
-        }
+      return retval;
+    }
 
-        function getLength() {
-            return rows.length;
-        }
+    function uncompiledFilterWithCaching(items, args, cache) {
+      var retval = [], idx = 0, item;
 
-        function getItem(i) {
-            return rows[i];
+      for (var i = 0, ii = items.length; i < ii; i++) {
+        item = items[i];
+        if (cache[i]) {
+          retval[idx++] = item;
+        } else if (filter(item, args)) {
+          retval[idx++] = item;
+          cache[i] = true;
         }
-
-        function getItemMetadata(i) {
-            var item = rows[i];
-            if (item === undefined) {
-                return null;
-            }
-
-            // overrides for group rows
-            if (item.__group) {
-                return options.groupItemMetadataProvider.getGroupRowMetadata(item);
-            }
-
-            // overrides for totals rows
-            if (item.__groupTotals) {
-                return options.groupItemMetadataProvider.getTotalsRowMetadata(item);
-            }
-
-            return null;
+      }
+
+      return retval;
+    }
+
+    function getFilteredAndPagedItems(items) {
+      if (filter) {
+        var batchFilter = options.inlineFilters ? compiledFilter : uncompiledFilter;
+        var batchFilterWithCaching = options.inlineFilters ? compiledFilterWithCaching : uncompiledFilterWithCaching;
+
+        if (refreshHints.isFilterNarrowing) {
+          filteredItems = batchFilter(filteredItems, filterArgs);
+        } else if (refreshHints.isFilterExpanding) {
+          filteredItems = batchFilterWithCaching(items, filterArgs, filterCache);
+        } else if (!refreshHints.isFilterUnchanged) {
+          filteredItems = batchFilter(items, filterArgs);
         }
-
-        function collapseGroup(groupingValue) {
-            collapsedGroups[groupingValue] = true;
-            refresh();
+      } else {
+        // special case:  if not filtering and not paging, the resulting
+        // rows collection needs to be a copy so that changes due to sort
+        // can be caught
+        filteredItems = pagesize ? items : items.concat();
+      }
+
+      // get the current page
+      var paged;
+      if (pagesize) {
+        if (filteredItems.length < pagenum * pagesize) {
+          pagenum = Math.floor(filteredItems.length / pagesize);
         }
-
-        function expandGroup(groupingValue) {
-            delete collapsedGroups[groupingValue];
-            refresh();
+        paged = filteredItems.slice(pagesize * pagenum, pagesize * pagenum + pagesize);
+      } else {
+        paged = filteredItems;
+      }
+
+      return {totalRows: filteredItems.length, rows: paged};
+    }
+
+    function getRowDiffs(rows, newRows) {
+      var item, r, eitherIsNonData, diff = [];
+      var from = 0, to = newRows.length;
+
+      if (refreshHints && refreshHints.ignoreDiffsBefore) {
+        from = Math.max(0,
+            Math.min(newRows.length, refreshHints.ignoreDiffsBefore));
+      }
+
+      if (refreshHints && refreshHints.ignoreDiffsAfter) {
+        to = Math.min(newRows.length,
+            Math.max(0, refreshHints.ignoreDiffsAfter));
+      }
+
+      for (var i = from, rl = rows.length; i < to; i++) {
+        if (i >= rl) {
+          diff[diff.length] = i;
+        } else {
+          item = newRows[i];
+          r = rows[i];
+
+          if ((groupingInfos.length && (eitherIsNonData = (item.__nonDataRow) || (r.__nonDataRow)) &&
+              item.__group !== r.__group ||
+              item.__group && !item.equals(r))
+              || (eitherIsNonData &&
+              // no good way to compare totals since they are arbitrary DTOs
+              // deep object comparison is pretty expensive
+              // always considering them 'dirty' seems easier for the time being
+              (item.__groupTotals || r.__groupTotals))
+              || item[idProperty] != r[idProperty]
+              || (updated && updated[item[idProperty]])
+              ) {
+            diff[diff.length] = i;
+          }
         }
-
-        function getGroups() {
-            return groups;
+      }
+      return diff;
+    }
+
+    function recalc(_items) {
+      rowsById = null;
+
+      if (refreshHints.isFilterNarrowing != prevRefreshHints.isFilterNarrowing ||
+          refreshHints.isFilterExpanding != prevRefreshHints.isFilterExpanding) {
+        filterCache = [];
+      }
+
+      var filteredItems = getFilteredAndPagedItems(_items);
+      totalRows = filteredItems.totalRows;
+      var newRows = filteredItems.rows;
+
+      groups = [];
+      if (groupingInfos.length) {
+        groups = extractGroups(newRows);
+        if (groups.length) {
+          addTotals(groups);
+          newRows = flattenGroupedRows(groups);
         }
+      }
 
-        function extractGroups(rows) {
-            var group;
-            var val;
-            var groups = [];
-            var groupsByVal = [];
-            var r;
+      var diff = getRowDiffs(rows, newRows);
 
-            for (var i = 0, l = rows.length; i < l; i++) {
-                r = rows[i];
-                val = (groupingGetterIsAFn) ? groupingGetter(r) : r[groupingGetter];
-                val = val || 0;
-                group = groupsByVal[val];
-                if (!group) {
-                    group = new Slick.Group();
-                    group.count = 0;
-                    group.value = val;
-                    group.rows = [];
-                    groups[groups.length] = group;
-                    groupsByVal[val] = group;
-                }
+      rows = newRows;
 
-                group.rows[group.count++] = r;
-            }
+      return diff;
+    }
 
-            return groups;
-        }
+    function refresh() {
+      if (suspend) {
+        return;
+      }
 
-        // TODO:  lazy totals calculation
-        function calculateGroupTotals(group) {
-            if (group.collapsed && !aggregateCollapsed) {
-                return;
-            }
+      var countBefore = rows.length;
+      var totalRowsBefore = totalRows;
 
-            // TODO:  try moving iterating over groups into compiled accumulator
-            var totals = new Slick.GroupTotals();
-            var agg, idx = aggregators.length;
-            while (idx--) {
-                agg = aggregators[idx];
-                agg.init();
-                compiledAccumulators[idx].call(agg, group.rows);
-                agg.storeResult(totals);
-            }
-            totals.group = group;
-            group.totals = totals;
-        }
+      var diff = recalc(items, filter); // pass as direct refs to avoid closure perf hit
 
-        function calculateTotals(groups) {
-            var idx = groups.length;
-            while (idx--) {
-                calculateGroupTotals(groups[idx]);
-            }
-        }
+      // if the current page is no longer valid, go to last page and recalc
+      // we suffer a performance penalty here, but the main loop (recalc) remains highly optimized
+      if (pagesize && totalRows < pagenum * pagesize) {
+        pagenum = Math.max(0, Math.ceil(totalRows / pagesize) - 1);
+        diff = recalc(items, filter);
+      }
 
-        function finalizeGroups(groups) {
-            var idx = groups.length, g;
-            while (idx--) {
-                g = groups[idx];
-                g.collapsed = (g.value in collapsedGroups);
-                g.title = groupingFormatter ? groupingFormatter(g) : g.value;
-            }
-        }
+      updated = null;
+      prevRefreshHints = refreshHints;
+      refreshHints = {};
 
-        function flattenGroupedRows(groups) {
-            var groupedRows = [], gl = 0, g;
-            for (var i = 0, l = groups.length; i < l; i++) {
-                g = groups[i];
-                groupedRows[gl++] = g;
+      if (totalRowsBefore != totalRows) {
+        onPagingInfoChanged.notify(getPagingInfo(), null, self);
+      }
+      if (countBefore != rows.length) {
+        onRowCountChanged.notify({previous: countBefore, current: rows.length}, null, self);
+      }
+      if (diff.length > 0) {
+        onRowsChanged.notify({rows: diff}, null, self);
+      }
+    }
 
-                if (!g.collapsed) {
-                    for (var j = 0, jj = g.rows.length; j < jj; j++) {
-                        groupedRows[gl++] = g.rows[j];
-                    }
-                }
-
-                if (g.totals && (!g.collapsed || aggregateCollapsed)) {
-                    groupedRows[gl++] = g.totals;
-                }
-            }
-            return groupedRows;
-        }
-
-        function getFunctionInfo(fn) {
-            var fnRegex = /^function[^(]*\(([^)]*)\)\s*{([\s\S]*)}$/;
-            var matches = fn.toString().match(fnRegex);
-            return {
-                params: matches[1].split(","),
-                body: matches[2]
-            };
-        }
-
-        function compileAccumulatorLoop(aggregator) {
-            var accumulatorInfo = getFunctionInfo(aggregator.accumulate);
-            var fn = new Function(
-                    "_items",
-                    "for (var " + accumulatorInfo.params[0] + ", _i=0, _il=_items.length; _i<_il; _i++) {" +
-                    accumulatorInfo.params[0] + " = _items[_i]; " +
-                    accumulatorInfo.body +
-                    "}"
-                    );
-            fn.displayName = fn.name = "compiledAccumulatorLoop";
-            return fn;
-        }
-
-        function compileFilter() {
-            var filterInfo = getFunctionInfo(filter);
-
-            var filterBody = filterInfo.body
-                    .replace(/return false[;}]/gi, "{ continue _coreloop; }")
-                    .replace(/return true[;}]/gi, "{ _retval[_idx++] = $item$; continue _coreloop; }")
-                    .replace(/return ([^;}]+?);/gi,
-                            "{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }");
-
-            // This preserves the function template code after JS compression,
-            // so that replace() commands still work as expected.
-            var tpl = [
-                //"function(_items, _args) { ",
-                "var _retval = [], _idx = 0; ",
-                "var $item$, $args$ = _args; ",
-                "_coreloop: ",
-                "for (var _i = 0, _il = _items.length; _i < _il; _i++) { ",
-                "$item$ = _items[_i]; ",
-                "$filter$; ",
-                "} ",
-                "return _retval; "
-                        //"}"
-            ].join("");
-            tpl = tpl.replace(/\$filter\$/gi, filterBody);
-            tpl = tpl.replace(/\$item\$/gi, filterInfo.params[0]);
-            tpl = tpl.replace(/\$args\$/gi, filterInfo.params[1]);
-
-            var fn = new Function("_items,_args", tpl);
-            fn.displayName = fn.name = "compiledFilter";
-            return fn;
-        }
-
-        function compileFilterWithCaching() {
-            var filterInfo = getFunctionInfo(filter);
-
-            var filterBody = filterInfo.body
-                    .replace(/return false[;}]/gi, "{ continue _coreloop; }")
-                    .replace(/return true[;}]/gi, "{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }")
-                    .replace(/return ([^;}]+?);/gi,
-                            "{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }");
-
-            // This preserves the function template code after JS compression,
-            // so that replace() commands still work as expected.
-            var tpl = [
-                //"function(_items, _args, _cache) { ",
-                "var _retval = [], _idx = 0; ",
-                "var $item$, $args$ = _args; ",
-                "_coreloop: ",
-                "for (var _i = 0, _il = _items.length; _i < _il; _i++) { ",
-                "$item$ = _items[_i]; ",
-                "if (_cache[_i]) { ",
-                "_retval[_idx++] = $item$; ",
-                "continue _coreloop; ",
-                "} ",
-                "$filter$; ",
-                "} ",
-                "return _retval; "
-                        //"}"
-            ].join("");
-            tpl = tpl.replace(/\$filter\$/gi, filterBody);
-            tpl = tpl.replace(/\$item\$/gi, filterInfo.params[0]);
-            tpl = tpl.replace(/\$args\$/gi, filterInfo.params[1]);
-
-            var fn = new Function("_items,_args,_cache", tpl);
-            fn.displayName = fn.name = "compiledFilterWithCaching";
-            return fn;
-        }
-
-        function uncompiledFilter(items, args) {
-            var retval = [], idx = 0;
-
-            for (var i = 0, ii = items.length; i < ii; i++) {
-                if (filter(items[i], args)) {
-                    retval[idx++] = items[i];
-                }
-            }
-
-            return retval;
+    /***
+     * Wires the grid and the DataView together to keep row selection tied to item ids.
+     * This is useful since, without it, the grid only knows about rows, so if the items
+     * move around, the same rows stay selected instead of the selection moving along
+     * with the items.
+     *
+     * NOTE:  This doesn't work with cell selection model.
+     *
+     * @param grid {Slick.Grid} The grid to sync selection with.
+     * @param preserveHidden {Boolean} Whether to keep selected items that go out of the
+     *     view due to them getting filtered out.
+     * @param preserveHiddenOnSelectionChange {Boolean} Whether to keep selected items
+     *     that are currently out of the view (see preserveHidden) as selected when selection
+     *     changes.
+     * @return {Slick.Event} An event that notifies when an internal list of selected row ids
+     *     changes.  This is useful since, in combination with the above two options, it allows
+     *     access to the full list selected row ids, and not just the ones visible to the grid.
+     * @method syncGridSelection
+     */
+    function syncGridSelection(grid, preserveHidden, preserveHiddenOnSelectionChange) {
+      var self = this;
+      var inHandler;
+      var selectedRowIds = self.mapRowsToIds(grid.getSelectedRows());
+      var onSelectedRowIdsChanged = new Slick.Event();
+
+      function setSelectedRowIds(rowIds) {
+        if (selectedRowIds.join(",") == rowIds.join(",")) {
+          return;
         }
 
-        function uncompiledFilterWithCaching(items, args, cache) {
-            var retval = [], idx = 0, item;
-
-            for (var i = 0, ii = items.length; i < ii; i++) {
-                item = items[i];
-                if (cache[i]) {
-                    retval[idx++] = item;
-                } else if (filter(item, args)) {
-                    retval[idx++] = item;
-                    cache[i] = true;
-                }
-            }
+        selectedRowIds = rowIds;
+
+        onSelectedRowIdsChanged.notify({
+          "grid": grid,
+          "ids": selectedRowIds
+        }, new Slick.EventData(), self);
+      }
+
+      function update() {
+        if (selectedRowIds.length > 0) {
+          inHandler = true;
+          var selectedRows = self.mapIdsToRows(selectedRowIds);
+          if (!preserveHidden) {
+            setSelectedRowIds(self.mapRowsToIds(selectedRows));       
+          }
+          grid.setSelectedRows(selectedRows);
+          inHandler = false;
+        }
+      }
+
+      grid.onSelectedRowsChanged.subscribe(function(e, args) {
+        if (inHandler) { return; }
+        var newSelectedRowIds = self.mapRowsToIds(grid.getSelectedRows());
+        if (!preserveHiddenOnSelectionChange || !grid.getOptions().multiSelect) {
+          setSelectedRowIds(newSelectedRowIds);
+        } else {
+          // keep the ones that are hidden
+          var existing = $.grep(selectedRowIds, function(id) { return self.getRowById(id) === undefined; });
+          // add the newly selected ones
+          setSelectedRowIds(existing.concat(newSelectedRowIds));
+        }
+      });
 
-            return retval;
-        }
-
-        function getFilteredAndPagedItems(items) {
-            if (filter) {
-                var batchFilter = options.inlineFilters ? compiledFilter : uncompiledFilter;
-                var batchFilterWithCaching = options.inlineFilters ? compiledFilterWithCaching : uncompiledFilterWithCaching;
-
-                if (refreshHints.isFilterNarrowing) {
-                    filteredItems = batchFilter(filteredItems, filterArgs);
-                } else if (refreshHints.isFilterExpanding) {
-                    filteredItems = batchFilterWithCaching(items, filterArgs, filterCache);
-                } else if (!refreshHints.isFilterUnchanged) {
-                    filteredItems = batchFilter(items, filterArgs);
-                }
-            } else {
-                // special case:  if not filtering and not paging, the resulting
-                // rows collection needs to be a copy so that changes due to sort
-                // can be caught
-                filteredItems = pagesize ? items : items.concat();
-            }
+      this.onRowsChanged.subscribe(update);
 
-            // get the current page
-            var paged;
-            if (pagesize) {
-                if (filteredItems.length < pagenum * pagesize) {
-                    pagenum = Math.floor(filteredItems.length / pagesize);
-                }
-                paged = filteredItems.slice(pagesize * pagenum, pagesize * pagenum + pagesize);
-            } else {
-                paged = filteredItems;
-            }
+      this.onRowCountChanged.subscribe(update);
 
-            return {totalRows: filteredItems.length, rows: paged};
-        }
+      return onSelectedRowIdsChanged;
+    }
 
-        function getRowDiffs(rows, newRows) {
-            var item, r, eitherIsNonData, diff = [];
-            var from = 0, to = newRows.length;
+    function syncGridCellCssStyles(grid, key) {
+      var hashById;
+      var inHandler;
 
-            if (refreshHints && refreshHints.ignoreDiffsBefore) {
-                from = Math.max(0,
-                        Math.min(newRows.length, refreshHints.ignoreDiffsBefore));
-            }
+      // since this method can be called after the cell styles have been set,
+      // get the existing ones right away
+      storeCellCssStyles(grid.getCellCssStyles(key));
 
-            if (refreshHints && refreshHints.ignoreDiffsAfter) {
-                to = Math.min(newRows.length,
-                        Math.max(0, refreshHints.ignoreDiffsAfter));
+      function storeCellCssStyles(hash) {
+        hashById = {};
+        for (var row in hash) {
+          var id = rows[row][idProperty];
+          hashById[id] = hash[row];
+        }
+      }
+
+      function update() {
+        if (hashById) {
+          inHandler = true;
+          ensureRowsByIdCache();
+          var newHash = {};
+          for (var id in hashById) {
+            var row = rowsById[id];
+            if (row != undefined) {
+              newHash[row] = hashById[id];
             }
+          }
+          grid.setCellCssStyles(key, newHash);
+          inHandler = false;
+        }
+      }
 
-            for (var i = from, rl = rows.length; i < to; i++) {
-                if (i >= rl) {
-                    diff[diff.length] = i;
-                } else {
-                    item = newRows[i];
-                    r = rows[i];
-
-                    if ((groupingGetter && (eitherIsNonData = (item.__nonDataRow) || (r.__nonDataRow)) &&
-                            item.__group !== r.__group ||
-                            item.__updated ||
-                            item.__group && !item.equals(r))
-                            || (aggregators && eitherIsNonData &&
-                                    // no good way to compare totals since they are arbitrary DTOs
-                                            // deep object comparison is pretty expensive
-                                                    // always considering them 'dirty' seems easier for the time being
-                                                            (item.__groupTotals || r.__groupTotals))
-                                                    || item[idProperty] != r[idProperty]
-                                                    || (updated && updated[item[idProperty]])
-                                                    ) {
-                                        diff[diff.length] = i;
-                                    }
-                                }
-                            }
-                            return diff;
-                        }
-
-                        function recalc(_items) {
-                            rowsById = null;
-
-                            if (refreshHints.isFilterNarrowing != prevRefreshHints.isFilterNarrowing ||
-                                    refreshHints.isFilterExpanding != prevRefreshHints.isFilterExpanding) {
-                                filterCache = [];
-                            }
-
-                            var filteredItems = getFilteredAndPagedItems(_items);
-                            totalRows = filteredItems.totalRows;
-                            var newRows = filteredItems.rows;
-
-                            groups = [];
-                            if (groupingGetter != null) {
-                                groups = extractGroups(newRows);
-                                if (groups.length) {
-                                    finalizeGroups(groups);
-                                    if (aggregators) {
-                                        calculateTotals(groups);
-                                    }
-                                    groups.sort(groupingComparer);
-                                    newRows = flattenGroupedRows(groups);
-                                }
-                            }
-
-                            var diff = getRowDiffs(rows, newRows);
-
-                            rows = newRows;
-
-                            return diff;
-                        }
-
-                        function refresh() {
-                            if (suspend) {
-                                return;
-                            }
-
-                            var countBefore = rows.length;
-                            var totalRowsBefore = totalRows;
-
-                            var diff = recalc(items, filter); // pass as direct refs to avoid closure perf hit
-
-                            // if the current page is no longer valid, go to last page and recalc
-                            // we suffer a performance penalty here, but the main loop (recalc) remains highly optimized
-                            if (pagesize && totalRows < pagenum * pagesize) {
-                                pagenum = Math.max(0, Math.ceil(totalRows / pagesize) - 1);
-                                diff = recalc(items, filter);
-                            }
-
-                            updated = null;
-                            prevRefreshHints = refreshHints;
-                            refreshHints = {};
-
-                            if (totalRowsBefore != totalRows) {
-                                onPagingInfoChanged.notify(getPagingInfo(), null, self);
-                            }
-                            if (countBefore != rows.length) {
-                                onRowCountChanged.notify({previous: countBefore, current: rows.length}, null, self);
-                            }
-                            if (diff.length > 0) {
-                                onRowsChanged.notify({rows: diff}, null, self);
-                            }
-                        }
-
-                        function syncGridSelection(grid, preserveHidden) {
-                            var self = this;
-                            var selectedRowIds = self.mapRowsToIds(grid.getSelectedRows());
-                            ;
-                            var inHandler;
-
-                            grid.onSelectedRowsChanged.subscribe(function (e, args) {
-                                if (inHandler) {
-                                    return;
-                                }
-                                selectedRowIds = self.mapRowsToIds(grid.getSelectedRows());
-                            });
-
-                            this.onRowsChanged.subscribe(function (e, args) {
-                                if (selectedRowIds.length > 0) {
-                                    inHandler = true;
-                                    var selectedRows = self.mapIdsToRows(selectedRowIds);
-                                    if (!preserveHidden) {
-                                        selectedRowIds = self.mapRowsToIds(selectedRows);
-                                    }
-                                    grid.setSelectedRows(selectedRows);
-                                    inHandler = false;
-                                }
-                            });
-                        }
-
-                        function syncGridCellCssStyles(grid, key) {
-                            var hashById;
-                            var inHandler;
-
-                            // since this method can be called after the cell styles have been set,
-                            // get the existing ones right away
-                            storeCellCssStyles(grid.getCellCssStyles(key));
-
-                            function storeCellCssStyles(hash) {
-                                hashById = {};
-                                for (var row in hash) {
-                                    var id = rows[row][idProperty];
-                                    hashById[id] = hash[row];
-                                }
-                            }
-
-                            grid.onCellCssStylesChanged.subscribe(function (e, args) {
-                                if (inHandler) {
-                                    return;
-                                }
-                                if (key != args.key) {
-                                    return;
-                                }
-                                if (args.hash) {
-                                    storeCellCssStyles(args.hash);
-                                }
-                            });
-
-                            this.onRowsChanged.subscribe(function (e, args) {
-                                if (hashById) {
-                                    inHandler = true;
-                                    ensureRowsByIdCache();
-                                    var newHash = {};
-                                    for (var id in hashById) {
-                                        var row = rowsById[id];
-                                        if (row != undefined) {
-                                            newHash[row] = hashById[id];
-                                        }
-                                    }
-                                    grid.setCellCssStyles(key, newHash);
-                                    inHandler = false;
-                                }
-                            });
-                        }
-
-                        return {
-                            // methods
-                            "beginUpdate": beginUpdate,
-                            "endUpdate": endUpdate,
-                            "setPagingOptions": setPagingOptions,
-                            "getPagingInfo": getPagingInfo,
-                            "getItems": getItems,
-                            "setItems": setItems,
-                            "setFilter": setFilter,
-                            "sort": sort,
-                            "fastSort": fastSort,
-                            "reSort": reSort,
-                            "groupBy": groupBy,
-                            "setAggregators": setAggregators,
-                            "collapseGroup": collapseGroup,
-                            "expandGroup": expandGroup,
-                            "getGroups": getGroups,
-                            "getIdxById": getIdxById,
-                            "getRowById": getRowById,
-                            "getItemById": getItemById,
-                            "getItemByIdx": getItemByIdx,
-                            "mapRowsToIds": mapRowsToIds,
-                            "mapIdsToRows": mapIdsToRows,
-                            "setRefreshHints": setRefreshHints,
-                            "setFilterArgs": setFilterArgs,
-                            "refresh": refresh,
-                            "updateItem": updateItem,
-                            "insertItem": insertItem,
-                            "addItem": addItem,
-                            "deleteItem": deleteItem,
-                            "syncGridSelection": syncGridSelection,
-                            "syncGridCellCssStyles": syncGridCellCssStyles,
-                            // data provider methods
-                            "getLength": getLength,
-                            "getItem": getItem,
-                            "getItemMetadata": getItemMetadata,
-                            // events
-                            "onRowCountChanged": onRowCountChanged,
-                            "onRowsChanged": onRowsChanged,
-                            "onPagingInfoChanged": onPagingInfoChanged
-                        };
-                    }
-
-                    function AvgAggregator(field) {
-                        this.field_ = field;
-
-                        this.init = function () {
-                            this.count_ = 0;
-                            this.nonNullCount_ = 0;
-                            this.sum_ = 0;
-                        };
-
-                        this.accumulate = function (item) {
-                            var val = item[this.field_];
-                            this.count_++;
-                            if (val != null && val != "" && val != NaN) {
-                                this.nonNullCount_++;
-                                this.sum_ += parseFloat(val);
-                            }
-                        };
-
-                        this.storeResult = function (groupTotals) {
-                            if (!groupTotals.avg) {
-                                groupTotals.avg = {};
-                            }
-                            if (this.nonNullCount_ != 0) {
-                                groupTotals.avg[this.field_] = this.sum_ / this.nonNullCount_;
-                            }
-                        };
-                    }
-
-                    function MinAggregator(field) {
-                        this.field_ = field;
-
-                        this.init = function () {
-                            this.min_ = null;
-                        };
-
-                        this.accumulate = function (item) {
-                            var val = item[this.field_];
-                            if (val != null && val != "" && val != NaN) {
-                                if (this.min_ == null || val < this.min_) {
-                                    this.min_ = val;
-                                }
-                            }
-                        };
-
-                        this.storeResult = function (groupTotals) {
-                            if (!groupTotals.min) {
-                                groupTotals.min = {};
-                            }
-                            groupTotals.min[this.field_] = this.min_;
-                        }
-                    }
-
-                    function MaxAggregator(field) {
-                        this.field_ = field;
-
-                        this.init = function () {
-                            this.max_ = null;
-                        };
-
-                        this.accumulate = function (item) {
-                            var val = item[this.field_];
-                            if (val != null && val != "" && val != NaN) {
-                                if (this.max_ == null || val > this.max_) {
-                                    this.max_ = val;
-                                }
-                            }
-                        };
-
-                        this.storeResult = function (groupTotals) {
-                            if (!groupTotals.max) {
-                                groupTotals.max = {};
-                            }
-                            groupTotals.max[this.field_] = this.max_;
-                        }
-                    }
-
-                    function SumAggregator(field) {
-                        this.field_ = field;
-
-                        this.init = function () {
-                            this.sum_ = null;
-                        };
-
-                        this.accumulate = function (item) {
-                            var val = item[this.field_];
-                            if (val != null && val != "" && val != NaN) {
-                                this.sum_ += parseFloat(val);
-                            }
-                        };
-
-                        this.storeResult = function (groupTotals) {
-                            if (!groupTotals.sum) {
-                                groupTotals.sum = {};
-                            }
-                            groupTotals.sum[this.field_] = this.sum_;
-                        }
-                    }
-
-                    // TODO:  add more built-in aggregators
-                    // TODO:  merge common aggregators in one to prevent needles iterating
-
-                })(jQuery);
\ No newline at end of file
+      grid.onCellCssStylesChanged.subscribe(function(e, args) {
+        if (inHandler) { return; }
+        if (key != args.key) { return; }
+        if (args.hash) {
+          storeCellCssStyles(args.hash);
+        }
+      });
+
+      this.onRowsChanged.subscribe(update);
+
+      this.onRowCountChanged.subscribe(update);
+    }
+
+    $.extend(this, {
+      // methods
+      "beginUpdate": beginUpdate,
+      "endUpdate": endUpdate,
+      "setPagingOptions": setPagingOptions,
+      "getPagingInfo": getPagingInfo,
+      "getItems": getItems,
+      "setItems": setItems,
+      "setFilter": setFilter,
+      "sort": sort,
+      "fastSort": fastSort,
+      "reSort": reSort,
+      "setGrouping": setGrouping,
+      "getGrouping": getGrouping,
+      "groupBy": groupBy,
+      "setAggregators": setAggregators,
+      "collapseAllGroups": collapseAllGroups,
+      "expandAllGroups": expandAllGroups,
+      "collapseGroup": collapseGroup,
+      "expandGroup": expandGroup,
+      "getGroups": getGroups,
+      "getIdxById": getIdxById,
+      "getRowById": getRowById,
+      "getItemById": getItemById,
+      "getItemByIdx": getItemByIdx,
+      "mapRowsToIds": mapRowsToIds,
+      "mapIdsToRows": mapIdsToRows,
+      "setRefreshHints": setRefreshHints,
+      "setFilterArgs": setFilterArgs,
+      "refresh": refresh,
+      "updateItem": updateItem,
+      "insertItem": insertItem,
+      "addItem": addItem,
+      "deleteItem": deleteItem,
+      "syncGridSelection": syncGridSelection,
+      "syncGridCellCssStyles": syncGridCellCssStyles,
+
+      // data provider methods
+      "getLength": getLength,
+      "getItem": getItem,
+      "getItemMetadata": getItemMetadata,
+
+      // events
+      "onRowCountChanged": onRowCountChanged,
+      "onRowsChanged": onRowsChanged,
+      "onPagingInfoChanged": onPagingInfoChanged
+    });
+  }
+
+  function AvgAggregator(field) {
+    this.field_ = field;
+
+    this.init = function () {
+      this.count_ = 0;
+      this.nonNullCount_ = 0;
+      this.sum_ = 0;
+    };
+
+    this.accumulate = function (item) {
+      var val = item[this.field_];
+      this.count_++;
+      if (val != null && val !== "" && val !== NaN) {
+        this.nonNullCount_++;
+        this.sum_ += parseFloat(val);
+      }
+    };
+
+    this.storeResult = function (groupTotals) {
+      if (!groupTotals.avg) {
+        groupTotals.avg = {};
+      }
+      if (this.nonNullCount_ != 0) {
+        groupTotals.avg[this.field_] = this.sum_ / this.nonNullCount_;
+      }
+    };
+  }
+
+  function MinAggregator(field) {
+    this.field_ = field;
+
+    this.init = function () {
+      this.min_ = null;
+    };
+
+    this.accumulate = function (item) {
+      var val = item[this.field_];
+      if (val != null && val !== "" && val !== NaN) {
+        if (this.min_ == null || val < this.min_) {
+          this.min_ = val;
+        }
+      }
+    };
+
+    this.storeResult = function (groupTotals) {
+      if (!groupTotals.min) {
+        groupTotals.min = {};
+      }
+      groupTotals.min[this.field_] = this.min_;
+    }
+  }
+
+  function MaxAggregator(field) {
+    this.field_ = field;
+
+    this.init = function () {
+      this.max_ = null;
+    };
+
+    this.accumulate = function (item) {
+      var val = item[this.field_];
+      if (val != null && val !== "" && val !== NaN) {
+        if (this.max_ == null || val > this.max_) {
+          this.max_ = val;
+        }
+      }
+    };
+
+    this.storeResult = function (groupTotals) {
+      if (!groupTotals.max) {
+        groupTotals.max = {};
+      }
+      groupTotals.max[this.field_] = this.max_;
+    }
+  }
+
+  function SumAggregator(field) {
+    this.field_ = field;
+
+    this.init = function () {
+      this.sum_ = null;
+    };
+
+    this.accumulate = function (item) {
+      var val = item[this.field_];
+      if (val != null && val !== "" && val !== NaN) {
+        this.sum_ += parseFloat(val);
+      }
+    };
+
+    this.storeResult = function (groupTotals) {
+      if (!groupTotals.sum) {
+        groupTotals.sum = {};
+      }
+      groupTotals.sum[this.field_] = this.sum_;
+    }
+  }
+
+  // TODO:  add more built-in aggregators
+  // TODO:  merge common aggregators in one to prevent needles iterating
+
+})(jQuery);