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/NIFI-169 Commit: 4c959f72988d13dc2ff54d38eb9efc4682d5b901 Parents: 658131d Author: Matt Gilman <matt.c.gil...@gmail.com> Authored: Wed Dec 10 10:12:43 2014 -0500 Committer: Matt Gilman <matt.c.gil...@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